From a732ca9fd3fc28fd7d84a5282de9d466426cb892 Mon Sep 17 00:00:00 2001 From: J-Simkin Date: Fri, 9 Jan 2026 12:41:34 +0000 Subject: [PATCH 01/28] Auto generating semi correct functor --- chaste_codegen/_command_line_script.py | 5 +++ chaste_codegen/backward_euler_model.py | 2 +- .../templates/BE/cpp/FunctorComputeJacobian | 26 ++++++++++++ .../FunctorComputeOneStepExceptVoltageHelpers | 40 +++++++++++++++++++ .../templates/BE/cpp/FunctorComputeResidual | 30 ++++++++++++++ .../cpp/FunctorUpdateTransmembranePotential | 20 ++++++++++ .../templates/backward_euler_functor.cuh | 23 +++++++++++ .../templates/backward_euler_model.hpp | 2 + 8 files changed, 147 insertions(+), 1 deletion(-) create mode 100644 chaste_codegen/templates/BE/cpp/FunctorComputeJacobian create mode 100644 chaste_codegen/templates/BE/cpp/FunctorComputeOneStepExceptVoltageHelpers create mode 100644 chaste_codegen/templates/BE/cpp/FunctorComputeResidual create mode 100644 chaste_codegen/templates/BE/cpp/FunctorUpdateTransmembranePotential create mode 100644 chaste_codegen/templates/backward_euler_functor.cuh diff --git a/chaste_codegen/_command_line_script.py b/chaste_codegen/_command_line_script.py index 4c515e90f..7544f6d1d 100644 --- a/chaste_codegen/_command_line_script.py +++ b/chaste_codegen/_command_line_script.py @@ -212,6 +212,11 @@ def process_command_line(): if ex is not None: get_files.append(os.path.join(outfile_path, outfile_base + ex)) + # Simple bodge to generate the functor.cuh files for now + if translator_class is cg.BackwardEulerModel: + functor_name = outfile_base + 'Functor.cuh' + get_files.append(os.path.join(outfile_path, functor_name)) + if args.show_outputs: for file in get_files: print(file) diff --git a/chaste_codegen/backward_euler_model.py b/chaste_codegen/backward_euler_model.py index 9478a7642..ef01e3f2a 100644 --- a/chaste_codegen/backward_euler_model.py +++ b/chaste_codegen/backward_euler_model.py @@ -20,7 +20,7 @@ class BackwardEulerModel(ChasteModel): def __init__(self, model, file_name, **kwargs): super().__init__(model, file_name, **kwargs) - self._templates = ['backward_euler_model.hpp', 'backward_euler_model.cpp'] + self._templates = ['backward_euler_model.hpp', 'backward_euler_model.cpp', 'backward_euler_functor.cuh'] self._vars_for_template['base_class'] = 'AbstractBackwardEulerCardiacCell' self._vars_for_template['model_type'] = 'BackwardEuler' diff --git a/chaste_codegen/templates/BE/cpp/FunctorComputeJacobian b/chaste_codegen/templates/BE/cpp/FunctorComputeJacobian new file mode 100644 index 000000000..4d88d61b7 --- /dev/null +++ b/chaste_codegen/templates/BE/cpp/FunctorComputeJacobian @@ -0,0 +1,26 @@ +{%- if nonlinear_state_vars|length > 0 %} +__device__ +static void ComputeJacobian(value_type environment_time, + const value_type rCurrentGuess[NONLINEAR_SIZE], + const value_type rY[], + value_type Jmat[NONLINEAR_SIZE][NONLINEAR_SIZE], + value_type mDt, + const value_type mParameters[], + bool setVoltageDerivativeToZero, + value_type fixedVoltage) +{ + {% for state_var in state_vars %} + {%- if state_var.in_y_deriv and state_var.linear and state_var.in_jacobian %}value_type {{ state_var.var }} = {{state_var.rY_lookup}}; + // Units: {{state_var.units}}; Initial value: {{state_var.initial_value}} + {% endif %}{%- endfor %} + {%- set method = "ComputeJacobian" %}{% include "Shared/cpp/lookup_table_init" %} + {% for state_var in nonlinear_state_vars %} + {%- if state_var.in_jacobian %}value_type {{ state_var.var }} = rCurrentGuess[{{loop.index0}}]; + {% endif %}{%- endfor %} + {% for equation in jacobian_equations %}const value_type {{equation.lhs}} = {{equation.rhs}}; + {% endfor %} + {% for entry in jacobian_entries %} + rJacobian[{{entry.i}}][{{entry.j}}] = {% if entry.i == entry.j and entry.entry != '0' %}1.0 - (mDt * ({{entry.entry}})){% endif -%}{% if entry.i == entry.j and entry.entry == '0' %}1.0{% endif -%}{% if entry.i != entry.j and entry.entry == '0' %}0.0{% endif -%}{% if entry.i != entry.j and entry.entry != '0' %}-(mDt * ({{entry.entry}})){% endif -%}; + {%- endfor %} +} +{%- endif %} diff --git a/chaste_codegen/templates/BE/cpp/FunctorComputeOneStepExceptVoltageHelpers b/chaste_codegen/templates/BE/cpp/FunctorComputeOneStepExceptVoltageHelpers new file mode 100644 index 000000000..0ad53154e --- /dev/null +++ b/chaste_codegen/templates/BE/cpp/FunctorComputeOneStepExceptVoltageHelpers @@ -0,0 +1,40 @@ + +/* Apply all closed-form backward-Euler updates for the "linear" gating variables */ +__device__ +static void SolveClosedFormVars(value_type rY[TOTAL_SIZE], + value_type mDt, + const value_type params[], + bool setVoltZero, + value_type fixedVolt) +{ + {% for state_var in state_vars %} + {%- if state_var.in_y_deriv and state_var.linear and state_var.in_one_step_except_v %}value_type {{ state_var.var }} = {{state_var.rY_lookup}}; + // Units: {{state_var.units}}; Initial value: {{state_var.initial_value}} + {% endif %}{%- endfor %} + + {% for eq in linear_equations %}const value_type {{eq.lhs}} = {{eq.rhs}}; + {% endfor %} + + {% for deriv in linear_deriv_eqs %} + rY[{{deriv.state_var_index}}] = ({{deriv.var}} + (({{deriv.g}}) * mDt)) / (1.0 - (({{deriv.h}}) * mDt)); + {%- endfor %} +} + +/* Gather non-linear variables from state and put them into guess for Newton solve */ +__device__ +static void FillInitialGuess(value_type guess[NONLINEAR_SIZE], + const value_type rY[TOTAL_SIZE]) +{ + {% if nonlinear_state_vars|length > 0 %} + value_type _guess[{{nonlinear_state_vars|length}}] = {{"{"}}{%- for state_var in nonlinear_state_vars %}{% if loop.index0 > 0 %},{% endif %}rY[{{state_var.state_var_index}}]{%- endfor %}{{"}"}}; +} + +/* After Newton solve, scatter the solved nonlinear variables back into y */ +__device__ +static void ScatterSolution(const value_type guess[NONLINEAR_SIZE], + value_type rY[TOTAL_SIZE]) +{ + {%- for state_var in nonlinear_state_vars %} + rY[{{ state_var.state_var_index }}] = _guess[{{loop.index0}}]; + {%- endfor %}{% endif %} +} diff --git a/chaste_codegen/templates/BE/cpp/FunctorComputeResidual b/chaste_codegen/templates/BE/cpp/FunctorComputeResidual new file mode 100644 index 000000000..c4972b43c --- /dev/null +++ b/chaste_codegen/templates/BE/cpp/FunctorComputeResidual @@ -0,0 +1,30 @@ +{%- if nonlinear_state_vars|length > 0 %} +/* Compute residual of non-linear system for the current guess */ +__device__ +static void ComputeResidual(value_type {{ free_variable.var_name if free_variable is defined else "var_chaste_interface_environment_time" }}, + const value_type rCurrentGuess[NONLINEAR_SIZE], + const value_type rY[], + value_type rResidual[NONLINEAR_SIZE], + value_type mDt, + const value_type mParameters[], + bool setVoltageDerivativeToZero, + value_type fixedVoltage) +{ + {% for state_var in state_vars %} + {%- if state_var.linear and state_var.in_non_linear_eq %}value_type {{ state_var.var }} = {{state_var.rY_lookup}}; + // Units: {{state_var.units}}; Initial value: {{state_var.initial_value}} + {% endif %}{%- endfor %} + //output_nonlinear_state_assignments + {% for state_var in nonlinear_state_vars %} + {%- if state_var.in_non_linear_eq %}value_type {{ state_var.var }} = rCurrentGuess[{{loop.index0}}]; + {% endif %}{%- endfor %} + {%- set method = "ComputeResidual" %}{% include "Shared/cpp/lookup_table_init" %} + //output_equations + {%- for deriv in y_derivative_equations %}{%- if not deriv.linear %} + const value_type {{deriv.lhs}} = {{deriv.rhs}}; // {{deriv.units}}{%- endif %} + {%- endfor %} + {% for residual_var in residual_equations %} + rResidual[{{ residual_var.residual_index }}] = rCurrentGuess[{{ residual_var.residual_index }}] - rY[{{ residual_var.state_var_index }}] - mDt*{{ residual_var.var }}; + {%- endfor %} +} +{%- endif %} diff --git a/chaste_codegen/templates/BE/cpp/FunctorUpdateTransmembranePotential b/chaste_codegen/templates/BE/cpp/FunctorUpdateTransmembranePotential new file mode 100644 index 000000000..2f3c0dc4f --- /dev/null +++ b/chaste_codegen/templates/BE/cpp/FunctorUpdateTransmembranePotential @@ -0,0 +1,20 @@ +/* Update transmembrane potential (GPU) */ +__device__ +static void UpdateTransmembranePotential(value_type {{ free_variable.var_name if free_variable is defined else "var_chaste_interface__environment__time" }}, + value_type rY[], + value_type mDt, + const value_type mParameters[], + bool setVoltageDerivativeToZero, + value_type fixedVoltage, + DeviceStimulusFunctor stim) +{ + {% for state_var in state_vars %} + {%- if state_var.in_voltage_deriv %}value_type {{ state_var.var }} = {{state_var.rY_lookup}}; + // Units: {{state_var.units}}; Initial value: {{state_var.initial_value}} + {% endif %}{%- endfor %} + {%- set method = "UpdateTransmembranePotential" %}{% include "Shared/cpp/lookup_table_init" %} + {% for deriv in y_derivative_equations %} + {%- if deriv.in_membrane_voltage %}const value_type {{deriv.lhs}} = {{deriv.rhs}}; // {{deriv.units}} + {% endif %}{%- endfor %} + {% for deriv in y_derivative_equations %}{%- if deriv.is_voltage%}rY[{{membrane_voltage_index}}] += mDt*{{deriv.lhs}};{%- endif %}{%- endfor %} +} diff --git a/chaste_codegen/templates/backward_euler_functor.cuh b/chaste_codegen/templates/backward_euler_functor.cuh new file mode 100644 index 000000000..f20e1830b --- /dev/null +++ b/chaste_codegen/templates/backward_euler_functor.cuh @@ -0,0 +1,23 @@ +{%- include "Shared/cpp/header_comments" %} +#include +#include "StimulusEvaluatorCuda.hpp" // DeviceStimulusFunctor (+ includes StimulusDescriptor) + +{# The functor template for GPU use. It pulls in the small method fragments + you created under BE/cpp (ComputeJacobian, ComputeResidual, + UpdateTransmembranePotential, ComputeOneStepExceptVoltagehelpers). #} + +template +struct {{ class_name }} +{ + using value_type_t = value_type; + static constexpr unsigned TOTAL_SIZE = {{ state_vars|length }}u; + static constexpr unsigned NONLINEAR_SIZE = {{ nonlinear_state_vars|length }}u; + + {% include "BE/cpp/FunctorComputeOneStepExceptVoltageHelpers" %} {# (file contains SolveClosedFormVars, FillInitialGuess, ScatterSolution) #} + + {% include "BE/cpp/FunctorComputeResidual" %} + + {% include "BE/cpp/FunctorComputeJacobian" %} + + {% include "BE/cpp/FunctorUpdateTransmembranePotential" %} +}; diff --git a/chaste_codegen/templates/backward_euler_model.hpp b/chaste_codegen/templates/backward_euler_model.hpp index ea7cc7982..b890755f3 100644 --- a/chaste_codegen/templates/backward_euler_model.hpp +++ b/chaste_codegen/templates/backward_euler_model.hpp @@ -2,6 +2,8 @@ {% include "Shared/hpp/includes" %} #include "{{base_class}}.hpp" {% with %}{% set base_class = base_class ~ "<"~nonlinear_state_vars|length~">" %}{% include "Shared/hpp/class_declaration" %}{% endwith %} +public: + using CellFunctor = {{ class_name | replace('FromCellML', '') }}Functor; {% include "Shared/hpp/DefaultStimulus_IntracellularCalciumConcentration" %} {{class_name}}(boost::shared_ptr /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus); {% include "Shared/hpp/destructor_verify_state_variables_GetIIonic" %} From 5456c36d050e29a8407ed618dc2c3fde530a1d76 Mon Sep 17 00:00:00 2001 From: Joseph Simkin Date: Fri, 9 Jan 2026 22:41:23 +0000 Subject: [PATCH 02/28] Working autogen functor (without cast to value_type) --- chaste_codegen/_command_line_script.py | 11 ++++++-- chaste_codegen/backward_euler_opt_model.py | 1 + .../templates/BE/cpp/FunctorComputeJacobian | 9 +++--- .../FunctorComputeOneStepExceptVoltageHelpers | 27 ++++++++++-------- .../templates/BE/cpp/FunctorComputeResidual | 7 +++-- .../cpp/FunctorUpdateTransmembranePotential | 9 +++--- .../templates/backward_euler_functor.cuh | 28 +++++++++++++++---- .../templates/backward_euler_model.hpp | 4 ++- 8 files changed, 65 insertions(+), 31 deletions(-) diff --git a/chaste_codegen/_command_line_script.py b/chaste_codegen/_command_line_script.py index 7544f6d1d..490990a20 100644 --- a/chaste_codegen/_command_line_script.py +++ b/chaste_codegen/_command_line_script.py @@ -212,16 +212,21 @@ def process_command_line(): if ex is not None: get_files.append(os.path.join(outfile_path, outfile_base + ex)) - # Simple bodge to generate the functor.cuh files for now + # Simple bodge to generate the functor.cuh files for now, can add 'Functor.cuh to ext later perhaps if translator_class is cg.BackwardEulerModel: - functor_name = outfile_base + 'Functor.cuh' - get_files.append(os.path.join(outfile_path, functor_name)) + get_files.append(os.path.join(outfile_path, outfile_base + 'Functor.cuh')) if args.show_outputs: for file in get_files: print(file) else: with translator_class(model, outfile_base, header_ext=ext[0], **vars(args)) as chaste_model: + # Another bodge to extract the file names so we can put it in the includes + try: + chaste_model._vars_for_template.update({"outfile_base": outfile_base}) + except AttributeError: + # _vars_for_template missing: create it + chaste_model._vars_for_template = {"outfile_base": outfile_base} chaste_model.generate_chaste_code() for file, code in zip(get_files, chaste_model.generated_code): diff --git a/chaste_codegen/backward_euler_opt_model.py b/chaste_codegen/backward_euler_opt_model.py index 01de16127..98bacac0a 100644 --- a/chaste_codegen/backward_euler_opt_model.py +++ b/chaste_codegen/backward_euler_opt_model.py @@ -12,6 +12,7 @@ def __init__(self, model, file_name, **kwargs): self._lookup_tables = LookupTables(model, lookup_params=kwargs.get('lookup_table', DEFAULT_LOOKUP_PARAMETERS)) super().__init__(model, file_name, **kwargs) + self._templates = ['backward_euler_model.hpp', 'backward_euler_model.cpp'] self._vars_for_template['model_type'] += 'Opt' self._update_formatted_deriv_eq() self._vars_for_template['lookup_parameters'] = self._lookup_tables.print_lookup_parameters(self._printer) diff --git a/chaste_codegen/templates/BE/cpp/FunctorComputeJacobian b/chaste_codegen/templates/BE/cpp/FunctorComputeJacobian index 4d88d61b7..b93ef1344 100644 --- a/chaste_codegen/templates/BE/cpp/FunctorComputeJacobian +++ b/chaste_codegen/templates/BE/cpp/FunctorComputeJacobian @@ -1,13 +1,14 @@ {%- if nonlinear_state_vars|length > 0 %} __device__ -static void ComputeJacobian(value_type environment_time, +static void ComputeJacobian(value_type {{free_variable.var_name}}, const value_type rCurrentGuess[NONLINEAR_SIZE], const value_type rY[], - value_type Jmat[NONLINEAR_SIZE][NONLINEAR_SIZE], + value_type rJacobian[NONLINEAR_SIZE][NONLINEAR_SIZE], value_type mDt, const value_type mParameters[], - bool setVoltageDerivativeToZero, - value_type fixedVoltage) + bool mSetVoltageDerivativeToZero, + value_type mFixedVoltage, + value_type capacitance) { {% for state_var in state_vars %} {%- if state_var.in_y_deriv and state_var.linear and state_var.in_jacobian %}value_type {{ state_var.var }} = {{state_var.rY_lookup}}; diff --git a/chaste_codegen/templates/BE/cpp/FunctorComputeOneStepExceptVoltageHelpers b/chaste_codegen/templates/BE/cpp/FunctorComputeOneStepExceptVoltageHelpers index 0ad53154e..738119c30 100644 --- a/chaste_codegen/templates/BE/cpp/FunctorComputeOneStepExceptVoltageHelpers +++ b/chaste_codegen/templates/BE/cpp/FunctorComputeOneStepExceptVoltageHelpers @@ -1,11 +1,11 @@ - /* Apply all closed-form backward-Euler updates for the "linear" gating variables */ __device__ static void SolveClosedFormVars(value_type rY[TOTAL_SIZE], value_type mDt, - const value_type params[], - bool setVoltZero, - value_type fixedVolt) + const value_type mParameters[], + bool mSetVoltageDerivativeToZero, + value_type mFixedVoltage, + value_type capacitance) { {% for state_var in state_vars %} {%- if state_var.in_y_deriv and state_var.linear and state_var.in_one_step_except_v %}value_type {{ state_var.var }} = {{state_var.rY_lookup}}; @@ -22,19 +22,24 @@ static void SolveClosedFormVars(value_type rY[TOTAL_SIZE], /* Gather non-linear variables from state and put them into guess for Newton solve */ __device__ -static void FillInitialGuess(value_type guess[NONLINEAR_SIZE], +static void FillInitialGuess(value_type _guess[NONLINEAR_SIZE], const value_type rY[TOTAL_SIZE]) { - {% if nonlinear_state_vars|length > 0 %} - value_type _guess[{{nonlinear_state_vars|length}}] = {{"{"}}{%- for state_var in nonlinear_state_vars %}{% if loop.index0 > 0 %},{% endif %}rY[{{state_var.state_var_index}}]{%- endfor %}{{"}"}}; + {% if nonlinear_state_vars|length > 0 %} {# We do not need this if really, if it is empty we just get no op#} + {% for state_var in nonlinear_state_vars %} + _guess[{{ loop.index0 }}] = rY[{{ state_var.state_var_index }}]; + {% endfor %} + {% endif %} } /* After Newton solve, scatter the solved nonlinear variables back into y */ __device__ -static void ScatterSolution(const value_type guess[NONLINEAR_SIZE], +static void ScatterSolution(const value_type _guess[NONLINEAR_SIZE], value_type rY[TOTAL_SIZE]) { - {%- for state_var in nonlinear_state_vars %} - rY[{{ state_var.state_var_index }}] = _guess[{{loop.index0}}]; - {%- endfor %}{% endif %} + {% if nonlinear_state_vars|length > 0 %} + {% for state_var in nonlinear_state_vars %} + rY[{{ state_var.state_var_index }}] = _guess[{{ loop.index0 }}]; + {% endfor %} + {% endif %} } diff --git a/chaste_codegen/templates/BE/cpp/FunctorComputeResidual b/chaste_codegen/templates/BE/cpp/FunctorComputeResidual index c4972b43c..af080a811 100644 --- a/chaste_codegen/templates/BE/cpp/FunctorComputeResidual +++ b/chaste_codegen/templates/BE/cpp/FunctorComputeResidual @@ -1,14 +1,15 @@ {%- if nonlinear_state_vars|length > 0 %} /* Compute residual of non-linear system for the current guess */ __device__ -static void ComputeResidual(value_type {{ free_variable.var_name if free_variable is defined else "var_chaste_interface_environment_time" }}, +static void ComputeResidual(value_type {{free_variable.var_name}}, const value_type rCurrentGuess[NONLINEAR_SIZE], const value_type rY[], value_type rResidual[NONLINEAR_SIZE], value_type mDt, const value_type mParameters[], - bool setVoltageDerivativeToZero, - value_type fixedVoltage) + bool mSetVoltageDerivativeToZero, + value_type mFixedVoltage, + value_type capacitance) { {% for state_var in state_vars %} {%- if state_var.linear and state_var.in_non_linear_eq %}value_type {{ state_var.var }} = {{state_var.rY_lookup}}; diff --git a/chaste_codegen/templates/BE/cpp/FunctorUpdateTransmembranePotential b/chaste_codegen/templates/BE/cpp/FunctorUpdateTransmembranePotential index 2f3c0dc4f..d91a0ad20 100644 --- a/chaste_codegen/templates/BE/cpp/FunctorUpdateTransmembranePotential +++ b/chaste_codegen/templates/BE/cpp/FunctorUpdateTransmembranePotential @@ -1,12 +1,13 @@ /* Update transmembrane potential (GPU) */ __device__ -static void UpdateTransmembranePotential(value_type {{ free_variable.var_name if free_variable is defined else "var_chaste_interface__environment__time" }}, +static void UpdateTransmembranePotential(value_type {{free_variable.var_name}}, value_type rY[], value_type mDt, const value_type mParameters[], - bool setVoltageDerivativeToZero, - value_type fixedVoltage, - DeviceStimulusFunctor stim) + bool mSetVoltageDerivativeToZero, + value_type mFixedVoltage, + DeviceStimulusFunctor stim, + value_type capacitance) { {% for state_var in state_vars %} {%- if state_var.in_voltage_deriv %}value_type {{ state_var.var }} = {{state_var.rY_lookup}}; diff --git a/chaste_codegen/templates/backward_euler_functor.cuh b/chaste_codegen/templates/backward_euler_functor.cuh index f20e1830b..cd1b2b003 100644 --- a/chaste_codegen/templates/backward_euler_functor.cuh +++ b/chaste_codegen/templates/backward_euler_functor.cuh @@ -1,18 +1,29 @@ -{%- include "Shared/cpp/header_comments" %} +#ifndef {% filter upper %}{{class_name}}FUNCTOR_CUH_{% endfilter %} +#define {% filter upper %}{{class_name}}FUNCTOR_CUH_{% endfilter %} + +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version {{converter_version}} +//! +//! Model: {{model_name}} +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: {{model_type}}) +//! on {{generation_date}} +//! +//! #include #include "StimulusEvaluatorCuda.hpp" // DeviceStimulusFunctor (+ includes StimulusDescriptor) -{# The functor template for GPU use. It pulls in the small method fragments - you created under BE/cpp (ComputeJacobian, ComputeResidual, - UpdateTransmembranePotential, ComputeOneStepExceptVoltagehelpers). #} template -struct {{ class_name }} +struct {{ class_name }}Functor { using value_type_t = value_type; static constexpr unsigned TOTAL_SIZE = {{ state_vars|length }}u; static constexpr unsigned NONLINEAR_SIZE = {{ nonlinear_state_vars|length }}u; + {% set body %} {% include "BE/cpp/FunctorComputeOneStepExceptVoltageHelpers" %} {# (file contains SolveClosedFormVars, FillInitialGuess, ScatterSolution) #} {% include "BE/cpp/FunctorComputeResidual" %} @@ -20,4 +31,11 @@ struct {{ class_name }} {% include "BE/cpp/FunctorComputeJacobian" %} {% include "BE/cpp/FunctorUpdateTransmembranePotential" %} + {% endset %} + {{ body + | replace('this->', '') + | replace('HeartConfig::Instance()->GetCapacitance()', 'capacitance') + | replace('GetIntracellularAreaStimulus', 'stim') }} }; + +#endif // {% filter upper %}{{class_name}}FUNCTOR_CUH_{% endfilter %} diff --git a/chaste_codegen/templates/backward_euler_model.hpp b/chaste_codegen/templates/backward_euler_model.hpp index b890755f3..14eb216cd 100644 --- a/chaste_codegen/templates/backward_euler_model.hpp +++ b/chaste_codegen/templates/backward_euler_model.hpp @@ -1,9 +1,11 @@ {% include "Shared/hpp/header_comments" %} {% include "Shared/hpp/includes" %} #include "{{base_class}}.hpp" +{% if not outfile_base.endswith('Opt') %}#include "{{ outfile_base }}Functor.cuh"{% endif %} + {% with %}{% set base_class = base_class ~ "<"~nonlinear_state_vars|length~">" %}{% include "Shared/hpp/class_declaration" %}{% endwith %} public: - using CellFunctor = {{ class_name | replace('FromCellML', '') }}Functor; + {% if not outfile_base.endswith('Opt') %}using CellFunctor = {{ class_name }}Functor;{% endif %} {% include "Shared/hpp/DefaultStimulus_IntracellularCalciumConcentration" %} {{class_name}}(boost::shared_ptr /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus); {% include "Shared/hpp/destructor_verify_state_variables_GetIIonic" %} From 188e9deefef4e5dffac6c849897078e8962699be Mon Sep 17 00:00:00 2001 From: Joseph Simkin Date: Mon, 12 Jan 2026 16:16:15 +0000 Subject: [PATCH 03/28] templated the functor held by a model so a solver bundle can enter the template type itself --- chaste_codegen/templates/backward_euler_model.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chaste_codegen/templates/backward_euler_model.hpp b/chaste_codegen/templates/backward_euler_model.hpp index 14eb216cd..579bf40d6 100644 --- a/chaste_codegen/templates/backward_euler_model.hpp +++ b/chaste_codegen/templates/backward_euler_model.hpp @@ -5,7 +5,7 @@ {% with %}{% set base_class = base_class ~ "<"~nonlinear_state_vars|length~">" %}{% include "Shared/hpp/class_declaration" %}{% endwith %} public: - {% if not outfile_base.endswith('Opt') %}using CellFunctor = {{ class_name }}Functor;{% endif %} + {% if not outfile_base.endswith('Opt') %}template using CellFunctor = {{class_name}}Functor;{% endif %} {% include "Shared/hpp/DefaultStimulus_IntracellularCalciumConcentration" %} {{class_name}}(boost::shared_ptr /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus); {% include "Shared/hpp/destructor_verify_state_variables_GetIIonic" %} From d88dd860746857a278441c6511d4e5d08de0db92 Mon Sep 17 00:00:00 2001 From: Joseph Simkin Date: Tue, 13 Jan 2026 15:44:26 +0000 Subject: [PATCH 04/28] Reduced templating and made casing of template parameters consistent --- .../templates/BE/cpp/FunctorComputeJacobian | 22 +++++++++---------- .../FunctorComputeOneStepExceptVoltageHelpers | 22 +++++++++---------- .../templates/BE/cpp/FunctorComputeResidual | 22 +++++++++---------- .../cpp/FunctorUpdateTransmembranePotential | 18 +++++++-------- .../templates/backward_euler_functor.cuh | 4 ++-- .../templates/backward_euler_model.hpp | 4 +++- 6 files changed, 47 insertions(+), 45 deletions(-) diff --git a/chaste_codegen/templates/BE/cpp/FunctorComputeJacobian b/chaste_codegen/templates/BE/cpp/FunctorComputeJacobian index b93ef1344..e1bdeb03d 100644 --- a/chaste_codegen/templates/BE/cpp/FunctorComputeJacobian +++ b/chaste_codegen/templates/BE/cpp/FunctorComputeJacobian @@ -1,24 +1,24 @@ {%- if nonlinear_state_vars|length > 0 %} __device__ -static void ComputeJacobian(value_type {{free_variable.var_name}}, - const value_type rCurrentGuess[NONLINEAR_SIZE], - const value_type rY[], - value_type rJacobian[NONLINEAR_SIZE][NONLINEAR_SIZE], - value_type mDt, - const value_type mParameters[], +static void ComputeJacobian(ValueType {{free_variable.var_name}}, + const ValueType rCurrentGuess[NONLINEAR_SIZE], + const ValueType rY[], + ValueType rJacobian[NONLINEAR_SIZE][NONLINEAR_SIZE], + ValueType mDt, + const ValueType mParameters[], bool mSetVoltageDerivativeToZero, - value_type mFixedVoltage, - value_type capacitance) + ValueType mFixedVoltage, + ValueType capacitance) { {% for state_var in state_vars %} - {%- if state_var.in_y_deriv and state_var.linear and state_var.in_jacobian %}value_type {{ state_var.var }} = {{state_var.rY_lookup}}; + {%- if state_var.in_y_deriv and state_var.linear and state_var.in_jacobian %}ValueType {{ state_var.var }} = {{state_var.rY_lookup}}; // Units: {{state_var.units}}; Initial value: {{state_var.initial_value}} {% endif %}{%- endfor %} {%- set method = "ComputeJacobian" %}{% include "Shared/cpp/lookup_table_init" %} {% for state_var in nonlinear_state_vars %} - {%- if state_var.in_jacobian %}value_type {{ state_var.var }} = rCurrentGuess[{{loop.index0}}]; + {%- if state_var.in_jacobian %}ValueType {{ state_var.var }} = rCurrentGuess[{{loop.index0}}]; {% endif %}{%- endfor %} - {% for equation in jacobian_equations %}const value_type {{equation.lhs}} = {{equation.rhs}}; + {% for equation in jacobian_equations %}const ValueType {{equation.lhs}} = {{equation.rhs}}; {% endfor %} {% for entry in jacobian_entries %} rJacobian[{{entry.i}}][{{entry.j}}] = {% if entry.i == entry.j and entry.entry != '0' %}1.0 - (mDt * ({{entry.entry}})){% endif -%}{% if entry.i == entry.j and entry.entry == '0' %}1.0{% endif -%}{% if entry.i != entry.j and entry.entry == '0' %}0.0{% endif -%}{% if entry.i != entry.j and entry.entry != '0' %}-(mDt * ({{entry.entry}})){% endif -%}; diff --git a/chaste_codegen/templates/BE/cpp/FunctorComputeOneStepExceptVoltageHelpers b/chaste_codegen/templates/BE/cpp/FunctorComputeOneStepExceptVoltageHelpers index 738119c30..57280fea1 100644 --- a/chaste_codegen/templates/BE/cpp/FunctorComputeOneStepExceptVoltageHelpers +++ b/chaste_codegen/templates/BE/cpp/FunctorComputeOneStepExceptVoltageHelpers @@ -1,18 +1,18 @@ /* Apply all closed-form backward-Euler updates for the "linear" gating variables */ __device__ -static void SolveClosedFormVars(value_type rY[TOTAL_SIZE], - value_type mDt, - const value_type mParameters[], +static void SolveClosedFormVars(ValueType rY[TOTAL_SIZE], + ValueType mDt, + const ValueType mParameters[], bool mSetVoltageDerivativeToZero, - value_type mFixedVoltage, - value_type capacitance) + ValueType mFixedVoltage, + ValueType capacitance) { {% for state_var in state_vars %} - {%- if state_var.in_y_deriv and state_var.linear and state_var.in_one_step_except_v %}value_type {{ state_var.var }} = {{state_var.rY_lookup}}; + {%- if state_var.in_y_deriv and state_var.linear and state_var.in_one_step_except_v %}ValueType {{ state_var.var }} = {{state_var.rY_lookup}}; // Units: {{state_var.units}}; Initial value: {{state_var.initial_value}} {% endif %}{%- endfor %} - {% for eq in linear_equations %}const value_type {{eq.lhs}} = {{eq.rhs}}; + {% for eq in linear_equations %}const ValueType {{eq.lhs}} = {{eq.rhs}}; {% endfor %} {% for deriv in linear_deriv_eqs %} @@ -22,8 +22,8 @@ static void SolveClosedFormVars(value_type rY[TOTAL_SIZE], /* Gather non-linear variables from state and put them into guess for Newton solve */ __device__ -static void FillInitialGuess(value_type _guess[NONLINEAR_SIZE], - const value_type rY[TOTAL_SIZE]) +static void FillInitialGuess(ValueType _guess[NONLINEAR_SIZE], + const ValueType rY[TOTAL_SIZE]) { {% if nonlinear_state_vars|length > 0 %} {# We do not need this if really, if it is empty we just get no op#} {% for state_var in nonlinear_state_vars %} @@ -34,8 +34,8 @@ static void FillInitialGuess(value_type _guess[NONLINEAR_SIZE], /* After Newton solve, scatter the solved nonlinear variables back into y */ __device__ -static void ScatterSolution(const value_type _guess[NONLINEAR_SIZE], - value_type rY[TOTAL_SIZE]) +static void ScatterSolution(const ValueType _guess[NONLINEAR_SIZE], + ValueType rY[TOTAL_SIZE]) { {% if nonlinear_state_vars|length > 0 %} {% for state_var in nonlinear_state_vars %} diff --git a/chaste_codegen/templates/BE/cpp/FunctorComputeResidual b/chaste_codegen/templates/BE/cpp/FunctorComputeResidual index af080a811..137b6fbf0 100644 --- a/chaste_codegen/templates/BE/cpp/FunctorComputeResidual +++ b/chaste_codegen/templates/BE/cpp/FunctorComputeResidual @@ -1,28 +1,28 @@ {%- if nonlinear_state_vars|length > 0 %} /* Compute residual of non-linear system for the current guess */ __device__ -static void ComputeResidual(value_type {{free_variable.var_name}}, - const value_type rCurrentGuess[NONLINEAR_SIZE], - const value_type rY[], - value_type rResidual[NONLINEAR_SIZE], - value_type mDt, - const value_type mParameters[], +static void ComputeResidual(ValueType {{free_variable.var_name}}, + const ValueType rCurrentGuess[NONLINEAR_SIZE], + const ValueType rY[], + ValueType rResidual[NONLINEAR_SIZE], + ValueType mDt, + const ValueType mParameters[], bool mSetVoltageDerivativeToZero, - value_type mFixedVoltage, - value_type capacitance) + ValueType mFixedVoltage, + ValueType capacitance) { {% for state_var in state_vars %} - {%- if state_var.linear and state_var.in_non_linear_eq %}value_type {{ state_var.var }} = {{state_var.rY_lookup}}; + {%- if state_var.linear and state_var.in_non_linear_eq %}ValueType {{ state_var.var }} = {{state_var.rY_lookup}}; // Units: {{state_var.units}}; Initial value: {{state_var.initial_value}} {% endif %}{%- endfor %} //output_nonlinear_state_assignments {% for state_var in nonlinear_state_vars %} - {%- if state_var.in_non_linear_eq %}value_type {{ state_var.var }} = rCurrentGuess[{{loop.index0}}]; + {%- if state_var.in_non_linear_eq %}ValueType {{ state_var.var }} = rCurrentGuess[{{loop.index0}}]; {% endif %}{%- endfor %} {%- set method = "ComputeResidual" %}{% include "Shared/cpp/lookup_table_init" %} //output_equations {%- for deriv in y_derivative_equations %}{%- if not deriv.linear %} - const value_type {{deriv.lhs}} = {{deriv.rhs}}; // {{deriv.units}}{%- endif %} + const ValueType {{deriv.lhs}} = {{deriv.rhs}}; // {{deriv.units}}{%- endif %} {%- endfor %} {% for residual_var in residual_equations %} rResidual[{{ residual_var.residual_index }}] = rCurrentGuess[{{ residual_var.residual_index }}] - rY[{{ residual_var.state_var_index }}] - mDt*{{ residual_var.var }}; diff --git a/chaste_codegen/templates/BE/cpp/FunctorUpdateTransmembranePotential b/chaste_codegen/templates/BE/cpp/FunctorUpdateTransmembranePotential index d91a0ad20..7c9d887a5 100644 --- a/chaste_codegen/templates/BE/cpp/FunctorUpdateTransmembranePotential +++ b/chaste_codegen/templates/BE/cpp/FunctorUpdateTransmembranePotential @@ -1,21 +1,21 @@ /* Update transmembrane potential (GPU) */ __device__ -static void UpdateTransmembranePotential(value_type {{free_variable.var_name}}, - value_type rY[], - value_type mDt, - const value_type mParameters[], +static void UpdateTransmembranePotential(ValueType {{free_variable.var_name}}, + ValueType rY[], + ValueType mDt, + const ValueType mParameters[], bool mSetVoltageDerivativeToZero, - value_type mFixedVoltage, - DeviceStimulusFunctor stim, - value_type capacitance) + ValueType mFixedVoltage, + DeviceStimulusFunctor stim, + ValueType capacitance) { {% for state_var in state_vars %} - {%- if state_var.in_voltage_deriv %}value_type {{ state_var.var }} = {{state_var.rY_lookup}}; + {%- if state_var.in_voltage_deriv %}ValueType {{ state_var.var }} = {{state_var.rY_lookup}}; // Units: {{state_var.units}}; Initial value: {{state_var.initial_value}} {% endif %}{%- endfor %} {%- set method = "UpdateTransmembranePotential" %}{% include "Shared/cpp/lookup_table_init" %} {% for deriv in y_derivative_equations %} - {%- if deriv.in_membrane_voltage %}const value_type {{deriv.lhs}} = {{deriv.rhs}}; // {{deriv.units}} + {%- if deriv.in_membrane_voltage %}const ValueType {{deriv.lhs}} = {{deriv.rhs}}; // {{deriv.units}} {% endif %}{%- endfor %} {% for deriv in y_derivative_equations %}{%- if deriv.is_voltage%}rY[{{membrane_voltage_index}}] += mDt*{{deriv.lhs}};{%- endif %}{%- endfor %} } diff --git a/chaste_codegen/templates/backward_euler_functor.cuh b/chaste_codegen/templates/backward_euler_functor.cuh index cd1b2b003..1ad33db61 100644 --- a/chaste_codegen/templates/backward_euler_functor.cuh +++ b/chaste_codegen/templates/backward_euler_functor.cuh @@ -16,10 +16,10 @@ #include "StimulusEvaluatorCuda.hpp" // DeviceStimulusFunctor (+ includes StimulusDescriptor) -template +template struct {{ class_name }}Functor { - using value_type_t = value_type; + using ValueType_t = ValueType; static constexpr unsigned TOTAL_SIZE = {{ state_vars|length }}u; static constexpr unsigned NONLINEAR_SIZE = {{ nonlinear_state_vars|length }}u; diff --git a/chaste_codegen/templates/backward_euler_model.hpp b/chaste_codegen/templates/backward_euler_model.hpp index 579bf40d6..b98645c4e 100644 --- a/chaste_codegen/templates/backward_euler_model.hpp +++ b/chaste_codegen/templates/backward_euler_model.hpp @@ -2,10 +2,12 @@ {% include "Shared/hpp/includes" %} #include "{{base_class}}.hpp" {% if not outfile_base.endswith('Opt') %}#include "{{ outfile_base }}Functor.cuh"{% endif %} +{% if not outfile_base.endswith('Opt') %}#include "SolverBundles.cuh"{% endif %} {% with %}{% set base_class = base_class ~ "<"~nonlinear_state_vars|length~">" %}{% include "Shared/hpp/class_declaration" %}{% endwith %} public: - {% if not outfile_base.endswith('Opt') %}template using CellFunctor = {{class_name}}Functor;{% endif %} + {% if not outfile_base.endswith('Opt') %}template using CellFunctor = {{class_name}}Functor;{% endif %} + {% if not outfile_base.endswith('Opt') %}template using Bundle = BackwardEulerBundle, ValueType>;{% endif %} {% include "Shared/hpp/DefaultStimulus_IntracellularCalciumConcentration" %} {{class_name}}(boost::shared_ptr /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus); {% include "Shared/hpp/destructor_verify_state_variables_GetIIonic" %} From aea39e27ccd2787b2f4e78efa0d9c8b9b8f00a89 Mon Sep 17 00:00:00 2001 From: Joseph Simkin Date: Wed, 14 Jan 2026 14:26:22 +0000 Subject: [PATCH 05/28] Cast autogenerated doubles to ValueType, ignoring comments --- chaste_codegen/_load_template.py | 66 +++++++++++++++++++ .../templates/backward_euler_functor.cuh | 6 +- 2 files changed, 71 insertions(+), 1 deletion(-) diff --git a/chaste_codegen/_load_template.py b/chaste_codegen/_load_template.py index 9a04b190b..0e57ca3c9 100644 --- a/chaste_codegen/_load_template.py +++ b/chaste_codegen/_load_template.py @@ -4,12 +4,75 @@ import logging import os import posixpath +import re import jinja2 import chaste_codegen as cg +def regex_replace(s, find, replace): + """Regex replace that skips // and /* */ comments.""" + if s is None: + return s + + out = [] + in_block_comment = False + + lines = s.splitlines(keepends=True) + for line in lines: + i = 0 + result = '' + + while i < len(line): + if in_block_comment: + end = line.find('*/', i) + if end == -1: + # whole line is inside block comment + result += line[i:] + i = len(line) + else: + # exit block comment + result += line[i:end+2] + i = end + 2 + in_block_comment = False + else: + # look for comment starts + line_comment = line.find('//', i) + block_comment = line.find('/*', i) + + # choose nearest comment start + candidates = [p for p in [line_comment, block_comment] if p != -1] + if not candidates: + # pure code + result += re.sub(find, replace, line[i:]) + i = len(line) + else: + next_comment = min(candidates) + # process code before comment + result += re.sub(find, replace, line[i:next_comment]) + i = next_comment + + if next_comment == line_comment: + # rest of line is // comment + result += line[i:] + i = len(line) + else: + # enter /* */ block + end = line.find('*/', i+2) + if end == -1: + result += line[i:] + i = len(line) + in_block_comment = True + else: + result += line[i:end+2] + i = end + 2 + + out.append(result) + + return ''.join(out) + + # Shared Jinja environment _environment = None @@ -32,6 +95,9 @@ def _jinja_environment(): # but raise a jinja2.UndefinedError instead. undefined=jinja2.StrictUndefined, ) + + # register the filter + _environment.filters['regex_replace'] = regex_replace return _environment diff --git a/chaste_codegen/templates/backward_euler_functor.cuh b/chaste_codegen/templates/backward_euler_functor.cuh index 1ad33db61..a4395aa39 100644 --- a/chaste_codegen/templates/backward_euler_functor.cuh +++ b/chaste_codegen/templates/backward_euler_functor.cuh @@ -35,7 +35,11 @@ struct {{ class_name }}Functor {{ body | replace('this->', '') | replace('HeartConfig::Instance()->GetCapacitance()', 'capacitance') - | replace('GetIntracellularAreaStimulus', 'stim') }} + | replace('GetIntracellularAreaStimulus', 'stim') + | regex_replace('(?])(-?\\d+\\.\\d+(?:[eE][+-]?\\d+)?)', + 'static_cast(\\1)') + }} + }; #endif // {% filter upper %}{{class_name}}FUNCTOR_CUH_{% endfilter %} From cac40ed835e9a731bd709a7666464c4c90434c44 Mon Sep 17 00:00:00 2001 From: Joseph Simkin Date: Sat, 17 Jan 2026 17:06:24 +0000 Subject: [PATCH 06/28] Added Device stimulus into functor and replaced CPU signum calls with in place computation on card --- chaste_codegen/templates/BE/cpp/FunctorComputeJacobian | 3 ++- chaste_codegen/templates/BE/cpp/FunctorComputeResidual | 3 ++- chaste_codegen/templates/backward_euler_functor.cuh | 1 + 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/chaste_codegen/templates/BE/cpp/FunctorComputeJacobian b/chaste_codegen/templates/BE/cpp/FunctorComputeJacobian index e1bdeb03d..684840b90 100644 --- a/chaste_codegen/templates/BE/cpp/FunctorComputeJacobian +++ b/chaste_codegen/templates/BE/cpp/FunctorComputeJacobian @@ -8,7 +8,8 @@ static void ComputeJacobian(ValueType {{free_variable.var_name}}, const ValueType mParameters[], bool mSetVoltageDerivativeToZero, ValueType mFixedVoltage, - ValueType capacitance) + ValueType capacitance, + const DeviceStimulusFunctor stim) { {% for state_var in state_vars %} {%- if state_var.in_y_deriv and state_var.linear and state_var.in_jacobian %}ValueType {{ state_var.var }} = {{state_var.rY_lookup}}; diff --git a/chaste_codegen/templates/BE/cpp/FunctorComputeResidual b/chaste_codegen/templates/BE/cpp/FunctorComputeResidual index 137b6fbf0..0b2ccba5c 100644 --- a/chaste_codegen/templates/BE/cpp/FunctorComputeResidual +++ b/chaste_codegen/templates/BE/cpp/FunctorComputeResidual @@ -9,7 +9,8 @@ static void ComputeResidual(ValueType {{free_variable.var_name}}, const ValueType mParameters[], bool mSetVoltageDerivativeToZero, ValueType mFixedVoltage, - ValueType capacitance) + ValueType capacitance, + const DeviceStimulusFunctor stim) { {% for state_var in state_vars %} {%- if state_var.linear and state_var.in_non_linear_eq %}ValueType {{ state_var.var }} = {{state_var.rY_lookup}}; diff --git a/chaste_codegen/templates/backward_euler_functor.cuh b/chaste_codegen/templates/backward_euler_functor.cuh index a4395aa39..0abffd0c0 100644 --- a/chaste_codegen/templates/backward_euler_functor.cuh +++ b/chaste_codegen/templates/backward_euler_functor.cuh @@ -36,6 +36,7 @@ struct {{ class_name }}Functor | replace('this->', '') | replace('HeartConfig::Instance()->GetCapacitance()', 'capacitance') | replace('GetIntracellularAreaStimulus', 'stim') + | regex_replace('Signum\\s*\\(([^)]+)\\)', '(((ValueType)0 < (\\1)) - ((\\1) < (ValueType)0))') | regex_replace('(?])(-?\\d+\\.\\d+(?:[eE][+-]?\\d+)?)', 'static_cast(\\1)') }} From 3ebcf2a18dea897bbe3d5444d7b01547523ff82f Mon Sep 17 00:00:00 2001 From: Joseph Simkin Date: Thu, 12 Feb 2026 18:44:52 +0000 Subject: [PATCH 07/28] factored out Device maths helpers into MathsCustomFunctions header --- chaste_codegen/templates/backward_euler_functor.cuh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/chaste_codegen/templates/backward_euler_functor.cuh b/chaste_codegen/templates/backward_euler_functor.cuh index 0abffd0c0..5383db15b 100644 --- a/chaste_codegen/templates/backward_euler_functor.cuh +++ b/chaste_codegen/templates/backward_euler_functor.cuh @@ -14,7 +14,7 @@ //! #include #include "StimulusEvaluatorCuda.hpp" // DeviceStimulusFunctor (+ includes StimulusDescriptor) - +#include "MathsCustomFunctions.hpp" template struct {{ class_name }}Functor @@ -36,7 +36,9 @@ struct {{ class_name }}Functor | replace('this->', '') | replace('HeartConfig::Instance()->GetCapacitance()', 'capacitance') | replace('GetIntracellularAreaStimulus', 'stim') - | regex_replace('Signum\\s*\\(([^)]+)\\)', '(((ValueType)0 < (\\1)) - ((\\1) < (ValueType)0))') + | regex_replace('Signum\\s*\\(([^)]+)\\)', 'SignumDevice(\\1)') + | regex_replace('pow\\s*\\(([^,]+),\\s*([^)]+)\\)', 'PowDevice(\\1, \\2)') + | regex_replace('fabs\\s*\\(([^)]+)\\)', 'AbsDevice(\\1)') | regex_replace('(?])(-?\\d+\\.\\d+(?:[eE][+-]?\\d+)?)', 'static_cast(\\1)') }} From 5f3637ca1fe994ccdf9afe227f41b6ad35b1d909 Mon Sep 17 00:00:00 2001 From: Joseph Simkin Date: Thu, 12 Feb 2026 18:45:42 +0000 Subject: [PATCH 08/28] Modified CVode model header to provide kernels for GPU Cvode --- chaste_codegen/templates/cvode_model.hpp | 87 ++++++++++++++++++++++++ 1 file changed, 87 insertions(+) diff --git a/chaste_codegen/templates/cvode_model.hpp b/chaste_codegen/templates/cvode_model.hpp index 28b362557..a03c33ef0 100644 --- a/chaste_codegen/templates/cvode_model.hpp +++ b/chaste_codegen/templates/cvode_model.hpp @@ -2,16 +2,103 @@ {% include "Shared/hpp/header_comments" %} {% include "Shared/hpp/includes" %} #include "{{base_class}}.hpp" +#include "HostDeviceMacros.hpp" +#include "StimulusEvaluatorCuda.hpp" +#include "MathsCustomFunctions.hpp" {% include "Shared/hpp/class_declaration" %} + static constexpr unsigned TOTAL_SIZE = {{ state_vars|length }}u; {% include "Shared/hpp/DefaultStimulus_IntracellularCalciumConcentration" %} {{class_name}}(boost::shared_ptr pOdeSolver /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus); {% include "Shared/hpp/destructor_verify_state_variables_GetIIonic" %} void EvaluateYDerivatives(double {{free_variable.var_name}}, const {{vector_decl}} rY, {{vector_decl}} rDY); + //template + //DEVICE + //static void EvaluateYDerivativesDevice(ValueType {{free_variable.var_name}}, const ValueType* rY, ValueType* rDY, ValueType mSetVoltageDerivativeToZero, ValueType mFixedVoltage, ValueType *mParameters, ValueType capacitance); + {% if not lookup_parameters is defined%} + {% set body %} + template + DEVICE + static void EvaluateYDerivativesDevice(ValueType {{free_variable.var_name}}, const ValueType *rY, ValueType *rDY, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType *mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim) + { + // Inputs: + // Time units: millisecond + {%- for state_var in state_vars %} + {% if state_var.in_y_deriv %}ValueType {{ state_var.var }} = {{state_var.rY_lookup}}; + // Units: {{state_var.units}}; Initial value: {{state_var.initial_value}} + {%- endif %}{%- endfor %} + + // Mathematics + {% for deriv in y_derivative_equations %}{%- if deriv.is_voltage%}ValueType {{deriv.lhs}};{%- endif %}{%- endfor %} + {%- for deriv in y_derivative_equations %}{%- if deriv.in_eqs_excl_voltage %} + const ValueType {{deriv.lhs}} = {{deriv.rhs}}; // {{deriv.units}}{%- endif %} + {%- endfor %} + + if (mSetVoltageDerivativeToZero) + { + {% for deriv in y_derivative_equations %}{%- if deriv.is_voltage%}{{deriv.lhs}} = 0.0;{%- endif %}{%- endfor %} + } + else + { + {% for deriv in y_derivative_equations %}{% if not deriv.in_eqs_excl_voltage %}{% if deriv.is_data_clamp_current is defined and deriv.is_data_clamp_current %} // Special handling of data clamp current here + // (we want to save expense of calling the interpolation method if possible.) + ValueType {{ deriv.lhs }} = 0.0; + if (mDataClampIsOn) + { + {{deriv.lhs}} = {{deriv.rhs}}; // {{deriv.units}} + }{% else %} {% if not deriv.is_voltage%}const ValueType {% endif %}{{deriv.lhs}} = {{deriv.rhs}}; // {{deriv.units}}{% endif %} + {% endif %}{%- endfor %}} + {% for deriv in y_derivatives %} + rDY[{{loop.index0}}] = {{deriv}}; + {%- endfor %} + } + {% endset %} + {{ body + | replace('this->', '') + | replace('HeartConfig::Instance()->GetCapacitance()', 'capacitance') + | replace('GetIntracellularAreaStimulus', 'stim') + | regex_replace('Signum\\s*\\(([^)]+)\\)', 'SignumDevice(\\1)') + | regex_replace('pow\\s*\\(([^,]+),\\s*([^)]+)\\)', 'PowDevice(\\1, \\2)') + | regex_replace('fabs\\s*\\(([^)]+)\\)', 'AbsDevice(\\1)') + | regex_replace('(?])(-?\\d+\\.\\d+(?:[eE][+-]?\\d+)?)', + 'static_cast(\\1)') + | regex_replace('NV_Ith_S\\(\\s*([A-Za-z_]\\w*)\\s*,\\s*(\\d+)\\s*\\)', '\\1[\\2]') + }} + {%endif%} {%- if derived_quantities|length > 0 %} {{vector_decl}} ComputeDerivedQuantities(double {{free_variable.var_name}}, const {{vector_decl}} & rY); {%- endif %} {%- if jacobian_equations|length > 0 %} void EvaluateAnalyticJacobian(double {{free_variable.var_name}}, {{vector_decl}} rY, {{vector_decl}} rDY, CHASTE_CVODE_DENSE_MATRIX rJacobian, {{vector_decl}} rTmp1, {{vector_decl}} rTmp2, {{vector_decl}} rTmp3); + //template + //DEVICE + //static void EvaluateAnalyticJacobianDevice(ValueType {{free_variable.var_name}}, ValueType *rY, ValueType *rDY, ValueType *rJacobian, ValueType *rTmp1, ValueType *rTmp2, ValueType *rTmp3, unsigned nvars, ValueType mSetVoltageDerivativeToZero, ValueType mFixedVoltage, ValueType *mParameters, ValueType capacitance); + {% if not lookup_parameters is defined%}{% set body %} + template + DEVICE + static void EvaluateAnalyticJacobianDevice(ValueType {{free_variable.var_name}}, const ValueType *rY, ValueType *rDY, ValueType *rJacobian, ValueType *rTmp1, ValueType *rTmp2, ValueType *rTmp3, const unsigned nvars, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType *mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim) + { + {% for state_var in state_vars %} + {%- if state_var.in_jacobian %}ValueType {{ state_var.var }} = {{state_var.rY_lookup}}; + // Units: {{state_var.units}}; Initial value: {{state_var.initial_value}} + {% endif %}{%- endfor %} + {% for equation in jacobian_equations %}const ValueType {{equation.lhs}} = {{equation.rhs}}; + {% endfor %} + // Matrix entries{% for entry in jacobian_entries %} + rJacobian[ {{entry.j}} * nvars + {{entry.i}} ] = {% if membrane_voltage_index == entry.i %}mSetVoltageDerivativeToZero ? 0.0 : ({{entry.entry}});{%- else %}{{entry.entry}};{%- endif %} + {%- endfor %} + } + {% endset %} + {{ body + | replace('this->', '') + | replace('HeartConfig::Instance()->GetCapacitance()', 'capacitance') + | replace('GetIntracellularAreaStimulus', 'stim') + | regex_replace('Signum\\s*\\(([^)]+)\\)', 'SignumDevice(\\1)') + | regex_replace('pow\\s*\\(([^,]+),\\s*([^)]+)\\)', 'PowDevice(\\1, \\2)') + | regex_replace('fabs\\s*\\(([^)]+)\\)', 'AbsDevice(\\1)') + | regex_replace('(?])(-?\\d+\\.\\d+(?:[eE][+-]?\\d+)?)', + 'static_cast(\\1)') + | regex_replace('NV_Ith_S\\(\\s*([A-Za-z_]\\w*)\\s*,\\s*(\\d+)\\s*\\)', '\\1[\\2]') + }}{% endif -%} {%- endif %} {% include "Shared/hpp/CHASTE_CLASS_EXPORT" %} #endif // CHASTE_CVODE \ No newline at end of file From 7d554a68b3a9f00043531112b313a72adb1dc4fa Mon Sep 17 00:00:00 2001 From: Joseph Simkin Date: Sun, 15 Feb 2026 16:55:53 +0000 Subject: [PATCH 09/28] Made codegen more robust, handed job of resolving whether to use CPU or GPU functions to template writer rather than python codegen script --- chaste_codegen/_chaste_printer.py | 114 +++++++++--------- chaste_codegen/chaste_model.py | 2 +- chaste_codegen/cvode_chaste_model.py | 30 ++++- .../Cvode/cpp/ComputeDerivedQuantities | 2 +- .../Cvode/cpp/EvaluateAnalyticJacobian | 15 +-- .../EvaluateAnalyticJacobianParts/Mathematics | 1 + .../PackJacobian | 3 + .../PackSparseJacobian | 3 + .../cpp/EvaluateAnalyticJacobianParts/UnpackY | 4 + .../cpp/GetIntracellularCalciumConcentration | 2 +- .../Cvode/kernels/EvaluateAnalyticJacobianGPU | 10 ++ .../kernels/EvaluateSparseAnalyticJacobianGPU | 10 ++ .../templates/Shared/cpp/EvaluateYDerivatives | 36 +----- .../cpp/EvaluateYDerivativesParts/Mathematics | 5 + .../cpp/EvaluateYDerivativesParts/PackDY | 3 + .../cpp/EvaluateYDerivativesParts/UnpackY | 6 + .../VoltageDerivsCPU | 20 +++ .../VoltageDerivsGPU | 13 ++ .../templates/Shared/cpp/parameters | 2 +- .../Shared/kernels/EvaluateYDerivativesGPU | 9 ++ .../templates/backward_euler_functor.cuh | 15 +-- chaste_codegen/templates/cvode_model.cpp | 5 +- chaste_codegen/templates/cvode_model.hpp | 97 +++------------ 23 files changed, 211 insertions(+), 196 deletions(-) create mode 100644 chaste_codegen/templates/Cvode/cpp/EvaluateAnalyticJacobianParts/Mathematics create mode 100644 chaste_codegen/templates/Cvode/cpp/EvaluateAnalyticJacobianParts/PackJacobian create mode 100644 chaste_codegen/templates/Cvode/cpp/EvaluateAnalyticJacobianParts/PackSparseJacobian create mode 100644 chaste_codegen/templates/Cvode/cpp/EvaluateAnalyticJacobianParts/UnpackY create mode 100644 chaste_codegen/templates/Cvode/kernels/EvaluateAnalyticJacobianGPU create mode 100644 chaste_codegen/templates/Cvode/kernels/EvaluateSparseAnalyticJacobianGPU create mode 100644 chaste_codegen/templates/Shared/cpp/EvaluateYDerivativesParts/Mathematics create mode 100644 chaste_codegen/templates/Shared/cpp/EvaluateYDerivativesParts/PackDY create mode 100644 chaste_codegen/templates/Shared/cpp/EvaluateYDerivativesParts/UnpackY create mode 100644 chaste_codegen/templates/Shared/cpp/EvaluateYDerivativesParts/VoltageDerivsCPU create mode 100644 chaste_codegen/templates/Shared/cpp/EvaluateYDerivativesParts/VoltageDerivsGPU create mode 100644 chaste_codegen/templates/Shared/kernels/EvaluateYDerivativesGPU diff --git a/chaste_codegen/_chaste_printer.py b/chaste_codegen/_chaste_printer.py index 74ca9c51c..c4466d3af 100644 --- a/chaste_codegen/_chaste_printer.py +++ b/chaste_codegen/_chaste_printer.py @@ -34,64 +34,69 @@ class ChastePrinter(Printer): """ _function_names = { - 'abs_': 'fabs', - 'acos_': 'acos', - 'cos_': 'cos', - 'exp_': 'exp', - 'sqrt_': 'sqrt', - 'sin_': 'sin', - - 'Abs': 'fabs', - 'acos': 'acos', - 'acosh': 'acosh', - 'asin': 'asin', - 'asinh': 'asinh', - 'atan': 'atan', - 'atan2': 'atan2', - 'atanh': 'atanh', - 'ceiling': 'ceil', - 'cos': 'cos', - 'cosh': 'cosh', - 'exp': 'exp', - 'expm1': 'expm1', - 'factorial': 'factorial', - 'floor': 'floor', - 'log': 'log', - 'log10': 'log10', - 'log1p': 'log1p', - 'log2': 'log2', - 'sin': 'sin', - 'sinh': 'sinh', - 'sqrt': 'sqrt', - 'tan': 'tan', - 'tanh': 'tanh', - - 'sign': 'Signum', - 'GetIntracellularAreaStimulus': 'GetIntracellularAreaStimulus', - 'HeartConfig::Instance()->GetCapacitance': 'HeartConfig::Instance()->GetCapacitance', - 'GetExperimentalVoltageAtTimeT': 'GetExperimentalVoltageAtTimeT' + 'abs_': 'CHASTE_MATH::Abs', + 'acos_': 'CHASTE_MATH::Acos', + 'cos_': 'CHASTE_MATH::Cos', + 'exp_': 'CHASTE_MATH::Exp', + 'sqrt_': 'CHASTE_MATH::Sqrt', + 'sin_': 'CHASTE_MATH::Sin', + + 'Abs': 'CHASTE_MATH::Abs', + 'acos': 'CHASTE_MATH::Acos', + 'acosh': 'CHASTE_MATH::Acosh', + 'asin': 'CHASTE_MATH::Asin', + 'asinh': 'CHASTE_MATH::Asinh', + 'atan': 'CHASTE_MATH::Atan', + 'atan2': 'CHASTE_MATH::Atan2', + 'atanh': 'CHASTE_MATH::Atanh', + 'ceiling': 'CHASTE_MATH::Ceil', + 'cos': 'CHASTE_MATH::Cos', + 'cosh': 'CHASTE_MATH::Cosh', + 'exp': 'CHASTE_MATH::Exp', + 'expm1': 'CHASTE_MATH::Expm1', + 'factorial': 'CHASTE_MATH::Factorial', + 'floor': 'CHASTE_MATH::Floor', + 'log': 'CHASTE_MATH::Log', + 'log10': 'CHASTE_MATH::Log10', + 'log1p': 'CHASTE_MATH::Log1p', + 'log2': 'CHASTE_MATH::Log2', + 'sin': 'CHASTE_MATH::Sin', + 'sinh': 'CHASTE_MATH::Sinh', + 'sqrt': 'CHASTE_MATH::Sqrt', + 'tan': 'CHASTE_MATH::Tan', + 'tanh': 'CHASTE_MATH::Tanh', + + 'sign': 'CHASTE_MATH::Sign', + + # Note: These use the special platform macros we discussed + # because they require different arguments/scopes on CPU vs GPU. + 'GetIntracellularAreaStimulus': 'CHASTE_STIM', + 'HeartConfig::Instance()->GetCapacitance': 'CHASTE_CAP', + 'GetExperimentalVoltageAtTimeT': 'CHASTE_EXP_VOLT' } + _extra_trig_names = { - 'sec': 'cos', - 'csc': 'sin', - 'cot': 'tan', - 'sech': 'cosh', - 'csch': 'sinh', - 'coth': 'tanh', + 'sec': 'CHASTE_MATH::Sec', + 'csc': 'CHASTE_MATH::Csc', + 'cot': 'CHASTE_MATH::Cot', + 'sech': 'CHASTE_MATH::Sech', + 'csch': 'CHASTE_MATH::Csch', + 'coth': 'CHASTE_MATH::Coth', } + _extra_inverse_trig_names = { - 'asec': 'acos', - 'acsc': 'asin', - 'acot': 'atan', - 'asech': 'acosh', - 'acsch': 'asinh', - 'acoth': 'atanh', + 'asec': 'CHASTE_MATH::Asec', + 'acsc': 'CHASTE_MATH::Acsc', + 'acot': 'CHASTE_MATH::Acot', + 'asech': 'CHASTE_MATH::Asech', + 'acsch': 'CHASTE_MATH::Acsch', + 'acoth': 'CHASTE_MATH::Acoth', } _literal_names = { - 'e': 'e', - 'nan': 'NAN', - 'pi': 'M_PI', + 'e': 'CHASTE_MATH::E', + 'nan': 'CHASTE_MATH::NaN', + 'pi': 'CHASTE_MATH::Pi', } def __init__(self, symbol_function=None, derivative_function=None, lookup_table_function=lambda e: None): @@ -132,8 +137,8 @@ def _print_ordinary_pow(self, expr): For C++ printing we need to write ``x**y`` as ``pow(x, y)`` with lowercase ``p``.""" p = precedence(expr) if expr.exp == 0.5: - return 'sqrt(' + self._bracket(expr.base, p) + ')' - return 'pow(' + self._bracket(expr.base, p) + ', ' + self._bracket(expr.exp, p) + ')' + return 'CHASTE_MATH::Sqrt(' + self._bracket(expr.base, p) + ')' + return 'CHASTE_MATH::Pow(' + self._bracket(expr.base, p) + ', ' + self._bracket(expr.exp, p) + ')' def _print_ternary(self, cond, expr): parts = '' @@ -153,7 +158,8 @@ def _print_float(self, expr): if expr.is_integer() and C_MIN_INT < expr < C_MAX_INT: return cxxcode(int(expr), standard='C++11') else: - return cxxcode(float(expr), standard='C++11') + num_str = cxxcode(float(expr), standard='C++11') + return f'CHASTE_CONST({num_str})' def _print_int(self, expr): """ Handles ``ints``s. """ diff --git a/chaste_codegen/chaste_model.py b/chaste_codegen/chaste_model.py index ef458f911..412eb00f2 100644 --- a/chaste_codegen/chaste_model.py +++ b/chaste_codegen/chaste_model.py @@ -292,7 +292,7 @@ def _format_rY_lookup(self, index, var, use_modifier=True): entry = self._format_modifier(var) +\ '->Calc(' + entry + ', ' + self._printer.doprint(self._model.time_variable) + ')' if var == self._model.membrane_voltage_var: - entry = '(mSetVoltageDerivativeToZero ? this->mFixedVoltage : ' + entry + ')' + entry = '(mSetVoltageDerivativeToZero ? CHASTE_THIS(mFixedVoltage) : ' + entry + ')' return entry def _format_state_variables(self): diff --git a/chaste_codegen/cvode_chaste_model.py b/chaste_codegen/cvode_chaste_model.py index 178d4c279..ec0e4c59e 100644 --- a/chaste_codegen/cvode_chaste_model.py +++ b/chaste_codegen/cvode_chaste_model.py @@ -43,8 +43,30 @@ def __init__(self, model, file_name, **kwargs): self._jacobian_equations, self._jacobian_matrix = get_jacobian(self._state_vars, self._derivative_equations) self._formatted_state_vars = self._update_state_vars() - self._vars_for_template['jacobian_equations'], self._vars_for_template['jacobian_entries'] = \ - self._print_jacobian() + jac_eqs, jac_entries = self._print_jacobian() + self._vars_for_template['jacobian_equations'] = jac_eqs + self._vars_for_template['jacobian_entries'] = jac_entries + + # TODO: not sure if we still need this sort or if the entries are guaranteed to be in this order anyway + sorted_jac_entries = sorted(jac_entries, key=lambda entry: (entry['i'], entry['j'])) + + n_vars = len(self._state_vars) + + # Build row_ptr (size n_vars + 1) + row_counts = [0] * n_vars + for entry in sorted_jac_entries: + row_counts[entry['i']] += 1 + row_ptr = [0] + for count in row_counts: + row_ptr.append(row_ptr[-1] + count) + + # Build col_ind (size num_entries) + col_ind = [entry['j'] for entry in sorted_jac_entries] + + self._vars_for_template['sparse_jacobian_entries'] = sorted_jac_entries + self._vars_for_template['sparse_rowptr'] = row_ptr + self._vars_for_template['sparse_colind'] = col_ind + self._vars_for_template['sparse_nnz'] = len(sorted_jac_entries) else: self._vars_for_template['jacobian_equations'], self._vars_for_template['jacobian_entries'] = \ [], Matrix() @@ -151,10 +173,10 @@ def _print_jacobian(self): modifiers_with_defining_eqs=modifiers_with_defining_eqs)) def _print_modifiable_parameters(self, variable): - return 'NV_Ith_S(mParameters, ' + self._modifiable_parameter_lookup[variable] + ')' + return 'CHASTE_VEC_GET(mParameters, ' + self._modifiable_parameter_lookup[variable] + ')' def _format_rY_entry(self, index): - return 'NV_Ith_S(rY, ' + str(index) + ')' + return 'CHASTE_VEC_GET(rY, ' + str(index) + ')' def _update_state_vars(self): jacobian_symbols = set() diff --git a/chaste_codegen/templates/Cvode/cpp/ComputeDerivedQuantities b/chaste_codegen/templates/Cvode/cpp/ComputeDerivedQuantities index 2dde9d741..0a4cc8664 100644 --- a/chaste_codegen/templates/Cvode/cpp/ComputeDerivedQuantities +++ b/chaste_codegen/templates/Cvode/cpp/ComputeDerivedQuantities @@ -25,7 +25,7 @@ {{vector_decl}} dqs = N_VNew_Serial({{derived_quantities|length}}); #endif {%- for quant in derived_quantities %} - NV_Ith_S(dqs, {{loop.index0}}) = {{quant.var}}; + CHASTE_VEC_GET(dqs, {{loop.index0}}) = {{quant.var}}; {%- endfor %} return dqs; }{% endif -%} \ No newline at end of file diff --git a/chaste_codegen/templates/Cvode/cpp/EvaluateAnalyticJacobian b/chaste_codegen/templates/Cvode/cpp/EvaluateAnalyticJacobian index 35445dbd7..554c05232 100644 --- a/chaste_codegen/templates/Cvode/cpp/EvaluateAnalyticJacobian +++ b/chaste_codegen/templates/Cvode/cpp/EvaluateAnalyticJacobian @@ -2,12 +2,9 @@ void {{class_name}}::EvaluateAnalyticJacobian(double {{free_variable.var_name}}, {{vector_decl}} rY, {{vector_decl}} rDY, CHASTE_CVODE_DENSE_MATRIX rJacobian, {{vector_decl}} rTmp1, {{vector_decl}} rTmp2, {{vector_decl}} rTmp3) { - {% for state_var in state_vars %} - {%- if state_var.in_jacobian %}double {{ state_var.var }} = {{state_var.rY_lookup}}; - // Units: {{state_var.units}}; Initial value: {{state_var.initial_value}} - {% endif %}{%- endfor %}{% set method = "EvaluateAnalyticJacobian" %}{% include "Shared/cpp/lookup_table_init" %}{% for equation in jacobian_equations %}const double {{equation.lhs}} = {{equation.rhs}}; - {% endfor %} - // Matrix entries{% for entry in jacobian_entries %} - IJth(rJacobian, {{entry.i}}, {{entry.j}}) = {% if membrane_voltage_index == entry.i %}mSetVoltageDerivativeToZero ? 0.0 : ({{entry.entry}});{%- else %}{{entry.entry}};{%- endif %} - {%- endfor %} - }{% endif -%} \ No newline at end of file + {% include "Cvode/cpp/EvaluateAnalyticJacobianParts/UnpackY" %} + {% set method = "EvaluateAnalyticJacobian" %}{% include "Shared/cpp/lookup_table_init" %} + {% include "Cvode/cpp/EvaluateAnalyticJacobianParts/Mathematics" %} + {% include "Cvode/cpp/EvaluateAnalyticJacobianParts/PackJacobian" %} + } +{% endif -%} \ No newline at end of file diff --git a/chaste_codegen/templates/Cvode/cpp/EvaluateAnalyticJacobianParts/Mathematics b/chaste_codegen/templates/Cvode/cpp/EvaluateAnalyticJacobianParts/Mathematics new file mode 100644 index 000000000..b01bb140f --- /dev/null +++ b/chaste_codegen/templates/Cvode/cpp/EvaluateAnalyticJacobianParts/Mathematics @@ -0,0 +1 @@ +{% for equation in jacobian_equations %}const double {{equation.lhs}} = {{equation.rhs}};{% endfor %} \ No newline at end of file diff --git a/chaste_codegen/templates/Cvode/cpp/EvaluateAnalyticJacobianParts/PackJacobian b/chaste_codegen/templates/Cvode/cpp/EvaluateAnalyticJacobianParts/PackJacobian new file mode 100644 index 000000000..604154998 --- /dev/null +++ b/chaste_codegen/templates/Cvode/cpp/EvaluateAnalyticJacobianParts/PackJacobian @@ -0,0 +1,3 @@ +// Matrix entries{% for entry in jacobian_entries %} +CHASTE_MATRIX_GET(rJacobian, {{entry.i}}, {{entry.j}}) = {% if membrane_voltage_index == entry.i %}mSetVoltageDerivativeToZero ? 0.0 : ({{entry.entry}});{%- else %}{{entry.entry}};{%- endif %} +{%- endfor %} \ No newline at end of file diff --git a/chaste_codegen/templates/Cvode/cpp/EvaluateAnalyticJacobianParts/PackSparseJacobian b/chaste_codegen/templates/Cvode/cpp/EvaluateAnalyticJacobianParts/PackSparseJacobian new file mode 100644 index 000000000..963a8b63e --- /dev/null +++ b/chaste_codegen/templates/Cvode/cpp/EvaluateAnalyticJacobianParts/PackSparseJacobian @@ -0,0 +1,3 @@ +{% for entry in sparse_jacobian_entries -%} +rJacobian[ {{ loop.index0 }} ] = {% if membrane_voltage_index == entry.i %}mSetVoltageDerivativeToZero ? CHASTE_CONST(0.0) : ({{ entry.entry }});{% else %}{{ entry.entry }};{% endif %} +{% endfor -%} \ No newline at end of file diff --git a/chaste_codegen/templates/Cvode/cpp/EvaluateAnalyticJacobianParts/UnpackY b/chaste_codegen/templates/Cvode/cpp/EvaluateAnalyticJacobianParts/UnpackY new file mode 100644 index 000000000..f74200efa --- /dev/null +++ b/chaste_codegen/templates/Cvode/cpp/EvaluateAnalyticJacobianParts/UnpackY @@ -0,0 +1,4 @@ +{% for state_var in state_vars %} +{%- if state_var.in_jacobian %}double {{ state_var.var }} = {{state_var.rY_lookup}}; +// Units: {{state_var.units}}; Initial value: {{state_var.initial_value}} +{% endif %}{%- endfor %} \ No newline at end of file diff --git a/chaste_codegen/templates/Cvode/cpp/GetIntracellularCalciumConcentration b/chaste_codegen/templates/Cvode/cpp/GetIntracellularCalciumConcentration index f7e3ddc3c..0bd22d7f4 100644 --- a/chaste_codegen/templates/Cvode/cpp/GetIntracellularCalciumConcentration +++ b/chaste_codegen/templates/Cvode/cpp/GetIntracellularCalciumConcentration @@ -1,6 +1,6 @@ {%- if use_get_intracellular_calcium_concentration %} double {{class_name}}::GetIntracellularCalciumConcentration() { - return NV_Ith_S(mStateVariables, {{cytosolic_calcium_concentration_index}}); + return CHASTE_VEC_GET(mStateVariables, {{cytosolic_calcium_concentration_index}}); } {% endif %} \ No newline at end of file diff --git a/chaste_codegen/templates/Cvode/kernels/EvaluateAnalyticJacobianGPU b/chaste_codegen/templates/Cvode/kernels/EvaluateAnalyticJacobianGPU new file mode 100644 index 000000000..8f9f2133c --- /dev/null +++ b/chaste_codegen/templates/Cvode/kernels/EvaluateAnalyticJacobianGPU @@ -0,0 +1,10 @@ +{%- if jacobian_equations|length > 0 %} + template + DEVICE + static void EvaluateAnalyticJacobianDevice(ValueType {{free_variable.var_name}}, const ValueType *rY, ValueType *rDY, ValueType *rJacobian, ValueType *rTmp1, ValueType *rTmp2, ValueType *rTmp3, const unsigned nvars, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType *mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim) + { + {% include "Cvode/cpp/EvaluateAnalyticJacobianParts/UnpackY" %} + {% include "Cvode/cpp/EvaluateAnalyticJacobianParts/Mathematics" %} + {% include "Cvode/cpp/EvaluateAnalyticJacobianParts/PackJacobian" %} + } +{% endif -%} \ No newline at end of file diff --git a/chaste_codegen/templates/Cvode/kernels/EvaluateSparseAnalyticJacobianGPU b/chaste_codegen/templates/Cvode/kernels/EvaluateSparseAnalyticJacobianGPU new file mode 100644 index 000000000..f4f264f2b --- /dev/null +++ b/chaste_codegen/templates/Cvode/kernels/EvaluateSparseAnalyticJacobianGPU @@ -0,0 +1,10 @@ +{%- if jacobian_equations|length > 0 %} + template + DEVICE + static void EvaluateSparseAnalyticJacobianDevice(ValueType {{free_variable.var_name}}, const ValueType *rY, ValueType *rDY, ValueType *rJacobian, ValueType *rTmp1, ValueType *rTmp2, ValueType *rTmp3, const unsigned nvars, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType *mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim) + { + {% include "Cvode/cpp/EvaluateAnalyticJacobianParts/UnpackY" %} + {% include "Cvode/cpp/EvaluateAnalyticJacobianParts/Mathematics" %} + {% include "Cvode/cpp/EvaluateAnalyticJacobianParts/PackSparseJacobian" %} + } +{% endif -%} \ No newline at end of file diff --git a/chaste_codegen/templates/Shared/cpp/EvaluateYDerivatives b/chaste_codegen/templates/Shared/cpp/EvaluateYDerivatives index 2a287e381..87e8855ad 100644 --- a/chaste_codegen/templates/Shared/cpp/EvaluateYDerivatives +++ b/chaste_codegen/templates/Shared/cpp/EvaluateYDerivatives @@ -1,34 +1,8 @@ - - void {{class_name}}::EvaluateYDerivatives(double {{free_variable.var_name}}, const {{vector_decl}} rY, {{vector_decl}} rDY) +void {{class_name}}::EvaluateYDerivatives(double {{free_variable.var_name}}, const {{vector_decl}} rY, {{vector_decl}} rDY) { - // Inputs: - // Time units: millisecond - {%- for state_var in state_vars %} - {% if state_var.in_y_deriv %}double {{ state_var.var }} = {{state_var.rY_lookup}}; - // Units: {{state_var.units}}; Initial value: {{state_var.initial_value}} - {%- endif %}{%- endfor %} + {% include "Shared/cpp/EvaluateYDerivativesParts/UnpackY" %} {% set method = "EvaluateYDerivatives" %}{% include "Shared/cpp/lookup_table_init" %} - // Mathematics - {% for deriv in y_derivative_equations %}{%- if deriv.is_voltage%}double {{deriv.lhs}};{%- endif %}{%- endfor %} - {%- for deriv in y_derivative_equations %}{%- if deriv.in_eqs_excl_voltage %} - const double {{deriv.lhs}} = {{deriv.rhs}}; // {{deriv.units}}{%- endif %} - {%- endfor %} - - if (mSetVoltageDerivativeToZero) - { - {% for deriv in y_derivative_equations %}{%- if deriv.is_voltage%}{{deriv.lhs}} = 0.0;{%- endif %}{%- endfor %} - } - else - { - {% for deriv in y_derivative_equations %}{% if not deriv.in_eqs_excl_voltage %}{% if deriv.is_data_clamp_current is defined and deriv.is_data_clamp_current %} // Special handling of data clamp current here - // (we want to save expense of calling the interpolation method if possible.) - double {{ deriv.lhs }} = 0.0; - if (mDataClampIsOn) - { - {{deriv.lhs}} = {{deriv.rhs}}; // {{deriv.units}} - }{% else %} {% if not deriv.is_voltage%}const double {% endif %}{{deriv.lhs}} = {{deriv.rhs}}; // {{deriv.units}}{% endif %} - {% endif %}{%- endfor %}} - {% for deriv in y_derivatives %} - {% if is_cvode is defined and is_cvode %}NV_Ith_S(rDY,{{loop.index0}}){% else %}rDY[{{loop.index0}}]{%endif%} = {{deriv}}; - {%- endfor %} + {% include "Shared/cpp/EvaluateYDerivativesParts/Mathematics" %} + {% include "Shared/cpp/EvaluateYDerivativesParts/VoltageDerivsCPU" %} + {% include "Shared/cpp/EvaluateYDerivativesParts/PackDY" %} } \ No newline at end of file diff --git a/chaste_codegen/templates/Shared/cpp/EvaluateYDerivativesParts/Mathematics b/chaste_codegen/templates/Shared/cpp/EvaluateYDerivativesParts/Mathematics new file mode 100644 index 000000000..9b2e027a2 --- /dev/null +++ b/chaste_codegen/templates/Shared/cpp/EvaluateYDerivativesParts/Mathematics @@ -0,0 +1,5 @@ +// Mathematics +{% for deriv in y_derivative_equations %}{%- if deriv.is_voltage%}double {{deriv.lhs}};{%- endif %}{%- endfor %} +{%- for deriv in y_derivative_equations %}{%- if deriv.in_eqs_excl_voltage %} +const double {{deriv.lhs}} = {{deriv.rhs}}; // {{deriv.units}}{%- endif %} +{%- endfor %} \ No newline at end of file diff --git a/chaste_codegen/templates/Shared/cpp/EvaluateYDerivativesParts/PackDY b/chaste_codegen/templates/Shared/cpp/EvaluateYDerivativesParts/PackDY new file mode 100644 index 000000000..301fdad57 --- /dev/null +++ b/chaste_codegen/templates/Shared/cpp/EvaluateYDerivativesParts/PackDY @@ -0,0 +1,3 @@ +{% for deriv in y_derivatives %} +CHASTE_VEC_GET(rDY, {{loop.index0}}) = {{deriv}}; +{%- endfor %} \ No newline at end of file diff --git a/chaste_codegen/templates/Shared/cpp/EvaluateYDerivativesParts/UnpackY b/chaste_codegen/templates/Shared/cpp/EvaluateYDerivativesParts/UnpackY new file mode 100644 index 000000000..d7d33f2a1 --- /dev/null +++ b/chaste_codegen/templates/Shared/cpp/EvaluateYDerivativesParts/UnpackY @@ -0,0 +1,6 @@ +// Inputs: +// Time units: millisecond +{%- for state_var in state_vars %} +{% if state_var.in_y_deriv %}double {{ state_var.var }} = {{state_var.rY_lookup}}; +// Units: {{state_var.units}}; Initial value: {{state_var.initial_value}} +{%- endif %}{%- endfor %} \ No newline at end of file diff --git a/chaste_codegen/templates/Shared/cpp/EvaluateYDerivativesParts/VoltageDerivsCPU b/chaste_codegen/templates/Shared/cpp/EvaluateYDerivativesParts/VoltageDerivsCPU new file mode 100644 index 000000000..56028e7ff --- /dev/null +++ b/chaste_codegen/templates/Shared/cpp/EvaluateYDerivativesParts/VoltageDerivsCPU @@ -0,0 +1,20 @@ +if (mSetVoltageDerivativeToZero) +{ + {% for deriv in y_derivative_equations %}{%- if deriv.is_voltage %}{{ deriv.lhs }} = 0.0;{%- endif %}{%- endfor %} +} +else +{ + {% for deriv in y_derivative_equations %} + {%- if not deriv.in_eqs_excl_voltage %} + {%- if deriv.is_data_clamp_current is defined and deriv.is_data_clamp_current %} + double {{ deriv.lhs }} = 0.0; + if (mDataClampIsOn) + { + {{ deriv.lhs }} = {{ deriv.rhs }}; + } + {%- else %} + {% if not deriv.is_voltage %}const double {% endif %}{{ deriv.lhs }} = {{ deriv.rhs }}; + {%- endif %} + {%- endif %} + {%- endfor %} +} \ No newline at end of file diff --git a/chaste_codegen/templates/Shared/cpp/EvaluateYDerivativesParts/VoltageDerivsGPU b/chaste_codegen/templates/Shared/cpp/EvaluateYDerivativesParts/VoltageDerivsGPU new file mode 100644 index 000000000..8dd6767f5 --- /dev/null +++ b/chaste_codegen/templates/Shared/cpp/EvaluateYDerivativesParts/VoltageDerivsGPU @@ -0,0 +1,13 @@ +if (mSetVoltageDerivativeToZero) +{ + {% for deriv in y_derivative_equations %}{%- if deriv.is_voltage %}{{ deriv.lhs }} = 0.0;{%- endif %}{%- endfor %} +} +else +{ + {% for deriv in y_derivative_equations %} + {%- if not deriv.in_eqs_excl_voltage %} + {# We treat everything as a standard derivative here, omitting Data Clamp branches #} + {% if not deriv.is_voltage %}const double {% endif %}{{ deriv.lhs }} = {{ deriv.rhs }}; + {%- endif %} + {%- endfor %} +} \ No newline at end of file diff --git a/chaste_codegen/templates/Shared/cpp/parameters b/chaste_codegen/templates/Shared/cpp/parameters index c4d8dedfe..ed2a0eac4 100644 --- a/chaste_codegen/templates/Shared/cpp/parameters +++ b/chaste_codegen/templates/Shared/cpp/parameters @@ -5,4 +5,4 @@ {{mod.modifier}}); {%- endfor %} {%- for param in modifiable_parameters %} - {% if is_cvode is defined and is_cvode %}NV_Ith_S(this->mParameters, {{loop.index0}}){% else %}this->mParameters[{{loop.index0}}]{% endif %} = {{param["initial_value"]}}; // ({{param["comment_name"]}}) [{{param["units"]}}]{%- endfor %} \ No newline at end of file + CHASTE_VEC_GET(this->mParameters, {{loop.index0}}) = {{param["initial_value"]}}; // ({{param["comment_name"]}}) [{{param["units"]}}]{%- endfor %} \ No newline at end of file diff --git a/chaste_codegen/templates/Shared/kernels/EvaluateYDerivativesGPU b/chaste_codegen/templates/Shared/kernels/EvaluateYDerivativesGPU new file mode 100644 index 000000000..c184076b3 --- /dev/null +++ b/chaste_codegen/templates/Shared/kernels/EvaluateYDerivativesGPU @@ -0,0 +1,9 @@ +template +DEVICE +static void EvaluateYDerivativesDevice(ValueType {{free_variable.var_name}}, const ValueType *rY, ValueType *rDY, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType *mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim) +{ + {% include "Shared/cpp/EvaluateYDerivativesParts/UnpackY" %} + {% include "Shared/cpp/EvaluateYDerivativesParts/Mathematics" %} + {% include "Shared/cpp/EvaluateYDerivativesParts/VoltageDerivsGPU" %} + {% include "Shared/cpp/EvaluateYDerivativesParts/PackDY" %} +} \ No newline at end of file diff --git a/chaste_codegen/templates/backward_euler_functor.cuh b/chaste_codegen/templates/backward_euler_functor.cuh index 5383db15b..4ea16735b 100644 --- a/chaste_codegen/templates/backward_euler_functor.cuh +++ b/chaste_codegen/templates/backward_euler_functor.cuh @@ -15,6 +15,7 @@ #include #include "StimulusEvaluatorCuda.hpp" // DeviceStimulusFunctor (+ includes StimulusDescriptor) #include "MathsCustomFunctions.hpp" +#include "ChasteCudaMacros.hpp" template struct {{ class_name }}Functor @@ -23,7 +24,6 @@ struct {{ class_name }}Functor static constexpr unsigned TOTAL_SIZE = {{ state_vars|length }}u; static constexpr unsigned NONLINEAR_SIZE = {{ nonlinear_state_vars|length }}u; - {% set body %} {% include "BE/cpp/FunctorComputeOneStepExceptVoltageHelpers" %} {# (file contains SolveClosedFormVars, FillInitialGuess, ScatterSolution) #} {% include "BE/cpp/FunctorComputeResidual" %} @@ -31,18 +31,9 @@ struct {{ class_name }}Functor {% include "BE/cpp/FunctorComputeJacobian" %} {% include "BE/cpp/FunctorUpdateTransmembranePotential" %} - {% endset %} - {{ body - | replace('this->', '') - | replace('HeartConfig::Instance()->GetCapacitance()', 'capacitance') - | replace('GetIntracellularAreaStimulus', 'stim') - | regex_replace('Signum\\s*\\(([^)]+)\\)', 'SignumDevice(\\1)') - | regex_replace('pow\\s*\\(([^,]+),\\s*([^)]+)\\)', 'PowDevice(\\1, \\2)') - | regex_replace('fabs\\s*\\(([^)]+)\\)', 'AbsDevice(\\1)') - | regex_replace('(?])(-?\\d+\\.\\d+(?:[eE][+-]?\\d+)?)', - 'static_cast(\\1)') - }} }; +#include "ChasteCpuMacros.hpp" + #endif // {% filter upper %}{{class_name}}FUNCTOR_CUH_{% endfilter %} diff --git a/chaste_codegen/templates/cvode_model.cpp b/chaste_codegen/templates/cvode_model.cpp index 9403f5f41..e1a9c65de 100644 --- a/chaste_codegen/templates/cvode_model.cpp +++ b/chaste_codegen/templates/cvode_model.cpp @@ -2,6 +2,7 @@ {% include "Shared/cpp/header_comments" %} {% include "Shared/cpp/includes" %} {% include "Shared/cpp/lookup_tables" %} +#include "ChasteCvodeMacros.hpp" {% include "Shared/cpp/UseCellMLDefaultStimulus" %} {% include "Cvode/cpp/GetIntracellularCalciumConcentration" %} {%- include "Shared/cpp/constructor_declaration" %} @@ -14,5 +15,7 @@ {%- include "Cvode/cpp/EvaluateAnalyticJacobian" %} {%- include "Cvode/cpp/ComputeDerivedQuantities" %} {% include "Shared/cpp/OdeSystemInformation" %} -{% include "Shared/cpp/CHASTE_CLASS_EXPORT" %}#endif // CHASTE_CVODE +{% include "Shared/cpp/CHASTE_CLASS_EXPORT" %} +#include "ChasteCpuMacros.hpp" +#endif // CHASTE_CVODE {%endwith%} \ No newline at end of file diff --git a/chaste_codegen/templates/cvode_model.hpp b/chaste_codegen/templates/cvode_model.hpp index a03c33ef0..b54a7cc06 100644 --- a/chaste_codegen/templates/cvode_model.hpp +++ b/chaste_codegen/templates/cvode_model.hpp @@ -5,100 +5,35 @@ #include "HostDeviceMacros.hpp" #include "StimulusEvaluatorCuda.hpp" #include "MathsCustomFunctions.hpp" +#include "ChasteCvodeMacros.hpp" {% include "Shared/hpp/class_declaration" %} static constexpr unsigned TOTAL_SIZE = {{ state_vars|length }}u; + static constexpr unsigned NNZ = {{ sparse_nnz }}u; + static inline const int sparse_rowptr[] = { {{ sparse_rowptr|join(", ") }} }; + static inline const int sparse_colind[] = { {{ sparse_colind|join(", ") }} }; {% include "Shared/hpp/DefaultStimulus_IntracellularCalciumConcentration" %} {{class_name}}(boost::shared_ptr pOdeSolver /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus); {% include "Shared/hpp/destructor_verify_state_variables_GetIIonic" %} void EvaluateYDerivatives(double {{free_variable.var_name}}, const {{vector_decl}} rY, {{vector_decl}} rDY); - //template - //DEVICE - //static void EvaluateYDerivativesDevice(ValueType {{free_variable.var_name}}, const ValueType* rY, ValueType* rDY, ValueType mSetVoltageDerivativeToZero, ValueType mFixedVoltage, ValueType *mParameters, ValueType capacitance); {% if not lookup_parameters is defined%} - {% set body %} - template - DEVICE - static void EvaluateYDerivativesDevice(ValueType {{free_variable.var_name}}, const ValueType *rY, ValueType *rDY, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType *mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim) - { - // Inputs: - // Time units: millisecond - {%- for state_var in state_vars %} - {% if state_var.in_y_deriv %}ValueType {{ state_var.var }} = {{state_var.rY_lookup}}; - // Units: {{state_var.units}}; Initial value: {{state_var.initial_value}} - {%- endif %}{%- endfor %} - - // Mathematics - {% for deriv in y_derivative_equations %}{%- if deriv.is_voltage%}ValueType {{deriv.lhs}};{%- endif %}{%- endfor %} - {%- for deriv in y_derivative_equations %}{%- if deriv.in_eqs_excl_voltage %} - const ValueType {{deriv.lhs}} = {{deriv.rhs}}; // {{deriv.units}}{%- endif %} - {%- endfor %} - - if (mSetVoltageDerivativeToZero) - { - {% for deriv in y_derivative_equations %}{%- if deriv.is_voltage%}{{deriv.lhs}} = 0.0;{%- endif %}{%- endfor %} - } - else - { - {% for deriv in y_derivative_equations %}{% if not deriv.in_eqs_excl_voltage %}{% if deriv.is_data_clamp_current is defined and deriv.is_data_clamp_current %} // Special handling of data clamp current here - // (we want to save expense of calling the interpolation method if possible.) - ValueType {{ deriv.lhs }} = 0.0; - if (mDataClampIsOn) - { - {{deriv.lhs}} = {{deriv.rhs}}; // {{deriv.units}} - }{% else %} {% if not deriv.is_voltage%}const ValueType {% endif %}{{deriv.lhs}} = {{deriv.rhs}}; // {{deriv.units}}{% endif %} - {% endif %}{%- endfor %}} - {% for deriv in y_derivatives %} - rDY[{{loop.index0}}] = {{deriv}}; - {%- endfor %} - } - {% endset %} - {{ body - | replace('this->', '') - | replace('HeartConfig::Instance()->GetCapacitance()', 'capacitance') - | replace('GetIntracellularAreaStimulus', 'stim') - | regex_replace('Signum\\s*\\(([^)]+)\\)', 'SignumDevice(\\1)') - | regex_replace('pow\\s*\\(([^,]+),\\s*([^)]+)\\)', 'PowDevice(\\1, \\2)') - | regex_replace('fabs\\s*\\(([^)]+)\\)', 'AbsDevice(\\1)') - | regex_replace('(?])(-?\\d+\\.\\d+(?:[eE][+-]?\\d+)?)', - 'static_cast(\\1)') - | regex_replace('NV_Ith_S\\(\\s*([A-Za-z_]\\w*)\\s*,\\s*(\\d+)\\s*\\)', '\\1[\\2]') - }} + #include "ChasteCudaMacros.hpp" + {% include "Shared/kernels/EvaluateYDerivativesGPU"%} + #include "ChasteCvodeMacros.hpp" {%endif%} {%- if derived_quantities|length > 0 %} {{vector_decl}} ComputeDerivedQuantities(double {{free_variable.var_name}}, const {{vector_decl}} & rY); {%- endif %} {%- if jacobian_equations|length > 0 %} void EvaluateAnalyticJacobian(double {{free_variable.var_name}}, {{vector_decl}} rY, {{vector_decl}} rDY, CHASTE_CVODE_DENSE_MATRIX rJacobian, {{vector_decl}} rTmp1, {{vector_decl}} rTmp2, {{vector_decl}} rTmp3); - //template - //DEVICE - //static void EvaluateAnalyticJacobianDevice(ValueType {{free_variable.var_name}}, ValueType *rY, ValueType *rDY, ValueType *rJacobian, ValueType *rTmp1, ValueType *rTmp2, ValueType *rTmp3, unsigned nvars, ValueType mSetVoltageDerivativeToZero, ValueType mFixedVoltage, ValueType *mParameters, ValueType capacitance); - {% if not lookup_parameters is defined%}{% set body %} - template - DEVICE - static void EvaluateAnalyticJacobianDevice(ValueType {{free_variable.var_name}}, const ValueType *rY, ValueType *rDY, ValueType *rJacobian, ValueType *rTmp1, ValueType *rTmp2, ValueType *rTmp3, const unsigned nvars, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType *mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim) - { - {% for state_var in state_vars %} - {%- if state_var.in_jacobian %}ValueType {{ state_var.var }} = {{state_var.rY_lookup}}; - // Units: {{state_var.units}}; Initial value: {{state_var.initial_value}} - {% endif %}{%- endfor %} - {% for equation in jacobian_equations %}const ValueType {{equation.lhs}} = {{equation.rhs}}; - {% endfor %} - // Matrix entries{% for entry in jacobian_entries %} - rJacobian[ {{entry.j}} * nvars + {{entry.i}} ] = {% if membrane_voltage_index == entry.i %}mSetVoltageDerivativeToZero ? 0.0 : ({{entry.entry}});{%- else %}{{entry.entry}};{%- endif %} - {%- endfor %} - } - {% endset %} - {{ body - | replace('this->', '') - | replace('HeartConfig::Instance()->GetCapacitance()', 'capacitance') - | replace('GetIntracellularAreaStimulus', 'stim') - | regex_replace('Signum\\s*\\(([^)]+)\\)', 'SignumDevice(\\1)') - | regex_replace('pow\\s*\\(([^,]+),\\s*([^)]+)\\)', 'PowDevice(\\1, \\2)') - | regex_replace('fabs\\s*\\(([^)]+)\\)', 'AbsDevice(\\1)') - | regex_replace('(?])(-?\\d+\\.\\d+(?:[eE][+-]?\\d+)?)', - 'static_cast(\\1)') - | regex_replace('NV_Ith_S\\(\\s*([A-Za-z_]\\w*)\\s*,\\s*(\\d+)\\s*\\)', '\\1[\\2]') - }}{% endif -%} + {% if not lookup_parameters is defined%} + #include "ChasteCudaMacros.hpp" + {% include "Cvode/kernels/EvaluateAnalyticJacobianGPU" %} + // reference for later macro + // this is how we unpack stuff from the dense gpu jacobian: {# rJacobian[ {{entry.j}} * nvars + {{entry.i}} ] #} + {% include "Cvode/kernels/EvaluateSparseAnalyticJacobianGPU" %} + #include "ChasteCvodeMacros.hpp" + {% endif -%} {%- endif %} {% include "Shared/hpp/CHASTE_CLASS_EXPORT" %} +#include "ChasteCpuMacros.hpp" #endif // CHASTE_CVODE \ No newline at end of file From 3d5680da508b21094194afa051aa6d0baa46197b Mon Sep 17 00:00:00 2001 From: Joseph Simkin Date: Sun, 15 Feb 2026 20:08:20 +0000 Subject: [PATCH 10/28] Factored cvode kernels into new header and unified kernel generation logic in python script --- chaste_codegen/_command_line_script.py | 14 ++++------- chaste_codegen/backward_euler_model.py | 2 +- chaste_codegen/cvode_chaste_model.py | 2 +- .../Cvode/kernels/EvaluateAnalyticJacobianGPU | 2 +- .../kernels/EvaluateSparseAnalyticJacobianGPU | 2 +- .../Shared/kernels/EvaluateYDerivativesGPU | 2 +- ...functor.cuh => backward_euler_kernels.hpp} | 0 .../templates/backward_euler_model.hpp | 9 ++++--- chaste_codegen/templates/cvode_model.hpp | 24 ++++++++----------- .../templates/cvode_model_kernels.hpp | 6 +++++ 10 files changed, 29 insertions(+), 34 deletions(-) rename chaste_codegen/templates/{backward_euler_functor.cuh => backward_euler_kernels.hpp} (100%) create mode 100644 chaste_codegen/templates/cvode_model_kernels.hpp diff --git a/chaste_codegen/_command_line_script.py b/chaste_codegen/_command_line_script.py index 490990a20..b3cc99da1 100644 --- a/chaste_codegen/_command_line_script.py +++ b/chaste_codegen/_command_line_script.py @@ -39,6 +39,7 @@ TRANSLATORS_WITH_MODIFIERS = tuple('--' + t for t in TRANSLATORS if TRANSLATORS[t][3]) +TRANSLATORS_WITH_GPU = ['Cvode', 'BackwardEuler'] # Store extensions we can use and how to use them, based on extension of given outfile EXTENSION_LOOKUP_FROM_OUTFILE = {'.cellml': ['.hpp', '.cpp'], '': ['.hpp', '.cpp'], '.cpp': ['.hpp', '.cpp'], @@ -193,6 +194,9 @@ def process_command_line(): translator_class = translator[0] outfile_path, model_name_from_file, outfile_base, ext = \ get_outfile_parts(args.outfile, args.output_dir, args.cellml_file, translator_class) + # Make sure we generate GPU kernels for models that provide kernel templates + if translator[2] in TRANSLATORS_WITH_GPU: + ext.append('Kernels.hpp') ext = ext if ext else translator_class.DEFAULT_EXTENSIONS @@ -212,21 +216,11 @@ def process_command_line(): if ex is not None: get_files.append(os.path.join(outfile_path, outfile_base + ex)) - # Simple bodge to generate the functor.cuh files for now, can add 'Functor.cuh to ext later perhaps - if translator_class is cg.BackwardEulerModel: - get_files.append(os.path.join(outfile_path, outfile_base + 'Functor.cuh')) - if args.show_outputs: for file in get_files: print(file) else: with translator_class(model, outfile_base, header_ext=ext[0], **vars(args)) as chaste_model: - # Another bodge to extract the file names so we can put it in the includes - try: - chaste_model._vars_for_template.update({"outfile_base": outfile_base}) - except AttributeError: - # _vars_for_template missing: create it - chaste_model._vars_for_template = {"outfile_base": outfile_base} chaste_model.generate_chaste_code() for file, code in zip(get_files, chaste_model.generated_code): diff --git a/chaste_codegen/backward_euler_model.py b/chaste_codegen/backward_euler_model.py index ef01e3f2a..885413908 100644 --- a/chaste_codegen/backward_euler_model.py +++ b/chaste_codegen/backward_euler_model.py @@ -20,7 +20,7 @@ class BackwardEulerModel(ChasteModel): def __init__(self, model, file_name, **kwargs): super().__init__(model, file_name, **kwargs) - self._templates = ['backward_euler_model.hpp', 'backward_euler_model.cpp', 'backward_euler_functor.cuh'] + self._templates = ['backward_euler_model.hpp', 'backward_euler_model.cpp', 'backward_euler_kernels.hpp'] self._vars_for_template['base_class'] = 'AbstractBackwardEulerCardiacCell' self._vars_for_template['model_type'] = 'BackwardEuler' diff --git a/chaste_codegen/cvode_chaste_model.py b/chaste_codegen/cvode_chaste_model.py index ec0e4c59e..d9742705d 100644 --- a/chaste_codegen/cvode_chaste_model.py +++ b/chaste_codegen/cvode_chaste_model.py @@ -20,7 +20,7 @@ def __init__(self, model, file_name, **kwargs): self._use_analytic_jacobian = kwargs.get('use_analytic_jacobian', False) # store if jacobians are needed super().__init__(model, file_name, **kwargs) - self._templates = ['cvode_model.hpp', 'cvode_model.cpp'] + self._templates = ['cvode_model.hpp', 'cvode_model.cpp', 'cvode_model_kernels.hpp'] if self._use_data_clamp: self._vars_for_template['base_class'] = 'AbstractCvodeCellWithDataClamp' diff --git a/chaste_codegen/templates/Cvode/kernels/EvaluateAnalyticJacobianGPU b/chaste_codegen/templates/Cvode/kernels/EvaluateAnalyticJacobianGPU index 8f9f2133c..94906b883 100644 --- a/chaste_codegen/templates/Cvode/kernels/EvaluateAnalyticJacobianGPU +++ b/chaste_codegen/templates/Cvode/kernels/EvaluateAnalyticJacobianGPU @@ -1,7 +1,7 @@ {%- if jacobian_equations|length > 0 %} template DEVICE - static void EvaluateAnalyticJacobianDevice(ValueType {{free_variable.var_name}}, const ValueType *rY, ValueType *rDY, ValueType *rJacobian, ValueType *rTmp1, ValueType *rTmp2, ValueType *rTmp3, const unsigned nvars, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType *mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim) + void {{class_name}}::EvaluateAnalyticJacobianDevice(ValueType {{free_variable.var_name}}, const ValueType *rY, ValueType *rDY, ValueType *rJacobian, ValueType *rTmp1, ValueType *rTmp2, ValueType *rTmp3, const unsigned nvars, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType *mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim) { {% include "Cvode/cpp/EvaluateAnalyticJacobianParts/UnpackY" %} {% include "Cvode/cpp/EvaluateAnalyticJacobianParts/Mathematics" %} diff --git a/chaste_codegen/templates/Cvode/kernels/EvaluateSparseAnalyticJacobianGPU b/chaste_codegen/templates/Cvode/kernels/EvaluateSparseAnalyticJacobianGPU index f4f264f2b..2dc8beea4 100644 --- a/chaste_codegen/templates/Cvode/kernels/EvaluateSparseAnalyticJacobianGPU +++ b/chaste_codegen/templates/Cvode/kernels/EvaluateSparseAnalyticJacobianGPU @@ -1,7 +1,7 @@ {%- if jacobian_equations|length > 0 %} template DEVICE - static void EvaluateSparseAnalyticJacobianDevice(ValueType {{free_variable.var_name}}, const ValueType *rY, ValueType *rDY, ValueType *rJacobian, ValueType *rTmp1, ValueType *rTmp2, ValueType *rTmp3, const unsigned nvars, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType *mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim) + void {{class_name}}::EvaluateSparseAnalyticJacobianDevice(ValueType {{free_variable.var_name}}, const ValueType *rY, ValueType *rDY, ValueType *rJacobian, ValueType *rTmp1, ValueType *rTmp2, ValueType *rTmp3, const unsigned nvars, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType *mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim) { {% include "Cvode/cpp/EvaluateAnalyticJacobianParts/UnpackY" %} {% include "Cvode/cpp/EvaluateAnalyticJacobianParts/Mathematics" %} diff --git a/chaste_codegen/templates/Shared/kernels/EvaluateYDerivativesGPU b/chaste_codegen/templates/Shared/kernels/EvaluateYDerivativesGPU index c184076b3..3f1908634 100644 --- a/chaste_codegen/templates/Shared/kernels/EvaluateYDerivativesGPU +++ b/chaste_codegen/templates/Shared/kernels/EvaluateYDerivativesGPU @@ -1,6 +1,6 @@ template DEVICE -static void EvaluateYDerivativesDevice(ValueType {{free_variable.var_name}}, const ValueType *rY, ValueType *rDY, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType *mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim) +void {{class_name}}::EvaluateYDerivativesDevice(ValueType {{free_variable.var_name}}, const ValueType *rY, ValueType *rDY, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType *mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim) { {% include "Shared/cpp/EvaluateYDerivativesParts/UnpackY" %} {% include "Shared/cpp/EvaluateYDerivativesParts/Mathematics" %} diff --git a/chaste_codegen/templates/backward_euler_functor.cuh b/chaste_codegen/templates/backward_euler_kernels.hpp similarity index 100% rename from chaste_codegen/templates/backward_euler_functor.cuh rename to chaste_codegen/templates/backward_euler_kernels.hpp diff --git a/chaste_codegen/templates/backward_euler_model.hpp b/chaste_codegen/templates/backward_euler_model.hpp index b98645c4e..9a48bba98 100644 --- a/chaste_codegen/templates/backward_euler_model.hpp +++ b/chaste_codegen/templates/backward_euler_model.hpp @@ -1,13 +1,12 @@ {% include "Shared/hpp/header_comments" %} {% include "Shared/hpp/includes" %} #include "{{base_class}}.hpp" -{% if not outfile_base.endswith('Opt') %}#include "{{ outfile_base }}Functor.cuh"{% endif %} -{% if not outfile_base.endswith('Opt') %}#include "SolverBundles.cuh"{% endif %} - +{% if not lookup_parameters is defined %}#include "{{ file_name }}Kernels.hpp" +#include "SolverBundles.cuh"{% endif %} {% with %}{% set base_class = base_class ~ "<"~nonlinear_state_vars|length~">" %}{% include "Shared/hpp/class_declaration" %}{% endwith %} public: - {% if not outfile_base.endswith('Opt') %}template using CellFunctor = {{class_name}}Functor;{% endif %} - {% if not outfile_base.endswith('Opt') %}template using Bundle = BackwardEulerBundle, ValueType>;{% endif %} + {% if not lookup_parameters is defined %}template using CellFunctor = {{class_name}}Functor; + template using Bundle = BackwardEulerBundle, ValueType>;{% endif %} {% include "Shared/hpp/DefaultStimulus_IntracellularCalciumConcentration" %} {{class_name}}(boost::shared_ptr /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus); {% include "Shared/hpp/destructor_verify_state_variables_GetIIonic" %} diff --git a/chaste_codegen/templates/cvode_model.hpp b/chaste_codegen/templates/cvode_model.hpp index b54a7cc06..9dc887278 100644 --- a/chaste_codegen/templates/cvode_model.hpp +++ b/chaste_codegen/templates/cvode_model.hpp @@ -3,8 +3,8 @@ {% include "Shared/hpp/includes" %} #include "{{base_class}}.hpp" #include "HostDeviceMacros.hpp" -#include "StimulusEvaluatorCuda.hpp" #include "MathsCustomFunctions.hpp" +#include "StimulusEvaluatorCuda.hpp" #include "ChasteCvodeMacros.hpp" {% include "Shared/hpp/class_declaration" %} static constexpr unsigned TOTAL_SIZE = {{ state_vars|length }}u; @@ -15,24 +15,20 @@ {{class_name}}(boost::shared_ptr pOdeSolver /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus); {% include "Shared/hpp/destructor_verify_state_variables_GetIIonic" %} void EvaluateYDerivatives(double {{free_variable.var_name}}, const {{vector_decl}} rY, {{vector_decl}} rDY); - {% if not lookup_parameters is defined%} - #include "ChasteCudaMacros.hpp" - {% include "Shared/kernels/EvaluateYDerivativesGPU"%} - #include "ChasteCvodeMacros.hpp" - {%endif%} + {% if not lookup_parameters is defined%}template + DEVICE + static void EvaluateYDerivativesDevice(ValueType {{free_variable.var_name}}, const ValueType* rY, ValueType* rDY, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType* mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim);{% endif %} {%- if derived_quantities|length > 0 %} {{vector_decl}} ComputeDerivedQuantities(double {{free_variable.var_name}}, const {{vector_decl}} & rY); {%- endif %} {%- if jacobian_equations|length > 0 %} void EvaluateAnalyticJacobian(double {{free_variable.var_name}}, {{vector_decl}} rY, {{vector_decl}} rDY, CHASTE_CVODE_DENSE_MATRIX rJacobian, {{vector_decl}} rTmp1, {{vector_decl}} rTmp2, {{vector_decl}} rTmp3); - {% if not lookup_parameters is defined%} - #include "ChasteCudaMacros.hpp" - {% include "Cvode/kernels/EvaluateAnalyticJacobianGPU" %} - // reference for later macro - // this is how we unpack stuff from the dense gpu jacobian: {# rJacobian[ {{entry.j}} * nvars + {{entry.i}} ] #} - {% include "Cvode/kernels/EvaluateSparseAnalyticJacobianGPU" %} - #include "ChasteCvodeMacros.hpp" - {% endif -%} + {% if not lookup_parameters is defined %}template + DEVICE + static void EvaluateAnalyticJacobianDevice(ValueType {{free_variable.var_name}}, const ValueType *rY, ValueType *rDY, ValueType *rJacobian, ValueType *rTmp1, ValueType *rTmp2, ValueType *rTmp3, const unsigned nvars, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType *mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim); + template + DEVICE + static void EvaluateSparseAnalyticJacobianDevice(ValueType {{free_variable.var_name}}, const ValueType *rY, ValueType *rDY, ValueType *rJacobian, ValueType *rTmp1, ValueType *rTmp2, ValueType *rTmp3, const unsigned nvars, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType *mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim);{% endif %} {%- endif %} {% include "Shared/hpp/CHASTE_CLASS_EXPORT" %} #include "ChasteCpuMacros.hpp" diff --git a/chaste_codegen/templates/cvode_model_kernels.hpp b/chaste_codegen/templates/cvode_model_kernels.hpp new file mode 100644 index 000000000..efca93dbd --- /dev/null +++ b/chaste_codegen/templates/cvode_model_kernels.hpp @@ -0,0 +1,6 @@ +#include "{{file_name}}{{header_ext}}" +#include "ChasteCudaMacros.hpp" +{% include "Shared/kernels/EvaluateYDerivativesGPU"%} +{% include "Cvode/kernels/EvaluateAnalyticJacobianGPU" %} +{% include "Cvode/kernels/EvaluateSparseAnalyticJacobianGPU" %} +#include "ChasteCpuMacros.hpp" \ No newline at end of file From a46d68ede3216d3f1cbe5f7cc277e2dd5c22762b Mon Sep 17 00:00:00 2001 From: Joseph Simkin Date: Wed, 25 Feb 2026 11:01:56 +0000 Subject: [PATCH 11/28] Fixed and refactored codegen to emit kernels as members of the CPU cell instead of emitting a functor for each cpu cell --- chaste_codegen/_command_line_script.py | 6 ++- .../ComputeJacobianDevice} | 9 ++-- .../ComputeOneStepExceptVoltageDevice} | 23 +++++---- .../ComputeResidualDevice} | 9 ++-- .../UpdateTransmembranePotentialDevice} | 5 +- ...bianGPU => EvaluateAnalyticJacobianDevice} | 0 ...U => EvaluateSparseAnalyticJacobianDevice} | 0 ...ivativesGPU => EvaluateYDerivativesDevice} | 0 .../templates/backward_euler_kernels.hpp | 30 +++++------- .../templates/backward_euler_model.hpp | 48 ++++++++++++++++--- .../templates/cvode_model_kernels.hpp | 6 +-- 11 files changed, 88 insertions(+), 48 deletions(-) rename chaste_codegen/templates/BE/{cpp/FunctorComputeJacobian => kernels/ComputeJacobianDevice} (82%) rename chaste_codegen/templates/BE/{cpp/FunctorComputeOneStepExceptVoltageHelpers => kernels/ComputeOneStepExceptVoltageDevice} (68%) rename chaste_codegen/templates/BE/{cpp/FunctorComputeResidual => kernels/ComputeResidualDevice} (84%) rename chaste_codegen/templates/BE/{cpp/FunctorUpdateTransmembranePotential => kernels/UpdateTransmembranePotentialDevice} (90%) rename chaste_codegen/templates/Cvode/kernels/{EvaluateAnalyticJacobianGPU => EvaluateAnalyticJacobianDevice} (100%) rename chaste_codegen/templates/Cvode/kernels/{EvaluateSparseAnalyticJacobianGPU => EvaluateSparseAnalyticJacobianDevice} (100%) rename chaste_codegen/templates/Shared/kernels/{EvaluateYDerivativesGPU => EvaluateYDerivativesDevice} (100%) diff --git a/chaste_codegen/_command_line_script.py b/chaste_codegen/_command_line_script.py index b3cc99da1..4c4f4144a 100644 --- a/chaste_codegen/_command_line_script.py +++ b/chaste_codegen/_command_line_script.py @@ -194,12 +194,14 @@ def process_command_line(): translator_class = translator[0] outfile_path, model_name_from_file, outfile_base, ext = \ get_outfile_parts(args.outfile, args.output_dir, args.cellml_file, translator_class) + + # Must make a copy of ext so that if we modify the extensions here, this is the only translator that gets those modifications + ext = list(ext) if ext else list(translator_class.DEFAULT_EXTENSIONS) + # Make sure we generate GPU kernels for models that provide kernel templates if translator[2] in TRANSLATORS_WITH_GPU: ext.append('Kernels.hpp') - ext = ext if ext else translator_class.DEFAULT_EXTENSIONS - if args.cls_name is not None: args.class_name = args.cls_name else: diff --git a/chaste_codegen/templates/BE/cpp/FunctorComputeJacobian b/chaste_codegen/templates/BE/kernels/ComputeJacobianDevice similarity index 82% rename from chaste_codegen/templates/BE/cpp/FunctorComputeJacobian rename to chaste_codegen/templates/BE/kernels/ComputeJacobianDevice index 684840b90..cd25397ce 100644 --- a/chaste_codegen/templates/BE/cpp/FunctorComputeJacobian +++ b/chaste_codegen/templates/BE/kernels/ComputeJacobianDevice @@ -1,9 +1,10 @@ {%- if nonlinear_state_vars|length > 0 %} -__device__ -static void ComputeJacobian(ValueType {{free_variable.var_name}}, - const ValueType rCurrentGuess[NONLINEAR_SIZE], +template +DEVICE +void {{class_name}}::ComputeJacobianDevice(ValueType {{free_variable.var_name}}, + const ValueType rCurrentGuess[{{class_name}}::NONLINEAR_SIZE], const ValueType rY[], - ValueType rJacobian[NONLINEAR_SIZE][NONLINEAR_SIZE], + ValueType rJacobian[{{class_name}}::NONLINEAR_SIZE][{{class_name}}::NONLINEAR_SIZE], ValueType mDt, const ValueType mParameters[], bool mSetVoltageDerivativeToZero, diff --git a/chaste_codegen/templates/BE/cpp/FunctorComputeOneStepExceptVoltageHelpers b/chaste_codegen/templates/BE/kernels/ComputeOneStepExceptVoltageDevice similarity index 68% rename from chaste_codegen/templates/BE/cpp/FunctorComputeOneStepExceptVoltageHelpers rename to chaste_codegen/templates/BE/kernels/ComputeOneStepExceptVoltageDevice index 57280fea1..ff34a8d0f 100644 --- a/chaste_codegen/templates/BE/cpp/FunctorComputeOneStepExceptVoltageHelpers +++ b/chaste_codegen/templates/BE/kernels/ComputeOneStepExceptVoltageDevice @@ -1,6 +1,7 @@ /* Apply all closed-form backward-Euler updates for the "linear" gating variables */ -__device__ -static void SolveClosedFormVars(ValueType rY[TOTAL_SIZE], +template +DEVICE +void {{class_name}}::SolveClosedFormVarsDevice(ValueType rY[{{class_name}}::TOTAL_SIZE], ValueType mDt, const ValueType mParameters[], bool mSetVoltageDerivativeToZero, @@ -20,10 +21,11 @@ static void SolveClosedFormVars(ValueType rY[TOTAL_SIZE], {%- endfor %} } -/* Gather non-linear variables from state and put them into guess for Newton solve */ -__device__ -static void FillInitialGuess(ValueType _guess[NONLINEAR_SIZE], - const ValueType rY[TOTAL_SIZE]) +{%- if nonlinear_state_vars|length > 0 %}/* Gather non-linear variables from state and put them into guess for Newton solve */ +template +DEVICE +void {{class_name}}::FillInitialGuessDevice(ValueType _guess[{{class_name}}::NONLINEAR_SIZE], + const ValueType rY[{{class_name}}::TOTAL_SIZE]) { {% if nonlinear_state_vars|length > 0 %} {# We do not need this if really, if it is empty we just get no op#} {% for state_var in nonlinear_state_vars %} @@ -33,13 +35,14 @@ static void FillInitialGuess(ValueType _guess[NONLINEAR_SIZE], } /* After Newton solve, scatter the solved nonlinear variables back into y */ -__device__ -static void ScatterSolution(const ValueType _guess[NONLINEAR_SIZE], - ValueType rY[TOTAL_SIZE]) +template +DEVICE +void {{class_name}}::ScatterSolutionDevice(const ValueType _guess[{{class_name}}::NONLINEAR_SIZE], + ValueType rY[{{class_name}}::TOTAL_SIZE]) { {% if nonlinear_state_vars|length > 0 %} {% for state_var in nonlinear_state_vars %} rY[{{ state_var.state_var_index }}] = _guess[{{ loop.index0 }}]; {% endfor %} {% endif %} -} +}{% endif %} diff --git a/chaste_codegen/templates/BE/cpp/FunctorComputeResidual b/chaste_codegen/templates/BE/kernels/ComputeResidualDevice similarity index 84% rename from chaste_codegen/templates/BE/cpp/FunctorComputeResidual rename to chaste_codegen/templates/BE/kernels/ComputeResidualDevice index 0b2ccba5c..295b33e05 100644 --- a/chaste_codegen/templates/BE/cpp/FunctorComputeResidual +++ b/chaste_codegen/templates/BE/kernels/ComputeResidualDevice @@ -1,10 +1,11 @@ {%- if nonlinear_state_vars|length > 0 %} /* Compute residual of non-linear system for the current guess */ -__device__ -static void ComputeResidual(ValueType {{free_variable.var_name}}, - const ValueType rCurrentGuess[NONLINEAR_SIZE], +template +DEVICE +void {{class_name}}::ComputeResidualDevice(ValueType {{free_variable.var_name}}, + const ValueType rCurrentGuess[{{class_name}}::NONLINEAR_SIZE], const ValueType rY[], - ValueType rResidual[NONLINEAR_SIZE], + ValueType rResidual[{{class_name}}::NONLINEAR_SIZE], ValueType mDt, const ValueType mParameters[], bool mSetVoltageDerivativeToZero, diff --git a/chaste_codegen/templates/BE/cpp/FunctorUpdateTransmembranePotential b/chaste_codegen/templates/BE/kernels/UpdateTransmembranePotentialDevice similarity index 90% rename from chaste_codegen/templates/BE/cpp/FunctorUpdateTransmembranePotential rename to chaste_codegen/templates/BE/kernels/UpdateTransmembranePotentialDevice index 7c9d887a5..aff58c4cb 100644 --- a/chaste_codegen/templates/BE/cpp/FunctorUpdateTransmembranePotential +++ b/chaste_codegen/templates/BE/kernels/UpdateTransmembranePotentialDevice @@ -1,6 +1,7 @@ /* Update transmembrane potential (GPU) */ -__device__ -static void UpdateTransmembranePotential(ValueType {{free_variable.var_name}}, +template +DEVICE +void {{class_name}}::UpdateTransmembranePotentialDevice(ValueType {{free_variable.var_name}}, ValueType rY[], ValueType mDt, const ValueType mParameters[], diff --git a/chaste_codegen/templates/Cvode/kernels/EvaluateAnalyticJacobianGPU b/chaste_codegen/templates/Cvode/kernels/EvaluateAnalyticJacobianDevice similarity index 100% rename from chaste_codegen/templates/Cvode/kernels/EvaluateAnalyticJacobianGPU rename to chaste_codegen/templates/Cvode/kernels/EvaluateAnalyticJacobianDevice diff --git a/chaste_codegen/templates/Cvode/kernels/EvaluateSparseAnalyticJacobianGPU b/chaste_codegen/templates/Cvode/kernels/EvaluateSparseAnalyticJacobianDevice similarity index 100% rename from chaste_codegen/templates/Cvode/kernels/EvaluateSparseAnalyticJacobianGPU rename to chaste_codegen/templates/Cvode/kernels/EvaluateSparseAnalyticJacobianDevice diff --git a/chaste_codegen/templates/Shared/kernels/EvaluateYDerivativesGPU b/chaste_codegen/templates/Shared/kernels/EvaluateYDerivativesDevice similarity index 100% rename from chaste_codegen/templates/Shared/kernels/EvaluateYDerivativesGPU rename to chaste_codegen/templates/Shared/kernels/EvaluateYDerivativesDevice diff --git a/chaste_codegen/templates/backward_euler_kernels.hpp b/chaste_codegen/templates/backward_euler_kernels.hpp index 4ea16735b..b8d6d4a83 100644 --- a/chaste_codegen/templates/backward_euler_kernels.hpp +++ b/chaste_codegen/templates/backward_euler_kernels.hpp @@ -1,5 +1,5 @@ -#ifndef {% filter upper %}{{class_name}}FUNCTOR_CUH_{% endfilter %} -#define {% filter upper %}{{class_name}}FUNCTOR_CUH_{% endfilter %} +#ifndef {% filter upper %}{{class_name}}KERNELS_HPP_{% endfilter %} +#define {% filter upper %}{{class_name}}KERNELS_HPP_{% endfilter %} //! @file //! @@ -13,27 +13,23 @@ //! //! #include -#include "StimulusEvaluatorCuda.hpp" // DeviceStimulusFunctor (+ includes StimulusDescriptor) +#include "{{file_name}}{{header_ext}}" +// This file requires the following includes: +// #include MathsCustomFunctions.hpp +// StimulusEvaluatorCuda.hpp +// + #include "MathsCustomFunctions.hpp" #include "ChasteCudaMacros.hpp" -template -struct {{ class_name }}Functor -{ - using ValueType_t = ValueType; - static constexpr unsigned TOTAL_SIZE = {{ state_vars|length }}u; - static constexpr unsigned NONLINEAR_SIZE = {{ nonlinear_state_vars|length }}u; - - {% include "BE/cpp/FunctorComputeOneStepExceptVoltageHelpers" %} {# (file contains SolveClosedFormVars, FillInitialGuess, ScatterSolution) #} - - {% include "BE/cpp/FunctorComputeResidual" %} +{% include "BE/kernels/ComputeOneStepExceptVoltageDevice" %} {# (file contains SolveClosedFormVars, FillInitialGuess, ScatterSolution) #} - {% include "BE/cpp/FunctorComputeJacobian" %} +{%- if nonlinear_state_vars|length > 0 %}{% include "BE/kernels/ComputeResidualDevice" %} - {% include "BE/cpp/FunctorUpdateTransmembranePotential" %} +{% include "BE/kernels/ComputeJacobianDevice" %}{% endif -%} -}; +{% include "BE/kernels/UpdateTransmembranePotentialDevice" %} #include "ChasteCpuMacros.hpp" -#endif // {% filter upper %}{{class_name}}FUNCTOR_CUH_{% endfilter %} +#endif // {% filter upper %}{{class_name}}KERNELS_HPP_{% endfilter %} diff --git a/chaste_codegen/templates/backward_euler_model.hpp b/chaste_codegen/templates/backward_euler_model.hpp index 9a48bba98..202c91083 100644 --- a/chaste_codegen/templates/backward_euler_model.hpp +++ b/chaste_codegen/templates/backward_euler_model.hpp @@ -1,19 +1,55 @@ {% include "Shared/hpp/header_comments" %} {% include "Shared/hpp/includes" %} #include "{{base_class}}.hpp" -{% if not lookup_parameters is defined %}#include "{{ file_name }}Kernels.hpp" -#include "SolverBundles.cuh"{% endif %} +{% if not lookup_parameters is defined %}//#include "BackwardEulerKernels.cuh" +template +class BackwardEulerKernelLauncher; // We forward declare so that we do not expose threadIdx and blockIdx to c++ compiler +#include "StimulusEvaluatorCuda.hpp" // DeviceStimulusFunctor (+ includes StimulusDescriptor){% endif %} {% with %}{% set base_class = base_class ~ "<"~nonlinear_state_vars|length~">" %}{% include "Shared/hpp/class_declaration" %}{% endwith %} public: - {% if not lookup_parameters is defined %}template using CellFunctor = {{class_name}}Functor; - template using Bundle = BackwardEulerBundle, ValueType>;{% endif %} + {% if not lookup_parameters is defined %}template using SolverKernelLauncher = BackwardEulerKernelLauncher<{{class_name}}, ValueType>; + static constexpr unsigned TOTAL_SIZE = {{ state_vars|length }}u; + static constexpr unsigned NONLINEAR_SIZE = {{ nonlinear_state_vars|length }}u;{% endif %} {% include "Shared/hpp/DefaultStimulus_IntracellularCalciumConcentration" %} {{class_name}}(boost::shared_ptr /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus); {% include "Shared/hpp/destructor_verify_state_variables_GetIIonic" %} {%- if nonlinear_state_vars|length > 0 %}void ComputeResidual(double {{free_variable.var_name}}, const double rCurrentGuess[{{nonlinear_state_vars|length}}], double rResidual[{{nonlinear_state_vars|length}}]); - void ComputeJacobian(double {{free_variable.var_name}}, const double rCurrentGuess[{{nonlinear_state_vars|length}}], double rJacobian[{{nonlinear_state_vars|length}}][{{nonlinear_state_vars|length}}]);{% endif -%} + void ComputeJacobian(double {{free_variable.var_name}}, const double rCurrentGuess[{{nonlinear_state_vars|length}}], double rJacobian[{{nonlinear_state_vars|length}}][{{nonlinear_state_vars|length}}]); + + {% if not lookup_parameters is defined %}template + DEVICE + static void ComputeResidualDevice(ValueType {{free_variable.var_name}}, const ValueType rCurrentGuess[NONLINEAR_SIZE], const ValueType rY[], ValueType rResidual[NONLINEAR_SIZE], ValueType mDt, const ValueType mParameters[], bool mSetVoltageDerivativeToZero, ValueType mFixedVoltage, ValueType capacitance, const DeviceStimulusFunctor stim); + + template + DEVICE + static void ComputeJacobianDevice(ValueType {{free_variable.var_name}}, const ValueType rCurrentGuess[NONLINEAR_SIZE], const ValueType rY[], ValueType rJacobian[NONLINEAR_SIZE][NONLINEAR_SIZE], ValueType mDt, const ValueType mParameters[], bool mSetVoltageDerivativeToZero, ValueType mFixedVoltage, ValueType capacitance, const DeviceStimulusFunctor stim);{% endif %} + +{% endif -%} + + {% if not lookup_parameters is defined %}template + DEVICE + static void UpdateTransmembranePotentialDevice(ValueType {{free_variable.var_name}}, ValueType rY[], ValueType mDt, const ValueType mParameters[], bool mSetVoltageDerivativeToZero, ValueType mFixedVoltage, DeviceStimulusFunctor stim, ValueType capacitance); + + template + DEVICE + static void SolveClosedFormVarsDevice(ValueType rY[TOTAL_SIZE], ValueType mDt, const ValueType mParameters[], bool mSetVoltageDerivativeToZero, ValueType mFixedVoltage, ValueType capacitance); + + {%- if nonlinear_state_vars|length > 0 %}template + DEVICE + static void FillInitialGuessDevice(ValueType _guess[NONLINEAR_SIZE], const ValueType rY[TOTAL_SIZE]); + + template + DEVICE + static void ScatterSolutionDevice(const ValueType _guess[NONLINEAR_SIZE], ValueType rY[TOTAL_SIZE]);{% endif %}{% endif %} + protected: void UpdateTransmembranePotential(double {{free_variable.var_name}}); void ComputeOneStepExceptVoltage(double {{free_variable.var_name}}); {% include "Shared/hpp/ComputeDerivedQuantities" %} -{% include "Shared/hpp/CHASTE_CLASS_EXPORT" %} \ No newline at end of file +{% include "Shared/hpp/CHASTE_CLASS_EXPORT" %} + + +{% if not lookup_parameters is defined %}#include "{{ file_name }}Kernels.hpp" +#ifdef __CUDACC__ + #include "BackwardEulerKernels.hpp" +#endif{% endif %} \ No newline at end of file diff --git a/chaste_codegen/templates/cvode_model_kernels.hpp b/chaste_codegen/templates/cvode_model_kernels.hpp index efca93dbd..1e94ac040 100644 --- a/chaste_codegen/templates/cvode_model_kernels.hpp +++ b/chaste_codegen/templates/cvode_model_kernels.hpp @@ -1,6 +1,6 @@ #include "{{file_name}}{{header_ext}}" #include "ChasteCudaMacros.hpp" -{% include "Shared/kernels/EvaluateYDerivativesGPU"%} -{% include "Cvode/kernels/EvaluateAnalyticJacobianGPU" %} -{% include "Cvode/kernels/EvaluateSparseAnalyticJacobianGPU" %} +{% include "Shared/kernels/EvaluateYDerivativesDevice"%} +{% include "Cvode/kernels/EvaluateAnalyticJacobianDevice" %} +{% include "Cvode/kernels/EvaluateSparseAnalyticJacobianDevice" %} #include "ChasteCpuMacros.hpp" \ No newline at end of file From b32aca6d8c871d3311ec7f610fc665863d9f5a15 Mon Sep 17 00:00:00 2001 From: Joseph Simkin Date: Thu, 26 Feb 2026 16:10:38 +0000 Subject: [PATCH 12/28] Fixed includes and factored shared logic in kernel templates --- chaste_codegen/templates/Shared/hpp/includes | 3 +- .../templates/Shared/kernels/footer | 2 ++ .../templates/Shared/kernels/header_comments | 14 ++++++++++ .../templates/Shared/kernels/includes | 1 + .../templates/backward_euler_kernels.hpp | 28 ++----------------- .../templates/backward_euler_model.hpp | 7 +++-- chaste_codegen/templates/cvode_model.hpp | 11 ++++++-- .../templates/cvode_model_kernels.hpp | 9 ++++-- 8 files changed, 43 insertions(+), 32 deletions(-) create mode 100644 chaste_codegen/templates/Shared/kernels/footer create mode 100644 chaste_codegen/templates/Shared/kernels/header_comments create mode 100644 chaste_codegen/templates/Shared/kernels/includes diff --git a/chaste_codegen/templates/Shared/hpp/includes b/chaste_codegen/templates/Shared/hpp/includes index a725d1a9f..e08b48149 100644 --- a/chaste_codegen/templates/Shared/hpp/includes +++ b/chaste_codegen/templates/Shared/hpp/includes @@ -5,4 +5,5 @@ #include "AbstractModifier.hpp"{%- endif %} {%- if dynamically_loadable %} #include "AbstractDynamicallyLoadableEntity.hpp"{%- endif %} -#include "AbstractStimulusFunction.hpp" \ No newline at end of file +#include "AbstractStimulusFunction.hpp" +#include "StimulusEvaluatorCuda.hpp" \ No newline at end of file diff --git a/chaste_codegen/templates/Shared/kernels/footer b/chaste_codegen/templates/Shared/kernels/footer new file mode 100644 index 000000000..2fa70a5d6 --- /dev/null +++ b/chaste_codegen/templates/Shared/kernels/footer @@ -0,0 +1,2 @@ +#include "ChasteCpuMacros.hpp" +#endif // {% filter upper %}{{class_name}}KERNELS_HPP_{% endfilter %} \ No newline at end of file diff --git a/chaste_codegen/templates/Shared/kernels/header_comments b/chaste_codegen/templates/Shared/kernels/header_comments new file mode 100644 index 000000000..7f1a930a1 --- /dev/null +++ b/chaste_codegen/templates/Shared/kernels/header_comments @@ -0,0 +1,14 @@ +#ifndef {% filter upper %}{{class_name}}KERNELS_HPP_{% endfilter %} +#define {% filter upper %}{{class_name}}KERNELS_HPP_{% endfilter %} + +//! @file +//! +//! This source file was generated from CellML by chaste_codegen version {{converter_version}} +//! +//! Model: {{model_name}} +//! +//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen +//! (translator: chaste_codegen, model type: {{model_type}}) +//! on {{generation_date}} +//! +//! \ No newline at end of file diff --git a/chaste_codegen/templates/Shared/kernels/includes b/chaste_codegen/templates/Shared/kernels/includes new file mode 100644 index 000000000..426fdba43 --- /dev/null +++ b/chaste_codegen/templates/Shared/kernels/includes @@ -0,0 +1 @@ +#include "MathsCustomFunctions.hpp" \ No newline at end of file diff --git a/chaste_codegen/templates/backward_euler_kernels.hpp b/chaste_codegen/templates/backward_euler_kernels.hpp index b8d6d4a83..f27e4d536 100644 --- a/chaste_codegen/templates/backward_euler_kernels.hpp +++ b/chaste_codegen/templates/backward_euler_kernels.hpp @@ -1,25 +1,5 @@ -#ifndef {% filter upper %}{{class_name}}KERNELS_HPP_{% endfilter %} -#define {% filter upper %}{{class_name}}KERNELS_HPP_{% endfilter %} - -//! @file -//! -//! This source file was generated from CellML by chaste_codegen version {{converter_version}} -//! -//! Model: {{model_name}} -//! -//! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen -//! (translator: chaste_codegen, model type: {{model_type}}) -//! on {{generation_date}} -//! -//! -#include -#include "{{file_name}}{{header_ext}}" -// This file requires the following includes: -// #include MathsCustomFunctions.hpp -// StimulusEvaluatorCuda.hpp -// - -#include "MathsCustomFunctions.hpp" +{% include "Shared/kernels/header_comments" %} +{% include "Shared/kernels/includes" %} #include "ChasteCudaMacros.hpp" {% include "BE/kernels/ComputeOneStepExceptVoltageDevice" %} {# (file contains SolveClosedFormVars, FillInitialGuess, ScatterSolution) #} @@ -30,6 +10,4 @@ {% include "BE/kernels/UpdateTransmembranePotentialDevice" %} -#include "ChasteCpuMacros.hpp" - -#endif // {% filter upper %}{{class_name}}KERNELS_HPP_{% endfilter %} +{% include "Shared/kernels/footer" %} diff --git a/chaste_codegen/templates/backward_euler_model.hpp b/chaste_codegen/templates/backward_euler_model.hpp index 202c91083..05a124114 100644 --- a/chaste_codegen/templates/backward_euler_model.hpp +++ b/chaste_codegen/templates/backward_euler_model.hpp @@ -47,9 +47,12 @@ class BackwardEulerKernelLauncher; // We forward declare so that we do not expos void ComputeOneStepExceptVoltage(double {{free_variable.var_name}}); {% include "Shared/hpp/ComputeDerivedQuantities" %} {% include "Shared/hpp/CHASTE_CLASS_EXPORT" %} +{# As CHASTE_CLASS_EXPORT defines our closing bracket for our class, and also the end of the double include guard for this file, + we cannot easily add our extra includes below within the double include guard. Hence we should ensure anything included below + also has its own double include guard (or is ok to be included multiple times). #} - -{% if not lookup_parameters is defined %}#include "{{ file_name }}Kernels.hpp" +{% if not lookup_parameters is defined %} #ifdef __CUDACC__ + #include "{{ file_name }}Kernels.hpp" #include "BackwardEulerKernels.hpp" #endif{% endif %} \ No newline at end of file diff --git a/chaste_codegen/templates/cvode_model.hpp b/chaste_codegen/templates/cvode_model.hpp index 9dc887278..102d41127 100644 --- a/chaste_codegen/templates/cvode_model.hpp +++ b/chaste_codegen/templates/cvode_model.hpp @@ -3,8 +3,6 @@ {% include "Shared/hpp/includes" %} #include "{{base_class}}.hpp" #include "HostDeviceMacros.hpp" -#include "MathsCustomFunctions.hpp" -#include "StimulusEvaluatorCuda.hpp" #include "ChasteCvodeMacros.hpp" {% include "Shared/hpp/class_declaration" %} static constexpr unsigned TOTAL_SIZE = {{ state_vars|length }}u; @@ -31,5 +29,14 @@ static void EvaluateSparseAnalyticJacobianDevice(ValueType {{free_variable.var_name}}, const ValueType *rY, ValueType *rDY, ValueType *rJacobian, ValueType *rTmp1, ValueType *rTmp2, ValueType *rTmp3, const unsigned nvars, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType *mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim);{% endif %} {%- endif %} {% include "Shared/hpp/CHASTE_CLASS_EXPORT" %} +{# As CHASTE_CLASS_EXPORT defines our closing bracket for our class, and also the end of the double include guard for this file, + we cannot easily add our extra includes below within the double include guard. Hence we should ensure anything included below + also has its own double include guard (or is ok to be included multiple times). #} + +{% if not lookup_parameters is defined %} +#ifdef __CUDACC__ + #include "{{ file_name }}Kernels.hpp" +#endif{% endif %} + #include "ChasteCpuMacros.hpp" #endif // CHASTE_CVODE \ No newline at end of file diff --git a/chaste_codegen/templates/cvode_model_kernels.hpp b/chaste_codegen/templates/cvode_model_kernels.hpp index 1e94ac040..b0a86896d 100644 --- a/chaste_codegen/templates/cvode_model_kernels.hpp +++ b/chaste_codegen/templates/cvode_model_kernels.hpp @@ -1,6 +1,11 @@ -#include "{{file_name}}{{header_ext}}" +{% include "Shared/kernels/header_comments" %} +{% include "Shared/kernels/includes" %} #include "ChasteCudaMacros.hpp" + {% include "Shared/kernels/EvaluateYDerivativesDevice"%} + {% include "Cvode/kernels/EvaluateAnalyticJacobianDevice" %} + {% include "Cvode/kernels/EvaluateSparseAnalyticJacobianDevice" %} -#include "ChasteCpuMacros.hpp" \ No newline at end of file + +{% include "Shared/kernels/footer" %} \ No newline at end of file From b063ab2d59ca50f6ca0fe7d30ac7c5985d761226 Mon Sep 17 00:00:00 2001 From: Joseph Simkin Date: Sat, 28 Feb 2026 10:38:42 +0000 Subject: [PATCH 13/28] Refactored templates to look more like orignal codegen and cleaned up GPU array generation for CVODE using context manager --- chaste_codegen/chaste_model.py | 84 ++++++++++++++++- chaste_codegen/cvode_chaste_model.py | 16 +++- .../BE/kernels/ComputeJacobianDevice | 25 +++-- .../kernels/ComputeOneStepExceptVoltageDevice | 26 ++--- .../BE/kernels/ComputeResidualDevice | 28 +++--- .../UpdateTransmembranePotentialDevice | 18 ++-- .../Cvode/cpp/ComputeDerivedQuantities | 2 +- .../Cvode/cpp/EvaluateAnalyticJacobian | 15 +-- .../EvaluateAnalyticJacobianParts/Mathematics | 1 - .../PackJacobian | 3 - .../PackSparseJacobian | 3 - .../cpp/EvaluateAnalyticJacobianParts/UnpackY | 4 - .../cpp/GetIntracellularCalciumConcentration | 2 +- .../kernels/EvaluateAnalyticJacobianDevice | 12 ++- .../EvaluateSparseAnalyticJacobianDevice | 12 ++- .../templates/Shared/cpp/EvaluateYDerivatives | 36 ++++++- .../templates/Shared/cpp/parameters | 2 +- .../Shared/kernels/EvaluateYDerivativesDevice | 31 +++++- .../templates/backward_euler_kernels.hpp | 8 +- .../templates/backward_euler_model.hpp | 94 ++++++++++++++----- chaste_codegen/templates/cvode_model.cpp | 2 - chaste_codegen/templates/cvode_model.hpp | 3 - 22 files changed, 300 insertions(+), 127 deletions(-) delete mode 100644 chaste_codegen/templates/Cvode/cpp/EvaluateAnalyticJacobianParts/Mathematics delete mode 100644 chaste_codegen/templates/Cvode/cpp/EvaluateAnalyticJacobianParts/PackJacobian delete mode 100644 chaste_codegen/templates/Cvode/cpp/EvaluateAnalyticJacobianParts/PackSparseJacobian delete mode 100644 chaste_codegen/templates/Cvode/cpp/EvaluateAnalyticJacobianParts/UnpackY diff --git a/chaste_codegen/chaste_model.py b/chaste_codegen/chaste_model.py index 412eb00f2..3bd32b7c7 100644 --- a/chaste_codegen/chaste_model.py +++ b/chaste_codegen/chaste_model.py @@ -1,5 +1,7 @@ import time +from contextlib import contextmanager + from sympy import Derivative, Float import chaste_codegen as cg @@ -48,6 +50,37 @@ def __enter__(self): """ Pre analysis preparation. Required to be able to use model in context (with). Defined for overwriting in sub-classes if pre-processing is needed to use the model for code generation. """ return self + + @contextmanager + def _device_mode(self): + """ Creates an _is_generating_device_code context where we can run methods under 'with' and if the method contains + any branches: if self._is_generating_device_code:, the if part will run when the method is called in this context + + Example: + with self._device_mode(): + # Any call here will execute code the if parts of if self._is_generating_device_code: + device_eqs = self._format_derivative_equations(self._derivative_equations) + """ + original_state = getattr(self, '_is_generating_device_code', False) + self._is_generating_device_code = True + try: + yield + finally: + self._is_generating_device_code = original_state + + def _in_device_mode(self, func): + """ Thin wrapper to allow use of the _is_generating_device_code context in one line + + Example: + self._in_device_mode(lambda: self._format_derivative_equations(self._derivative_equations)) + + or if the method does not require any arguments: + self._in_device_mode(self._some_method_without_arguments) + + Note the lack of brackets as we need to pass a callable + """ + with self._device_mode(): + return func() def __init__(self, model, file_name, **kwargs): """ Initialise a ChasteModel instance @@ -70,6 +103,9 @@ def __init__(self, model, file_name, **kwargs): self._model = model + # By default we are generating CPU code, the context manager handles setting and unsetting this for device compilation + self._is_generating_device_code = False + # retrieve probabilities that don't stay in 0 ... 1 range and shouldn't be checked not_quite_probabilities = \ set(get_variables_transitively(self._model, (OXMETA, 'not_a_probability_even_though_it_should_be'))) @@ -145,6 +181,7 @@ def __init__(self, model, file_name, **kwargs): 'ionic_vars': self._format_ionic_vars(), 'y_derivatives': self._format_y_derivatives(), 'y_derivative_equations': self._format_derivative_equations(self._derivative_equations), + 'y_derivative_equations_device': self._in_device_mode(lambda: self._format_derivative_equations(self._derivative_equations)), 'free_variable': self._format_free_variable(), 'ode_system_information': self._format_system_info(), 'named_attributes': self._format_named_attributes(), @@ -258,6 +295,47 @@ def _print_rhs_with_modifiers(self, modifier, eq, modifiers_with_defining_eqs=se return self._format_modifier(modifier) + '->Calc(' + modifier_printer.doprint(eq) + ', ' + \ self._printer.doprint(self._model.time_variable) + ')' return modifier_printer.doprint(eq) + + def _print_rhs_with_modifiers2(self, modifier, eq, modifiers_with_defining_eqs=set()): + """Fixed RHS printer using self._state_vars for indexing""" + + def handle_variable(variable): + # 1. Handle Modifiers (Drug/Clamp) + if variable in self._modifiers and variable not in modifiers_with_defining_eqs: + if self._is_generating_device_code: + # On device, if it's a state var being modified, just print the raw rY[i] access + if variable in self._state_vars: + return self._format_rY_lookup(self._state_vars.index(variable), variable) + return self._printer.doprint(variable) + else: + # Standard Host behavior: modifier->Calc(rY[i], time) + return (self._format_modifier(variable) + '->Calc(' + + self._printer.doprint(variable) + ', ' + + self._printer.doprint(self._model.time_variable) + ')') + + # 2. Handle State Variables: Map Sympy symbol to vector index + if variable in self._state_vars: + index = self._state_vars.index(variable) + return self._format_rY_lookup(index, variable) + + # 3. Default: Handles parameters, time, and math constants via existing printers/macros + return self._printer.doprint(variable) + + # Create the recursive printer + modifier_printer = cg.ChastePrinter( + symbol_function=handle_variable, + derivative_function=lambda deriv: self._printer.doprint(deriv), + # Disable lookup tables on device to avoid host-pointer access + lookup_table_function=lambda e: None if self._is_generating_device_code else self._printer.lookup_table_function(e) + ) + + # 4. Handle top-level modification of the RHS result + if modifier in self._modifiers and not self._is_generating_device_code: + return (self._format_modifier(modifier) + '->Calc(' + + modifier_printer.doprint(eq) + ', ' + + self._printer.doprint(self._model.time_variable) + ')') + + return modifier_printer.doprint(eq) def _format_modifier(self, var): """ Formatting of modifier for printing""" @@ -287,7 +365,10 @@ def _format_rY_entry(self, index): def _format_rY_lookup(self, index, var, use_modifier=True): """ Formatting of rY lookup for printing""" - entry = self._format_rY_entry(index) + if self._is_generating_device_code: + entry = 'rY[' + str(index) + ']' + else: + entry = self._format_rY_entry(index) if use_modifier and var in self._modifiers: entry = self._format_modifier(var) +\ '->Calc(' + entry + ', ' + self._printer.doprint(self._model.time_variable) + ')' @@ -338,6 +419,7 @@ def get_range_annotation(subject, annotation_tag): 'annotated_var_name': self._model.get_display_name(var[1], OXMETA, get_MultipleUsesAllowed_tags()), 'rY_lookup': self._format_rY_lookup(var[0], var[1]), 'rY_lookup_no_modifier': self._format_rY_lookup(var[0], var[1], use_modifier=False), + 'rY_lookup_device': self._in_device_mode(lambda: self._format_rY_lookup(var[0], var[1])), 'initial_value': str(self._get_initial_value(var[1])), 'modifier': self._format_modifier(var[1]) if var[1] in self._modifiers else None, 'units': self._model.units.format(self._model.units.evaluate_units(var[1])), diff --git a/chaste_codegen/cvode_chaste_model.py b/chaste_codegen/cvode_chaste_model.py index d9742705d..21784e422 100644 --- a/chaste_codegen/cvode_chaste_model.py +++ b/chaste_codegen/cvode_chaste_model.py @@ -45,10 +45,14 @@ def __init__(self, model, file_name, **kwargs): jac_eqs, jac_entries = self._print_jacobian() self._vars_for_template['jacobian_equations'] = jac_eqs - self._vars_for_template['jacobian_entries'] = jac_entries + self._vars_for_template['jacobian_entries'] = jac_entries + + jac_eqs_dev, jac_entries_dev = self._in_device_mode(self._print_jacobian) + self._vars_for_template['jacobian_equations_device'] = jac_eqs_dev + self._vars_for_template['jacobian_entries_device'] = jac_entries_dev # TODO: not sure if we still need this sort or if the entries are guaranteed to be in this order anyway - sorted_jac_entries = sorted(jac_entries, key=lambda entry: (entry['i'], entry['j'])) + sorted_jac_entries = sorted(jac_entries_dev, key=lambda entry: (entry['i'], entry['j'])) n_vars = len(self._state_vars) @@ -173,10 +177,14 @@ def _print_jacobian(self): modifiers_with_defining_eqs=modifiers_with_defining_eqs)) def _print_modifiable_parameters(self, variable): - return 'CHASTE_VEC_GET(mParameters, ' + self._modifiable_parameter_lookup[variable] + ')' + if self._is_generating_device_code: + return 'mParameters[' + self._modifiable_parameter_lookup[variable] + ']' + return 'NV_Ith_S(mParameters, ' + self._modifiable_parameter_lookup[variable] + ')' def _format_rY_entry(self, index): - return 'CHASTE_VEC_GET(rY, ' + str(index) + ')' + if self._is_generating_device_code: + return 'rY[' + str(index) + ']' + return 'NV_Ith_S(rY, ' + str(index) + ')' def _update_state_vars(self): jacobian_symbols = set() diff --git a/chaste_codegen/templates/BE/kernels/ComputeJacobianDevice b/chaste_codegen/templates/BE/kernels/ComputeJacobianDevice index cd25397ce..cb5f0d097 100644 --- a/chaste_codegen/templates/BE/kernels/ComputeJacobianDevice +++ b/chaste_codegen/templates/BE/kernels/ComputeJacobianDevice @@ -1,4 +1,4 @@ -{%- if nonlinear_state_vars|length > 0 %} +{% if nonlinear_state_vars|length > 0 -%} template DEVICE void {{class_name}}::ComputeJacobianDevice(ValueType {{free_variable.var_name}}, @@ -12,18 +12,17 @@ void {{class_name}}::ComputeJacobianDevice(ValueType {{free_variable.var_name}}, ValueType capacitance, const DeviceStimulusFunctor stim) { - {% for state_var in state_vars %} - {%- if state_var.in_y_deriv and state_var.linear and state_var.in_jacobian %}ValueType {{ state_var.var }} = {{state_var.rY_lookup}}; - // Units: {{state_var.units}}; Initial value: {{state_var.initial_value}} - {% endif %}{%- endfor %} - {%- set method = "ComputeJacobian" %}{% include "Shared/cpp/lookup_table_init" %} - {% for state_var in nonlinear_state_vars %} - {%- if state_var.in_jacobian %}ValueType {{ state_var.var }} = rCurrentGuess[{{loop.index0}}]; - {% endif %}{%- endfor %} - {% for equation in jacobian_equations %}const ValueType {{equation.lhs}} = {{equation.rhs}}; + {% for state_var in state_vars if state_var.in_y_deriv and state_var.linear and state_var.in_jacobian -%} + ValueType {{ state_var.var }} = {{state_var.rY_lookup}}; // Units: {{state_var.units}} {% endfor %} - {% for entry in jacobian_entries %} - rJacobian[{{entry.i}}][{{entry.j}}] = {% if entry.i == entry.j and entry.entry != '0' %}1.0 - (mDt * ({{entry.entry}})){% endif -%}{% if entry.i == entry.j and entry.entry == '0' %}1.0{% endif -%}{% if entry.i != entry.j and entry.entry == '0' %}0.0{% endif -%}{% if entry.i != entry.j and entry.entry != '0' %}-(mDt * ({{entry.entry}})){% endif -%}; + {% for state_var in nonlinear_state_vars if state_var.in_jacobian -%} + ValueType {{ state_var.var }} = rCurrentGuess[{{loop.index0}}]; + {% endfor %} + {% for equation in jacobian_equations -%} + const ValueType {{equation.lhs}} = {{equation.rhs}}; + {% endfor %} + {% for entry in jacobian_entries -%} + rJacobian[{{entry.i}}][{{entry.j}}] = {% if entry.i == entry.j and entry.entry != '0' %}1.0 - (mDt * ({{entry.entry}})){% endif %}{% if entry.i == entry.j and entry.entry == '0' %}1.0{% endif %}{% if entry.i != entry.j and entry.entry == '0' %}0.0{% endif %}{% if entry.i != entry.j and entry.entry != '0' %}-(mDt * ({{entry.entry}})){% endif %}; {%- endfor %} } -{%- endif %} +{%- endif %} \ No newline at end of file diff --git a/chaste_codegen/templates/BE/kernels/ComputeOneStepExceptVoltageDevice b/chaste_codegen/templates/BE/kernels/ComputeOneStepExceptVoltageDevice index ff34a8d0f..b773b27bb 100644 --- a/chaste_codegen/templates/BE/kernels/ComputeOneStepExceptVoltageDevice +++ b/chaste_codegen/templates/BE/kernels/ComputeOneStepExceptVoltageDevice @@ -12,26 +12,22 @@ void {{class_name}}::SolveClosedFormVarsDevice(ValueType rY[{{class_name}}::TOTA {%- if state_var.in_y_deriv and state_var.linear and state_var.in_one_step_except_v %}ValueType {{ state_var.var }} = {{state_var.rY_lookup}}; // Units: {{state_var.units}}; Initial value: {{state_var.initial_value}} {% endif %}{%- endfor %} - {% for eq in linear_equations %}const ValueType {{eq.lhs}} = {{eq.rhs}}; - {% endfor %} + {%- endfor %} - {% for deriv in linear_deriv_eqs %} + {% for deriv in linear_deriv_eqs -%} rY[{{deriv.state_var_index}}] = ({{deriv.var}} + (({{deriv.g}}) * mDt)) / (1.0 - (({{deriv.h}}) * mDt)); {%- endfor %} } - -{%- if nonlinear_state_vars|length > 0 %}/* Gather non-linear variables from state and put them into guess for Newton solve */ +{% if nonlinear_state_vars|length > 0 %}/* Gather non-linear variables from state and put them into guess for Newton solve */ template DEVICE void {{class_name}}::FillInitialGuessDevice(ValueType _guess[{{class_name}}::NONLINEAR_SIZE], const ValueType rY[{{class_name}}::TOTAL_SIZE]) { - {% if nonlinear_state_vars|length > 0 %} {# We do not need this if really, if it is empty we just get no op#} - {% for state_var in nonlinear_state_vars %} - _guess[{{ loop.index0 }}] = rY[{{ state_var.state_var_index }}]; - {% endfor %} - {% endif %} + {% if nonlinear_state_vars|length > 0 %} {# We do not need this if really, if it is empty we just get no op -#} + {% for state_var in nonlinear_state_vars %}_guess[{{ loop.index0 }}] = rY[{{ state_var.state_var_index }}];{% endfor %} + {%- endif %} } /* After Newton solve, scatter the solved nonlinear variables back into y */ @@ -40,9 +36,7 @@ DEVICE void {{class_name}}::ScatterSolutionDevice(const ValueType _guess[{{class_name}}::NONLINEAR_SIZE], ValueType rY[{{class_name}}::TOTAL_SIZE]) { - {% if nonlinear_state_vars|length > 0 %} - {% for state_var in nonlinear_state_vars %} - rY[{{ state_var.state_var_index }}] = _guess[{{ loop.index0 }}]; - {% endfor %} - {% endif %} -}{% endif %} + {% if nonlinear_state_vars|length > 0 -%} + {% for state_var in nonlinear_state_vars %}rY[{{ state_var.state_var_index }}] = _guess[{{ loop.index0 }}];{% endfor %} + {%- endif %} +}{% endif %} \ No newline at end of file diff --git a/chaste_codegen/templates/BE/kernels/ComputeResidualDevice b/chaste_codegen/templates/BE/kernels/ComputeResidualDevice index 295b33e05..02a811628 100644 --- a/chaste_codegen/templates/BE/kernels/ComputeResidualDevice +++ b/chaste_codegen/templates/BE/kernels/ComputeResidualDevice @@ -1,4 +1,4 @@ -{%- if nonlinear_state_vars|length > 0 %} +{% if nonlinear_state_vars|length > 0 -%} /* Compute residual of non-linear system for the current guess */ template DEVICE @@ -13,21 +13,17 @@ void {{class_name}}::ComputeResidualDevice(ValueType {{free_variable.var_name}}, ValueType capacitance, const DeviceStimulusFunctor stim) { - {% for state_var in state_vars %} - {%- if state_var.linear and state_var.in_non_linear_eq %}ValueType {{ state_var.var }} = {{state_var.rY_lookup}}; - // Units: {{state_var.units}}; Initial value: {{state_var.initial_value}} - {% endif %}{%- endfor %} - //output_nonlinear_state_assignments - {% for state_var in nonlinear_state_vars %} - {%- if state_var.in_non_linear_eq %}ValueType {{ state_var.var }} = rCurrentGuess[{{loop.index0}}]; - {% endif %}{%- endfor %} - {%- set method = "ComputeResidual" %}{% include "Shared/cpp/lookup_table_init" %} - //output_equations - {%- for deriv in y_derivative_equations %}{%- if not deriv.linear %} - const ValueType {{deriv.lhs}} = {{deriv.rhs}}; // {{deriv.units}}{%- endif %} - {%- endfor %} - {% for residual_var in residual_equations %} + {% for state_var in state_vars if state_var.linear and state_var.in_non_linear_eq -%} + ValueType {{ state_var.var }} = {{state_var.rY_lookup}}; // Units: {{state_var.units}} + {% endfor %} + {% for state_var in nonlinear_state_vars if state_var.in_non_linear_eq -%} + ValueType {{ state_var.var }} = rCurrentGuess[{{loop.index0}}]; + {% endfor %} + {% for deriv in y_derivative_equations if not deriv.linear -%} + const ValueType {{deriv.lhs}} = {{deriv.rhs}}; // {{deriv.units}} + {% endfor %} + {% for residual_var in residual_equations -%} rResidual[{{ residual_var.residual_index }}] = rCurrentGuess[{{ residual_var.residual_index }}] - rY[{{ residual_var.state_var_index }}] - mDt*{{ residual_var.var }}; {%- endfor %} } -{%- endif %} +{%- endif %} \ No newline at end of file diff --git a/chaste_codegen/templates/BE/kernels/UpdateTransmembranePotentialDevice b/chaste_codegen/templates/BE/kernels/UpdateTransmembranePotentialDevice index aff58c4cb..80dabcf81 100644 --- a/chaste_codegen/templates/BE/kernels/UpdateTransmembranePotentialDevice +++ b/chaste_codegen/templates/BE/kernels/UpdateTransmembranePotentialDevice @@ -11,12 +11,12 @@ void {{class_name}}::UpdateTransmembranePotentialDevice(ValueType {{free_variabl ValueType capacitance) { {% for state_var in state_vars %} - {%- if state_var.in_voltage_deriv %}ValueType {{ state_var.var }} = {{state_var.rY_lookup}}; - // Units: {{state_var.units}}; Initial value: {{state_var.initial_value}} - {% endif %}{%- endfor %} - {%- set method = "UpdateTransmembranePotential" %}{% include "Shared/cpp/lookup_table_init" %} - {% for deriv in y_derivative_equations %} - {%- if deriv.in_membrane_voltage %}const ValueType {{deriv.lhs}} = {{deriv.rhs}}; // {{deriv.units}} - {% endif %}{%- endfor %} - {% for deriv in y_derivative_equations %}{%- if deriv.is_voltage%}rY[{{membrane_voltage_index}}] += mDt*{{deriv.lhs}};{%- endif %}{%- endfor %} -} + {%- if state_var.in_voltage_deriv %}ValueType {{ state_var.var }} = {{state_var.rY_lookup}}; + // Units: {{state_var.units}}; Initial value: {{state_var.initial_value}} + {% endif %}{%- endfor %} + {%- set method = "UpdateTransmembranePotential" %}{% include "Shared/cpp/lookup_table_init" %} + {% for deriv in y_derivative_equations %} + {%- if deriv.in_membrane_voltage %}const ValueType {{deriv.lhs}} = {{deriv.rhs}}; // {{deriv.units}} + {% endif %}{%- endfor %} + {% for deriv in y_derivative_equations %}{%- if deriv.is_voltage%}rY[{{membrane_voltage_index}}] += mDt*{{deriv.lhs}};{%- endif %}{%- endfor %} +} \ No newline at end of file diff --git a/chaste_codegen/templates/Cvode/cpp/ComputeDerivedQuantities b/chaste_codegen/templates/Cvode/cpp/ComputeDerivedQuantities index 0a4cc8664..2dde9d741 100644 --- a/chaste_codegen/templates/Cvode/cpp/ComputeDerivedQuantities +++ b/chaste_codegen/templates/Cvode/cpp/ComputeDerivedQuantities @@ -25,7 +25,7 @@ {{vector_decl}} dqs = N_VNew_Serial({{derived_quantities|length}}); #endif {%- for quant in derived_quantities %} - CHASTE_VEC_GET(dqs, {{loop.index0}}) = {{quant.var}}; + NV_Ith_S(dqs, {{loop.index0}}) = {{quant.var}}; {%- endfor %} return dqs; }{% endif -%} \ No newline at end of file diff --git a/chaste_codegen/templates/Cvode/cpp/EvaluateAnalyticJacobian b/chaste_codegen/templates/Cvode/cpp/EvaluateAnalyticJacobian index 554c05232..35445dbd7 100644 --- a/chaste_codegen/templates/Cvode/cpp/EvaluateAnalyticJacobian +++ b/chaste_codegen/templates/Cvode/cpp/EvaluateAnalyticJacobian @@ -2,9 +2,12 @@ void {{class_name}}::EvaluateAnalyticJacobian(double {{free_variable.var_name}}, {{vector_decl}} rY, {{vector_decl}} rDY, CHASTE_CVODE_DENSE_MATRIX rJacobian, {{vector_decl}} rTmp1, {{vector_decl}} rTmp2, {{vector_decl}} rTmp3) { - {% include "Cvode/cpp/EvaluateAnalyticJacobianParts/UnpackY" %} - {% set method = "EvaluateAnalyticJacobian" %}{% include "Shared/cpp/lookup_table_init" %} - {% include "Cvode/cpp/EvaluateAnalyticJacobianParts/Mathematics" %} - {% include "Cvode/cpp/EvaluateAnalyticJacobianParts/PackJacobian" %} - } -{% endif -%} \ No newline at end of file + {% for state_var in state_vars %} + {%- if state_var.in_jacobian %}double {{ state_var.var }} = {{state_var.rY_lookup}}; + // Units: {{state_var.units}}; Initial value: {{state_var.initial_value}} + {% endif %}{%- endfor %}{% set method = "EvaluateAnalyticJacobian" %}{% include "Shared/cpp/lookup_table_init" %}{% for equation in jacobian_equations %}const double {{equation.lhs}} = {{equation.rhs}}; + {% endfor %} + // Matrix entries{% for entry in jacobian_entries %} + IJth(rJacobian, {{entry.i}}, {{entry.j}}) = {% if membrane_voltage_index == entry.i %}mSetVoltageDerivativeToZero ? 0.0 : ({{entry.entry}});{%- else %}{{entry.entry}};{%- endif %} + {%- endfor %} + }{% endif -%} \ No newline at end of file diff --git a/chaste_codegen/templates/Cvode/cpp/EvaluateAnalyticJacobianParts/Mathematics b/chaste_codegen/templates/Cvode/cpp/EvaluateAnalyticJacobianParts/Mathematics deleted file mode 100644 index b01bb140f..000000000 --- a/chaste_codegen/templates/Cvode/cpp/EvaluateAnalyticJacobianParts/Mathematics +++ /dev/null @@ -1 +0,0 @@ -{% for equation in jacobian_equations %}const double {{equation.lhs}} = {{equation.rhs}};{% endfor %} \ No newline at end of file diff --git a/chaste_codegen/templates/Cvode/cpp/EvaluateAnalyticJacobianParts/PackJacobian b/chaste_codegen/templates/Cvode/cpp/EvaluateAnalyticJacobianParts/PackJacobian deleted file mode 100644 index 604154998..000000000 --- a/chaste_codegen/templates/Cvode/cpp/EvaluateAnalyticJacobianParts/PackJacobian +++ /dev/null @@ -1,3 +0,0 @@ -// Matrix entries{% for entry in jacobian_entries %} -CHASTE_MATRIX_GET(rJacobian, {{entry.i}}, {{entry.j}}) = {% if membrane_voltage_index == entry.i %}mSetVoltageDerivativeToZero ? 0.0 : ({{entry.entry}});{%- else %}{{entry.entry}};{%- endif %} -{%- endfor %} \ No newline at end of file diff --git a/chaste_codegen/templates/Cvode/cpp/EvaluateAnalyticJacobianParts/PackSparseJacobian b/chaste_codegen/templates/Cvode/cpp/EvaluateAnalyticJacobianParts/PackSparseJacobian deleted file mode 100644 index 963a8b63e..000000000 --- a/chaste_codegen/templates/Cvode/cpp/EvaluateAnalyticJacobianParts/PackSparseJacobian +++ /dev/null @@ -1,3 +0,0 @@ -{% for entry in sparse_jacobian_entries -%} -rJacobian[ {{ loop.index0 }} ] = {% if membrane_voltage_index == entry.i %}mSetVoltageDerivativeToZero ? CHASTE_CONST(0.0) : ({{ entry.entry }});{% else %}{{ entry.entry }};{% endif %} -{% endfor -%} \ No newline at end of file diff --git a/chaste_codegen/templates/Cvode/cpp/EvaluateAnalyticJacobianParts/UnpackY b/chaste_codegen/templates/Cvode/cpp/EvaluateAnalyticJacobianParts/UnpackY deleted file mode 100644 index f74200efa..000000000 --- a/chaste_codegen/templates/Cvode/cpp/EvaluateAnalyticJacobianParts/UnpackY +++ /dev/null @@ -1,4 +0,0 @@ -{% for state_var in state_vars %} -{%- if state_var.in_jacobian %}double {{ state_var.var }} = {{state_var.rY_lookup}}; -// Units: {{state_var.units}}; Initial value: {{state_var.initial_value}} -{% endif %}{%- endfor %} \ No newline at end of file diff --git a/chaste_codegen/templates/Cvode/cpp/GetIntracellularCalciumConcentration b/chaste_codegen/templates/Cvode/cpp/GetIntracellularCalciumConcentration index 0bd22d7f4..f7e3ddc3c 100644 --- a/chaste_codegen/templates/Cvode/cpp/GetIntracellularCalciumConcentration +++ b/chaste_codegen/templates/Cvode/cpp/GetIntracellularCalciumConcentration @@ -1,6 +1,6 @@ {%- if use_get_intracellular_calcium_concentration %} double {{class_name}}::GetIntracellularCalciumConcentration() { - return CHASTE_VEC_GET(mStateVariables, {{cytosolic_calcium_concentration_index}}); + return NV_Ith_S(mStateVariables, {{cytosolic_calcium_concentration_index}}); } {% endif %} \ No newline at end of file diff --git a/chaste_codegen/templates/Cvode/kernels/EvaluateAnalyticJacobianDevice b/chaste_codegen/templates/Cvode/kernels/EvaluateAnalyticJacobianDevice index 94906b883..1f1b45464 100644 --- a/chaste_codegen/templates/Cvode/kernels/EvaluateAnalyticJacobianDevice +++ b/chaste_codegen/templates/Cvode/kernels/EvaluateAnalyticJacobianDevice @@ -3,8 +3,14 @@ DEVICE void {{class_name}}::EvaluateAnalyticJacobianDevice(ValueType {{free_variable.var_name}}, const ValueType *rY, ValueType *rDY, ValueType *rJacobian, ValueType *rTmp1, ValueType *rTmp2, ValueType *rTmp3, const unsigned nvars, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType *mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim) { - {% include "Cvode/cpp/EvaluateAnalyticJacobianParts/UnpackY" %} - {% include "Cvode/cpp/EvaluateAnalyticJacobianParts/Mathematics" %} - {% include "Cvode/cpp/EvaluateAnalyticJacobianParts/PackJacobian" %} + {% for state_var in state_vars %} + {%- if state_var.in_jacobian %}double {{ state_var.var }} = {{state_var.rY_lookup_device}}; + // Units: {{state_var.units}}; Initial value: {{state_var.initial_value}} + {% endif %}{%- endfor %} + {% for equation in jacobian_equations_device %}const double {{equation.lhs}} = {{equation.rhs}}; + {% endfor %} + // Matrix entries{% for entry in jacobian_entries_device %} + rJacobian[{{entry.j}} * nvars + {{entry.i}}] = {% if membrane_voltage_index == entry.i %}mSetVoltageDerivativeToZero ? 0.0 : ({{entry.entry}});{%- else %}{{entry.entry}};{%- endif %} + {%- endfor %} } {% endif -%} \ No newline at end of file diff --git a/chaste_codegen/templates/Cvode/kernels/EvaluateSparseAnalyticJacobianDevice b/chaste_codegen/templates/Cvode/kernels/EvaluateSparseAnalyticJacobianDevice index 2dc8beea4..497886ede 100644 --- a/chaste_codegen/templates/Cvode/kernels/EvaluateSparseAnalyticJacobianDevice +++ b/chaste_codegen/templates/Cvode/kernels/EvaluateSparseAnalyticJacobianDevice @@ -3,8 +3,14 @@ DEVICE void {{class_name}}::EvaluateSparseAnalyticJacobianDevice(ValueType {{free_variable.var_name}}, const ValueType *rY, ValueType *rDY, ValueType *rJacobian, ValueType *rTmp1, ValueType *rTmp2, ValueType *rTmp3, const unsigned nvars, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType *mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim) { - {% include "Cvode/cpp/EvaluateAnalyticJacobianParts/UnpackY" %} - {% include "Cvode/cpp/EvaluateAnalyticJacobianParts/Mathematics" %} - {% include "Cvode/cpp/EvaluateAnalyticJacobianParts/PackSparseJacobian" %} + {% for state_var in state_vars %} + {%- if state_var.in_jacobian %}double {{ state_var.var }} = {{state_var.rY_lookup_device}}; + // Units: {{state_var.units}}; Initial value: {{state_var.initial_value}} + {% endif %}{%- endfor %} + {% for equation in jacobian_equations_device %}const double {{equation.lhs}} = {{equation.rhs}}; + {% endfor %} + // Matrix entries{% for entry in sparse_jacobian_entries %} + rJacobian[ {{ loop.index0 }} ] = {% if membrane_voltage_index == entry.i %}mSetVoltageDerivativeToZero ? CHASTE_CONST(0.0) : ({{ entry.entry }});{% else %}{{ entry.entry }};{% endif %} + {% endfor -%} } {% endif -%} \ No newline at end of file diff --git a/chaste_codegen/templates/Shared/cpp/EvaluateYDerivatives b/chaste_codegen/templates/Shared/cpp/EvaluateYDerivatives index 87e8855ad..2a287e381 100644 --- a/chaste_codegen/templates/Shared/cpp/EvaluateYDerivatives +++ b/chaste_codegen/templates/Shared/cpp/EvaluateYDerivatives @@ -1,8 +1,34 @@ -void {{class_name}}::EvaluateYDerivatives(double {{free_variable.var_name}}, const {{vector_decl}} rY, {{vector_decl}} rDY) + + void {{class_name}}::EvaluateYDerivatives(double {{free_variable.var_name}}, const {{vector_decl}} rY, {{vector_decl}} rDY) { - {% include "Shared/cpp/EvaluateYDerivativesParts/UnpackY" %} + // Inputs: + // Time units: millisecond + {%- for state_var in state_vars %} + {% if state_var.in_y_deriv %}double {{ state_var.var }} = {{state_var.rY_lookup}}; + // Units: {{state_var.units}}; Initial value: {{state_var.initial_value}} + {%- endif %}{%- endfor %} {% set method = "EvaluateYDerivatives" %}{% include "Shared/cpp/lookup_table_init" %} - {% include "Shared/cpp/EvaluateYDerivativesParts/Mathematics" %} - {% include "Shared/cpp/EvaluateYDerivativesParts/VoltageDerivsCPU" %} - {% include "Shared/cpp/EvaluateYDerivativesParts/PackDY" %} + // Mathematics + {% for deriv in y_derivative_equations %}{%- if deriv.is_voltage%}double {{deriv.lhs}};{%- endif %}{%- endfor %} + {%- for deriv in y_derivative_equations %}{%- if deriv.in_eqs_excl_voltage %} + const double {{deriv.lhs}} = {{deriv.rhs}}; // {{deriv.units}}{%- endif %} + {%- endfor %} + + if (mSetVoltageDerivativeToZero) + { + {% for deriv in y_derivative_equations %}{%- if deriv.is_voltage%}{{deriv.lhs}} = 0.0;{%- endif %}{%- endfor %} + } + else + { + {% for deriv in y_derivative_equations %}{% if not deriv.in_eqs_excl_voltage %}{% if deriv.is_data_clamp_current is defined and deriv.is_data_clamp_current %} // Special handling of data clamp current here + // (we want to save expense of calling the interpolation method if possible.) + double {{ deriv.lhs }} = 0.0; + if (mDataClampIsOn) + { + {{deriv.lhs}} = {{deriv.rhs}}; // {{deriv.units}} + }{% else %} {% if not deriv.is_voltage%}const double {% endif %}{{deriv.lhs}} = {{deriv.rhs}}; // {{deriv.units}}{% endif %} + {% endif %}{%- endfor %}} + {% for deriv in y_derivatives %} + {% if is_cvode is defined and is_cvode %}NV_Ith_S(rDY,{{loop.index0}}){% else %}rDY[{{loop.index0}}]{%endif%} = {{deriv}}; + {%- endfor %} } \ No newline at end of file diff --git a/chaste_codegen/templates/Shared/cpp/parameters b/chaste_codegen/templates/Shared/cpp/parameters index ed2a0eac4..7fd593ec0 100644 --- a/chaste_codegen/templates/Shared/cpp/parameters +++ b/chaste_codegen/templates/Shared/cpp/parameters @@ -5,4 +5,4 @@ {{mod.modifier}}); {%- endfor %} {%- for param in modifiable_parameters %} - CHASTE_VEC_GET(this->mParameters, {{loop.index0}}) = {{param["initial_value"]}}; // ({{param["comment_name"]}}) [{{param["units"]}}]{%- endfor %} \ No newline at end of file + {% if is_cvode is defined and is_cvode %}NV_Ith_S(this->mParameters, {{loop.index0}}){% else %}this->mParameters[{{loop.index0}}]{% endif %} = {{param["initial_value"]}}; // ({{param["comment_name"]}}) [{{param["units"]}}]{%- endfor %} \ No newline at end of file diff --git a/chaste_codegen/templates/Shared/kernels/EvaluateYDerivativesDevice b/chaste_codegen/templates/Shared/kernels/EvaluateYDerivativesDevice index 3f1908634..56283b3aa 100644 --- a/chaste_codegen/templates/Shared/kernels/EvaluateYDerivativesDevice +++ b/chaste_codegen/templates/Shared/kernels/EvaluateYDerivativesDevice @@ -2,8 +2,31 @@ template DEVICE void {{class_name}}::EvaluateYDerivativesDevice(ValueType {{free_variable.var_name}}, const ValueType *rY, ValueType *rDY, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType *mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim) { - {% include "Shared/cpp/EvaluateYDerivativesParts/UnpackY" %} - {% include "Shared/cpp/EvaluateYDerivativesParts/Mathematics" %} - {% include "Shared/cpp/EvaluateYDerivativesParts/VoltageDerivsGPU" %} - {% include "Shared/cpp/EvaluateYDerivativesParts/PackDY" %} + // Inputs: + // Time units: millisecond + {%- for state_var in state_vars %} + {% if state_var.in_y_deriv %}double {{ state_var.var }} = {{state_var.rY_lookup_device}}; + // Units: {{state_var.units}}; Initial value: {{state_var.initial_value}} + {%- endif %}{%- endfor %} + // Mathematics + {% for deriv in y_derivative_equations_device %}{%- if deriv.is_voltage%}double {{deriv.lhs}};{%- endif %}{%- endfor %} + {%- for deriv in y_derivative_equations_device %}{%- if deriv.in_eqs_excl_voltage %} + const double {{deriv.lhs}} = {{deriv.rhs}}; // {{deriv.units}}{%- endif %} + {%- endfor %} + if (mSetVoltageDerivativeToZero) + { + {% for deriv in y_derivative_equations_device %}{%- if deriv.is_voltage %}{{ deriv.lhs }} = 0.0;{%- endif %}{%- endfor %} + } + else + { + {% for deriv in y_derivative_equations_device %} + {%- if not deriv.in_eqs_excl_voltage %} + {# We treat everything as a standard derivative here, omitting Data Clamp branches #} + {% if not deriv.is_voltage %}const double {% endif %}{{ deriv.lhs }} = {{ deriv.rhs }}; + {%- endif %} + {%- endfor %} + } + {% for deriv in y_derivatives %} + rDY[ {{loop.index0}} ] = {{deriv}}; + {%- endfor %} } \ No newline at end of file diff --git a/chaste_codegen/templates/backward_euler_kernels.hpp b/chaste_codegen/templates/backward_euler_kernels.hpp index f27e4d536..919703aa7 100644 --- a/chaste_codegen/templates/backward_euler_kernels.hpp +++ b/chaste_codegen/templates/backward_euler_kernels.hpp @@ -4,10 +4,12 @@ {% include "BE/kernels/ComputeOneStepExceptVoltageDevice" %} {# (file contains SolveClosedFormVars, FillInitialGuess, ScatterSolution) #} -{%- if nonlinear_state_vars|length > 0 %}{% include "BE/kernels/ComputeResidualDevice" %} +{% if nonlinear_state_vars|length > 0 -%} +{% include "BE/kernels/ComputeResidualDevice" %} -{% include "BE/kernels/ComputeJacobianDevice" %}{% endif -%} +{% include "BE/kernels/ComputeJacobianDevice" %} +{%- endif %} {% include "BE/kernels/UpdateTransmembranePotentialDevice" %} -{% include "Shared/kernels/footer" %} +{% include "Shared/kernels/footer" %} \ No newline at end of file diff --git a/chaste_codegen/templates/backward_euler_model.hpp b/chaste_codegen/templates/backward_euler_model.hpp index 05a124114..079902752 100644 --- a/chaste_codegen/templates/backward_euler_model.hpp +++ b/chaste_codegen/templates/backward_euler_model.hpp @@ -1,58 +1,102 @@ {% include "Shared/hpp/header_comments" %} {% include "Shared/hpp/includes" %} #include "{{base_class}}.hpp" -{% if not lookup_parameters is defined %}//#include "BackwardEulerKernels.cuh" +{% if not lookup_parameters is defined -%} template -class BackwardEulerKernelLauncher; // We forward declare so that we do not expose threadIdx and blockIdx to c++ compiler -#include "StimulusEvaluatorCuda.hpp" // DeviceStimulusFunctor (+ includes StimulusDescriptor){% endif %} -{% with %}{% set base_class = base_class ~ "<"~nonlinear_state_vars|length~">" %}{% include "Shared/hpp/class_declaration" %}{% endwith %} -public: - {% if not lookup_parameters is defined %}template using SolverKernelLauncher = BackwardEulerKernelLauncher<{{class_name}}, ValueType>; +class BackwardEulerKernelLauncher; // Forward declare to hide CUDA-specifics from standard C++ compiler +{%- endif %} + +{% with %}{% set base_class = base_class ~ "<" ~ nonlinear_state_vars|length ~ ">" %}{% include "Shared/hpp/class_declaration" %}{% endwith %} +{% if not lookup_parameters is defined -%} + template using SolverKernelLauncher = BackwardEulerKernelLauncher<{{class_name}}, ValueType>; static constexpr unsigned TOTAL_SIZE = {{ state_vars|length }}u; - static constexpr unsigned NONLINEAR_SIZE = {{ nonlinear_state_vars|length }}u;{% endif %} + static constexpr unsigned NONLINEAR_SIZE = {{ nonlinear_state_vars|length }}u; +{%- endif %} + {% include "Shared/hpp/DefaultStimulus_IntracellularCalciumConcentration" %} - {{class_name}}(boost::shared_ptr /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus); + + {{class_name}}(boost::shared_ptr /* unused */, boost::shared_ptr pIntracellularStimulus); + {% include "Shared/hpp/destructor_verify_state_variables_GetIIonic" %} - {%- if nonlinear_state_vars|length > 0 %}void ComputeResidual(double {{free_variable.var_name}}, const double rCurrentGuess[{{nonlinear_state_vars|length}}], double rResidual[{{nonlinear_state_vars|length}}]); + {% if nonlinear_state_vars|length > 0 -%} + void ComputeResidual(double {{free_variable.var_name}}, const double rCurrentGuess[{{nonlinear_state_vars|length}}], double rResidual[{{nonlinear_state_vars|length}}]); void ComputeJacobian(double {{free_variable.var_name}}, const double rCurrentGuess[{{nonlinear_state_vars|length}}], double rJacobian[{{nonlinear_state_vars|length}}][{{nonlinear_state_vars|length}}]); - {% if not lookup_parameters is defined %}template + {% if not lookup_parameters is defined -%} + template DEVICE - static void ComputeResidualDevice(ValueType {{free_variable.var_name}}, const ValueType rCurrentGuess[NONLINEAR_SIZE], const ValueType rY[], ValueType rResidual[NONLINEAR_SIZE], ValueType mDt, const ValueType mParameters[], bool mSetVoltageDerivativeToZero, ValueType mFixedVoltage, ValueType capacitance, const DeviceStimulusFunctor stim); + static void ComputeResidualDevice( + ValueType {{free_variable.var_name}}, + const ValueType rCurrentGuess[NONLINEAR_SIZE], + const ValueType rY[], + ValueType rResidual[NONLINEAR_SIZE], + ValueType mDt, + const ValueType mParameters[], + bool mSetVoltageDerivativeToZero, + ValueType mFixedVoltage, + ValueType capacitance, + const DeviceStimulusFunctor stim); template DEVICE - static void ComputeJacobianDevice(ValueType {{free_variable.var_name}}, const ValueType rCurrentGuess[NONLINEAR_SIZE], const ValueType rY[], ValueType rJacobian[NONLINEAR_SIZE][NONLINEAR_SIZE], ValueType mDt, const ValueType mParameters[], bool mSetVoltageDerivativeToZero, ValueType mFixedVoltage, ValueType capacitance, const DeviceStimulusFunctor stim);{% endif %} + static void ComputeJacobianDevice( + ValueType {{free_variable.var_name}}, + const ValueType rCurrentGuess[NONLINEAR_SIZE], + const ValueType rY[], + ValueType rJacobian[NONLINEAR_SIZE][NONLINEAR_SIZE], + ValueType mDt, + const ValueType mParameters[], + bool mSetVoltageDerivativeToZero, + ValueType mFixedVoltage, + ValueType capacitance, + const DeviceStimulusFunctor stim); + {%- endif %} {# lookup_parameters #} + {%- endif %} {# nonlinear_state_vars #} -{% endif -%} - - {% if not lookup_parameters is defined %}template + {% if not lookup_parameters is defined -%} + template DEVICE - static void UpdateTransmembranePotentialDevice(ValueType {{free_variable.var_name}}, ValueType rY[], ValueType mDt, const ValueType mParameters[], bool mSetVoltageDerivativeToZero, ValueType mFixedVoltage, DeviceStimulusFunctor stim, ValueType capacitance); + static void UpdateTransmembranePotentialDevice( + ValueType {{free_variable.var_name}}, + ValueType rY[], + ValueType mDt, + const ValueType mParameters[], + bool mSetVoltageDerivativeToZero, + ValueType mFixedVoltage, + DeviceStimulusFunctor stim, + ValueType capacitance); template DEVICE - static void SolveClosedFormVarsDevice(ValueType rY[TOTAL_SIZE], ValueType mDt, const ValueType mParameters[], bool mSetVoltageDerivativeToZero, ValueType mFixedVoltage, ValueType capacitance); + static void SolveClosedFormVarsDevice( + ValueType rY[TOTAL_SIZE], + ValueType mDt, + const ValueType mParameters[], + bool mSetVoltageDerivativeToZero, + ValueType mFixedVoltage, + ValueType capacitance); - {%- if nonlinear_state_vars|length > 0 %}template + {% if nonlinear_state_vars|length > 0 -%} + template DEVICE static void FillInitialGuessDevice(ValueType _guess[NONLINEAR_SIZE], const ValueType rY[TOTAL_SIZE]); template DEVICE - static void ScatterSolutionDevice(const ValueType _guess[NONLINEAR_SIZE], ValueType rY[TOTAL_SIZE]);{% endif %}{% endif %} + static void ScatterSolutionDevice(const ValueType _guess[NONLINEAR_SIZE], ValueType rY[TOTAL_SIZE]); + {%- endif %} {# nonlinear_state_vars #} + {%- endif %} {# lookup_parameters #} protected: void UpdateTransmembranePotential(double {{free_variable.var_name}}); void ComputeOneStepExceptVoltage(double {{free_variable.var_name}}); -{% include "Shared/hpp/ComputeDerivedQuantities" %} +{% include "Shared/hpp/ComputeDerivedQuantities" -%} + {% include "Shared/hpp/CHASTE_CLASS_EXPORT" %} -{# As CHASTE_CLASS_EXPORT defines our closing bracket for our class, and also the end of the double include guard for this file, - we cannot easily add our extra includes below within the double include guard. Hence we should ensure anything included below - also has its own double include guard (or is ok to be included multiple times). #} -{% if not lookup_parameters is defined %} +{% if not lookup_parameters is defined -%} #ifdef __CUDACC__ #include "{{ file_name }}Kernels.hpp" #include "BackwardEulerKernels.hpp" -#endif{% endif %} \ No newline at end of file +#endif +{%- endif %} \ No newline at end of file diff --git a/chaste_codegen/templates/cvode_model.cpp b/chaste_codegen/templates/cvode_model.cpp index e1a9c65de..4ab62271d 100644 --- a/chaste_codegen/templates/cvode_model.cpp +++ b/chaste_codegen/templates/cvode_model.cpp @@ -2,7 +2,6 @@ {% include "Shared/cpp/header_comments" %} {% include "Shared/cpp/includes" %} {% include "Shared/cpp/lookup_tables" %} -#include "ChasteCvodeMacros.hpp" {% include "Shared/cpp/UseCellMLDefaultStimulus" %} {% include "Cvode/cpp/GetIntracellularCalciumConcentration" %} {%- include "Shared/cpp/constructor_declaration" %} @@ -16,6 +15,5 @@ {%- include "Cvode/cpp/ComputeDerivedQuantities" %} {% include "Shared/cpp/OdeSystemInformation" %} {% include "Shared/cpp/CHASTE_CLASS_EXPORT" %} -#include "ChasteCpuMacros.hpp" #endif // CHASTE_CVODE {%endwith%} \ No newline at end of file diff --git a/chaste_codegen/templates/cvode_model.hpp b/chaste_codegen/templates/cvode_model.hpp index 102d41127..b9caa686e 100644 --- a/chaste_codegen/templates/cvode_model.hpp +++ b/chaste_codegen/templates/cvode_model.hpp @@ -3,7 +3,6 @@ {% include "Shared/hpp/includes" %} #include "{{base_class}}.hpp" #include "HostDeviceMacros.hpp" -#include "ChasteCvodeMacros.hpp" {% include "Shared/hpp/class_declaration" %} static constexpr unsigned TOTAL_SIZE = {{ state_vars|length }}u; static constexpr unsigned NNZ = {{ sparse_nnz }}u; @@ -37,6 +36,4 @@ #ifdef __CUDACC__ #include "{{ file_name }}Kernels.hpp" #endif{% endif %} - -#include "ChasteCpuMacros.hpp" #endif // CHASTE_CVODE \ No newline at end of file From ce8ab72f19175d900c9e438ac9ba33af79159ba9 Mon Sep 17 00:00:00 2001 From: Joseph Simkin Date: Sat, 28 Feb 2026 10:39:07 +0000 Subject: [PATCH 14/28] Made kernel generation toggleable through command line --- chaste_codegen/_command_line_script.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/chaste_codegen/_command_line_script.py b/chaste_codegen/_command_line_script.py index 4c4f4144a..10de1507f 100644 --- a/chaste_codegen/_command_line_script.py +++ b/chaste_codegen/_command_line_script.py @@ -99,6 +99,8 @@ def process_command_line(): help="quiet operation, don't print informational messages to screen") group.add_argument('--skip-singularity-fixes', action='store_true', default=False, help="skip singularity fixes in Goldman-Hodgkin-Katz (GHK) equations.") + group.add_argument('--generate-kernels', action='store_true', default=False, + help="Generate GPU/Device kernel files (...Kernels.hpp) for supported model types.") group = parser.add_argument_group('Chaste options', description='Options specific to Chaste code output') group.add_argument('-y', '--dll', '--dynamically-loadable', dest='dynamically_loadable', @@ -198,8 +200,8 @@ def process_command_line(): # Must make a copy of ext so that if we modify the extensions here, this is the only translator that gets those modifications ext = list(ext) if ext else list(translator_class.DEFAULT_EXTENSIONS) - # Make sure we generate GPU kernels for models that provide kernel templates - if translator[2] in TRANSLATORS_WITH_GPU: + # Make sure we generate GPU kernels for models that provide kernel templates (if they are wanted) + if args.generate_kernels and translator[2] in TRANSLATORS_WITH_GPU: ext.append('Kernels.hpp') if args.cls_name is not None: @@ -223,6 +225,9 @@ def process_command_line(): print(file) else: with translator_class(model, outfile_base, header_ext=ext[0], **vars(args)) as chaste_model: + # TODO: Consider adding a class variable chaste_model.generate_kernels and using this to prevent + # filling unused jinja template variables (if filling in these variables really adds that much work!) + chaste_model.generate_chaste_code() for file, code in zip(get_files, chaste_model.generated_code): From e83027b552f06fa1757538167b92f237986c0abf Mon Sep 17 00:00:00 2001 From: Joseph Simkin Date: Sat, 28 Feb 2026 13:29:10 +0000 Subject: [PATCH 15/28] Clean up codebase for merge, changes to comments, variable names, deleted unused logic and added some safety feature --- chaste_codegen/_chaste_printer.py | 21 ++++-- chaste_codegen/_command_line_script.py | 5 +- chaste_codegen/_load_template.py | 68 +------------------ chaste_codegen/backward_euler_opt_model.py | 4 +- chaste_codegen/chaste_model.py | 47 +------------ chaste_codegen/cvode_chaste_model.py | 10 ++- .../cpp/EvaluateYDerivativesParts/Mathematics | 5 -- .../cpp/EvaluateYDerivativesParts/PackDY | 3 - .../cpp/EvaluateYDerivativesParts/UnpackY | 6 -- .../VoltageDerivsCPU | 20 ------ .../VoltageDerivsGPU | 13 ---- .../templates/Shared/cpp/parameters | 2 +- 12 files changed, 35 insertions(+), 169 deletions(-) delete mode 100644 chaste_codegen/templates/Shared/cpp/EvaluateYDerivativesParts/Mathematics delete mode 100644 chaste_codegen/templates/Shared/cpp/EvaluateYDerivativesParts/PackDY delete mode 100644 chaste_codegen/templates/Shared/cpp/EvaluateYDerivativesParts/UnpackY delete mode 100644 chaste_codegen/templates/Shared/cpp/EvaluateYDerivativesParts/VoltageDerivsCPU delete mode 100644 chaste_codegen/templates/Shared/cpp/EvaluateYDerivativesParts/VoltageDerivsGPU diff --git a/chaste_codegen/_chaste_printer.py b/chaste_codegen/_chaste_printer.py index c4466d3af..4a6ed8b91 100644 --- a/chaste_codegen/_chaste_printer.py +++ b/chaste_codegen/_chaste_printer.py @@ -20,11 +20,20 @@ class ChastePrinter(Printer): """ Converts Sympy expressions to strings for use in Chaste code generation. + + Expressions are generated in terms of the CHASTE_MATH name space, it is then the job + of the Jinja template to ensure CHASTE_MATH points to the correct C++ namespace + using the appropriate #include. E.g., #include "ChasteCpuMacros.hpp" converts these + namespaced calls to std library calls + + To use, create a :class:`ChastePrinter` instance, and call its method :meth:`doprint()` with a Sympy expression argument. + Arguments: + ``symbol_function`` A function that converts symbols to strings (variable names). ``derivative_function`` @@ -32,6 +41,7 @@ class ChastePrinter(Printer): ``lookup_table_function`` A function that prints lookup table expressions or returns None if the expression is not in the lookup table. + """ _function_names = { 'abs_': 'CHASTE_MATH::Abs', @@ -68,8 +78,6 @@ class ChastePrinter(Printer): 'sign': 'CHASTE_MATH::Sign', - # Note: These use the special platform macros we discussed - # because they require different arguments/scopes on CPU vs GPU. 'GetIntracellularAreaStimulus': 'CHASTE_STIM', 'HeartConfig::Instance()->GetCapacitance': 'CHASTE_CAP', 'GetExperimentalVoltageAtTimeT': 'CHASTE_EXP_VOLT' @@ -133,8 +141,7 @@ def _print_Or(self, expr): return ' || '.join(['(' + self._bracket(x, my_prec) + ')' for x in expr.args]) def _print_ordinary_pow(self, expr): - """ Handles Pow(), handles just ordinary powers without division. - For C++ printing we need to write ``x**y`` as ``pow(x, y)`` with lowercase ``p``.""" + """ Handles Pow(), handles just ordinary powers without division.""" p = precedence(expr) if expr.exp == 0.5: return 'CHASTE_MATH::Sqrt(' + self._bracket(expr.base, p) + ')' @@ -153,7 +160,11 @@ def _print_IntegerConstant(self, expr): return self._print_int(float(expr)) def _print_float(self, expr): - """ Handles ``float``s. """ + """ + Handles ``float``s. All constants must be wrapped with a macro so that + generated code that ends up in a device kernel can easily be cast between + float and double as this has huge performance implications on device + """ # print integers as int if they are between min & max int in c++ if expr.is_integer() and C_MIN_INT < expr < C_MAX_INT: return cxxcode(int(expr), standard='C++11') diff --git a/chaste_codegen/_command_line_script.py b/chaste_codegen/_command_line_script.py index 10de1507f..48f2be445 100644 --- a/chaste_codegen/_command_line_script.py +++ b/chaste_codegen/_command_line_script.py @@ -39,7 +39,8 @@ TRANSLATORS_WITH_MODIFIERS = tuple('--' + t for t in TRANSLATORS if TRANSLATORS[t][3]) -TRANSLATORS_WITH_GPU = ['Cvode', 'BackwardEuler'] +# Store translator types with device implementations available +TRANSLATORS_WITH_KERNELS = ['FromCellMLCvode', 'FromCellMLBackwardEuler'] # Store extensions we can use and how to use them, based on extension of given outfile EXTENSION_LOOKUP_FROM_OUTFILE = {'.cellml': ['.hpp', '.cpp'], '': ['.hpp', '.cpp'], '.cpp': ['.hpp', '.cpp'], @@ -201,7 +202,7 @@ def process_command_line(): ext = list(ext) if ext else list(translator_class.DEFAULT_EXTENSIONS) # Make sure we generate GPU kernels for models that provide kernel templates (if they are wanted) - if args.generate_kernels and translator[2] in TRANSLATORS_WITH_GPU: + if args.generate_kernels and translator[1] in TRANSLATORS_WITH_KERNELS: ext.append('Kernels.hpp') if args.cls_name is not None: diff --git a/chaste_codegen/_load_template.py b/chaste_codegen/_load_template.py index 0e57ca3c9..90bb1c68f 100644 --- a/chaste_codegen/_load_template.py +++ b/chaste_codegen/_load_template.py @@ -4,75 +4,12 @@ import logging import os import posixpath -import re import jinja2 import chaste_codegen as cg -def regex_replace(s, find, replace): - """Regex replace that skips // and /* */ comments.""" - if s is None: - return s - - out = [] - in_block_comment = False - - lines = s.splitlines(keepends=True) - for line in lines: - i = 0 - result = '' - - while i < len(line): - if in_block_comment: - end = line.find('*/', i) - if end == -1: - # whole line is inside block comment - result += line[i:] - i = len(line) - else: - # exit block comment - result += line[i:end+2] - i = end + 2 - in_block_comment = False - else: - # look for comment starts - line_comment = line.find('//', i) - block_comment = line.find('/*', i) - - # choose nearest comment start - candidates = [p for p in [line_comment, block_comment] if p != -1] - if not candidates: - # pure code - result += re.sub(find, replace, line[i:]) - i = len(line) - else: - next_comment = min(candidates) - # process code before comment - result += re.sub(find, replace, line[i:next_comment]) - i = next_comment - - if next_comment == line_comment: - # rest of line is // comment - result += line[i:] - i = len(line) - else: - # enter /* */ block - end = line.find('*/', i+2) - if end == -1: - result += line[i:] - i = len(line) - in_block_comment = True - else: - result += line[i:end+2] - i = end + 2 - - out.append(result) - - return ''.join(out) - - # Shared Jinja environment _environment = None @@ -95,9 +32,6 @@ def _jinja_environment(): # but raise a jinja2.UndefinedError instead. undefined=jinja2.StrictUndefined, ) - - # register the filter - _environment.filters['regex_replace'] = regex_replace return _environment @@ -118,4 +52,4 @@ def load_template(*name): log.warning('Paths to templates must be specified as posix paths.') env = _jinja_environment() - return env.get_template(path) + return env.get_template(path) \ No newline at end of file diff --git a/chaste_codegen/backward_euler_opt_model.py b/chaste_codegen/backward_euler_opt_model.py index 98bacac0a..7498678eb 100644 --- a/chaste_codegen/backward_euler_opt_model.py +++ b/chaste_codegen/backward_euler_opt_model.py @@ -12,7 +12,9 @@ def __init__(self, model, file_name, **kwargs): self._lookup_tables = LookupTables(model, lookup_params=kwargs.get('lookup_table', DEFAULT_LOOKUP_PARAMETERS)) super().__init__(model, file_name, **kwargs) - self._templates = ['backward_euler_model.hpp', 'backward_euler_model.cpp'] + # Note: Opt models do not currently support kernel generation, but do inherit + # 'backward_euler_kernels.hpp' as a template in _templates. The CLI script + # filters these out via TRANSLATORS_WITH_KERNELS so they are never used self._vars_for_template['model_type'] += 'Opt' self._update_formatted_deriv_eq() self._vars_for_template['lookup_parameters'] = self._lookup_tables.print_lookup_parameters(self._printer) diff --git a/chaste_codegen/chaste_model.py b/chaste_codegen/chaste_model.py index 3bd32b7c7..64a62b24a 100644 --- a/chaste_codegen/chaste_model.py +++ b/chaste_codegen/chaste_model.py @@ -1,5 +1,4 @@ import time - from contextlib import contextmanager from sympy import Derivative, Float @@ -54,7 +53,8 @@ def __enter__(self): @contextmanager def _device_mode(self): """ Creates an _is_generating_device_code context where we can run methods under 'with' and if the method contains - any branches: if self._is_generating_device_code:, the if part will run when the method is called in this context + any branches like: if self._is_generating_device_code:, the if part will run when the method is called in this context + Example: with self._device_mode(): @@ -103,7 +103,7 @@ def __init__(self, model, file_name, **kwargs): self._model = model - # By default we are generating CPU code, the context manager handles setting and unsetting this for device compilation + # By default we are generating CPU code, the context manager handles setting and unsetting this for device generation self._is_generating_device_code = False # retrieve probabilities that don't stay in 0 ... 1 range and shouldn't be checked @@ -295,47 +295,6 @@ def _print_rhs_with_modifiers(self, modifier, eq, modifiers_with_defining_eqs=se return self._format_modifier(modifier) + '->Calc(' + modifier_printer.doprint(eq) + ', ' + \ self._printer.doprint(self._model.time_variable) + ')' return modifier_printer.doprint(eq) - - def _print_rhs_with_modifiers2(self, modifier, eq, modifiers_with_defining_eqs=set()): - """Fixed RHS printer using self._state_vars for indexing""" - - def handle_variable(variable): - # 1. Handle Modifiers (Drug/Clamp) - if variable in self._modifiers and variable not in modifiers_with_defining_eqs: - if self._is_generating_device_code: - # On device, if it's a state var being modified, just print the raw rY[i] access - if variable in self._state_vars: - return self._format_rY_lookup(self._state_vars.index(variable), variable) - return self._printer.doprint(variable) - else: - # Standard Host behavior: modifier->Calc(rY[i], time) - return (self._format_modifier(variable) + '->Calc(' + - self._printer.doprint(variable) + ', ' + - self._printer.doprint(self._model.time_variable) + ')') - - # 2. Handle State Variables: Map Sympy symbol to vector index - if variable in self._state_vars: - index = self._state_vars.index(variable) - return self._format_rY_lookup(index, variable) - - # 3. Default: Handles parameters, time, and math constants via existing printers/macros - return self._printer.doprint(variable) - - # Create the recursive printer - modifier_printer = cg.ChastePrinter( - symbol_function=handle_variable, - derivative_function=lambda deriv: self._printer.doprint(deriv), - # Disable lookup tables on device to avoid host-pointer access - lookup_table_function=lambda e: None if self._is_generating_device_code else self._printer.lookup_table_function(e) - ) - - # 4. Handle top-level modification of the RHS result - if modifier in self._modifiers and not self._is_generating_device_code: - return (self._format_modifier(modifier) + '->Calc(' + - modifier_printer.doprint(eq) + ', ' + - self._printer.doprint(self._model.time_variable) + ')') - - return modifier_printer.doprint(eq) def _format_modifier(self, var): """ Formatting of modifier for printing""" diff --git a/chaste_codegen/cvode_chaste_model.py b/chaste_codegen/cvode_chaste_model.py index 21784e422..8ce1ce740 100644 --- a/chaste_codegen/cvode_chaste_model.py +++ b/chaste_codegen/cvode_chaste_model.py @@ -72,8 +72,14 @@ def __init__(self, model, file_name, **kwargs): self._vars_for_template['sparse_colind'] = col_ind self._vars_for_template['sparse_nnz'] = len(sorted_jac_entries) else: - self._vars_for_template['jacobian_equations'], self._vars_for_template['jacobian_entries'] = \ - [], Matrix() + self._vars_for_template['jacobian_equations'] = [] + self._vars_for_template['jacobian_entries'] = Matrix() + self._vars_for_template['jacobian_equations_device'] = [] + self._vars_for_template['jacobian_entries_device'] = [] + self._vars_for_template['sparse_jacobian_entries'] = [] + self._vars_for_template['sparse_rowptr'] = [] + self._vars_for_template['sparse_colind'] = [] + self._vars_for_template['sparse_nnz'] = 0 def _add_data_clamp_to_model(self): """ Add add membrane_data_clamp_current_conductance and membrane_data_clamp_current to the model""" diff --git a/chaste_codegen/templates/Shared/cpp/EvaluateYDerivativesParts/Mathematics b/chaste_codegen/templates/Shared/cpp/EvaluateYDerivativesParts/Mathematics deleted file mode 100644 index 9b2e027a2..000000000 --- a/chaste_codegen/templates/Shared/cpp/EvaluateYDerivativesParts/Mathematics +++ /dev/null @@ -1,5 +0,0 @@ -// Mathematics -{% for deriv in y_derivative_equations %}{%- if deriv.is_voltage%}double {{deriv.lhs}};{%- endif %}{%- endfor %} -{%- for deriv in y_derivative_equations %}{%- if deriv.in_eqs_excl_voltage %} -const double {{deriv.lhs}} = {{deriv.rhs}}; // {{deriv.units}}{%- endif %} -{%- endfor %} \ No newline at end of file diff --git a/chaste_codegen/templates/Shared/cpp/EvaluateYDerivativesParts/PackDY b/chaste_codegen/templates/Shared/cpp/EvaluateYDerivativesParts/PackDY deleted file mode 100644 index 301fdad57..000000000 --- a/chaste_codegen/templates/Shared/cpp/EvaluateYDerivativesParts/PackDY +++ /dev/null @@ -1,3 +0,0 @@ -{% for deriv in y_derivatives %} -CHASTE_VEC_GET(rDY, {{loop.index0}}) = {{deriv}}; -{%- endfor %} \ No newline at end of file diff --git a/chaste_codegen/templates/Shared/cpp/EvaluateYDerivativesParts/UnpackY b/chaste_codegen/templates/Shared/cpp/EvaluateYDerivativesParts/UnpackY deleted file mode 100644 index d7d33f2a1..000000000 --- a/chaste_codegen/templates/Shared/cpp/EvaluateYDerivativesParts/UnpackY +++ /dev/null @@ -1,6 +0,0 @@ -// Inputs: -// Time units: millisecond -{%- for state_var in state_vars %} -{% if state_var.in_y_deriv %}double {{ state_var.var }} = {{state_var.rY_lookup}}; -// Units: {{state_var.units}}; Initial value: {{state_var.initial_value}} -{%- endif %}{%- endfor %} \ No newline at end of file diff --git a/chaste_codegen/templates/Shared/cpp/EvaluateYDerivativesParts/VoltageDerivsCPU b/chaste_codegen/templates/Shared/cpp/EvaluateYDerivativesParts/VoltageDerivsCPU deleted file mode 100644 index 56028e7ff..000000000 --- a/chaste_codegen/templates/Shared/cpp/EvaluateYDerivativesParts/VoltageDerivsCPU +++ /dev/null @@ -1,20 +0,0 @@ -if (mSetVoltageDerivativeToZero) -{ - {% for deriv in y_derivative_equations %}{%- if deriv.is_voltage %}{{ deriv.lhs }} = 0.0;{%- endif %}{%- endfor %} -} -else -{ - {% for deriv in y_derivative_equations %} - {%- if not deriv.in_eqs_excl_voltage %} - {%- if deriv.is_data_clamp_current is defined and deriv.is_data_clamp_current %} - double {{ deriv.lhs }} = 0.0; - if (mDataClampIsOn) - { - {{ deriv.lhs }} = {{ deriv.rhs }}; - } - {%- else %} - {% if not deriv.is_voltage %}const double {% endif %}{{ deriv.lhs }} = {{ deriv.rhs }}; - {%- endif %} - {%- endif %} - {%- endfor %} -} \ No newline at end of file diff --git a/chaste_codegen/templates/Shared/cpp/EvaluateYDerivativesParts/VoltageDerivsGPU b/chaste_codegen/templates/Shared/cpp/EvaluateYDerivativesParts/VoltageDerivsGPU deleted file mode 100644 index 8dd6767f5..000000000 --- a/chaste_codegen/templates/Shared/cpp/EvaluateYDerivativesParts/VoltageDerivsGPU +++ /dev/null @@ -1,13 +0,0 @@ -if (mSetVoltageDerivativeToZero) -{ - {% for deriv in y_derivative_equations %}{%- if deriv.is_voltage %}{{ deriv.lhs }} = 0.0;{%- endif %}{%- endfor %} -} -else -{ - {% for deriv in y_derivative_equations %} - {%- if not deriv.in_eqs_excl_voltage %} - {# We treat everything as a standard derivative here, omitting Data Clamp branches #} - {% if not deriv.is_voltage %}const double {% endif %}{{ deriv.lhs }} = {{ deriv.rhs }}; - {%- endif %} - {%- endfor %} -} \ No newline at end of file diff --git a/chaste_codegen/templates/Shared/cpp/parameters b/chaste_codegen/templates/Shared/cpp/parameters index 7fd593ec0..c4d8dedfe 100644 --- a/chaste_codegen/templates/Shared/cpp/parameters +++ b/chaste_codegen/templates/Shared/cpp/parameters @@ -5,4 +5,4 @@ {{mod.modifier}}); {%- endfor %} {%- for param in modifiable_parameters %} - {% if is_cvode is defined and is_cvode %}NV_Ith_S(this->mParameters, {{loop.index0}}){% else %}this->mParameters[{{loop.index0}}]{% endif %} = {{param["initial_value"]}}; // ({{param["comment_name"]}}) [{{param["units"]}}]{%- endfor %} \ No newline at end of file + {% if is_cvode is defined and is_cvode %}NV_Ith_S(this->mParameters, {{loop.index0}}){% else %}this->mParameters[{{loop.index0}}]{% endif %} = {{param["initial_value"]}}; // ({{param["comment_name"]}}) [{{param["units"]}}]{%- endfor %} \ No newline at end of file From a4005238071dd571d2e8af9bfb2f1602e7c07881 Mon Sep 17 00:00:00 2001 From: Joseph Simkin Date: Sun, 1 Mar 2026 14:28:56 +0000 Subject: [PATCH 16/28] Working codegen with new printer, passes all Chaste tests --- chaste_codegen/_chaste_printer.py | 6 +- chaste_codegen/templates/Shared/cpp/includes | 2 + chaste_codegen/templates/Shared/hpp/includes | 4 +- .../templates/Shared/kernels/includes | 3 +- .../templates/backward_euler_kernels.hpp | 1 - .../templates/backward_euler_model.hpp | 59 +++++-------------- chaste_codegen/templates/cvode_model.hpp | 21 ++++--- .../templates/cvode_model_kernels.hpp | 1 - 8 files changed, 36 insertions(+), 61 deletions(-) diff --git a/chaste_codegen/_chaste_printer.py b/chaste_codegen/_chaste_printer.py index 4a6ed8b91..88b5cb3bc 100644 --- a/chaste_codegen/_chaste_printer.py +++ b/chaste_codegen/_chaste_printer.py @@ -102,9 +102,9 @@ class ChastePrinter(Printer): } _literal_names = { - 'e': 'CHASTE_MATH::E', - 'nan': 'CHASTE_MATH::NaN', - 'pi': 'CHASTE_MATH::Pi', + 'e': 'CHASTE_CONST(CHASTE_MATH::E)', + 'nan': 'CHASTE_CONST(CHASTE_MATH::NaN)', + 'pi': 'CHASTE_CONST(CHASTE_MATH::Pi)', } def __init__(self, symbol_function=None, derivative_function=None, lookup_table_function=lambda e: None): diff --git a/chaste_codegen/templates/Shared/cpp/includes b/chaste_codegen/templates/Shared/cpp/includes index 2e4048eb7..54faaf012 100644 --- a/chaste_codegen/templates/Shared/cpp/includes +++ b/chaste_codegen/templates/Shared/cpp/includes @@ -9,6 +9,8 @@ #include "HeartConfig.hpp" #include "IsNan.hpp" #include "MathsCustomFunctions.hpp" +#include "ChasteMathDeviceNamespaces.hpp" +#include "ChasteCpuMacros.hpp" {% if is_cvode is defined and is_cvode %} #if CHASTE_SUNDIALS_VERSION >= 60000 #include "CvodeContextManager.hpp" diff --git a/chaste_codegen/templates/Shared/hpp/includes b/chaste_codegen/templates/Shared/hpp/includes index e08b48149..81f893d58 100644 --- a/chaste_codegen/templates/Shared/hpp/includes +++ b/chaste_codegen/templates/Shared/hpp/includes @@ -6,4 +6,6 @@ {%- if dynamically_loadable %} #include "AbstractDynamicallyLoadableEntity.hpp"{%- endif %} #include "AbstractStimulusFunction.hpp" -#include "StimulusEvaluatorCuda.hpp" \ No newline at end of file +#if USING_DEVICE_COMPILER +#include "StimulusEvaluatorCuda.hpp" +#endif \ No newline at end of file diff --git a/chaste_codegen/templates/Shared/kernels/includes b/chaste_codegen/templates/Shared/kernels/includes index 426fdba43..c4f2dffd4 100644 --- a/chaste_codegen/templates/Shared/kernels/includes +++ b/chaste_codegen/templates/Shared/kernels/includes @@ -1 +1,2 @@ -#include "MathsCustomFunctions.hpp" \ No newline at end of file +#include "MathsCustomFunctions.hpp" +#include "ChasteDeviceMacros.hpp" \ No newline at end of file diff --git a/chaste_codegen/templates/backward_euler_kernels.hpp b/chaste_codegen/templates/backward_euler_kernels.hpp index 919703aa7..c960d645f 100644 --- a/chaste_codegen/templates/backward_euler_kernels.hpp +++ b/chaste_codegen/templates/backward_euler_kernels.hpp @@ -1,6 +1,5 @@ {% include "Shared/kernels/header_comments" %} {% include "Shared/kernels/includes" %} -#include "ChasteCudaMacros.hpp" {% include "BE/kernels/ComputeOneStepExceptVoltageDevice" %} {# (file contains SolveClosedFormVars, FillInitialGuess, ScatterSolution) #} diff --git a/chaste_codegen/templates/backward_euler_model.hpp b/chaste_codegen/templates/backward_euler_model.hpp index 079902752..64cece467 100644 --- a/chaste_codegen/templates/backward_euler_model.hpp +++ b/chaste_codegen/templates/backward_euler_model.hpp @@ -2,15 +2,19 @@ {% include "Shared/hpp/includes" %} #include "{{base_class}}.hpp" {% if not lookup_parameters is defined -%} +#if USING_DEVICE_COMPILER template class BackwardEulerKernelLauncher; // Forward declare to hide CUDA-specifics from standard C++ compiler +#endif {%- endif %} {% with %}{% set base_class = base_class ~ "<" ~ nonlinear_state_vars|length ~ ">" %}{% include "Shared/hpp/class_declaration" %}{% endwith %} {% if not lookup_parameters is defined -%} +#if USING_DEVICE_COMPILER template using SolverKernelLauncher = BackwardEulerKernelLauncher<{{class_name}}, ValueType>; static constexpr unsigned TOTAL_SIZE = {{ state_vars|length }}u; static constexpr unsigned NONLINEAR_SIZE = {{ nonlinear_state_vars|length }}u; +#endif {%- endif %} {% include "Shared/hpp/DefaultStimulus_IntracellularCalciumConcentration" %} @@ -21,60 +25,25 @@ class BackwardEulerKernelLauncher; // Forward declare to hide CUDA-specifics fro {% if nonlinear_state_vars|length > 0 -%} void ComputeResidual(double {{free_variable.var_name}}, const double rCurrentGuess[{{nonlinear_state_vars|length}}], double rResidual[{{nonlinear_state_vars|length}}]); void ComputeJacobian(double {{free_variable.var_name}}, const double rCurrentGuess[{{nonlinear_state_vars|length}}], double rJacobian[{{nonlinear_state_vars|length}}][{{nonlinear_state_vars|length}}]); - - {% if not lookup_parameters is defined -%} + {%- endif %} {# nonlinear_state_vars #} +#if USING_DEVICE_COMPILER + {% if not lookup_parameters is defined -%}{# only generate kernels for non opt models -#} + {% if nonlinear_state_vars|length > 0 -%} template DEVICE - static void ComputeResidualDevice( - ValueType {{free_variable.var_name}}, - const ValueType rCurrentGuess[NONLINEAR_SIZE], - const ValueType rY[], - ValueType rResidual[NONLINEAR_SIZE], - ValueType mDt, - const ValueType mParameters[], - bool mSetVoltageDerivativeToZero, - ValueType mFixedVoltage, - ValueType capacitance, - const DeviceStimulusFunctor stim); + static void ComputeResidualDevice(ValueType {{free_variable.var_name}}, const ValueType rCurrentGuess[NONLINEAR_SIZE], const ValueType rY[], ValueType rResidual[NONLINEAR_SIZE], ValueType mDt, const ValueType mParameters[], bool mSetVoltageDerivativeToZero, ValueType mFixedVoltage, ValueType capacitance, const DeviceStimulusFunctor stim); template DEVICE - static void ComputeJacobianDevice( - ValueType {{free_variable.var_name}}, - const ValueType rCurrentGuess[NONLINEAR_SIZE], - const ValueType rY[], - ValueType rJacobian[NONLINEAR_SIZE][NONLINEAR_SIZE], - ValueType mDt, - const ValueType mParameters[], - bool mSetVoltageDerivativeToZero, - ValueType mFixedVoltage, - ValueType capacitance, - const DeviceStimulusFunctor stim); - {%- endif %} {# lookup_parameters #} + static void ComputeJacobianDevice(ValueType {{free_variable.var_name}}, const ValueType rCurrentGuess[NONLINEAR_SIZE], const ValueType rY[], ValueType rJacobian[NONLINEAR_SIZE][NONLINEAR_SIZE], ValueType mDt, const ValueType mParameters[], bool mSetVoltageDerivativeToZero, ValueType mFixedVoltage, ValueType capacitance, const DeviceStimulusFunctor stim); {%- endif %} {# nonlinear_state_vars #} - - {% if not lookup_parameters is defined -%} template DEVICE - static void UpdateTransmembranePotentialDevice( - ValueType {{free_variable.var_name}}, - ValueType rY[], - ValueType mDt, - const ValueType mParameters[], - bool mSetVoltageDerivativeToZero, - ValueType mFixedVoltage, - DeviceStimulusFunctor stim, - ValueType capacitance); + static void UpdateTransmembranePotentialDevice(ValueType {{free_variable.var_name}}, ValueType rY[], ValueType mDt, const ValueType mParameters[], bool mSetVoltageDerivativeToZero, ValueType mFixedVoltage, DeviceStimulusFunctor stim, ValueType capacitance); template DEVICE - static void SolveClosedFormVarsDevice( - ValueType rY[TOTAL_SIZE], - ValueType mDt, - const ValueType mParameters[], - bool mSetVoltageDerivativeToZero, - ValueType mFixedVoltage, - ValueType capacitance); + static void SolveClosedFormVarsDevice(ValueType rY[TOTAL_SIZE], ValueType mDt, const ValueType mParameters[], bool mSetVoltageDerivativeToZero, ValueType mFixedVoltage, ValueType capacitance); {% if nonlinear_state_vars|length > 0 -%} template @@ -86,7 +55,7 @@ class BackwardEulerKernelLauncher; // Forward declare to hide CUDA-specifics fro static void ScatterSolutionDevice(const ValueType _guess[NONLINEAR_SIZE], ValueType rY[TOTAL_SIZE]); {%- endif %} {# nonlinear_state_vars #} {%- endif %} {# lookup_parameters #} - +#endif protected: void UpdateTransmembranePotential(double {{free_variable.var_name}}); void ComputeOneStepExceptVoltage(double {{free_variable.var_name}}); @@ -95,7 +64,7 @@ class BackwardEulerKernelLauncher; // Forward declare to hide CUDA-specifics fro {% include "Shared/hpp/CHASTE_CLASS_EXPORT" %} {% if not lookup_parameters is defined -%} -#ifdef __CUDACC__ +#if USING_DEVICE_COMPILER #include "{{ file_name }}Kernels.hpp" #include "BackwardEulerKernels.hpp" #endif diff --git a/chaste_codegen/templates/cvode_model.hpp b/chaste_codegen/templates/cvode_model.hpp index b9caa686e..ccd62cce7 100644 --- a/chaste_codegen/templates/cvode_model.hpp +++ b/chaste_codegen/templates/cvode_model.hpp @@ -12,28 +12,31 @@ {{class_name}}(boost::shared_ptr pOdeSolver /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus); {% include "Shared/hpp/destructor_verify_state_variables_GetIIonic" %} void EvaluateYDerivatives(double {{free_variable.var_name}}, const {{vector_decl}} rY, {{vector_decl}} rDY); - {% if not lookup_parameters is defined%}template - DEVICE - static void EvaluateYDerivativesDevice(ValueType {{free_variable.var_name}}, const ValueType* rY, ValueType* rDY, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType* mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim);{% endif %} - {%- if derived_quantities|length > 0 %} + {% if jacobian_equations|length > 0 -%} + void EvaluateAnalyticJacobian(double {{free_variable.var_name}}, {{vector_decl}} rY, {{vector_decl}} rDY, CHASTE_CVODE_DENSE_MATRIX rJacobian, {{vector_decl}} rTmp1, {{vector_decl}} rTmp2, {{vector_decl}} rTmp3); + {%- endif %} + {% if derived_quantities|length > 0 -%} {{vector_decl}} ComputeDerivedQuantities(double {{free_variable.var_name}}, const {{vector_decl}} & rY); {%- endif %} - {%- if jacobian_equations|length > 0 %} - void EvaluateAnalyticJacobian(double {{free_variable.var_name}}, {{vector_decl}} rY, {{vector_decl}} rDY, CHASTE_CVODE_DENSE_MATRIX rJacobian, {{vector_decl}} rTmp1, {{vector_decl}} rTmp2, {{vector_decl}} rTmp3); - {% if not lookup_parameters is defined %}template +#if USING_DEVICE_COMPILER + {% if not lookup_parameters is defined%}template + DEVICE + static void EvaluateYDerivativesDevice(ValueType {{free_variable.var_name}}, const ValueType* rY, ValueType* rDY, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType* mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim); + template DEVICE static void EvaluateAnalyticJacobianDevice(ValueType {{free_variable.var_name}}, const ValueType *rY, ValueType *rDY, ValueType *rJacobian, ValueType *rTmp1, ValueType *rTmp2, ValueType *rTmp3, const unsigned nvars, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType *mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim); template DEVICE - static void EvaluateSparseAnalyticJacobianDevice(ValueType {{free_variable.var_name}}, const ValueType *rY, ValueType *rDY, ValueType *rJacobian, ValueType *rTmp1, ValueType *rTmp2, ValueType *rTmp3, const unsigned nvars, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType *mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim);{% endif %} + static void EvaluateSparseAnalyticJacobianDevice(ValueType {{free_variable.var_name}}, const ValueType *rY, ValueType *rDY, ValueType *rJacobian, ValueType *rTmp1, ValueType *rTmp2, ValueType *rTmp3, const unsigned nvars, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType *mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim); {%- endif %} +#endif {% include "Shared/hpp/CHASTE_CLASS_EXPORT" %} {# As CHASTE_CLASS_EXPORT defines our closing bracket for our class, and also the end of the double include guard for this file, we cannot easily add our extra includes below within the double include guard. Hence we should ensure anything included below also has its own double include guard (or is ok to be included multiple times). #} {% if not lookup_parameters is defined %} -#ifdef __CUDACC__ +#if USING_DEVICE_COMPILER #include "{{ file_name }}Kernels.hpp" #endif{% endif %} #endif // CHASTE_CVODE \ No newline at end of file diff --git a/chaste_codegen/templates/cvode_model_kernels.hpp b/chaste_codegen/templates/cvode_model_kernels.hpp index b0a86896d..a74f2f153 100644 --- a/chaste_codegen/templates/cvode_model_kernels.hpp +++ b/chaste_codegen/templates/cvode_model_kernels.hpp @@ -1,6 +1,5 @@ {% include "Shared/kernels/header_comments" %} {% include "Shared/kernels/includes" %} -#include "ChasteCudaMacros.hpp" {% include "Shared/kernels/EvaluateYDerivativesDevice"%} From 60e696604ae4aaab4c78804d64f3a768b6895ed7 Mon Sep 17 00:00:00 2001 From: Joseph Simkin Date: Sun, 1 Mar 2026 18:07:50 +0000 Subject: [PATCH 17/28] Fixed labview printer --- chaste_codegen/_chaste_printer.py | 166 ++++----------------- chaste_codegen/_chaste_printer_common.py | 182 +++++++++++++++++++++++ chaste_codegen/_labview_printer.py | 4 +- 3 files changed, 209 insertions(+), 143 deletions(-) create mode 100644 chaste_codegen/_chaste_printer_common.py diff --git a/chaste_codegen/_chaste_printer.py b/chaste_codegen/_chaste_printer.py index 88b5cb3bc..fbafb1b3e 100644 --- a/chaste_codegen/_chaste_printer.py +++ b/chaste_codegen/_chaste_printer.py @@ -11,12 +11,14 @@ from sympy.printing import cxxcode from sympy.printing.precedence import precedence +from chaste_codegen._chaste_printer_common import ChastePrinterCommon + C_MAX_INT = 2147483647 C_MIN_INT = -2147483647 -class ChastePrinter(Printer): +class ChastePrinter(ChastePrinterCommon): """ Converts Sympy expressions to strings for use in Chaste code generation. @@ -84,21 +86,21 @@ class ChastePrinter(Printer): } _extra_trig_names = { - 'sec': 'CHASTE_MATH::Sec', - 'csc': 'CHASTE_MATH::Csc', - 'cot': 'CHASTE_MATH::Cot', - 'sech': 'CHASTE_MATH::Sech', - 'csch': 'CHASTE_MATH::Csch', - 'coth': 'CHASTE_MATH::Coth', + 'sec': 'CHASTE_MATH::Cos', + 'csc': 'CHASTE_MATH::Sin', + 'cot': 'CHASTE_MATH::Tan', + 'sech': 'CHASTE_MATH::Cosh', + 'csch': 'CHASTE_MATH::Sinh', + 'coth': 'CHASTE_MATH::Tanh', } _extra_inverse_trig_names = { - 'asec': 'CHASTE_MATH::Asec', - 'acsc': 'CHASTE_MATH::Acsc', - 'acot': 'CHASTE_MATH::Acot', - 'asech': 'CHASTE_MATH::Asech', - 'acsch': 'CHASTE_MATH::Acsch', - 'acoth': 'CHASTE_MATH::Acoth', + 'asec': 'CHASTE_MATH::Acos', + 'acsc': 'CHASTE_MATH::Asin', + 'acot': 'CHASTE_MATH::Atan', + 'asech': 'CHASTE_MATH::Acosh', + 'acsch': 'CHASTE_MATH::Asinh', + 'acoth': 'CHASTE_MATH::Atanh', } _literal_names = { @@ -107,39 +109,6 @@ class ChastePrinter(Printer): 'pi': 'CHASTE_CONST(CHASTE_MATH::Pi)', } - def __init__(self, symbol_function=None, derivative_function=None, lookup_table_function=lambda e: None): - super().__init__(symbol_function, derivative_function) - self.lookup_table_function = lookup_table_function - - def _print(self, expr, **kwargs): - """Internal dispatcher. - - Here we intercept lookup table expressions if we have lookup tables. - Otherwise the base class method is used. - """ - printed_expr = self.lookup_table_function(expr) - if printed_expr: - return printed_expr - return super()._print(expr, **kwargs) - - def _print_And(self, expr): - """ Handles logical And. """ - my_prec = precedence(expr) - return ' && '.join(['(' + self._bracket(x, my_prec) + ')' for x in expr.args]) - - def _print_BooleanFalse(self, expr): - """ Handles False """ - return 'false' - - def _print_BooleanTrue(self, expr): - """ Handles True """ - return 'true' - - def _print_Or(self, expr): - """ Handles logical Or. """ - my_prec = precedence(expr) - return ' || '.join(['(' + self._bracket(x, my_prec) + ')' for x in expr.args]) - def _print_ordinary_pow(self, expr): """ Handles Pow(), handles just ordinary powers without division.""" p = precedence(expr) @@ -147,107 +116,22 @@ def _print_ordinary_pow(self, expr): return 'CHASTE_MATH::Sqrt(' + self._bracket(expr.base, p) + ')' return 'CHASTE_MATH::Pow(' + self._bracket(expr.base, p) + ', ' + self._bracket(expr.exp, p) + ')' - def _print_ternary(self, cond, expr): - parts = '' - parts += '(' - parts += self._print(cond) - parts += ') ? (' - parts += self._print(expr) - parts += ') : (' - return parts - - def _print_IntegerConstant(self, expr): - return self._print_int(float(expr)) - def _print_float(self, expr): """ Handles ``float``s. All constants must be wrapped with a macro so that generated code that ends up in a device kernel can easily be cast between float and double as this has huge performance implications on device + + ChastePrinterCommon._print_Mul strips away - signs in the expression and then + passes along the absolute value to print. When the multiplication is a number, + this means we get output of the form -CHASTE_CONST(...), hence for consistency, + we factor any negatives outside of CHASTE_CONST in the below. """ # print integers as int if they are between min & max int in c++ if expr.is_integer() and C_MIN_INT < expr < C_MAX_INT: return cxxcode(int(expr), standard='C++11') - else: - num_str = cxxcode(float(expr), standard='C++11') - return f'CHASTE_CONST({num_str})' - - def _print_int(self, expr): - """ Handles ``ints``s. """ - return self._print_float(float(expr)) - - def _print_ITE(self, expr): - """ Handles ITE (if then else) objects by rewriting them as Piecewise """ - return self._print_Piecewise(expr.rewrite(Piecewise)) - - def _print_Mul(self, expr): - """ - Handles multiplication & division, with n terms. - - Division is specified as a power: ``x / y --> x * y**-1``. - Subtraction is specified as ``x - y --> x + (-1 * y)``. - """ - # This method is mostly copied from sympy.printing.Str - - # Check overall sign of multiplication - sign = '' - c, e = expr.as_coeff_Mul() - if c < 0: - expr = _keep_coeff(-c, e) - sign = '-' - - # Collect all pows with more than one base element and exp = -1 - pow_brackets = [] - - # Gather terms for numerator and denominator - a, b = [], [] - for item in Mul.make_args(expr): - if item != 1.0: # In multiplications remove 1.0 * ... - # Check if this is a negative power and it's not in a lookup table, so we can write it as a division - if (item.is_commutative and item.is_Pow and item.exp.is_Rational and item.exp.is_negative - and not self.lookup_table_function(item)): - if item.exp != -1: - # E.g. x * y**(-2 / 3) --> x / y**(2 / 3) - # Add as power - b.append(Pow(item.base, -item.exp, evaluate=False)) - else: - # Add without power - b.append(Pow(item.base, -item.exp)) - - # Check if it's a negative power that needs brackets - # Sympy issue #14160 - if (len(item.args[0].args) != 1 and isinstance(item.base, Mul)): - pow_brackets.append(item) - - # Split Rationals over a and b, ignoring any 1s - elif item.is_Rational: - if item.p != 1: - a.append(Rational(item.p)) - if item.q != 1: - b.append(Rational(item.q)) - - else: - a.append(item) - - # Replace empty numerator with one - a = a or [S.One] - - # Convert terms to code - my_prec = precedence(expr) - a_str = [self._bracket(x, my_prec) for x in a] - b_str = [self._bracket(x, my_prec) for x in b] - - # Fix brackets for Pow with exp -1 with more than one Symbol - for item in pow_brackets: - assert item.base in b, "item.base should be kept in b for powers" - b_str[b.index(item.base)] = '(' + b_str[b.index(item.base)] + ')' - - # Combine numerator and denomenator and return - a_str = sign + ' * '.join(a_str) - if len(b) == 0: - return a_str - b_str = ' * '.join(b_str) - return a_str + ' / ' + (b_str if len(b) == 1 else '(' + b_str + ')') - - def _print_Not(self, expr): - return '!(' + self._print(Not(expr)) + ')' + + num_str = cxxcode(float(expr), standard='C++11') + if num_str.startswith('-'): + return f'-CHASTE_CONST({num_str[1:]})' + return f'CHASTE_CONST({num_str})' diff --git a/chaste_codegen/_chaste_printer_common.py b/chaste_codegen/_chaste_printer_common.py new file mode 100644 index 000000000..9976d64b3 --- /dev/null +++ b/chaste_codegen/_chaste_printer_common.py @@ -0,0 +1,182 @@ +from cellmlmanip.printer import Printer +from sympy import ( + Mul, + Not, + Piecewise, + Pow, + Rational, + S, +) +from sympy.core.mul import _keep_coeff +from sympy.printing import cxxcode +from sympy.printing.precedence import precedence + + +C_MAX_INT = 2147483647 +C_MIN_INT = -2147483647 + + +class ChastePrinterCommon(Printer): + """ + Converts Sympy expressions to strings for use in Chaste code generation. + + To use, create a :class:`ChastePrinter` instance, and call its method + :meth:`doprint()` with a Sympy expression argument. + + Arguments: + + ``symbol_function`` + A function that converts symbols to strings (variable names). + ``derivative_function`` + A function that converts derivatives to strings. + ``lookup_table_function`` + A function that prints lookup table expressions or returns None if the expression is not in the lookup table. + + """ + + """ Intended to be overridden by printer implementations""" + _function_names = {} + _extra_trig_names = {} + _extra_inverse_trig_names = {} + _literal_names = {} + + def __init__(self, symbol_function=None, derivative_function=None, lookup_table_function=lambda e: None): + super().__init__(symbol_function, derivative_function) + self.lookup_table_function = lookup_table_function + + def _print(self, expr, **kwargs): + """Internal dispatcher. + + Here we intercept lookup table expressions if we have lookup tables. + Otherwise the base class method is used. + """ + printed_expr = self.lookup_table_function(expr) + if printed_expr: + return printed_expr + return super()._print(expr, **kwargs) + + def _print_And(self, expr): + """ Handles logical And. """ + my_prec = precedence(expr) + return ' && '.join(['(' + self._bracket(x, my_prec) + ')' for x in expr.args]) + + def _print_BooleanFalse(self, expr): + """ Handles False """ + return 'false' + + def _print_BooleanTrue(self, expr): + """ Handles True """ + return 'true' + + def _print_Or(self, expr): + """ Handles logical Or. """ + my_prec = precedence(expr) + return ' || '.join(['(' + self._bracket(x, my_prec) + ')' for x in expr.args]) + + def _print_ordinary_pow(self, expr): + """ Handles Pow(), handles just ordinary powers without division. + For C++ printing we need to write ``x**y`` as ``pow(x, y)`` with lowercase ``p``.""" + p = precedence(expr) + if expr.exp == 0.5: + return 'sqrt(' + self._bracket(expr.base, p) + ')' + return 'pow(' + self._bracket(expr.base, p) + ', ' + self._bracket(expr.exp, p) + ')' + + def _print_ternary(self, cond, expr): + parts = '' + parts += '(' + parts += self._print(cond) + parts += ') ? (' + parts += self._print(expr) + parts += ') : (' + return parts + + def _print_IntegerConstant(self, expr): + return self._print_int(float(expr)) + + def _print_float(self, expr): + """ Handles ``float``s. """ + # print integers as int if they are between min & max int in c++ + if expr.is_integer() and C_MIN_INT < expr < C_MAX_INT: + return cxxcode(int(expr), standard='C++11') + else: + return cxxcode(float(expr), standard='C++11') + + def _print_int(self, expr): + """ Handles ``ints``s. """ + return self._print_float(float(expr)) + + def _print_ITE(self, expr): + """ Handles ITE (if then else) objects by rewriting them as Piecewise """ + return self._print_Piecewise(expr.rewrite(Piecewise)) + + def _print_Mul(self, expr): + """ + Handles multiplication & division, with n terms. + + Division is specified as a power: ``x / y --> x * y**-1``. + Subtraction is specified as ``x - y --> x + (-1 * y)``. + """ + # This method is mostly copied from sympy.printing.Str + + # Check overall sign of multiplication + sign = '' + c, e = expr.as_coeff_Mul() + if c < 0: + expr = _keep_coeff(-c, e) + sign = '-' + + # Collect all pows with more than one base element and exp = -1 + pow_brackets = [] + + # Gather terms for numerator and denominator + a, b = [], [] + for item in Mul.make_args(expr): + if item != 1.0: # In multiplications remove 1.0 * ... + # Check if this is a negative power and it's not in a lookup table, so we can write it as a division + if (item.is_commutative and item.is_Pow and item.exp.is_Rational and item.exp.is_negative + and not self.lookup_table_function(item)): + if item.exp != -1: + # E.g. x * y**(-2 / 3) --> x / y**(2 / 3) + # Add as power + b.append(Pow(item.base, -item.exp, evaluate=False)) + else: + # Add without power + b.append(Pow(item.base, -item.exp)) + + # Check if it's a negative power that needs brackets + # Sympy issue #14160 + if (len(item.args[0].args) != 1 and isinstance(item.base, Mul)): + pow_brackets.append(item) + + # Split Rationals over a and b, ignoring any 1s + elif item.is_Rational: + if item.p != 1: + a.append(Rational(item.p)) + if item.q != 1: + b.append(Rational(item.q)) + + else: + a.append(item) + + # Replace empty numerator with one + a = a or [S.One] + + # Convert terms to code + my_prec = precedence(expr) + a_str = [self._bracket(x, my_prec) for x in a] + b_str = [self._bracket(x, my_prec) for x in b] + + # Fix brackets for Pow with exp -1 with more than one Symbol + for item in pow_brackets: + assert item.base in b, "item.base should be kept in b for powers" + b_str[b.index(item.base)] = '(' + b_str[b.index(item.base)] + ')' + + # Combine numerator and denomenator and return + a_str = sign + ' * '.join(a_str) + if len(b) == 0: + return a_str + b_str = ' * '.join(b_str) + return a_str + ' / ' + (b_str if len(b) == 1 else '(' + b_str + ')') + + def _print_Not(self, expr): + return '!(' + self._print(Not(expr)) + ')' \ No newline at end of file diff --git a/chaste_codegen/_labview_printer.py b/chaste_codegen/_labview_printer.py index 8a40a91e4..8073c5a9f 100644 --- a/chaste_codegen/_labview_printer.py +++ b/chaste_codegen/_labview_printer.py @@ -1,9 +1,9 @@ from sympy import Not -from chaste_codegen._chaste_printer import ChastePrinter +from chaste_codegen._chaste_printer_common import ChastePrinterCommon -class LabviewPrinter(ChastePrinter): +class LabviewPrinter(ChastePrinterCommon): """ Converts Sympy expressions to strings for use in Chaste code generation. From 8b10fa7104821f4adec9bd377bb91735a22f8d80 Mon Sep 17 00:00:00 2001 From: Joseph Simkin Date: Sun, 1 Mar 2026 18:08:55 +0000 Subject: [PATCH 18/28] Added comment on output of lookup tables --- chaste_codegen/_lookup_tables.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/chaste_codegen/_lookup_tables.py b/chaste_codegen/_lookup_tables.py index 5777bbc8b..60befe9e4 100644 --- a/chaste_codegen/_lookup_tables.py +++ b/chaste_codegen/_lookup_tables.py @@ -53,6 +53,14 @@ class LookupTables: """ Holds information about lookuptables and methods to analyse the model for lookup tables. + + Note: the use of CHASTE_CONST and CHASTE_MATH inside of lookup tables is not completely tested. + There may be a mixture of floats wrapped in macros and some not wrapped in macros here (such as + CHASTE_CONST(3.2) vs 3.2 by itself) because lookup tables have not been implemented on device. + This will work as long as the macro definitions in Chaste remain sensible, however if we + do implement lookup tables on device, we will want to ensure that we do wrap all literals with + CHASTE_CONST and namespace all calls with CHASTE_MATH to ensure correctness and efficiency of + the device implementations. """ def __init__(self, model, lookup_params=DEFAULT_LOOKUP_PARAMETERS): From 0156b4756a1f5778a76455802394825bc8d6003c Mon Sep 17 00:00:00 2001 From: Joseph Simkin Date: Mon, 2 Mar 2026 14:37:07 +0000 Subject: [PATCH 19/28] Fixed printer for rush_larsen_c models and updated printer test to reflect new printer output --- chaste_codegen/__init__.py | 1 + chaste_codegen/_chaste_printer_common.py | 66 ++++++++++++-- chaste_codegen/rush_larsen_c.py | 4 +- chaste_codegen/tests/test_printer.py | 108 +++++++++++------------ 4 files changed, 117 insertions(+), 62 deletions(-) diff --git a/chaste_codegen/__init__.py b/chaste_codegen/__init__.py index 65e96bc8d..581e15e78 100644 --- a/chaste_codegen/__init__.py +++ b/chaste_codegen/__init__.py @@ -3,6 +3,7 @@ """ from cellmlmanip.parser import Transpiler +from ._chaste_printer_common import ChastePrinterCommon # noqa from ._chaste_printer import ChastePrinter # noqa # # Load constants and version information diff --git a/chaste_codegen/_chaste_printer_common.py b/chaste_codegen/_chaste_printer_common.py index 9976d64b3..12a05b885 100644 --- a/chaste_codegen/_chaste_printer_common.py +++ b/chaste_codegen/_chaste_printer_common.py @@ -33,12 +33,66 @@ class ChastePrinterCommon(Printer): A function that prints lookup table expressions or returns None if the expression is not in the lookup table. """ - - """ Intended to be overridden by printer implementations""" - _function_names = {} - _extra_trig_names = {} - _extra_inverse_trig_names = {} - _literal_names = {} + _function_names = { + 'abs_': 'fabs', + 'acos_': 'acos', + 'cos_': 'cos', + 'exp_': 'exp', + 'sqrt_': 'sqrt', + 'sin_': 'sin', + + 'Abs': 'fabs', + 'acos': 'acos', + 'acosh': 'acosh', + 'asin': 'asin', + 'asinh': 'asinh', + 'atan': 'atan', + 'atan2': 'atan2', + 'atanh': 'atanh', + 'ceiling': 'ceil', + 'cos': 'cos', + 'cosh': 'cosh', + 'exp': 'exp', + 'expm1': 'expm1', + 'factorial': 'factorial', + 'floor': 'floor', + 'log': 'log', + 'log10': 'log10', + 'log1p': 'log1p', + 'log2': 'log2', + 'sin': 'sin', + 'sinh': 'sinh', + 'sqrt': 'sqrt', + 'tan': 'tan', + 'tanh': 'tanh', + + 'sign': 'Signum', + 'GetIntracellularAreaStimulus': 'GetIntracellularAreaStimulus', + 'HeartConfig::Instance()->GetCapacitance': 'HeartConfig::Instance()->GetCapacitance', + 'GetExperimentalVoltageAtTimeT': 'GetExperimentalVoltageAtTimeT' + } + _extra_trig_names = { + 'sec': 'cos', + 'csc': 'sin', + 'cot': 'tan', + 'sech': 'cosh', + 'csch': 'sinh', + 'coth': 'tanh', + } + _extra_inverse_trig_names = { + 'asec': 'acos', + 'acsc': 'asin', + 'acot': 'atan', + 'asech': 'acosh', + 'acsch': 'asinh', + 'acoth': 'atanh', + } + + _literal_names = { + 'e': 'e', + 'nan': 'NAN', + 'pi': 'M_PI', + } def __init__(self, symbol_function=None, derivative_function=None, lookup_table_function=lambda e: None): super().__init__(symbol_function, derivative_function) diff --git a/chaste_codegen/rush_larsen_c.py b/chaste_codegen/rush_larsen_c.py index b2f562467..303aa2103 100644 --- a/chaste_codegen/rush_larsen_c.py +++ b/chaste_codegen/rush_larsen_c.py @@ -136,7 +136,7 @@ def _add_printers(self, lookup_table_function=lambda e: None): # (state variables, time, lhs of default_stimulus eqs, i_ionic and lhs of y_derivatives) # Print modifiable parameters as mParameters[index] self._printer = \ - cg.ChastePrinter(lambda variable: + cg.ChastePrinterCommon(lambda variable: get_variable_name(variable, variable in self._in_interface) if variable not in self._model.modifiable_parameters else self._print_modifiable_parameters(variable), @@ -144,7 +144,7 @@ def _add_printers(self, lookup_table_function=lambda e: None): lookup_table_function) # Printer for printing variable in comments e.g. for ode system information - self._name_printer = cg.ChastePrinter(lambda variable: get_variable_name(variable)) + self._name_printer = cg.ChastePrinterCommon(lambda variable: get_variable_name(variable)) def _print_sv_ind(self, v): var_name = "Y[%s]" % self._state_vars.index(list(v.free_symbols)[0]) diff --git a/chaste_codegen/tests/test_printer.py b/chaste_codegen/tests/test_printer.py index d1c7523f7..98d094919 100644 --- a/chaste_codegen/tests/test_printer.py +++ b/chaste_codegen/tests/test_printer.py @@ -57,12 +57,12 @@ def test_or(self, printer, x, y, z): == printer.doprint(sp.Eq(x, y) | sp.Eq(x, z)) == '(x == y) || (x == z)' def test_pow(self, printer, x, y): - assert printer.doprint(sp.sympify('x ** y')) == 'pow(x, y)' - assert printer.doprint(sp.sympify('Pow(x,y)')) == 'pow(x, y)' - assert printer.doprint(sp.sympify('x ** (1/2)')) == 'sqrt(x)' - assert printer.doprint(sp.sympify('x ** (-1/2)')) == '1 / sqrt(x)' + assert printer.doprint(sp.sympify('x ** y')) == 'CHASTE_MATH::Pow(x, y)' + assert printer.doprint(sp.sympify('Pow(x,y)')) == 'CHASTE_MATH::Pow(x, y)' + assert printer.doprint(sp.sympify('x ** (1/2)')) == 'CHASTE_MATH::Sqrt(x)' + assert printer.doprint(sp.sympify('x ** (-1/2)')) == '1 / CHASTE_MATH::Sqrt(x)' assert printer.doprint(1 / x) == '1 / x' - assert printer.doprint(sp.Pow(x, 0.5)) == 'sqrt(x)' + assert printer.doprint(sp.Pow(x, 0.5)) == 'CHASTE_MATH::Sqrt(x)' def test_piecewise_expressions(self, printer, x, y, z): # Piecewise expressions @@ -72,72 +72,72 @@ def test_piecewise_expressions(self, printer, x, y, z): assert printer.doprint(conditionalexp_r) == '((x > 0) ? (0) : ((x > 1) ? (1) : (2)))' def testabs_(self, printer, x, y): - assert printer.doprint(sp.Abs(x + y)) == 'fabs(x + y)' - assert printer.doprint(sp.Abs(sp.Float('3.2', 17), evaluate=False)) == 'fabs(3.2000000000000002)' - assert printer.doprint(sp.Abs(-3, evaluate=False)) == 'fabs(-3)' + assert printer.doprint(sp.Abs(x + y)) == 'CHASTE_MATH::Abs(x + y)' + assert printer.doprint(sp.Abs(sp.Float('3.2', 17), evaluate=False)) == 'CHASTE_MATH::Abs(CHASTE_CONST(3.2000000000000002))' + assert printer.doprint(sp.Abs(-3, evaluate=False)) == 'CHASTE_MATH::Abs(-3)' def test_trig_functions(self, printer, x): # Trig functions - assert printer.doprint(sp.acos(x)) == 'acos(x)' - assert printer.doprint(sp.acosh(x)) == 'acosh(x)' - assert printer.doprint(sp.asin(x)) == 'asin(x)' - assert printer.doprint(sp.asinh(x)) == 'asinh(x)' - assert printer.doprint(sp.atan(x)) == 'atan(x)' - assert printer.doprint(sp.atanh(x)) == 'atanh(x)' - assert printer.doprint(sp.ceiling(x)) == 'ceil(x)' - assert printer.doprint(sp.cos(x)) == 'cos(x)' - assert printer.doprint(sp.cosh(x)) == 'cosh(x)' - assert printer.doprint(sp.exp(x)) == 'exp(x)' - assert printer.doprint(sp.factorial(x)) == 'factorial(x)' - assert printer.doprint(sp.floor(x)) == 'floor(x)' - assert printer.doprint(sp.log(x)) == 'log(x)' - assert printer.doprint(sp.sin(x)) == 'sin(x)' - assert printer.doprint(sp.sinh(x)) == 'sinh(x)' - assert printer.doprint(sp.tan(x)) == 'tan(x)' - assert printer.doprint(sp.tanh(x)) == 'tanh(x)' + assert printer.doprint(sp.acos(x)) == 'CHASTE_MATH::Acos(x)' + assert printer.doprint(sp.acosh(x)) == 'CHASTE_MATH::Acosh(x)' + assert printer.doprint(sp.asin(x)) == 'CHASTE_MATH::Asin(x)' + assert printer.doprint(sp.asinh(x)) == 'CHASTE_MATH::Asinh(x)' + assert printer.doprint(sp.atan(x)) == 'CHASTE_MATH::Atan(x)' + assert printer.doprint(sp.atanh(x)) == 'CHASTE_MATH::Atanh(x)' + assert printer.doprint(sp.ceiling(x)) == 'CHASTE_MATH::Ceil(x)' + assert printer.doprint(sp.cos(x)) == 'CHASTE_MATH::Cos(x)' + assert printer.doprint(sp.cosh(x)) == 'CHASTE_MATH::Cosh(x)' + assert printer.doprint(sp.exp(x)) == 'CHASTE_MATH::Exp(x)' + assert printer.doprint(sp.factorial(x)) == 'CHASTE_MATH::Factorial(x)' + assert printer.doprint(sp.floor(x)) == 'CHASTE_MATH::Floor(x)' + assert printer.doprint(sp.log(x)) == 'CHASTE_MATH::Log(x)' + assert printer.doprint(sp.sin(x)) == 'CHASTE_MATH::Sin(x)' + assert printer.doprint(sp.sinh(x)) == 'CHASTE_MATH::Sinh(x)' + assert printer.doprint(sp.tan(x)) == 'CHASTE_MATH::Tan(x)' + assert printer.doprint(sp.tanh(x)) == 'CHASTE_MATH::Tanh(x)' # extra trig functions - assert printer.doprint(sp.sec(x)) == '1 / cos(x)' - assert printer.doprint(sp.csc(x)) == '1 / sin(x)' - assert printer.doprint(sp.cot(x)) == '1 / tan(x)' - assert printer.doprint(sp.asec(x)) == 'acos(1 / x)' - assert printer.doprint(sp.acsc(x)) == 'asin(1 / x)' - assert printer.doprint(sp.acot(x)) == 'atan(1 / x)' - assert printer.doprint(sp.sech(x)) == '1 / cosh(x)' - assert printer.doprint(sp.csch(x)) == '1 / sinh(x)' - assert printer.doprint(sp.coth(x)) == '1 / tanh(x)' - assert printer.doprint(sp.asech(x)) == 'acosh(1 / x)' - assert printer.doprint(sp.acsch(x)) == 'asinh(1 / x)' - assert printer.doprint(sp.acoth(x)) == 'atanh(1 / x)' + assert printer.doprint(sp.sec(x)) == '1 / CHASTE_MATH::Cos(x)' + assert printer.doprint(sp.csc(x)) == '1 / CHASTE_MATH::Sin(x)' + assert printer.doprint(sp.cot(x)) == '1 / CHASTE_MATH::Tan(x)' + assert printer.doprint(sp.asec(x)) == 'CHASTE_MATH::Acos(1 / x)' + assert printer.doprint(sp.acsc(x)) == 'CHASTE_MATH::Asin(1 / x)' + assert printer.doprint(sp.acot(x)) == 'CHASTE_MATH::Atan(1 / x)' + assert printer.doprint(sp.sech(x)) == '1 / CHASTE_MATH::Cosh(x)' + assert printer.doprint(sp.csch(x)) == '1 / CHASTE_MATH::Sinh(x)' + assert printer.doprint(sp.coth(x)) == '1 / CHASTE_MATH::Tanh(x)' + assert printer.doprint(sp.asech(x)) == 'CHASTE_MATH::Acosh(1 / x)' + assert printer.doprint(sp.acsch(x)) == 'CHASTE_MATH::Asinh(1 / x)' + assert printer.doprint(sp.acoth(x)) == 'CHASTE_MATH::Atanh(1 / x)' def test_custom_math_functions(self, printer, x): - assert printer.doprint(acos_(x)) == 'acos(x)' - assert printer.doprint(cos_(x)) == 'cos(x)' - assert printer.doprint(exp_(x)) == 'exp(x)' - assert printer.doprint(sin_(x)) == 'sin(x)' - assert printer.doprint(sqrt_(x)) == 'sqrt(x)' - assert printer.doprint(abs_(x)) == 'fabs(x)' + assert printer.doprint(acos_(x)) == 'CHASTE_MATH::Acos(x)' + assert printer.doprint(cos_(x)) == 'CHASTE_MATH::Cos(x)' + assert printer.doprint(exp_(x)) == 'CHASTE_MATH::Exp(x)' + assert printer.doprint(sin_(x)) == 'CHASTE_MATH::Sin(x)' + assert printer.doprint(sqrt_(x)) == 'CHASTE_MATH::Sqrt(x)' + assert printer.doprint(abs_(x)) == 'CHASTE_MATH::Abs(x)' def test_numbers(self, printer, x): # Number types assert printer.doprint(1) == '1' # int - assert printer.doprint(1.2) == '1.2' # float, short format - assert printer.doprint(math.pi) == '3.1415926535897931' # float, long format - assert printer.doprint(1.436432635636e-123) == '1.436432635636e-123' + assert printer.doprint(1.2) == 'CHASTE_CONST(1.2)' # float, short format + assert printer.doprint(math.pi) == 'CHASTE_CONST(3.1415926535897931)' # float, long format + assert printer.doprint(1.436432635636e-123) == 'CHASTE_CONST(1.436432635636e-123)' assert printer.doprint(x - x) == '0' # Zero assert printer.doprint(x / x) == '1' # One assert printer.doprint(-x / x) == '-1' # Negative one assert printer.doprint(5 * (x / x)) == '5' # Sympy integer - assert printer.doprint(5.5 * (x / x)) == '5.5' # Sympy float + assert printer.doprint(5.5 * (x / x)) == 'CHASTE_CONST(5.5)' # Sympy float assert printer.doprint(sp.Rational(5, 7)) == '5 / 7' # Sympy rational # Special numbers - assert printer.doprint(sp.pi) == 'M_PI' - assert printer.doprint(sp.E) == 'e' + assert printer.doprint(sp.pi) == 'CHASTE_CONST(CHASTE_MATH::Pi)' + assert printer.doprint(sp.E) == 'CHASTE_CONST(CHASTE_MATH::E)' # large ints - assert printer.doprint(8034023767017108950029959168) == '8.034023767017109e+27' - assert printer.doprint(-8034023767017108950029959168) == '-8.034023767017109e+27' + assert printer.doprint(8034023767017108950029959168) == 'CHASTE_CONST(8.034023767017109e+27)' + assert printer.doprint(-8034023767017108950029959168) == '-CHASTE_CONST(8.034023767017109e+27)' def test_unsupported_function(self, printer, x): f = sp.Function('f') @@ -162,13 +162,13 @@ def test_multiplication(self, printer, x, y, z): assert printer.doprint(x * (y + z)) == 'x * (y + z)' assert printer.doprint(x * y * z) == 'x * y * z' assert printer.doprint(x + y > x * z), 'x + y > x * z' - assert printer.doprint(x**2 + 3 * y**2) == 'pow(x, 2) + 3 * pow(y, 2)' - assert printer.doprint(x**(2 + 3 * y**2)) == 'pow(x, (2 + 3 * pow(y, 2)))' + assert printer.doprint(x**2 + 3 * y**2) == 'CHASTE_MATH::Pow(x, 2) + 3 * CHASTE_MATH::Pow(y, 2)' + assert printer.doprint(x**(2 + 3 * y**2)) == 'CHASTE_MATH::Pow(x, (2 + 3 * CHASTE_MATH::Pow(y, 2)))' assert printer.doprint(x**-1 * y**-1) == '1 / (x * y)' assert printer.doprint(x / y / z) == 'x / (y * z)' assert printer.doprint(x / y * z) == 'x * z / y' assert printer.doprint(x / (y * z)) == 'x / (y * z)' - assert printer.doprint(x * y**(-2 / (3 * x / x))) == 'x / pow(y, (2 / 3))' + assert printer.doprint(x * y**(-2 / (3 * x / x))) == 'x / CHASTE_MATH::Pow(y, (2 / 3))' # Sympy issue #14160 d = sp.Mul( From afdda267bcc4d246cda7cb0bf7e1e4758184415d Mon Sep 17 00:00:00 2001 From: Joseph Simkin Date: Mon, 2 Mar 2026 14:37:36 +0000 Subject: [PATCH 20/28] updated test to reflect new printer logic --- chaste_codegen/tests/test_lookup_tables.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chaste_codegen/tests/test_lookup_tables.py b/chaste_codegen/tests/test_lookup_tables.py index 0763bb018..1f8915082 100644 --- a/chaste_codegen/tests/test_lookup_tables.py +++ b/chaste_codegen/tests/test_lookup_tables.py @@ -168,7 +168,7 @@ def test_change_lookup_table(be_model): assert params_for_printing[1]['var'] == 'slow_inward_current$Cai' assert str(params_for_printing[1]['lookup_epxrs']) \ - == "[['-82.3 - 13.0287 * log(0.001 * slow_inward_current$Cai)', False]]" + == "[['-82.3 - 13.0287 * CHASTE_MATH::Log(0.001 * slow_inward_current$Cai)', False]]" def test_no_print_after_table(s_model): From 5ab2ff10a275657317bc977f26550f8d52ba7312 Mon Sep 17 00:00:00 2001 From: Joseph Simkin Date: Mon, 2 Mar 2026 14:39:31 +0000 Subject: [PATCH 21/28] Updated txt references for new printer --- chaste_codegen/data/tests/test_jacobian_matrix_2.txt | 2 +- chaste_codegen/data/tests/test_jacobian_matrix_2.txt_python36 | 2 +- .../data/tests/test_lookup_tables_change_lookup_table.txt | 2 +- .../data/tests/test_lookup_tables_method_printed_for.txt | 2 +- .../tests/test_lookup_tables_multiple_methods_printed_for.txt | 2 +- .../data/tests/test_lookup_tables_nested_method_printed_for.txt | 2 +- .../data/tests/test_lookup_tables_no_method_printed_for.txt | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/chaste_codegen/data/tests/test_jacobian_matrix_2.txt b/chaste_codegen/data/tests/test_jacobian_matrix_2.txt index 8f824f21d..770ae0759 100644 --- a/chaste_codegen/data/tests/test_jacobian_matrix_2.txt +++ b/chaste_codegen/data/tests/test_jacobian_matrix_2.txt @@ -1 +1 @@ -[{'i': 0, 'j': 0, 'entry': '-0.29999999999999999 - 36 * pow(potassium_channel_n_gate$n, 4) - x0 * sodium_channel_h_gate$h'}, {'i': 1, 'j': 0, 'entry': '(1 - sodium_channel_m_gate$m) * ((x4) ? (0.050000000000000003) : (-0.10000000000000001 * x7 - 0.10000000000000001 * x3 * x5 / pow(x6, 2))) + 0.22222222222222221 * x8 * sodium_channel_m_gate$m'}, {'i': 2, 'j': 0, 'entry': '-0.050000000000000003 * x9 * (0.070000000000000007 - 0.070000000000000007 * sodium_channel_h_gate$h) - 0.10000000000000001 * x10 * sodium_channel_h_gate$h / pow(x11, 2)'}, {'i': 3, 'j': 0, 'entry': '(1 - potassium_channel_n_gate$n) * ((x13) ? (0.0050000000000000001) : (-0.01 * x16 - 0.01 * x12 * x14 / pow(x15, 2))) - 0.0015625000000000001 * x17 * potassium_channel_n_gate$n'}, {'i': 0, 'j': 1, 'entry': '-360 * x1 * pow(sodium_channel_m_gate$m, 2) * sodium_channel_h_gate$h'}, {'i': 1, 'j': 1, 'entry': '-((x4) ? (3.5 + 0.050000000000000003 * membrane$V) : (-x3 * x7)) - 4 * x8'}, {'i': 0, 'j': 2, 'entry': '-x0 * x1'}, {'i': 2, 'j': 2, 'entry': '-1 / x11 - 0.070000000000000007 * x9'}, {'i': 0, 'j': 3, 'entry': '-144 * pow(potassium_channel_n_gate$n, 3) * (87 + membrane$V)'}, {'i': 3, 'j': 3, 'entry': '-((x13) ? (0.42499999999999999 + 0.0050000000000000001 * membrane$V) : (-0.099999999999999992 * x12 * x16)) - 0.125 * x17'}] \ No newline at end of file +[{'i': 0, 'j': 0, 'entry': '-CHASTE_CONST(0.29999999999999999) - 36 * CHASTE_MATH::Pow(potassium_channel_n_gate$n, 4) - x0 * sodium_channel_h_gate$h'}, {'i': 1, 'j': 0, 'entry': '(1 - sodium_channel_m_gate$m) * ((x4) ? (CHASTE_CONST(0.050000000000000003)) : (-CHASTE_CONST(0.10000000000000001) * x7 - CHASTE_CONST(0.10000000000000001) * x3 * x5 / CHASTE_MATH::Pow(x6, 2))) + CHASTE_CONST(0.22222222222222221) * x8 * sodium_channel_m_gate$m'}, {'i': 2, 'j': 0, 'entry': '-CHASTE_CONST(0.050000000000000003) * x9 * (CHASTE_CONST(0.070000000000000007) - CHASTE_CONST(0.070000000000000007) * sodium_channel_h_gate$h) - CHASTE_CONST(0.10000000000000001) * x10 * sodium_channel_h_gate$h / CHASTE_MATH::Pow(x11, 2)'}, {'i': 3, 'j': 0, 'entry': '(1 - potassium_channel_n_gate$n) * ((x13) ? (CHASTE_CONST(0.0050000000000000001)) : (-CHASTE_CONST(0.01) * x16 - CHASTE_CONST(0.01) * x12 * x14 / CHASTE_MATH::Pow(x15, 2))) - CHASTE_CONST(0.0015625000000000001) * x17 * potassium_channel_n_gate$n'}, {'i': 0, 'j': 1, 'entry': '-360 * x1 * CHASTE_MATH::Pow(sodium_channel_m_gate$m, 2) * sodium_channel_h_gate$h'}, {'i': 1, 'j': 1, 'entry': '-((x4) ? (CHASTE_CONST(3.5) + CHASTE_CONST(0.050000000000000003) * membrane$V) : (-x3 * x7)) - 4 * x8'}, {'i': 0, 'j': 2, 'entry': '-x0 * x1'}, {'i': 2, 'j': 2, 'entry': '-1 / x11 - CHASTE_CONST(0.070000000000000007) * x9'}, {'i': 0, 'j': 3, 'entry': '-144 * CHASTE_MATH::Pow(potassium_channel_n_gate$n, 3) * (87 + membrane$V)'}, {'i': 3, 'j': 3, 'entry': '-((x13) ? (CHASTE_CONST(0.42499999999999999) + CHASTE_CONST(0.0050000000000000001) * membrane$V) : (-CHASTE_CONST(0.099999999999999992) * x12 * x16)) - CHASTE_CONST(0.125) * x17'}] \ No newline at end of file diff --git a/chaste_codegen/data/tests/test_jacobian_matrix_2.txt_python36 b/chaste_codegen/data/tests/test_jacobian_matrix_2.txt_python36 index 5c141c270..0cf00480f 100644 --- a/chaste_codegen/data/tests/test_jacobian_matrix_2.txt_python36 +++ b/chaste_codegen/data/tests/test_jacobian_matrix_2.txt_python36 @@ -1 +1 @@ -[{'i': 0, 'j': 0, 'entry': '-0.29999999999999999 - 36 * pow(potassium_channel_n_gate$n, 4) - x0 * sodium_channel_h_gate$h'}, {'i': 1, 'j': 0, 'entry': '(1 - sodium_channel_m_gate$m) * ((x2) ? (0.050000000000000003) : (-0.10000000000000001 * x7 + 0.10000000000000001 * x4 * x5 / pow(x6, 2))) + 0.22222222222222221 * x8 * sodium_channel_m_gate$m'}, {'i': 2, 'j': 0, 'entry': '-0.050000000000000003 * x9 * (0.070000000000000007 - 0.070000000000000007 * sodium_channel_h_gate$h) - 0.10000000000000001 * x10 * sodium_channel_h_gate$h / pow(x11, 2)'}, {'i': 3, 'j': 0, 'entry': '(1 - potassium_channel_n_gate$n) * ((x12) ? (0.0050000000000000001) : (-0.01 * x16 + 0.01 * x13 * x14 / pow(x15, 2))) - 0.0015625000000000001 * x17 * potassium_channel_n_gate$n'}, {'i': 0, 'j': 1, 'entry': '-360 * x1 * pow(sodium_channel_m_gate$m, 2) * sodium_channel_h_gate$h'}, {'i': 1, 'j': 1, 'entry': '-((x2) ? (3.5 + 0.050000000000000003 * membrane$V) : (x4 * x7)) - 4 * x8'}, {'i': 0, 'j': 2, 'entry': '-x0 * x1'}, {'i': 2, 'j': 2, 'entry': '-1 / x11 - 0.070000000000000007 * x9'}, {'i': 0, 'j': 3, 'entry': '-144 * pow(potassium_channel_n_gate$n, 3) * (87 + membrane$V)'}, {'i': 3, 'j': 3, 'entry': '-((x12) ? (0.42499999999999999 + 0.0050000000000000001 * membrane$V) : (0.099999999999999992 * x13 * x16)) - 0.125 * x17'}] \ No newline at end of file +[{'i': 0, 'j': 0, 'entry': '-CHASTE_CONST(0.29999999999999999) - 36 * CHASTE_MATH::Pow(potassium_channel_n_gate$n, 4) - x0 * sodium_channel_h_gate$h'}, {'i': 1, 'j': 0, 'entry': '(CHASTE_CONST(1) - sodium_channel_m_gate$m) * ((x2) ? (CHASTE_CONST(0.050000000000000003)) : (-CHASTE_CONST(0.10000000000000001) * x7 + CHASTE_CONST(0.10000000000000001) * x4 * x5 / CHASTE_MATH::Pow(x6, 2))) + CHASTE_CONST(0.22222222222222221) * x8 * sodium_channel_m_gate$m'}, {'i': 2, 'j': 0, 'entry': '-CHASTE_CONST(0.050000000000000003) * x9 * (CHASTE_CONST(0.070000000000000007) - CHASTE_CONST(0.070000000000000007) * sodium_channel_h_gate$h) - CHASTE_CONST(0.10000000000000001) * x10 * sodium_channel_h_gate$h / CHASTE_MATH::Pow(x11, 2)'}, {'i': 3, 'j': 0, 'entry': '(CHASTE_CONST(1) - potassium_channel_n_gate$n) * ((x12) ? (CHASTE_CONST(0.0050000000000000001)) : (-CHASTE_CONST(0.01) * x16 + CHASTE_CONST(0.01) * x13 * x14 / CHASTE_MATH::Pow(x15, 2))) - CHASTE_CONST(0.0015625000000000001) * x17 * potassium_channel_n_gate$n'}, {'i': 0, 'j': 1, 'entry': '-360 * x1 * CHASTE_MATH::Pow(sodium_channel_m_gate$m, 2) * sodium_channel_h_gate$h'}, {'i': 1, 'j': 1, 'entry': '-((x2) ? (CHASTE_CONST(3.5) + CHASTE_CONST(0.050000000000000003) * membrane$V) : (x4 * x7)) - 4 * x8'}, {'i': 0, 'j': 2, 'entry': '-x0 * x1'}, {'i': 2, 'j': 2, 'entry': '-1 / x11 - CHASTE_CONST(0.070000000000000007) * x9'}, {'i': 0, 'j': 3, 'entry': '-144 * CHASTE_MATH::Pow(potassium_channel_n_gate$n, 3) * (CHASTE_CONST(87) + membrane$V)'}, {'i': 3, 'j': 3, 'entry': '-((x12) ? (CHASTE_CONST(0.42499999999999999) + CHASTE_CONST(0.0050000000000000001) * membrane$V) : (CHASTE_CONST(0.099999999999999992) * x13 * x16)) - CHASTE_CONST(0.125) * x17'}] \ No newline at end of file diff --git a/chaste_codegen/data/tests/test_lookup_tables_change_lookup_table.txt b/chaste_codegen/data/tests/test_lookup_tables_change_lookup_table.txt index 41ea50e55..85a3acb74 100644 --- a/chaste_codegen/data/tests/test_lookup_tables_change_lookup_table.txt +++ b/chaste_codegen/data/tests/test_lookup_tables_change_lookup_table.txt @@ -1 +1 @@ -[['40.0 * exp(-(72.0 + membrane$V) * 0.056)', False], ['0.095 * exp((-membrane$V + 5.0) / 100.0) / (1.0 + exp((-membrane$V + 5.0) / 13.89))', False], ['0.07 * exp((-44.0 - membrane$V) / 59.0) / (1.0 + exp((44.0 + membrane$V) / 20.0))', False], ['0.012 * exp((-28.0 - membrane$V) / 125.0) / (1.0 + exp((28.0 + membrane$V) / 6.67))', False], ['0.0065 * exp((-30.0 - membrane$V) / 50.0) / (1.0 + exp((-30.0 - membrane$V) / 5.0))', False], ['exp((35.0 + membrane$V) * 0.04)', False], ['-1.0 + exp((77.0 + membrane$V) * 0.04)', False], ['0.0005 * exp((50.0 + membrane$V) / 12.1) / (1.0 + exp((50.0 + membrane$V) / 17.5))', False], ['0.0013 * exp((-20.0 - membrane$V) / 16.67) / (1.0 + exp((-20.0 - membrane$V) / 25.0))', False], ['(-1.0 + exp((85.0 + membrane$V) * 0.04)) * 4.0 / (exp((53.0 + membrane$V) * 0.08) + exp((53.0 + membrane$V) * 0.04))', False]] \ No newline at end of file +[['40.0 * CHASTE_MATH::Exp(-(72.0 + membrane$V) * 0.056)', False], ['0.095 * CHASTE_MATH::Exp((-membrane$V + 5.0) / 100.0) / (1.0 + CHASTE_MATH::Exp((-membrane$V + 5.0) / 13.89))', False], ['0.07 * CHASTE_MATH::Exp((-44.0 - membrane$V) / 59.0) / (1.0 + CHASTE_MATH::Exp((44.0 + membrane$V) / 20.0))', False], ['0.012 * CHASTE_MATH::Exp((-28.0 - membrane$V) / 125.0) / (1.0 + CHASTE_MATH::Exp((28.0 + membrane$V) / 6.67))', False], ['0.0065 * CHASTE_MATH::Exp((-30.0 - membrane$V) / 50.0) / (1.0 + CHASTE_MATH::Exp((-30.0 - membrane$V) / 5.0))', False], ['CHASTE_MATH::Exp((35.0 + membrane$V) * 0.04)', False], ['-1.0 + CHASTE_MATH::Exp((77.0 + membrane$V) * 0.04)', False], ['0.0005 * CHASTE_MATH::Exp((50.0 + membrane$V) / 12.1) / (1.0 + CHASTE_MATH::Exp((50.0 + membrane$V) / 17.5))', False], ['0.0013 * CHASTE_MATH::Exp((-20.0 - membrane$V) / 16.67) / (1.0 + CHASTE_MATH::Exp((-20.0 - membrane$V) / 25.0))', False], ['(-1.0 + CHASTE_MATH::Exp((85.0 + membrane$V) * 0.04)) * 4.0 / (CHASTE_MATH::Exp((53.0 + membrane$V) * 0.08) + CHASTE_MATH::Exp((53.0 + membrane$V) * 0.04))', False]] \ No newline at end of file diff --git a/chaste_codegen/data/tests/test_lookup_tables_method_printed_for.txt b/chaste_codegen/data/tests/test_lookup_tables_method_printed_for.txt index 2525f7938..e95e97402 100644 --- a/chaste_codegen/data/tests/test_lookup_tables_method_printed_for.txt +++ b/chaste_codegen/data/tests/test_lookup_tables_method_printed_for.txt @@ -1 +1 @@ -[['0.08 * exp(-cell$V / 11.0)', False], ['1.0 / (1.0 + exp((-50.0 - cell$V) / 7.5))', False], ['1.0 / (1.0 + exp((33.0 + cell$V) / 22.4))', False], ['1.0 / (1.0 + exp((-cell$V + 1.5) / 16.7))', False], ['1.0 / (1.0 + exp((-3.0 - cell$V) / 15.0))', False], ['9.0 / (1.0 + exp((3.0 + cell$V) / 15.0)) + 0.5', False], ['1.0 / (1.0 + exp((33.5 + cell$V) / 10.0))', False], ['3000.0 / (1.0 + exp((60.0 + cell$V) / 10.0)) + 30.0', False], ['1.0 / (1.0 + exp((33.5 + cell$V) / 10.0))', False], ['2800.0 / (1.0 + exp((60.0 + cell$V) / 10.0)) + 220.0', False], ['1.0 / (1.0 + exp((-3.0 - cell$V) / 15.0))', False], ['3.5 * exp(-pow((cell$V / 30.0), 2.0)) + 1.5', False], ['1.0 / (1.0 + exp((33.5 + cell$V) / 10.0))', False], ['20.0 / (1.0 + exp((33.5 + cell$V) / 10.0)) + 20.0', False], ['1.0 / (1.0 + exp((-14.5 - cell$V) / 6.0))', False], ['1.0 / (1.0 + exp((35.06 + cell$V) / 3.6)) + 0.6 / (1.0 + exp((-cell$V + 50.0) / 20.0))', False], ['1.0 / (0.0197 * exp(-pow(((14.5 + cell$V) * 0.0337), 2.0)) + 0.02)', False], ['(((-14.499999400000000 >= cell$V) && (-14.500000600000000 <= cell$V)) ? ((--14.500000600000000 + cell$V) * ((-exp((--14.499999400000000 - 14.5) / 6.0) + 1.0) / ((-14.499999400000000 + 14.5) * (1.0 + exp((--14.499999400000000 - 14.5) / 6.0)) * 0.035) - (-exp((--14.500000600000000 - 14.5) / 6.0) + 1.0) / ((-14.500000600000000 + 14.5) * (1.0 + exp((--14.500000600000000 - 14.5) / 6.0)) * 0.035)) / (--14.500000600000000 - 14.499999400000000) + (-exp((--14.500000600000000 - 14.5) / 6.0) + 1.0) / ((-14.500000600000000 + 14.5) * (1.0 + exp((--14.500000600000000 - 14.5) / 6.0)) * 0.035)) : ((-exp((-14.5 - cell$V) / 6.0) + 1.0) / ((1.0 + exp((-14.5 - cell$V) / 6.0)) * (14.5 + cell$V) * 0.035)))', True], ['1.0 / ((((-9.9999993103448276 >= cell$V) && (-10.000000689655172 <= cell$V)) ? ((--10.000000689655172 + cell$V) * ((-9.9999993103448276 + 10.0) * 0.00061 / (-1.0 + exp((-9.9999993103448276 + 10.0) * 0.145)) - (-10.000000689655172 + 10.0) * 0.00061 / (-1.0 + exp((-10.000000689655172 + 10.0) * 0.145))) / (--10.000000689655172 - 9.9999993103448276) + (-10.000000689655172 + 10.0) * 0.00061 / (-1.0 + exp((-10.000000689655172 + 10.0) * 0.145))) : ((10.0 + cell$V) * 0.00061 / (-1.0 + exp((10.0 + cell$V) * 0.145)))) + (((-6.9999991869918699 >= cell$V) && (-7.0000008130081301 <= cell$V)) ? ((--7.0000008130081301 + cell$V) * ((-6.9999991869918699 + 7.0) * 0.00138 / (-exp(-(-6.9999991869918699 + 7.0) * 0.123) + 1.0) - (-7.0000008130081301 + 7.0) * 0.00138 / (-exp(-(-7.0000008130081301 + 7.0) * 0.123) + 1.0)) / (--7.0000008130081301 - 6.9999991869918699) + (-7.0000008130081301 + 7.0) * 0.00138 / (-exp(-(-7.0000008130081301 + 7.0) * 0.123) + 1.0)) : ((7.0 + cell$V) * 0.00138 / (-exp(-(7.0 + cell$V) * 0.123) + 1.0))))', False], ['(((-29.999998544395924 >= cell$V) && (-30.000001455604076 <= cell$V)) ? (1 / ((--30.000001455604076 + cell$V) * ((-29.999998544395924 + 30.0) * 0.000131 / (-1.0 + exp((-29.999998544395924 + 30.0) * 0.0687)) + (-29.999998544395924 + 30.0) * 7.19e-05 / (-exp(-(-29.999998544395924 + 30.0) * 0.148) + 1.0) - (-30.000001455604076 + 30.0) * 0.000131 / (-1.0 + exp((-30.000001455604076 + 30.0) * 0.0687)) - (-30.000001455604076 + 30.0) * 7.19e-05 / (-exp(-(-30.000001455604076 + 30.0) * 0.148) + 1.0)) / (--30.000001455604076 - 29.999998544395924) + (-30.000001455604076 + 30.0) * 0.000131 / (-1.0 + exp((-30.000001455604076 + 30.0) * 0.0687)) + (-30.000001455604076 + 30.0) * 7.19e-05 / (-exp(-(-30.000001455604076 + 30.0) * 0.148) + 1.0))) : (1 / ((30.0 + cell$V) * 0.000131 / (-1.0 + exp((30.0 + cell$V) * 0.0687)) + (30.0 + cell$V) * 7.19e-05 / (-exp(-(30.0 + cell$V) * 0.148) + 1.0)))) * 1.0', False], ['(((-47.129999000000003 >= cell$V) && (-47.130001000000003 <= cell$V)) ? ((--47.130001000000003 + cell$V) * ((-47.129999000000003 + 47.13) * 0.32 / ((-exp(-(-47.129999000000003 + 47.13) * 0.1) + 1.0) * 1.0) - (-47.130001000000003 + 47.13) * 0.32 / ((-exp(-(-47.130001000000003 + 47.13) * 0.1) + 1.0) * 1.0)) / (--47.130001000000003 - 47.129999000000003) + (-47.130001000000003 + 47.13) * 0.32 / ((-exp(-(-47.130001000000003 + 47.13) * 0.1) + 1.0) * 1.0)) : ((47.13 + cell$V) * 0.32 / ((-exp(-(47.13 + cell$V) * 0.1) + 1.0) * 1.0)))', True]] \ No newline at end of file +[['0.08 * CHASTE_MATH::Exp(-cell$V / 11.0)', False], ['1.0 / (1.0 + CHASTE_MATH::Exp((-50.0 - cell$V) / 7.5))', False], ['1.0 / (1.0 + CHASTE_MATH::Exp((33.0 + cell$V) / 22.4))', False], ['1.0 / (1.0 + CHASTE_MATH::Exp((-cell$V + 1.5) / 16.7))', False], ['1.0 / (1.0 + CHASTE_MATH::Exp((-3.0 - cell$V) / 15.0))', False], ['9.0 / (1.0 + CHASTE_MATH::Exp((3.0 + cell$V) / 15.0)) + 0.5', False], ['1.0 / (1.0 + CHASTE_MATH::Exp((33.5 + cell$V) / 10.0))', False], ['3000.0 / (1.0 + CHASTE_MATH::Exp((60.0 + cell$V) / 10.0)) + 30.0', False], ['1.0 / (1.0 + CHASTE_MATH::Exp((33.5 + cell$V) / 10.0))', False], ['2800.0 / (1.0 + CHASTE_MATH::Exp((60.0 + cell$V) / 10.0)) + 220.0', False], ['1.0 / (1.0 + CHASTE_MATH::Exp((-3.0 - cell$V) / 15.0))', False], ['3.5 * CHASTE_MATH::Exp(-CHASTE_MATH::Pow((cell$V / 30.0), 2.0)) + 1.5', False], ['1.0 / (1.0 + CHASTE_MATH::Exp((33.5 + cell$V) / 10.0))', False], ['20.0 / (1.0 + CHASTE_MATH::Exp((33.5 + cell$V) / 10.0)) + 20.0', False], ['1.0 / (1.0 + CHASTE_MATH::Exp((-14.5 - cell$V) / 6.0))', False], ['1.0 / (1.0 + CHASTE_MATH::Exp((35.06 + cell$V) / 3.6)) + 0.6 / (1.0 + CHASTE_MATH::Exp((-cell$V + 50.0) / 20.0))', False], ['1.0 / (0.0197 * CHASTE_MATH::Exp(-CHASTE_MATH::Pow(((14.5 + cell$V) * 0.0337), 2.0)) + 0.02)', False], ['(((-14.499999400000000 >= cell$V) && (-14.500000600000000 <= cell$V)) ? ((--14.500000600000000 + cell$V) * ((-CHASTE_MATH::Exp((--14.499999400000000 - 14.5) / 6.0) + 1.0) / ((-14.499999400000000 + 14.5) * (1.0 + CHASTE_MATH::Exp((--14.499999400000000 - 14.5) / 6.0)) * 0.035) - (-CHASTE_MATH::Exp((--14.500000600000000 - 14.5) / 6.0) + 1.0) / ((-14.500000600000000 + 14.5) * (1.0 + CHASTE_MATH::Exp((--14.500000600000000 - 14.5) / 6.0)) * 0.035)) / (--14.500000600000000 - 14.499999400000000) + (-CHASTE_MATH::Exp((--14.500000600000000 - 14.5) / 6.0) + 1.0) / ((-14.500000600000000 + 14.5) * (1.0 + CHASTE_MATH::Exp((--14.500000600000000 - 14.5) / 6.0)) * 0.035)) : ((-CHASTE_MATH::Exp((-14.5 - cell$V) / 6.0) + 1.0) / ((1.0 + CHASTE_MATH::Exp((-14.5 - cell$V) / 6.0)) * (14.5 + cell$V) * 0.035)))', True], ['1.0 / ((((-9.9999993103448276 >= cell$V) && (-10.000000689655172 <= cell$V)) ? ((--10.000000689655172 + cell$V) * ((-9.9999993103448276 + 10.0) * 0.00061 / (-1.0 + CHASTE_MATH::Exp((-9.9999993103448276 + 10.0) * 0.145)) - (-10.000000689655172 + 10.0) * 0.00061 / (-1.0 + CHASTE_MATH::Exp((-10.000000689655172 + 10.0) * 0.145))) / (--10.000000689655172 - 9.9999993103448276) + (-10.000000689655172 + 10.0) * 0.00061 / (-1.0 + CHASTE_MATH::Exp((-10.000000689655172 + 10.0) * 0.145))) : ((10.0 + cell$V) * 0.00061 / (-1.0 + CHASTE_MATH::Exp((10.0 + cell$V) * 0.145)))) + (((-6.9999991869918699 >= cell$V) && (-7.0000008130081301 <= cell$V)) ? ((--7.0000008130081301 + cell$V) * ((-6.9999991869918699 + 7.0) * 0.00138 / (-CHASTE_MATH::Exp(-(-6.9999991869918699 + 7.0) * 0.123) + 1.0) - (-7.0000008130081301 + 7.0) * 0.00138 / (-CHASTE_MATH::Exp(-(-7.0000008130081301 + 7.0) * 0.123) + 1.0)) / (--7.0000008130081301 - 6.9999991869918699) + (-7.0000008130081301 + 7.0) * 0.00138 / (-CHASTE_MATH::Exp(-(-7.0000008130081301 + 7.0) * 0.123) + 1.0)) : ((7.0 + cell$V) * 0.00138 / (-CHASTE_MATH::Exp(-(7.0 + cell$V) * 0.123) + 1.0))))', False], ['(((-29.999998544395924 >= cell$V) && (-30.000001455604076 <= cell$V)) ? (1 / ((--30.000001455604076 + cell$V) * ((-29.999998544395924 + 30.0) * 0.000131 / (-1.0 + CHASTE_MATH::Exp((-29.999998544395924 + 30.0) * 0.0687)) + (-29.999998544395924 + 30.0) * 7.19e-05 / (-CHASTE_MATH::Exp(-(-29.999998544395924 + 30.0) * 0.148) + 1.0) - (-30.000001455604076 + 30.0) * 0.000131 / (-1.0 + CHASTE_MATH::Exp((-30.000001455604076 + 30.0) * 0.0687)) - (-30.000001455604076 + 30.0) * 7.19e-05 / (-CHASTE_MATH::Exp(-(-30.000001455604076 + 30.0) * 0.148) + 1.0)) / (--30.000001455604076 - 29.999998544395924) + (-30.000001455604076 + 30.0) * 0.000131 / (-1.0 + CHASTE_MATH::Exp((-30.000001455604076 + 30.0) * 0.0687)) + (-30.000001455604076 + 30.0) * 7.19e-05 / (-CHASTE_MATH::Exp(-(-30.000001455604076 + 30.0) * 0.148) + 1.0))) : (1 / ((30.0 + cell$V) * 0.000131 / (-1.0 + CHASTE_MATH::Exp((30.0 + cell$V) * 0.0687)) + (30.0 + cell$V) * 7.19e-05 / (-CHASTE_MATH::Exp(-(30.0 + cell$V) * 0.148) + 1.0)))) * 1.0', False], ['(((-47.129999000000003 >= cell$V) && (-47.130001000000003 <= cell$V)) ? ((--47.130001000000003 + cell$V) * ((-47.129999000000003 + 47.13) * 0.32 / ((-CHASTE_MATH::Exp(-(-47.129999000000003 + 47.13) * 0.1) + 1.0) * 1.0) - (-47.130001000000003 + 47.13) * 0.32 / ((-CHASTE_MATH::Exp(-(-47.130001000000003 + 47.13) * 0.1) + 1.0) * 1.0)) / (--47.130001000000003 - 47.129999000000003) + (-47.130001000000003 + 47.13) * 0.32 / ((-CHASTE_MATH::Exp(-(-47.130001000000003 + 47.13) * 0.1) + 1.0) * 1.0)) : ((47.13 + cell$V) * 0.32 / ((-CHASTE_MATH::Exp(-(47.13 + cell$V) * 0.1) + 1.0) * 1.0)))', True]] \ No newline at end of file diff --git a/chaste_codegen/data/tests/test_lookup_tables_multiple_methods_printed_for.txt b/chaste_codegen/data/tests/test_lookup_tables_multiple_methods_printed_for.txt index 2525f7938..e95e97402 100644 --- a/chaste_codegen/data/tests/test_lookup_tables_multiple_methods_printed_for.txt +++ b/chaste_codegen/data/tests/test_lookup_tables_multiple_methods_printed_for.txt @@ -1 +1 @@ -[['0.08 * exp(-cell$V / 11.0)', False], ['1.0 / (1.0 + exp((-50.0 - cell$V) / 7.5))', False], ['1.0 / (1.0 + exp((33.0 + cell$V) / 22.4))', False], ['1.0 / (1.0 + exp((-cell$V + 1.5) / 16.7))', False], ['1.0 / (1.0 + exp((-3.0 - cell$V) / 15.0))', False], ['9.0 / (1.0 + exp((3.0 + cell$V) / 15.0)) + 0.5', False], ['1.0 / (1.0 + exp((33.5 + cell$V) / 10.0))', False], ['3000.0 / (1.0 + exp((60.0 + cell$V) / 10.0)) + 30.0', False], ['1.0 / (1.0 + exp((33.5 + cell$V) / 10.0))', False], ['2800.0 / (1.0 + exp((60.0 + cell$V) / 10.0)) + 220.0', False], ['1.0 / (1.0 + exp((-3.0 - cell$V) / 15.0))', False], ['3.5 * exp(-pow((cell$V / 30.0), 2.0)) + 1.5', False], ['1.0 / (1.0 + exp((33.5 + cell$V) / 10.0))', False], ['20.0 / (1.0 + exp((33.5 + cell$V) / 10.0)) + 20.0', False], ['1.0 / (1.0 + exp((-14.5 - cell$V) / 6.0))', False], ['1.0 / (1.0 + exp((35.06 + cell$V) / 3.6)) + 0.6 / (1.0 + exp((-cell$V + 50.0) / 20.0))', False], ['1.0 / (0.0197 * exp(-pow(((14.5 + cell$V) * 0.0337), 2.0)) + 0.02)', False], ['(((-14.499999400000000 >= cell$V) && (-14.500000600000000 <= cell$V)) ? ((--14.500000600000000 + cell$V) * ((-exp((--14.499999400000000 - 14.5) / 6.0) + 1.0) / ((-14.499999400000000 + 14.5) * (1.0 + exp((--14.499999400000000 - 14.5) / 6.0)) * 0.035) - (-exp((--14.500000600000000 - 14.5) / 6.0) + 1.0) / ((-14.500000600000000 + 14.5) * (1.0 + exp((--14.500000600000000 - 14.5) / 6.0)) * 0.035)) / (--14.500000600000000 - 14.499999400000000) + (-exp((--14.500000600000000 - 14.5) / 6.0) + 1.0) / ((-14.500000600000000 + 14.5) * (1.0 + exp((--14.500000600000000 - 14.5) / 6.0)) * 0.035)) : ((-exp((-14.5 - cell$V) / 6.0) + 1.0) / ((1.0 + exp((-14.5 - cell$V) / 6.0)) * (14.5 + cell$V) * 0.035)))', True], ['1.0 / ((((-9.9999993103448276 >= cell$V) && (-10.000000689655172 <= cell$V)) ? ((--10.000000689655172 + cell$V) * ((-9.9999993103448276 + 10.0) * 0.00061 / (-1.0 + exp((-9.9999993103448276 + 10.0) * 0.145)) - (-10.000000689655172 + 10.0) * 0.00061 / (-1.0 + exp((-10.000000689655172 + 10.0) * 0.145))) / (--10.000000689655172 - 9.9999993103448276) + (-10.000000689655172 + 10.0) * 0.00061 / (-1.0 + exp((-10.000000689655172 + 10.0) * 0.145))) : ((10.0 + cell$V) * 0.00061 / (-1.0 + exp((10.0 + cell$V) * 0.145)))) + (((-6.9999991869918699 >= cell$V) && (-7.0000008130081301 <= cell$V)) ? ((--7.0000008130081301 + cell$V) * ((-6.9999991869918699 + 7.0) * 0.00138 / (-exp(-(-6.9999991869918699 + 7.0) * 0.123) + 1.0) - (-7.0000008130081301 + 7.0) * 0.00138 / (-exp(-(-7.0000008130081301 + 7.0) * 0.123) + 1.0)) / (--7.0000008130081301 - 6.9999991869918699) + (-7.0000008130081301 + 7.0) * 0.00138 / (-exp(-(-7.0000008130081301 + 7.0) * 0.123) + 1.0)) : ((7.0 + cell$V) * 0.00138 / (-exp(-(7.0 + cell$V) * 0.123) + 1.0))))', False], ['(((-29.999998544395924 >= cell$V) && (-30.000001455604076 <= cell$V)) ? (1 / ((--30.000001455604076 + cell$V) * ((-29.999998544395924 + 30.0) * 0.000131 / (-1.0 + exp((-29.999998544395924 + 30.0) * 0.0687)) + (-29.999998544395924 + 30.0) * 7.19e-05 / (-exp(-(-29.999998544395924 + 30.0) * 0.148) + 1.0) - (-30.000001455604076 + 30.0) * 0.000131 / (-1.0 + exp((-30.000001455604076 + 30.0) * 0.0687)) - (-30.000001455604076 + 30.0) * 7.19e-05 / (-exp(-(-30.000001455604076 + 30.0) * 0.148) + 1.0)) / (--30.000001455604076 - 29.999998544395924) + (-30.000001455604076 + 30.0) * 0.000131 / (-1.0 + exp((-30.000001455604076 + 30.0) * 0.0687)) + (-30.000001455604076 + 30.0) * 7.19e-05 / (-exp(-(-30.000001455604076 + 30.0) * 0.148) + 1.0))) : (1 / ((30.0 + cell$V) * 0.000131 / (-1.0 + exp((30.0 + cell$V) * 0.0687)) + (30.0 + cell$V) * 7.19e-05 / (-exp(-(30.0 + cell$V) * 0.148) + 1.0)))) * 1.0', False], ['(((-47.129999000000003 >= cell$V) && (-47.130001000000003 <= cell$V)) ? ((--47.130001000000003 + cell$V) * ((-47.129999000000003 + 47.13) * 0.32 / ((-exp(-(-47.129999000000003 + 47.13) * 0.1) + 1.0) * 1.0) - (-47.130001000000003 + 47.13) * 0.32 / ((-exp(-(-47.130001000000003 + 47.13) * 0.1) + 1.0) * 1.0)) / (--47.130001000000003 - 47.129999000000003) + (-47.130001000000003 + 47.13) * 0.32 / ((-exp(-(-47.130001000000003 + 47.13) * 0.1) + 1.0) * 1.0)) : ((47.13 + cell$V) * 0.32 / ((-exp(-(47.13 + cell$V) * 0.1) + 1.0) * 1.0)))', True]] \ No newline at end of file +[['0.08 * CHASTE_MATH::Exp(-cell$V / 11.0)', False], ['1.0 / (1.0 + CHASTE_MATH::Exp((-50.0 - cell$V) / 7.5))', False], ['1.0 / (1.0 + CHASTE_MATH::Exp((33.0 + cell$V) / 22.4))', False], ['1.0 / (1.0 + CHASTE_MATH::Exp((-cell$V + 1.5) / 16.7))', False], ['1.0 / (1.0 + CHASTE_MATH::Exp((-3.0 - cell$V) / 15.0))', False], ['9.0 / (1.0 + CHASTE_MATH::Exp((3.0 + cell$V) / 15.0)) + 0.5', False], ['1.0 / (1.0 + CHASTE_MATH::Exp((33.5 + cell$V) / 10.0))', False], ['3000.0 / (1.0 + CHASTE_MATH::Exp((60.0 + cell$V) / 10.0)) + 30.0', False], ['1.0 / (1.0 + CHASTE_MATH::Exp((33.5 + cell$V) / 10.0))', False], ['2800.0 / (1.0 + CHASTE_MATH::Exp((60.0 + cell$V) / 10.0)) + 220.0', False], ['1.0 / (1.0 + CHASTE_MATH::Exp((-3.0 - cell$V) / 15.0))', False], ['3.5 * CHASTE_MATH::Exp(-CHASTE_MATH::Pow((cell$V / 30.0), 2.0)) + 1.5', False], ['1.0 / (1.0 + CHASTE_MATH::Exp((33.5 + cell$V) / 10.0))', False], ['20.0 / (1.0 + CHASTE_MATH::Exp((33.5 + cell$V) / 10.0)) + 20.0', False], ['1.0 / (1.0 + CHASTE_MATH::Exp((-14.5 - cell$V) / 6.0))', False], ['1.0 / (1.0 + CHASTE_MATH::Exp((35.06 + cell$V) / 3.6)) + 0.6 / (1.0 + CHASTE_MATH::Exp((-cell$V + 50.0) / 20.0))', False], ['1.0 / (0.0197 * CHASTE_MATH::Exp(-CHASTE_MATH::Pow(((14.5 + cell$V) * 0.0337), 2.0)) + 0.02)', False], ['(((-14.499999400000000 >= cell$V) && (-14.500000600000000 <= cell$V)) ? ((--14.500000600000000 + cell$V) * ((-CHASTE_MATH::Exp((--14.499999400000000 - 14.5) / 6.0) + 1.0) / ((-14.499999400000000 + 14.5) * (1.0 + CHASTE_MATH::Exp((--14.499999400000000 - 14.5) / 6.0)) * 0.035) - (-CHASTE_MATH::Exp((--14.500000600000000 - 14.5) / 6.0) + 1.0) / ((-14.500000600000000 + 14.5) * (1.0 + CHASTE_MATH::Exp((--14.500000600000000 - 14.5) / 6.0)) * 0.035)) / (--14.500000600000000 - 14.499999400000000) + (-CHASTE_MATH::Exp((--14.500000600000000 - 14.5) / 6.0) + 1.0) / ((-14.500000600000000 + 14.5) * (1.0 + CHASTE_MATH::Exp((--14.500000600000000 - 14.5) / 6.0)) * 0.035)) : ((-CHASTE_MATH::Exp((-14.5 - cell$V) / 6.0) + 1.0) / ((1.0 + CHASTE_MATH::Exp((-14.5 - cell$V) / 6.0)) * (14.5 + cell$V) * 0.035)))', True], ['1.0 / ((((-9.9999993103448276 >= cell$V) && (-10.000000689655172 <= cell$V)) ? ((--10.000000689655172 + cell$V) * ((-9.9999993103448276 + 10.0) * 0.00061 / (-1.0 + CHASTE_MATH::Exp((-9.9999993103448276 + 10.0) * 0.145)) - (-10.000000689655172 + 10.0) * 0.00061 / (-1.0 + CHASTE_MATH::Exp((-10.000000689655172 + 10.0) * 0.145))) / (--10.000000689655172 - 9.9999993103448276) + (-10.000000689655172 + 10.0) * 0.00061 / (-1.0 + CHASTE_MATH::Exp((-10.000000689655172 + 10.0) * 0.145))) : ((10.0 + cell$V) * 0.00061 / (-1.0 + CHASTE_MATH::Exp((10.0 + cell$V) * 0.145)))) + (((-6.9999991869918699 >= cell$V) && (-7.0000008130081301 <= cell$V)) ? ((--7.0000008130081301 + cell$V) * ((-6.9999991869918699 + 7.0) * 0.00138 / (-CHASTE_MATH::Exp(-(-6.9999991869918699 + 7.0) * 0.123) + 1.0) - (-7.0000008130081301 + 7.0) * 0.00138 / (-CHASTE_MATH::Exp(-(-7.0000008130081301 + 7.0) * 0.123) + 1.0)) / (--7.0000008130081301 - 6.9999991869918699) + (-7.0000008130081301 + 7.0) * 0.00138 / (-CHASTE_MATH::Exp(-(-7.0000008130081301 + 7.0) * 0.123) + 1.0)) : ((7.0 + cell$V) * 0.00138 / (-CHASTE_MATH::Exp(-(7.0 + cell$V) * 0.123) + 1.0))))', False], ['(((-29.999998544395924 >= cell$V) && (-30.000001455604076 <= cell$V)) ? (1 / ((--30.000001455604076 + cell$V) * ((-29.999998544395924 + 30.0) * 0.000131 / (-1.0 + CHASTE_MATH::Exp((-29.999998544395924 + 30.0) * 0.0687)) + (-29.999998544395924 + 30.0) * 7.19e-05 / (-CHASTE_MATH::Exp(-(-29.999998544395924 + 30.0) * 0.148) + 1.0) - (-30.000001455604076 + 30.0) * 0.000131 / (-1.0 + CHASTE_MATH::Exp((-30.000001455604076 + 30.0) * 0.0687)) - (-30.000001455604076 + 30.0) * 7.19e-05 / (-CHASTE_MATH::Exp(-(-30.000001455604076 + 30.0) * 0.148) + 1.0)) / (--30.000001455604076 - 29.999998544395924) + (-30.000001455604076 + 30.0) * 0.000131 / (-1.0 + CHASTE_MATH::Exp((-30.000001455604076 + 30.0) * 0.0687)) + (-30.000001455604076 + 30.0) * 7.19e-05 / (-CHASTE_MATH::Exp(-(-30.000001455604076 + 30.0) * 0.148) + 1.0))) : (1 / ((30.0 + cell$V) * 0.000131 / (-1.0 + CHASTE_MATH::Exp((30.0 + cell$V) * 0.0687)) + (30.0 + cell$V) * 7.19e-05 / (-CHASTE_MATH::Exp(-(30.0 + cell$V) * 0.148) + 1.0)))) * 1.0', False], ['(((-47.129999000000003 >= cell$V) && (-47.130001000000003 <= cell$V)) ? ((--47.130001000000003 + cell$V) * ((-47.129999000000003 + 47.13) * 0.32 / ((-CHASTE_MATH::Exp(-(-47.129999000000003 + 47.13) * 0.1) + 1.0) * 1.0) - (-47.130001000000003 + 47.13) * 0.32 / ((-CHASTE_MATH::Exp(-(-47.130001000000003 + 47.13) * 0.1) + 1.0) * 1.0)) / (--47.130001000000003 - 47.129999000000003) + (-47.130001000000003 + 47.13) * 0.32 / ((-CHASTE_MATH::Exp(-(-47.130001000000003 + 47.13) * 0.1) + 1.0) * 1.0)) : ((47.13 + cell$V) * 0.32 / ((-CHASTE_MATH::Exp(-(47.13 + cell$V) * 0.1) + 1.0) * 1.0)))', True]] \ No newline at end of file diff --git a/chaste_codegen/data/tests/test_lookup_tables_nested_method_printed_for.txt b/chaste_codegen/data/tests/test_lookup_tables_nested_method_printed_for.txt index 2525f7938..e95e97402 100644 --- a/chaste_codegen/data/tests/test_lookup_tables_nested_method_printed_for.txt +++ b/chaste_codegen/data/tests/test_lookup_tables_nested_method_printed_for.txt @@ -1 +1 @@ -[['0.08 * exp(-cell$V / 11.0)', False], ['1.0 / (1.0 + exp((-50.0 - cell$V) / 7.5))', False], ['1.0 / (1.0 + exp((33.0 + cell$V) / 22.4))', False], ['1.0 / (1.0 + exp((-cell$V + 1.5) / 16.7))', False], ['1.0 / (1.0 + exp((-3.0 - cell$V) / 15.0))', False], ['9.0 / (1.0 + exp((3.0 + cell$V) / 15.0)) + 0.5', False], ['1.0 / (1.0 + exp((33.5 + cell$V) / 10.0))', False], ['3000.0 / (1.0 + exp((60.0 + cell$V) / 10.0)) + 30.0', False], ['1.0 / (1.0 + exp((33.5 + cell$V) / 10.0))', False], ['2800.0 / (1.0 + exp((60.0 + cell$V) / 10.0)) + 220.0', False], ['1.0 / (1.0 + exp((-3.0 - cell$V) / 15.0))', False], ['3.5 * exp(-pow((cell$V / 30.0), 2.0)) + 1.5', False], ['1.0 / (1.0 + exp((33.5 + cell$V) / 10.0))', False], ['20.0 / (1.0 + exp((33.5 + cell$V) / 10.0)) + 20.0', False], ['1.0 / (1.0 + exp((-14.5 - cell$V) / 6.0))', False], ['1.0 / (1.0 + exp((35.06 + cell$V) / 3.6)) + 0.6 / (1.0 + exp((-cell$V + 50.0) / 20.0))', False], ['1.0 / (0.0197 * exp(-pow(((14.5 + cell$V) * 0.0337), 2.0)) + 0.02)', False], ['(((-14.499999400000000 >= cell$V) && (-14.500000600000000 <= cell$V)) ? ((--14.500000600000000 + cell$V) * ((-exp((--14.499999400000000 - 14.5) / 6.0) + 1.0) / ((-14.499999400000000 + 14.5) * (1.0 + exp((--14.499999400000000 - 14.5) / 6.0)) * 0.035) - (-exp((--14.500000600000000 - 14.5) / 6.0) + 1.0) / ((-14.500000600000000 + 14.5) * (1.0 + exp((--14.500000600000000 - 14.5) / 6.0)) * 0.035)) / (--14.500000600000000 - 14.499999400000000) + (-exp((--14.500000600000000 - 14.5) / 6.0) + 1.0) / ((-14.500000600000000 + 14.5) * (1.0 + exp((--14.500000600000000 - 14.5) / 6.0)) * 0.035)) : ((-exp((-14.5 - cell$V) / 6.0) + 1.0) / ((1.0 + exp((-14.5 - cell$V) / 6.0)) * (14.5 + cell$V) * 0.035)))', True], ['1.0 / ((((-9.9999993103448276 >= cell$V) && (-10.000000689655172 <= cell$V)) ? ((--10.000000689655172 + cell$V) * ((-9.9999993103448276 + 10.0) * 0.00061 / (-1.0 + exp((-9.9999993103448276 + 10.0) * 0.145)) - (-10.000000689655172 + 10.0) * 0.00061 / (-1.0 + exp((-10.000000689655172 + 10.0) * 0.145))) / (--10.000000689655172 - 9.9999993103448276) + (-10.000000689655172 + 10.0) * 0.00061 / (-1.0 + exp((-10.000000689655172 + 10.0) * 0.145))) : ((10.0 + cell$V) * 0.00061 / (-1.0 + exp((10.0 + cell$V) * 0.145)))) + (((-6.9999991869918699 >= cell$V) && (-7.0000008130081301 <= cell$V)) ? ((--7.0000008130081301 + cell$V) * ((-6.9999991869918699 + 7.0) * 0.00138 / (-exp(-(-6.9999991869918699 + 7.0) * 0.123) + 1.0) - (-7.0000008130081301 + 7.0) * 0.00138 / (-exp(-(-7.0000008130081301 + 7.0) * 0.123) + 1.0)) / (--7.0000008130081301 - 6.9999991869918699) + (-7.0000008130081301 + 7.0) * 0.00138 / (-exp(-(-7.0000008130081301 + 7.0) * 0.123) + 1.0)) : ((7.0 + cell$V) * 0.00138 / (-exp(-(7.0 + cell$V) * 0.123) + 1.0))))', False], ['(((-29.999998544395924 >= cell$V) && (-30.000001455604076 <= cell$V)) ? (1 / ((--30.000001455604076 + cell$V) * ((-29.999998544395924 + 30.0) * 0.000131 / (-1.0 + exp((-29.999998544395924 + 30.0) * 0.0687)) + (-29.999998544395924 + 30.0) * 7.19e-05 / (-exp(-(-29.999998544395924 + 30.0) * 0.148) + 1.0) - (-30.000001455604076 + 30.0) * 0.000131 / (-1.0 + exp((-30.000001455604076 + 30.0) * 0.0687)) - (-30.000001455604076 + 30.0) * 7.19e-05 / (-exp(-(-30.000001455604076 + 30.0) * 0.148) + 1.0)) / (--30.000001455604076 - 29.999998544395924) + (-30.000001455604076 + 30.0) * 0.000131 / (-1.0 + exp((-30.000001455604076 + 30.0) * 0.0687)) + (-30.000001455604076 + 30.0) * 7.19e-05 / (-exp(-(-30.000001455604076 + 30.0) * 0.148) + 1.0))) : (1 / ((30.0 + cell$V) * 0.000131 / (-1.0 + exp((30.0 + cell$V) * 0.0687)) + (30.0 + cell$V) * 7.19e-05 / (-exp(-(30.0 + cell$V) * 0.148) + 1.0)))) * 1.0', False], ['(((-47.129999000000003 >= cell$V) && (-47.130001000000003 <= cell$V)) ? ((--47.130001000000003 + cell$V) * ((-47.129999000000003 + 47.13) * 0.32 / ((-exp(-(-47.129999000000003 + 47.13) * 0.1) + 1.0) * 1.0) - (-47.130001000000003 + 47.13) * 0.32 / ((-exp(-(-47.130001000000003 + 47.13) * 0.1) + 1.0) * 1.0)) / (--47.130001000000003 - 47.129999000000003) + (-47.130001000000003 + 47.13) * 0.32 / ((-exp(-(-47.130001000000003 + 47.13) * 0.1) + 1.0) * 1.0)) : ((47.13 + cell$V) * 0.32 / ((-exp(-(47.13 + cell$V) * 0.1) + 1.0) * 1.0)))', True]] \ No newline at end of file +[['0.08 * CHASTE_MATH::Exp(-cell$V / 11.0)', False], ['1.0 / (1.0 + CHASTE_MATH::Exp((-50.0 - cell$V) / 7.5))', False], ['1.0 / (1.0 + CHASTE_MATH::Exp((33.0 + cell$V) / 22.4))', False], ['1.0 / (1.0 + CHASTE_MATH::Exp((-cell$V + 1.5) / 16.7))', False], ['1.0 / (1.0 + CHASTE_MATH::Exp((-3.0 - cell$V) / 15.0))', False], ['9.0 / (1.0 + CHASTE_MATH::Exp((3.0 + cell$V) / 15.0)) + 0.5', False], ['1.0 / (1.0 + CHASTE_MATH::Exp((33.5 + cell$V) / 10.0))', False], ['3000.0 / (1.0 + CHASTE_MATH::Exp((60.0 + cell$V) / 10.0)) + 30.0', False], ['1.0 / (1.0 + CHASTE_MATH::Exp((33.5 + cell$V) / 10.0))', False], ['2800.0 / (1.0 + CHASTE_MATH::Exp((60.0 + cell$V) / 10.0)) + 220.0', False], ['1.0 / (1.0 + CHASTE_MATH::Exp((-3.0 - cell$V) / 15.0))', False], ['3.5 * CHASTE_MATH::Exp(-CHASTE_MATH::Pow((cell$V / 30.0), 2.0)) + 1.5', False], ['1.0 / (1.0 + CHASTE_MATH::Exp((33.5 + cell$V) / 10.0))', False], ['20.0 / (1.0 + CHASTE_MATH::Exp((33.5 + cell$V) / 10.0)) + 20.0', False], ['1.0 / (1.0 + CHASTE_MATH::Exp((-14.5 - cell$V) / 6.0))', False], ['1.0 / (1.0 + CHASTE_MATH::Exp((35.06 + cell$V) / 3.6)) + 0.6 / (1.0 + CHASTE_MATH::Exp((-cell$V + 50.0) / 20.0))', False], ['1.0 / (0.0197 * CHASTE_MATH::Exp(-CHASTE_MATH::Pow(((14.5 + cell$V) * 0.0337), 2.0)) + 0.02)', False], ['(((-14.499999400000000 >= cell$V) && (-14.500000600000000 <= cell$V)) ? ((--14.500000600000000 + cell$V) * ((-CHASTE_MATH::Exp((--14.499999400000000 - 14.5) / 6.0) + 1.0) / ((-14.499999400000000 + 14.5) * (1.0 + CHASTE_MATH::Exp((--14.499999400000000 - 14.5) / 6.0)) * 0.035) - (-CHASTE_MATH::Exp((--14.500000600000000 - 14.5) / 6.0) + 1.0) / ((-14.500000600000000 + 14.5) * (1.0 + CHASTE_MATH::Exp((--14.500000600000000 - 14.5) / 6.0)) * 0.035)) / (--14.500000600000000 - 14.499999400000000) + (-CHASTE_MATH::Exp((--14.500000600000000 - 14.5) / 6.0) + 1.0) / ((-14.500000600000000 + 14.5) * (1.0 + CHASTE_MATH::Exp((--14.500000600000000 - 14.5) / 6.0)) * 0.035)) : ((-CHASTE_MATH::Exp((-14.5 - cell$V) / 6.0) + 1.0) / ((1.0 + CHASTE_MATH::Exp((-14.5 - cell$V) / 6.0)) * (14.5 + cell$V) * 0.035)))', True], ['1.0 / ((((-9.9999993103448276 >= cell$V) && (-10.000000689655172 <= cell$V)) ? ((--10.000000689655172 + cell$V) * ((-9.9999993103448276 + 10.0) * 0.00061 / (-1.0 + CHASTE_MATH::Exp((-9.9999993103448276 + 10.0) * 0.145)) - (-10.000000689655172 + 10.0) * 0.00061 / (-1.0 + CHASTE_MATH::Exp((-10.000000689655172 + 10.0) * 0.145))) / (--10.000000689655172 - 9.9999993103448276) + (-10.000000689655172 + 10.0) * 0.00061 / (-1.0 + CHASTE_MATH::Exp((-10.000000689655172 + 10.0) * 0.145))) : ((10.0 + cell$V) * 0.00061 / (-1.0 + CHASTE_MATH::Exp((10.0 + cell$V) * 0.145)))) + (((-6.9999991869918699 >= cell$V) && (-7.0000008130081301 <= cell$V)) ? ((--7.0000008130081301 + cell$V) * ((-6.9999991869918699 + 7.0) * 0.00138 / (-CHASTE_MATH::Exp(-(-6.9999991869918699 + 7.0) * 0.123) + 1.0) - (-7.0000008130081301 + 7.0) * 0.00138 / (-CHASTE_MATH::Exp(-(-7.0000008130081301 + 7.0) * 0.123) + 1.0)) / (--7.0000008130081301 - 6.9999991869918699) + (-7.0000008130081301 + 7.0) * 0.00138 / (-CHASTE_MATH::Exp(-(-7.0000008130081301 + 7.0) * 0.123) + 1.0)) : ((7.0 + cell$V) * 0.00138 / (-CHASTE_MATH::Exp(-(7.0 + cell$V) * 0.123) + 1.0))))', False], ['(((-29.999998544395924 >= cell$V) && (-30.000001455604076 <= cell$V)) ? (1 / ((--30.000001455604076 + cell$V) * ((-29.999998544395924 + 30.0) * 0.000131 / (-1.0 + CHASTE_MATH::Exp((-29.999998544395924 + 30.0) * 0.0687)) + (-29.999998544395924 + 30.0) * 7.19e-05 / (-CHASTE_MATH::Exp(-(-29.999998544395924 + 30.0) * 0.148) + 1.0) - (-30.000001455604076 + 30.0) * 0.000131 / (-1.0 + CHASTE_MATH::Exp((-30.000001455604076 + 30.0) * 0.0687)) - (-30.000001455604076 + 30.0) * 7.19e-05 / (-CHASTE_MATH::Exp(-(-30.000001455604076 + 30.0) * 0.148) + 1.0)) / (--30.000001455604076 - 29.999998544395924) + (-30.000001455604076 + 30.0) * 0.000131 / (-1.0 + CHASTE_MATH::Exp((-30.000001455604076 + 30.0) * 0.0687)) + (-30.000001455604076 + 30.0) * 7.19e-05 / (-CHASTE_MATH::Exp(-(-30.000001455604076 + 30.0) * 0.148) + 1.0))) : (1 / ((30.0 + cell$V) * 0.000131 / (-1.0 + CHASTE_MATH::Exp((30.0 + cell$V) * 0.0687)) + (30.0 + cell$V) * 7.19e-05 / (-CHASTE_MATH::Exp(-(30.0 + cell$V) * 0.148) + 1.0)))) * 1.0', False], ['(((-47.129999000000003 >= cell$V) && (-47.130001000000003 <= cell$V)) ? ((--47.130001000000003 + cell$V) * ((-47.129999000000003 + 47.13) * 0.32 / ((-CHASTE_MATH::Exp(-(-47.129999000000003 + 47.13) * 0.1) + 1.0) * 1.0) - (-47.130001000000003 + 47.13) * 0.32 / ((-CHASTE_MATH::Exp(-(-47.130001000000003 + 47.13) * 0.1) + 1.0) * 1.0)) / (--47.130001000000003 - 47.129999000000003) + (-47.130001000000003 + 47.13) * 0.32 / ((-CHASTE_MATH::Exp(-(-47.130001000000003 + 47.13) * 0.1) + 1.0) * 1.0)) : ((47.13 + cell$V) * 0.32 / ((-CHASTE_MATH::Exp(-(47.13 + cell$V) * 0.1) + 1.0) * 1.0)))', True]] \ No newline at end of file diff --git a/chaste_codegen/data/tests/test_lookup_tables_no_method_printed_for.txt b/chaste_codegen/data/tests/test_lookup_tables_no_method_printed_for.txt index 2525f7938..e95e97402 100644 --- a/chaste_codegen/data/tests/test_lookup_tables_no_method_printed_for.txt +++ b/chaste_codegen/data/tests/test_lookup_tables_no_method_printed_for.txt @@ -1 +1 @@ -[['0.08 * exp(-cell$V / 11.0)', False], ['1.0 / (1.0 + exp((-50.0 - cell$V) / 7.5))', False], ['1.0 / (1.0 + exp((33.0 + cell$V) / 22.4))', False], ['1.0 / (1.0 + exp((-cell$V + 1.5) / 16.7))', False], ['1.0 / (1.0 + exp((-3.0 - cell$V) / 15.0))', False], ['9.0 / (1.0 + exp((3.0 + cell$V) / 15.0)) + 0.5', False], ['1.0 / (1.0 + exp((33.5 + cell$V) / 10.0))', False], ['3000.0 / (1.0 + exp((60.0 + cell$V) / 10.0)) + 30.0', False], ['1.0 / (1.0 + exp((33.5 + cell$V) / 10.0))', False], ['2800.0 / (1.0 + exp((60.0 + cell$V) / 10.0)) + 220.0', False], ['1.0 / (1.0 + exp((-3.0 - cell$V) / 15.0))', False], ['3.5 * exp(-pow((cell$V / 30.0), 2.0)) + 1.5', False], ['1.0 / (1.0 + exp((33.5 + cell$V) / 10.0))', False], ['20.0 / (1.0 + exp((33.5 + cell$V) / 10.0)) + 20.0', False], ['1.0 / (1.0 + exp((-14.5 - cell$V) / 6.0))', False], ['1.0 / (1.0 + exp((35.06 + cell$V) / 3.6)) + 0.6 / (1.0 + exp((-cell$V + 50.0) / 20.0))', False], ['1.0 / (0.0197 * exp(-pow(((14.5 + cell$V) * 0.0337), 2.0)) + 0.02)', False], ['(((-14.499999400000000 >= cell$V) && (-14.500000600000000 <= cell$V)) ? ((--14.500000600000000 + cell$V) * ((-exp((--14.499999400000000 - 14.5) / 6.0) + 1.0) / ((-14.499999400000000 + 14.5) * (1.0 + exp((--14.499999400000000 - 14.5) / 6.0)) * 0.035) - (-exp((--14.500000600000000 - 14.5) / 6.0) + 1.0) / ((-14.500000600000000 + 14.5) * (1.0 + exp((--14.500000600000000 - 14.5) / 6.0)) * 0.035)) / (--14.500000600000000 - 14.499999400000000) + (-exp((--14.500000600000000 - 14.5) / 6.0) + 1.0) / ((-14.500000600000000 + 14.5) * (1.0 + exp((--14.500000600000000 - 14.5) / 6.0)) * 0.035)) : ((-exp((-14.5 - cell$V) / 6.0) + 1.0) / ((1.0 + exp((-14.5 - cell$V) / 6.0)) * (14.5 + cell$V) * 0.035)))', True], ['1.0 / ((((-9.9999993103448276 >= cell$V) && (-10.000000689655172 <= cell$V)) ? ((--10.000000689655172 + cell$V) * ((-9.9999993103448276 + 10.0) * 0.00061 / (-1.0 + exp((-9.9999993103448276 + 10.0) * 0.145)) - (-10.000000689655172 + 10.0) * 0.00061 / (-1.0 + exp((-10.000000689655172 + 10.0) * 0.145))) / (--10.000000689655172 - 9.9999993103448276) + (-10.000000689655172 + 10.0) * 0.00061 / (-1.0 + exp((-10.000000689655172 + 10.0) * 0.145))) : ((10.0 + cell$V) * 0.00061 / (-1.0 + exp((10.0 + cell$V) * 0.145)))) + (((-6.9999991869918699 >= cell$V) && (-7.0000008130081301 <= cell$V)) ? ((--7.0000008130081301 + cell$V) * ((-6.9999991869918699 + 7.0) * 0.00138 / (-exp(-(-6.9999991869918699 + 7.0) * 0.123) + 1.0) - (-7.0000008130081301 + 7.0) * 0.00138 / (-exp(-(-7.0000008130081301 + 7.0) * 0.123) + 1.0)) / (--7.0000008130081301 - 6.9999991869918699) + (-7.0000008130081301 + 7.0) * 0.00138 / (-exp(-(-7.0000008130081301 + 7.0) * 0.123) + 1.0)) : ((7.0 + cell$V) * 0.00138 / (-exp(-(7.0 + cell$V) * 0.123) + 1.0))))', False], ['(((-29.999998544395924 >= cell$V) && (-30.000001455604076 <= cell$V)) ? (1 / ((--30.000001455604076 + cell$V) * ((-29.999998544395924 + 30.0) * 0.000131 / (-1.0 + exp((-29.999998544395924 + 30.0) * 0.0687)) + (-29.999998544395924 + 30.0) * 7.19e-05 / (-exp(-(-29.999998544395924 + 30.0) * 0.148) + 1.0) - (-30.000001455604076 + 30.0) * 0.000131 / (-1.0 + exp((-30.000001455604076 + 30.0) * 0.0687)) - (-30.000001455604076 + 30.0) * 7.19e-05 / (-exp(-(-30.000001455604076 + 30.0) * 0.148) + 1.0)) / (--30.000001455604076 - 29.999998544395924) + (-30.000001455604076 + 30.0) * 0.000131 / (-1.0 + exp((-30.000001455604076 + 30.0) * 0.0687)) + (-30.000001455604076 + 30.0) * 7.19e-05 / (-exp(-(-30.000001455604076 + 30.0) * 0.148) + 1.0))) : (1 / ((30.0 + cell$V) * 0.000131 / (-1.0 + exp((30.0 + cell$V) * 0.0687)) + (30.0 + cell$V) * 7.19e-05 / (-exp(-(30.0 + cell$V) * 0.148) + 1.0)))) * 1.0', False], ['(((-47.129999000000003 >= cell$V) && (-47.130001000000003 <= cell$V)) ? ((--47.130001000000003 + cell$V) * ((-47.129999000000003 + 47.13) * 0.32 / ((-exp(-(-47.129999000000003 + 47.13) * 0.1) + 1.0) * 1.0) - (-47.130001000000003 + 47.13) * 0.32 / ((-exp(-(-47.130001000000003 + 47.13) * 0.1) + 1.0) * 1.0)) / (--47.130001000000003 - 47.129999000000003) + (-47.130001000000003 + 47.13) * 0.32 / ((-exp(-(-47.130001000000003 + 47.13) * 0.1) + 1.0) * 1.0)) : ((47.13 + cell$V) * 0.32 / ((-exp(-(47.13 + cell$V) * 0.1) + 1.0) * 1.0)))', True]] \ No newline at end of file +[['0.08 * CHASTE_MATH::Exp(-cell$V / 11.0)', False], ['1.0 / (1.0 + CHASTE_MATH::Exp((-50.0 - cell$V) / 7.5))', False], ['1.0 / (1.0 + CHASTE_MATH::Exp((33.0 + cell$V) / 22.4))', False], ['1.0 / (1.0 + CHASTE_MATH::Exp((-cell$V + 1.5) / 16.7))', False], ['1.0 / (1.0 + CHASTE_MATH::Exp((-3.0 - cell$V) / 15.0))', False], ['9.0 / (1.0 + CHASTE_MATH::Exp((3.0 + cell$V) / 15.0)) + 0.5', False], ['1.0 / (1.0 + CHASTE_MATH::Exp((33.5 + cell$V) / 10.0))', False], ['3000.0 / (1.0 + CHASTE_MATH::Exp((60.0 + cell$V) / 10.0)) + 30.0', False], ['1.0 / (1.0 + CHASTE_MATH::Exp((33.5 + cell$V) / 10.0))', False], ['2800.0 / (1.0 + CHASTE_MATH::Exp((60.0 + cell$V) / 10.0)) + 220.0', False], ['1.0 / (1.0 + CHASTE_MATH::Exp((-3.0 - cell$V) / 15.0))', False], ['3.5 * CHASTE_MATH::Exp(-CHASTE_MATH::Pow((cell$V / 30.0), 2.0)) + 1.5', False], ['1.0 / (1.0 + CHASTE_MATH::Exp((33.5 + cell$V) / 10.0))', False], ['20.0 / (1.0 + CHASTE_MATH::Exp((33.5 + cell$V) / 10.0)) + 20.0', False], ['1.0 / (1.0 + CHASTE_MATH::Exp((-14.5 - cell$V) / 6.0))', False], ['1.0 / (1.0 + CHASTE_MATH::Exp((35.06 + cell$V) / 3.6)) + 0.6 / (1.0 + CHASTE_MATH::Exp((-cell$V + 50.0) / 20.0))', False], ['1.0 / (0.0197 * CHASTE_MATH::Exp(-CHASTE_MATH::Pow(((14.5 + cell$V) * 0.0337), 2.0)) + 0.02)', False], ['(((-14.499999400000000 >= cell$V) && (-14.500000600000000 <= cell$V)) ? ((--14.500000600000000 + cell$V) * ((-CHASTE_MATH::Exp((--14.499999400000000 - 14.5) / 6.0) + 1.0) / ((-14.499999400000000 + 14.5) * (1.0 + CHASTE_MATH::Exp((--14.499999400000000 - 14.5) / 6.0)) * 0.035) - (-CHASTE_MATH::Exp((--14.500000600000000 - 14.5) / 6.0) + 1.0) / ((-14.500000600000000 + 14.5) * (1.0 + CHASTE_MATH::Exp((--14.500000600000000 - 14.5) / 6.0)) * 0.035)) / (--14.500000600000000 - 14.499999400000000) + (-CHASTE_MATH::Exp((--14.500000600000000 - 14.5) / 6.0) + 1.0) / ((-14.500000600000000 + 14.5) * (1.0 + CHASTE_MATH::Exp((--14.500000600000000 - 14.5) / 6.0)) * 0.035)) : ((-CHASTE_MATH::Exp((-14.5 - cell$V) / 6.0) + 1.0) / ((1.0 + CHASTE_MATH::Exp((-14.5 - cell$V) / 6.0)) * (14.5 + cell$V) * 0.035)))', True], ['1.0 / ((((-9.9999993103448276 >= cell$V) && (-10.000000689655172 <= cell$V)) ? ((--10.000000689655172 + cell$V) * ((-9.9999993103448276 + 10.0) * 0.00061 / (-1.0 + CHASTE_MATH::Exp((-9.9999993103448276 + 10.0) * 0.145)) - (-10.000000689655172 + 10.0) * 0.00061 / (-1.0 + CHASTE_MATH::Exp((-10.000000689655172 + 10.0) * 0.145))) / (--10.000000689655172 - 9.9999993103448276) + (-10.000000689655172 + 10.0) * 0.00061 / (-1.0 + CHASTE_MATH::Exp((-10.000000689655172 + 10.0) * 0.145))) : ((10.0 + cell$V) * 0.00061 / (-1.0 + CHASTE_MATH::Exp((10.0 + cell$V) * 0.145)))) + (((-6.9999991869918699 >= cell$V) && (-7.0000008130081301 <= cell$V)) ? ((--7.0000008130081301 + cell$V) * ((-6.9999991869918699 + 7.0) * 0.00138 / (-CHASTE_MATH::Exp(-(-6.9999991869918699 + 7.0) * 0.123) + 1.0) - (-7.0000008130081301 + 7.0) * 0.00138 / (-CHASTE_MATH::Exp(-(-7.0000008130081301 + 7.0) * 0.123) + 1.0)) / (--7.0000008130081301 - 6.9999991869918699) + (-7.0000008130081301 + 7.0) * 0.00138 / (-CHASTE_MATH::Exp(-(-7.0000008130081301 + 7.0) * 0.123) + 1.0)) : ((7.0 + cell$V) * 0.00138 / (-CHASTE_MATH::Exp(-(7.0 + cell$V) * 0.123) + 1.0))))', False], ['(((-29.999998544395924 >= cell$V) && (-30.000001455604076 <= cell$V)) ? (1 / ((--30.000001455604076 + cell$V) * ((-29.999998544395924 + 30.0) * 0.000131 / (-1.0 + CHASTE_MATH::Exp((-29.999998544395924 + 30.0) * 0.0687)) + (-29.999998544395924 + 30.0) * 7.19e-05 / (-CHASTE_MATH::Exp(-(-29.999998544395924 + 30.0) * 0.148) + 1.0) - (-30.000001455604076 + 30.0) * 0.000131 / (-1.0 + CHASTE_MATH::Exp((-30.000001455604076 + 30.0) * 0.0687)) - (-30.000001455604076 + 30.0) * 7.19e-05 / (-CHASTE_MATH::Exp(-(-30.000001455604076 + 30.0) * 0.148) + 1.0)) / (--30.000001455604076 - 29.999998544395924) + (-30.000001455604076 + 30.0) * 0.000131 / (-1.0 + CHASTE_MATH::Exp((-30.000001455604076 + 30.0) * 0.0687)) + (-30.000001455604076 + 30.0) * 7.19e-05 / (-CHASTE_MATH::Exp(-(-30.000001455604076 + 30.0) * 0.148) + 1.0))) : (1 / ((30.0 + cell$V) * 0.000131 / (-1.0 + CHASTE_MATH::Exp((30.0 + cell$V) * 0.0687)) + (30.0 + cell$V) * 7.19e-05 / (-CHASTE_MATH::Exp(-(30.0 + cell$V) * 0.148) + 1.0)))) * 1.0', False], ['(((-47.129999000000003 >= cell$V) && (-47.130001000000003 <= cell$V)) ? ((--47.130001000000003 + cell$V) * ((-47.129999000000003 + 47.13) * 0.32 / ((-CHASTE_MATH::Exp(-(-47.129999000000003 + 47.13) * 0.1) + 1.0) * 1.0) - (-47.130001000000003 + 47.13) * 0.32 / ((-CHASTE_MATH::Exp(-(-47.130001000000003 + 47.13) * 0.1) + 1.0) * 1.0)) / (--47.130001000000003 - 47.129999000000003) + (-47.130001000000003 + 47.13) * 0.32 / ((-CHASTE_MATH::Exp(-(-47.130001000000003 + 47.13) * 0.1) + 1.0) * 1.0)) : ((47.13 + cell$V) * 0.32 / ((-CHASTE_MATH::Exp(-(47.13 + cell$V) * 0.1) + 1.0) * 1.0)))', True]] \ No newline at end of file From 5f674f95ae2b0f1f7a02082c465ae90a66e9baca Mon Sep 17 00:00:00 2001 From: Joseph Simkin Date: Mon, 2 Mar 2026 14:40:15 +0000 Subject: [PATCH 22/28] Updated usage and help references for new command line argument --- chaste_codegen/data/tests/test_console_script_help.txt | 7 +++++-- chaste_codegen/data/tests/test_console_script_usage.txt | 3 ++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/chaste_codegen/data/tests/test_console_script_help.txt b/chaste_codegen/data/tests/test_console_script_help.txt index 53d55ab25..17baa12f7 100644 --- a/chaste_codegen/data/tests/test_console_script_help.txt +++ b/chaste_codegen/data/tests/test_console_script_help.txt @@ -3,7 +3,8 @@ usage: chaste_codegen [-h] [--version] [--normal] [--cvode] [--grl1] [--grl2] [--rush-larsen-labview] [--rush-larsen-c] [-j] [-o OUTFILE] [--output-dir OUTPUT_DIR] [--show-outputs] [-c CLS_NAME] - [-q] [--skip-singularity-fixes] [-y] [--opt] [-m] + [-q] [--skip-singularity-fixes] [--generate-kernels] + [-y] [--opt] [-m] [--lookup-table min max step] [--use-model-factory] cellml_file @@ -13,7 +14,7 @@ Chaste code generation for cellml. positional arguments: cellml_file The cellml file to convert to chaste code -optional arguments: +options: -h, --help show this help message and exit --version show program's version number and exit @@ -59,6 +60,8 @@ Generated code options: --skip-singularity-fixes skip singularity fixes in Goldman-Hodgkin-Katz (GHK) equations. + --generate-kernels Generate GPU/Device kernel files (...Kernels.hpp) for + supported model types. Chaste options: Options specific to Chaste code output diff --git a/chaste_codegen/data/tests/test_console_script_usage.txt b/chaste_codegen/data/tests/test_console_script_usage.txt index c4eda1dca..06998a70e 100644 --- a/chaste_codegen/data/tests/test_console_script_usage.txt +++ b/chaste_codegen/data/tests/test_console_script_usage.txt @@ -3,7 +3,8 @@ usage: chaste_codegen [-h] [--version] [--normal] [--cvode] [--grl1] [--grl2] [--rush-larsen-labview] [--rush-larsen-c] [-j] [-o OUTFILE] [--output-dir OUTPUT_DIR] [--show-outputs] [-c CLS_NAME] - [-q] [--skip-singularity-fixes] [-y] [--opt] [-m] + [-q] [--skip-singularity-fixes] [--generate-kernels] + [-y] [--opt] [-m] [--lookup-table min max step] [--use-model-factory] cellml_file From e1fde2b520c2ae467ea865d07d5f9140c404b18c Mon Sep 17 00:00:00 2001 From: Joseph Simkin Date: Mon, 2 Mar 2026 14:41:20 +0000 Subject: [PATCH 23/28] Made spacings in template better align with old code generation --- chaste_codegen/templates/backward_euler_model.hpp | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/chaste_codegen/templates/backward_euler_model.hpp b/chaste_codegen/templates/backward_euler_model.hpp index 64cece467..af07326a5 100644 --- a/chaste_codegen/templates/backward_euler_model.hpp +++ b/chaste_codegen/templates/backward_euler_model.hpp @@ -1,31 +1,28 @@ {% include "Shared/hpp/header_comments" %} {% include "Shared/hpp/includes" %} #include "{{base_class}}.hpp" + {% if not lookup_parameters is defined -%} #if USING_DEVICE_COMPILER template class BackwardEulerKernelLauncher; // Forward declare to hide CUDA-specifics from standard C++ compiler #endif {%- endif %} - {% with %}{% set base_class = base_class ~ "<" ~ nonlinear_state_vars|length ~ ">" %}{% include "Shared/hpp/class_declaration" %}{% endwith %} {% if not lookup_parameters is defined -%} #if USING_DEVICE_COMPILER template using SolverKernelLauncher = BackwardEulerKernelLauncher<{{class_name}}, ValueType>; static constexpr unsigned TOTAL_SIZE = {{ state_vars|length }}u; static constexpr unsigned NONLINEAR_SIZE = {{ nonlinear_state_vars|length }}u; -#endif -{%- endif %} - +#endif{%- endif %} {% include "Shared/hpp/DefaultStimulus_IntracellularCalciumConcentration" %} - {{class_name}}(boost::shared_ptr /* unused */, boost::shared_ptr pIntracellularStimulus); - {% include "Shared/hpp/destructor_verify_state_variables_GetIIonic" %} {% if nonlinear_state_vars|length > 0 -%} void ComputeResidual(double {{free_variable.var_name}}, const double rCurrentGuess[{{nonlinear_state_vars|length}}], double rResidual[{{nonlinear_state_vars|length}}]); void ComputeJacobian(double {{free_variable.var_name}}, const double rCurrentGuess[{{nonlinear_state_vars|length}}], double rJacobian[{{nonlinear_state_vars|length}}][{{nonlinear_state_vars|length}}]); {%- endif %} {# nonlinear_state_vars #} + #if USING_DEVICE_COMPILER {% if not lookup_parameters is defined -%}{# only generate kernels for non opt models -#} {% if nonlinear_state_vars|length > 0 -%} From 1f416b64ff038e13298a77481e4266150cbe61ed Mon Sep 17 00:00:00 2001 From: Joseph Simkin Date: Mon, 2 Mar 2026 14:42:36 +0000 Subject: [PATCH 24/28] Updated test to reflect that cvode and BE models now generate kernel files (even if they are not written to a file) --- chaste_codegen/tests/conftest.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/chaste_codegen/tests/conftest.py b/chaste_codegen/tests/conftest.py index f9756829d..67fb89e81 100644 --- a/chaste_codegen/tests/conftest.py +++ b/chaste_codegen/tests/conftest.py @@ -108,7 +108,12 @@ def compare_model_against_reference(chaste_model, tmp_path, model_type, referenc expected_path = os.path.join(TESTS_FOLDER, reference_folder, model_type, chaste_model.file_name) # Write generated files # Compare against reference - assert len(chaste_model.generated_code) == len(chaste_model.generated_code) == len(chaste_model.DEFAULT_EXTENSIONS) + # Certain model types will also generate a kernels file, giving us 1 extra generated file + if model_type.startswith('BE') or 'Cvode' in model_type or 'CVODE' in model_type: + expected_len = len(chaste_model.DEFAULT_EXTENSIONS) + 1 + else: + expected_len = len(chaste_model.DEFAULT_EXTENSIONS) + assert len(chaste_model.generated_code) == expected_len assert len(chaste_model.generated_code) > 0 for ext, code in zip(chaste_model.DEFAULT_EXTENSIONS, chaste_model.generated_code): gen_file_path = os.path.join(tmp_path, chaste_model.file_name + ext) From 638f84aa6ba37392985110a68f58a8d406281465 Mon Sep 17 00:00:00 2001 From: Joseph Simkin Date: Mon, 2 Mar 2026 14:43:14 +0000 Subject: [PATCH 25/28] Modifed reference model files to account for new printer --- .../BE/aslanidi_atrial_model_2009.cpp | 598 +-- .../BE/aslanidi_atrial_model_2009.hpp | 56 +- ...szigeti_bett_kim_rasmusson_2004_apical.cpp | 622 ++-- ...szigeti_bett_kim_rasmusson_2004_apical.hpp | 56 +- ...namic_courtemanche_ramirez_nattel_1998.cpp | 492 +-- ...namic_courtemanche_ramirez_nattel_1998.hpp | 56 +- ...i_pasqualini_bers_2010_ssBackwardEuler.cpp | 1016 +++--- ...i_pasqualini_bers_2010_ssBackwardEuler.hpp | 56 +- .../BE/li_mouse_2010.cpp | 668 ++-- .../BE/li_mouse_2010.hpp | 56 +- .../BE/sachse_moreno_abildskov_2008_b.cpp | 126 +- .../BE/sachse_moreno_abildskov_2008_b.hpp | 56 +- .../BE/test_piecewises_be.cpp | 24 +- .../BE/test_piecewises_be.hpp | 56 +- ...szigeti_bett_kim_rasmusson_2004_apical.cpp | 548 +-- ...szigeti_bett_kim_rasmusson_2004_apical.hpp | 24 +- .../BEopt/decker_2009.cpp | 868 ++--- .../BEopt/decker_2009.hpp | 24 +- ...namic_courtemanche_ramirez_nattel_1998.cpp | 402 +-- ...namic_courtemanche_ramirez_nattel_1998.hpp | 24 +- .../Shannon2004_with_modifiers.cpp | 821 ++--- .../Shannon2004_with_modifiers.hpp | 26 + .../CVODE_DATA_CLAMP/dokos_model_1996.cpp | 309 +- .../CVODE_DATA_CLAMP/dokos_model_1996.hpp | 26 + .../CVODE_DATA_CLAMP/dynamic_Shannon2004.cpp | 821 ++--- .../CVODE_DATA_CLAMP/dynamic_Shannon2004.hpp | 26 + ..._pasqualini_bers_2010_ssCvodeDataClamp.cpp | 637 ++-- ..._pasqualini_bers_2010_ssCvodeDataClamp.hpp | 26 + ..._huxley_squid_axon_model_1952_modified.cpp | 59 +- ..._huxley_squid_axon_model_1952_modified.hpp | 26 + ...squalini_bers_2010_ssCvodeDataClampOpt.cpp | 359 +- ...squalini_bers_2010_ssCvodeDataClampOpt.hpp | 15 + ..._huxley_squid_axon_model_1952_modified.cpp | 47 +- ..._huxley_squid_axon_model_1952_modified.hpp | 15 + .../Cvode/difrancesco_noble_model_1985.cpp | 283 +- .../Cvode/difrancesco_noble_model_1985.hpp | 26 + .../Cvode/dynamic_mahajan_shiferaw_2008.cpp | 421 +-- .../Cvode/dynamic_mahajan_shiferaw_2008.hpp | 26 + .../Cvode/faber_rudy_2000.cpp | 437 +-- .../Cvode/faber_rudy_2000.hpp | 26 + ..._huxley_squid_axon_model_1952_modified.cpp | 55 +- ..._huxley_squid_axon_model_1952_modified.hpp | 26 + ..._aaltosetala_severi_ventricularVersion.cpp | 443 +-- ..._aaltosetala_severi_ventricularVersion.hpp | 26 + .../dynamic_aslanidi_Purkinje_model_2009.cpp | 295 +- .../dynamic_aslanidi_Purkinje_model_2009.hpp | 15 + .../Cvode_opt/hilgemann_noble_model_1987.cpp | 165 +- .../Cvode_opt/hilgemann_noble_model_1987.hpp | 15 + ..._huxley_squid_axon_model_1952_modified.cpp | 89 +- ..._huxley_squid_axon_model_1952_modified.hpp | 16 +- .../aslanidi_atrial_model_2009.cpp | 907 ++--- .../aslanidi_atrial_model_2009.hpp | 27 +- .../dynamic_Shannon2004.cpp | 1471 ++++---- .../dynamic_Shannon2004.hpp | 27 +- ..._huxley_squid_axon_model_1952_modified.cpp | 97 +- ..._huxley_squid_axon_model_1952_modified.hpp | 27 +- .../GRL1/dynamic_demir_model_1994.cpp | 1200 +++---- .../GRL1/dynamic_demir_model_1994.hpp | 3 + ..._huxley_squid_axon_model_1952_modified.cpp | 130 +- ..._huxley_squid_axon_model_1952_modified.hpp | 3 + .../GRL1Opt/beeler_reuter_model_1977.cpp | 258 +- .../GRL1Opt/beeler_reuter_model_1977.hpp | 3 + .../GRL1Opt/dynamic_matsuoka_model_2003.cpp | 1712 ++++----- .../GRL1Opt/dynamic_matsuoka_model_2003.hpp | 3 + .../GRL2/dynamic_winslow_model_1999.cpp | 1442 ++++---- .../GRL2/dynamic_winslow_model_1999.hpp | 3 + ..._huxley_squid_axon_model_1952_modified.cpp | 138 +- ..._huxley_squid_axon_model_1952_modified.hpp | 3 + .../dynamic_viswanathan_model_1999_epi.cpp | 1184 +++--- .../dynamic_viswanathan_model_1999_epi.hpp | 3 + .../GRL2Opt/dynamic_winslow_model_1999.cpp | 3193 ++++++++++------- .../GRL2Opt/dynamic_winslow_model_1999.hpp | 31 +- ..._huxley_squid_axon_model_1952_modified.cpp | 96 +- ..._huxley_squid_axon_model_1952_modified.hpp | 3 + ...fox_mcharg_gilmour_2002_console_script.cpp | 296 +- ...fox_mcharg_gilmour_2002_console_script.hpp | 3 + .../Normal/luo_rudy_1994.cpp | 254 +- .../Normal/luo_rudy_1994.hpp | 3 + ...n_dynamic_aslanidi_Purkinje_model_2009.cpp | 478 +-- ...n_dynamic_aslanidi_Purkinje_model_2009.hpp | 3 + .../Normal/output_class.c | 364 +- .../Normal/output_class.h | 3 + .../Normal/test_V_not_state_derived_quant.cpp | 6 +- .../Normal/test_V_not_state_derived_quant.hpp | 3 + .../Normal/test_V_not_state_mparam.cpp | 4 +- .../Normal/test_V_not_state_mparam.hpp | 3 + .../Opt/aslanidi_Purkinje_model_2009Opt.cpp | 1430 ++++++++ .../Opt/aslanidi_Purkinje_model_2009Opt.hpp | 137 + ...beeler_reuter_model_1977_lookup_tables.cpp | 120 +- ...beeler_reuter_model_1977_lookup_tables.hpp | 3 + .../dynamic_aslanidi_Purkinje_model_2009.cpp | 294 +- .../dynamic_aslanidi_Purkinje_model_2009.hpp | 3 + ...ynamic_aslanidi_Purkinje_model_2009Opt.cpp | 1445 ++++++++ ...ynamic_aslanidi_Purkinje_model_2009Opt.hpp | 140 + ..._huxley_squid_axon_model_1952_modified.cpp | 44 +- ..._huxley_squid_axon_model_1952_modified.hpp | 3 + ...n_dynamic_aslanidi_Purkinje_model_2009.cpp | 294 +- ...n_dynamic_aslanidi_Purkinje_model_2009.hpp | 3 + ...rudy_1991_with_range_cap_dimensionless.cpp | 142 +- ...rudy_1991_with_range_cap_dimensionless.hpp | 3 + .../RL/dynamic_livshitz_rudy_2007.cpp | 362 +- .../RL/dynamic_livshitz_rudy_2007.hpp | 3 + ..._huxley_squid_axon_model_1952_modified.cpp | 54 +- ..._huxley_squid_axon_model_1952_modified.hpp | 3 + ...szigeti_bett_kim_rasmusson_2004_apical.cpp | 326 +- ...szigeti_bett_kim_rasmusson_2004_apical.hpp | 3 + ..._huxley_squid_axon_model_1952_modified.cpp | 62 +- ..._huxley_squid_axon_model_1952_modified.hpp | 3 + 108 files changed, 17109 insertions(+), 12557 deletions(-) create mode 100644 chaste_codegen/data/tests/chaste_reference_models/Opt/aslanidi_Purkinje_model_2009Opt.cpp create mode 100644 chaste_codegen/data/tests/chaste_reference_models/Opt/aslanidi_Purkinje_model_2009Opt.hpp create mode 100644 chaste_codegen/data/tests/chaste_reference_models/Opt/dynamic_aslanidi_Purkinje_model_2009Opt.cpp create mode 100644 chaste_codegen/data/tests/chaste_reference_models/Opt/dynamic_aslanidi_Purkinje_model_2009Opt.hpp diff --git a/chaste_codegen/data/tests/chaste_reference_models/BE/aslanidi_atrial_model_2009.cpp b/chaste_codegen/data/tests/chaste_reference_models/BE/aslanidi_atrial_model_2009.cpp index 8cb3904a7..5e32b2002 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/BE/aslanidi_atrial_model_2009.cpp +++ b/chaste_codegen/data/tests/chaste_reference_models/BE/aslanidi_atrial_model_2009.cpp @@ -22,6 +22,8 @@ #include "HeartConfig.hpp" #include "IsNan.hpp" #include "MathsCustomFunctions.hpp" +#include "ChasteMathDeviceNamespaces.hpp" +#include "ChasteCpuMacros.hpp" @@ -30,9 +32,9 @@ 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_membrane__Cm_converted = CHASTE_CONST(0.001) * mParameters[4]; // uF + const double var_chaste_interface__membrane__stim_amplitude_converted = -CHASTE_CONST(3.9999999999999998e-6) * CHASTE_CAP() / var_membrane__Cm_converted; // uA_per_cm2 + const double var_chaste_interface__membrane__stim_duration_converted = CHASTE_CONST(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( @@ -63,15 +65,15 @@ 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[1] = CHASTE_CONST(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] + this->mParameters[3] = CHASTE_CONST(0.0040000000000000001); // (var_L_type_Ca_channel__g_Ca_L) [nanoS] + this->mParameters[4] = CHASTE_CONST(5.0000000000000002e-5); // (var_membrane__Cm) [nanoF] + this->mParameters[5] = CHASTE_CONST(1.3999999999999999e-6); // (var_sodium_current__P_Na) [nanolitre_per_second] + this->mParameters[6] = CHASTE_CONST(0.0050800000000000003); // (var_inward_rectifier__g_K1) [nanoS] + this->mParameters[7] = CHASTE_CONST(0.0035000000000000001); // (var_delayed_rectifier_K_current__g_Kr) [nanoS] + this->mParameters[8] = CHASTE_CONST(0.0025000000000000001); // (var_delayed_rectifier_K_current__g_Ks) [nanoS] + this->mParameters[9] = CHASTE_CONST(2.0000000000000002e-5); // (var_Na_Ca_ion_exchanger_current__k_NaCa) [picoA_per_millimolar_4] } Cellaslanidi_atrial_model_2009FromCellMLBackwardEuler::~Cellaslanidi_atrial_model_2009FromCellMLBackwardEuler() @@ -118,7 +120,7 @@ // 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -157,52 +159,52 @@ 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_Ca_independent_transient_outward_K_current__g_to = CHASTE_CONST(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_Na_Ca_ion_exchanger_current__d_NaCa = CHASTE_CONST(0.00029999999999999997); // per_millimolar_4 + const double var_Na_Ca_ion_exchanger_current__gamma = CHASTE_CONST(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_T_type_Ca_channel__g_Ca_T = CHASTE_CONST(0.0060000000000000001); // nanoS + const double var_background_currents__g_B_Ca = CHASTE_CONST(3.1000000000000001e-5); // nanoS + const double var_background_currents__g_B_Na = CHASTE_CONST(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_inward_rectifier__KmK1 = CHASTE_CONST(0.58999999999999997); // millimolar + const double var_inward_rectifier__shiftK1 = -CHASTE_CONST(3.6000000000000001); // millivolt + const double var_inward_rectifier__steepK1 = CHASTE_CONST(1.393); // dimensionless + const double var_membrane__Cm_converted = CHASTE_CONST(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_Ca_independent_transient_outward_K_current__E_K = var_membrane__R * var_membrane__T * CHASTE_MATH::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 = CHASTE_CONST(0.5) * var_membrane__R * var_membrane__T * CHASTE_MATH::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)) ? (CHASTE_CONST(0.098000000000000004) + CHASTE_CONST(0.0014) * var_chaste_interface__membrane__V) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (CHASTE_CONST(0.16799999999999998) + CHASTE_CONST(0.0023999999999999998) * var_chaste_interface__membrane__V) : (CHASTE_CONST(0.070000000000000007) + CHASTE_CONST(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)) ? (CHASTE_CONST(0.20000000000000001) * (CHASTE_CONST(0.40000000000000002) + CHASTE_CONST(0.59999999999999998) * CHASTE_MATH::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) * (CHASTE_CONST(0.58999999999999997) * CHASTE_MATH::Pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s1_gate__s1, 3) + CHASTE_CONST(0.40999999999999998) * CHASTE_MATH::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)) ? (CHASTE_CONST(0.34999999999999998) * (CHASTE_CONST(0.40000000000000002) + CHASTE_CONST(0.59999999999999998) * CHASTE_MATH::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) * (CHASTE_CONST(0.58999999999999997) * CHASTE_MATH::Pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s1_gate__s1, 3) + CHASTE_CONST(0.40999999999999998) * CHASTE_MATH::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) : ((CHASTE_CONST(0.40000000000000002) + CHASTE_CONST(0.59999999999999998) * CHASTE_MATH::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) * (CHASTE_CONST(0.58999999999999997) * CHASTE_MATH::Pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s1_gate__s1, 3) + CHASTE_CONST(0.40999999999999998) * CHASTE_MATH::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 + CHASTE_MATH::Exp(CHASTE_CONST(1.9166666666666667) - CHASTE_CONST(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)) ? (CHASTE_CONST(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)) ? (CHASTE_CONST(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 = CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * 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 = (CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mParameters[1] * CHASTE_MATH::Exp(var_Na_Ca_ion_exchanger_current__gamma * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - CHASTE_MATH::Pow(mParameters[2], 3) * var_chaste_interface__intracellular_ion_concentrations__Ca_i * CHASTE_MATH::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 + (CHASTE_MATH::Pow(mParameters[2], 3) * var_chaste_interface__intracellular_ion_concentrations__Ca_i + CHASTE_MATH::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 = CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * 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_background_currents__i_B_Ca = (((var_environment__CT == 1) && (var_environment__PM == 0)) ? (CHASTE_CONST(2.0000000000000002e-5) * var_chaste_interface__membrane__V - CHASTE_CONST(2.0000000000000002e-5) * var_background_currents__E_Ca) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (CHASTE_CONST(3.0000000000000001e-5) * var_chaste_interface__membrane__V - CHASTE_CONST(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_Kr_converted = CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * 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_delayed_rectifier_K_current__i_Ks_converted = CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * 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 * CHASTE_MATH::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 + CHASTE_MATH::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))) * CHASTE_MATH::Pow((var_chaste_interface__cleft_space_ion_concentrations__K_c + var_inward_rectifier__KmK1), 3))) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (CHASTE_CONST(2.5) * CHASTE_MATH::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 + CHASTE_MATH::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))) * CHASTE_MATH::Pow((var_chaste_interface__cleft_space_ion_concentrations__K_c + var_inward_rectifier__KmK1), 3))) : (CHASTE_MATH::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 + CHASTE_MATH::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))) * CHASTE_MATH::Pow((var_chaste_interface__cleft_space_ion_concentrations__K_c + var_inward_rectifier__KmK1), 3))))); // picoA + const double var_inward_rectifier__i_K1_converted = CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * var_inward_rectifier__i_K1 / var_membrane__Cm_converted; // uA_per_cm2 + const double var_sarcolemmal_calcium_pump_current__i_CaP_max = CHASTE_CONST(0.0095090000000000001); // picoA + const double var_sarcolemmal_calcium_pump_current__k_CaP = CHASTE_CONST(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_current__E_Na = var_membrane__R * var_membrane__T * CHASTE_MATH::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)) ? (CHASTE_CONST(2.0000000000000002e-5) * var_chaste_interface__membrane__V - CHASTE_CONST(2.0000000000000002e-5) * var_sodium_current__E_Na) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (CHASTE_CONST(3.0000000000000001e-5) * var_chaste_interface__membrane__V - CHASTE_CONST(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 >= -CHASTE_CONST(2.6539450910485349e-6)) && (var_chaste_interface__membrane__V <= CHASTE_CONST(2.6539450910485349e-6))) ? (CHASTE_CONST(188398.77346612973) * (CHASTE_CONST(2.6539450910485349e-6) + var_chaste_interface__membrane__V) * (CHASTE_CONST(0.0096486999999999996) * CHASTE_MATH::Pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8) - CHASTE_MATH::Log(mParameters[2] / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (CHASTE_CONST(0.36499999999999999) * var_chaste_interface__sodium_current_h2_gate__h2 + CHASTE_CONST(0.63500000000000001) * var_chaste_interface__sodium_current_h1_gate__h1) * mParameters[2] * mParameters[5] / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) + CHASTE_CONST(0.0096486999999999996) * CHASTE_MATH::Pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8) - CHASTE_MATH::Log(mParameters[2] / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (CHASTE_CONST(0.36499999999999999) * var_chaste_interface__sodium_current_h2_gate__h2 + CHASTE_CONST(0.63500000000000001) * var_chaste_interface__sodium_current_h1_gate__h1) * mParameters[2] * mParameters[5] / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) - CHASTE_CONST(0.0096486999999999996) * CHASTE_MATH::Pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8) - CHASTE_MATH::Log(mParameters[2] / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (CHASTE_CONST(0.36499999999999999) * var_chaste_interface__sodium_current_h2_gate__h2 + CHASTE_CONST(0.63500000000000001) * var_chaste_interface__sodium_current_h1_gate__h1) * mParameters[2] * mParameters[5] / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) : (CHASTE_CONST(3635.606491085292) * CHASTE_MATH::Pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + CHASTE_MATH::Exp(CHASTE_CONST(0.037679754693225945) * var_chaste_interface__membrane__V - CHASTE_MATH::Log(mParameters[2] / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (CHASTE_CONST(0.36499999999999999) * var_chaste_interface__sodium_current_h2_gate__h2 + CHASTE_CONST(0.63500000000000001) * var_chaste_interface__sodium_current_h1_gate__h1) * mParameters[2] * var_chaste_interface__membrane__V * mParameters[5] / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(0.037679754693225945) * var_chaste_interface__membrane__V)))); // picoA + const double var_sodium_current__i_Na_converted = CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * var_sodium_current__i_Na / var_membrane__Cm_converted; // uA_per_cm2 + const double var_sodium_potassium_pump__i_NaK_max = CHASTE_CONST(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 var_sodium_potassium_pump__i_p = CHASTE_CONST(1.6000000000000001) * CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, CHASTE_CONST(1.5)) * var_chaste_interface__cleft_space_ion_concentrations__K_c * var_sodium_potassium_pump__i_NaK_max / ((CHASTE_CONST(1.5) + CHASTE_MATH::Exp(-CHASTE_CONST(1.5) - CHASTE_CONST(0.025000000000000001) * var_chaste_interface__membrane__V)) * (CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, CHASTE_CONST(1.5)) + CHASTE_MATH::Pow(var_sodium_potassium_pump__k_NaK_Na, CHASTE_CONST(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 + CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * var_Ca_independent_transient_outward_K_current__i_sus + CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * var_Ca_independent_transient_outward_K_current__i_to + CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * var_T_type_Ca_channel__i_Ca_T + CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * var_background_currents__i_B_Ca + CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * var_background_currents__i_B_Na + CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * var_sarcolemmal_calcium_pump_current__i_CaP + CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * 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)); @@ -212,7 +214,7 @@ 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -260,93 +262,93 @@ 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__I_up_max = CHASTE_CONST(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_Ca_handling_by_the_SR__Vol_rel = CHASTE_CONST(4.3999999999999997e-8); // nanolitre + const double var_Ca_handling_by_the_SR__Vol_up = CHASTE_CONST(3.9690000000000001e-7); // nanolitre + const double var_Ca_handling_by_the_SR__k_F3 = CHASTE_CONST(0.81499999999999995); // per_second + const double var_Ca_handling_by_the_SR__k_cyca = CHASTE_CONST(0.00029999999999999997); // millimolar + const double var_Ca_handling_by_the_SR__k_rel = CHASTE_CONST(0.00029999999999999997); // millimolar + const double var_Ca_handling_by_the_SR__k_srca = CHASTE_CONST(0.5); // millimolar + const double var_Ca_handling_by_the_SR__k_xcs = CHASTE_CONST(0.40000000000000002); // dimensionless + const double var_Ca_handling_by_the_SR__tau_tr = CHASTE_CONST(0.01); // second + const double var_Ca_independent_transient_outward_K_current__g_to = CHASTE_CONST(0.050001999999999998); // nanoS + const double d_dt_chaste_interface_var_Ca_handling_by_the_SR__O_Calse = CHASTE_CONST(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_Na_Ca_ion_exchanger_current__d_NaCa = CHASTE_CONST(0.00029999999999999997); // per_millimolar_4 + const double var_Na_Ca_ion_exchanger_current__gamma = CHASTE_CONST(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_T_type_Ca_channel__g_Ca_T = CHASTE_CONST(0.0060000000000000001); // nanoS + const double var_background_currents__g_B_Ca = CHASTE_CONST(3.1000000000000001e-5); // nanoS + const double var_background_currents__g_B_Na = CHASTE_CONST(6.3999999999999997e-5); // nanoS + const double var_cleft_space_ion_concentrations__Vol_c = CHASTE_CONST(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__Mg_i = CHASTE_CONST(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 d_dt_chaste_interface_var_intracellular_Ca_buffering__O_TMgMg = CHASTE_CONST(0.001) * var_intracellular_Ca_buffering__O_TMgMg_orig_deriv; // 1 / millisecond + const double var_Ca_handling_by_the_SR__i_rel = CHASTE_MATH::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] / CHASTE_MATH::Pow((CHASTE_CONST(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 - CHASTE_MATH::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 = CHASTE_CONST(33.960000000000001) + CHASTE_CONST(339.60000000000002) * CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Ca_i, 4) / CHASTE_MATH::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 d_dt_chaste_interface_var_Ca_handling_by_the_SR__F3 = CHASTE_CONST(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 d_dt_chaste_interface_var_intracellular_Ca_buffering__O_C = CHASTE_CONST(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 d_dt_chaste_interface_var_intracellular_Ca_buffering__O_TC = CHASTE_CONST(0.001) * var_intracellular_Ca_buffering__O_TC_orig_deriv; // 1 / millisecond + const double var_intracellular_Ca_buffering__dOTMgCdt = -CHASTE_CONST(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 d_dt_chaste_interface_var_intracellular_Ca_buffering__O_TMgC = CHASTE_CONST(0.001) * var_intracellular_Ca_buffering__O_TMgC_orig_deriv; // 1 / millisecond + const double var_intracellular_ion_concentrations__Vol_Ca = CHASTE_CONST(5.8839999999999999e-6); // nanolitre + const double var_intracellular_ion_concentrations__Vol_i = CHASTE_CONST(1.26e-5); // nanolitre + const double var_inward_rectifier__KmK1 = CHASTE_CONST(0.58999999999999997); // millimolar + const double var_inward_rectifier__shiftK1 = -CHASTE_CONST(3.6000000000000001); // millivolt + const double var_inward_rectifier__steepK1 = CHASTE_CONST(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_Ca_handling_by_the_SR__Ca_rel_orig_deriv = -31 * var_Ca_handling_by_the_SR__O_Calse_orig_deriv + CHASTE_CONST(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 = CHASTE_CONST(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 = CHASTE_CONST(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 = CHASTE_CONST(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_independent_transient_outward_K_current__E_K = var_membrane__R * var_membrane__T * CHASTE_MATH::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 = CHASTE_CONST(0.5) * var_membrane__R * var_membrane__T * CHASTE_MATH::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 * CHASTE_MATH::Exp(-CHASTE_CONST(1.6000000000000001) + CHASTE_CONST(0.080000000000000002) * var_chaste_interface__membrane__V) + CHASTE_CONST(203.80000000000001) * CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Ca_i, 4) / CHASTE_MATH::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_Ca_independent_transient_outward_K_current__i_sus = (((var_environment__CT == 1) && (var_environment__PM == 0)) ? (CHASTE_CONST(0.098000000000000004) + CHASTE_CONST(0.0014) * var_chaste_interface__membrane__V) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (CHASTE_CONST(0.16799999999999998) + CHASTE_CONST(0.0023999999999999998) * var_chaste_interface__membrane__V) : (CHASTE_CONST(0.070000000000000007) + CHASTE_CONST(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)) ? (CHASTE_CONST(0.20000000000000001) * (CHASTE_CONST(0.40000000000000002) + CHASTE_CONST(0.59999999999999998) * CHASTE_MATH::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) * (CHASTE_CONST(0.58999999999999997) * CHASTE_MATH::Pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s1_gate__s1, 3) + CHASTE_CONST(0.40999999999999998) * CHASTE_MATH::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)) ? (CHASTE_CONST(0.34999999999999998) * (CHASTE_CONST(0.40000000000000002) + CHASTE_CONST(0.59999999999999998) * CHASTE_MATH::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) * (CHASTE_CONST(0.58999999999999997) * CHASTE_MATH::Pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s1_gate__s1, 3) + CHASTE_CONST(0.40999999999999998) * CHASTE_MATH::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) : ((CHASTE_CONST(0.40000000000000002) + CHASTE_CONST(0.59999999999999998) * CHASTE_MATH::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) * (CHASTE_CONST(0.58999999999999997) * CHASTE_MATH::Pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s1_gate__s1, 3) + CHASTE_CONST(0.40999999999999998) * CHASTE_MATH::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 = CHASTE_CONST(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 = CHASTE_CONST(0.001) * var_Ca_handling_by_the_SR__F2_orig_deriv; // 1 / millisecond + const double var_L_type_Ca_channel__d_prime = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.9166666666666667) - CHASTE_CONST(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)) ? (CHASTE_CONST(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)) ? (CHASTE_CONST(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 = (CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mParameters[1] * CHASTE_MATH::Exp(var_Na_Ca_ion_exchanger_current__gamma * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - CHASTE_MATH::Pow(mParameters[2], 3) * var_chaste_interface__intracellular_ion_concentrations__Ca_i * CHASTE_MATH::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 + (CHASTE_MATH::Pow(mParameters[2], 3) * var_chaste_interface__intracellular_ion_concentrations__Ca_i + CHASTE_MATH::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_background_currents__i_B_Ca = (((var_environment__CT == 1) && (var_environment__PM == 0)) ? (CHASTE_CONST(2.0000000000000002e-5) * var_chaste_interface__membrane__V - CHASTE_CONST(2.0000000000000002e-5) * var_background_currents__E_Ca) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (CHASTE_CONST(3.0000000000000001e-5) * var_chaste_interface__membrane__V - CHASTE_CONST(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_inward_rectifier__i_K1 = (((var_environment__CT == 1) && (var_environment__PM == 0)) ? (2 * CHASTE_MATH::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 + CHASTE_MATH::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))) * CHASTE_MATH::Pow((var_chaste_interface__cleft_space_ion_concentrations__K_c + var_inward_rectifier__KmK1), 3))) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (CHASTE_CONST(2.5) * CHASTE_MATH::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 + CHASTE_MATH::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))) * CHASTE_MATH::Pow((var_chaste_interface__cleft_space_ion_concentrations__K_c + var_inward_rectifier__KmK1), 3))) : (CHASTE_MATH::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 + CHASTE_MATH::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))) * CHASTE_MATH::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 = CHASTE_CONST(0.0095090000000000001); // picoA + const double var_sarcolemmal_calcium_pump_current__k_CaP = CHASTE_CONST(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_intracellular_ion_concentrations__Ca_i_orig_deriv = -CHASTE_CONST(0.044999999999999998) * var_intracellular_Ca_buffering__dOCdt - CHASTE_CONST(0.080000000000000002) * var_intracellular_Ca_buffering__dOTCdt - CHASTE_CONST(0.16) * var_intracellular_Ca_buffering__dOTMgCdt + CHASTE_CONST(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 = CHASTE_CONST(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 * CHASTE_MATH::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)) ? (CHASTE_CONST(2.0000000000000002e-5) * var_chaste_interface__membrane__V - CHASTE_CONST(2.0000000000000002e-5) * var_sodium_current__E_Na) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (CHASTE_CONST(3.0000000000000001e-5) * var_chaste_interface__membrane__V - CHASTE_CONST(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 >= -CHASTE_CONST(2.6539450910485349e-6)) && (var_chaste_interface__membrane__V <= CHASTE_CONST(2.6539450910485349e-6))) ? (CHASTE_CONST(188398.77346612973) * (CHASTE_CONST(2.6539450910485349e-6) + var_chaste_interface__membrane__V) * (CHASTE_CONST(0.0096486999999999996) * CHASTE_MATH::Pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8) - CHASTE_MATH::Log(mParameters[2] / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (CHASTE_CONST(0.36499999999999999) * var_chaste_interface__sodium_current_h2_gate__h2 + CHASTE_CONST(0.63500000000000001) * var_chaste_interface__sodium_current_h1_gate__h1) * mParameters[2] * mParameters[5] / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) + CHASTE_CONST(0.0096486999999999996) * CHASTE_MATH::Pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8) - CHASTE_MATH::Log(mParameters[2] / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (CHASTE_CONST(0.36499999999999999) * var_chaste_interface__sodium_current_h2_gate__h2 + CHASTE_CONST(0.63500000000000001) * var_chaste_interface__sodium_current_h1_gate__h1) * mParameters[2] * mParameters[5] / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) - CHASTE_CONST(0.0096486999999999996) * CHASTE_MATH::Pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8) - CHASTE_MATH::Log(mParameters[2] / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (CHASTE_CONST(0.36499999999999999) * var_chaste_interface__sodium_current_h2_gate__h2 + CHASTE_CONST(0.63500000000000001) * var_chaste_interface__sodium_current_h1_gate__h1) * mParameters[2] * mParameters[5] / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) : (CHASTE_CONST(3635.606491085292) * CHASTE_MATH::Pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + CHASTE_MATH::Exp(CHASTE_CONST(0.037679754693225945) * var_chaste_interface__membrane__V - CHASTE_MATH::Log(mParameters[2] / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (CHASTE_CONST(0.36499999999999999) * var_chaste_interface__sodium_current_h2_gate__h2 + CHASTE_CONST(0.63500000000000001) * var_chaste_interface__sodium_current_h1_gate__h1) * mParameters[2] * var_chaste_interface__membrane__V * mParameters[5] / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(0.037679754693225945) * var_chaste_interface__membrane__V)))); // picoA + const double var_sodium_potassium_pump__i_NaK_max = CHASTE_CONST(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_sodium_potassium_pump__i_p = CHASTE_CONST(1.6000000000000001) * CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, CHASTE_CONST(1.5)) * var_chaste_interface__cleft_space_ion_concentrations__K_c * var_sodium_potassium_pump__i_NaK_max / ((CHASTE_CONST(1.5) + CHASTE_MATH::Exp(-CHASTE_CONST(1.5) - CHASTE_CONST(0.025000000000000001) * var_chaste_interface__membrane__V)) * (CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, CHASTE_CONST(1.5)) + CHASTE_MATH::Pow(var_sodium_potassium_pump__k_NaK_Na, CHASTE_CONST(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 d_dt_chaste_interface_var_cleft_space_ion_concentrations__K_c = CHASTE_CONST(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 d_dt_chaste_interface_var_intracellular_ion_concentrations__K_i = CHASTE_CONST(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 + const double d_dt_chaste_interface_var_intracellular_ion_concentrations__Na_i = CHASTE_CONST(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; @@ -367,7 +369,7 @@ 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -404,106 +406,106 @@ 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_x0 = CHASTE_CONST(0.25) + var_chaste_interface__Ca_handling_by_the_SR__F2; + const double var_x1 = CHASTE_MATH::Pow(var_x0, (-2)); + const double var_x2 = CHASTE_MATH::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_x4 = CHASTE_CONST(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_x6 = CHASTE_CONST(0.23554751134632365) * var_x5; + const double var_x7 = var_x2 / CHASTE_MATH::Pow(var_x0, 3); + const double var_x8 = 1 / (CHASTE_CONST(1.3999999999999999) + CHASTE_CONST(0.80000000000000004) * var_chaste_interface__Ca_handling_by_the_SR__Ca_up + CHASTE_CONST(3333.3333333333335) * var_chaste_interface__intracellular_ion_concentrations__Ca_i); + const double var_x9 = CHASTE_MATH::Pow((CHASTE_CONST(0.00041999999999999996) + CHASTE_CONST(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 = CHASTE_CONST(3333.3333333333335) * var_chaste_interface__intracellular_ion_concentrations__Ca_i - CHASTE_CONST(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_x12 = CHASTE_CONST(0.00029999999999999997) + var_chaste_interface__intracellular_ion_concentrations__Ca_i; + const double var_x13 = CHASTE_MATH::Pow(var_x12, (-4)); + const double var_x14 = CHASTE_MATH::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_x16 = CHASTE_CONST(0.20380000000000001) * var_x15 + CHASTE_CONST(0.23999999999999999) * CHASTE_MATH::Exp(-CHASTE_CONST(1.6000000000000001) + CHASTE_CONST(0.080000000000000002) * var_chaste_interface__membrane__V); + const double var_x17 = var_x14 / CHASTE_MATH::Pow(var_x12, 5); + const double var_x18 = var_x13 * CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Ca_i, 3); + const double var_x19 = CHASTE_CONST(0.81520000000000004) * var_x17 - CHASTE_CONST(0.81520000000000004) * var_x18; + const double var_x20 = CHASTE_CONST(0.033960000000000004) + CHASTE_CONST(0.33960000000000001) * var_x15; + const double var_x21 = CHASTE_CONST(1.3584000000000001) * var_x17 - CHASTE_CONST(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_x24 = CHASTE_CONST(0.11002290841454433) * var_x23; + const double var_x25 = CHASTE_MATH::Pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s3_gate__s3, 6); + const double var_x26 = CHASTE_CONST(0.58999999999999997) * CHASTE_MATH::Pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s1_gate__s1, 3) + CHASTE_CONST(0.40999999999999998) * CHASTE_MATH::Pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s2_gate__s2, 3); + const double var_x27 = CHASTE_CONST(26.53945091048535) * var_x26 * var_chaste_interface__Ca_independent_transient_outward_K_current_r_gate__r; + const double var_x28 = var_x27 * (CHASTE_CONST(1.6583208100573134e-5) + CHASTE_CONST(2.4874812150859699e-5) * var_x25); + const double var_x29 = CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, CHASTE_CONST(1.5)); + const double var_x30 = 1 / (CHASTE_CONST(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_x33 = 1 / (CHASTE_CONST(1.5) + CHASTE_MATH::Exp(-CHASTE_CONST(1.5) - CHASTE_CONST(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_x38 = CHASTE_MATH::Pow(var_chaste_interface__cleft_space_ion_concentrations__K_c, 2); + const double var_x39 = CHASTE_CONST(0.58999999999999997) + var_chaste_interface__cleft_space_ion_concentrations__K_c; + const double var_x40 = CHASTE_MATH::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_x42 = CHASTE_MATH::Log(var_x41 * var_chaste_interface__cleft_space_ion_concentrations__K_c); + const double var_x43 = CHASTE_MATH::Exp(CHASTE_CONST(0.18895643383558949) + CHASTE_CONST(0.052487898287663745) * var_chaste_interface__membrane__V - CHASTE_CONST(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_x49 = -CHASTE_CONST(26.53945091048535) * var_x42 + var_chaste_interface__membrane__V; + const double var_x50 = CHASTE_MATH::Pow(var_chaste_interface__cleft_space_ion_concentrations__K_c, 3); + const double var_x51 = var_x46 * var_x50 / CHASTE_MATH::Pow(var_x39, 4); + const double var_x52 = CHASTE_MATH::Pow(var_x31, (-2)); + const double var_x53 = CHASTE_MATH::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_x59 = var_x35 * CHASTE_MATH::Sqrt(var_chaste_interface__intracellular_ion_concentrations__Na_i) * var_chaste_interface__cleft_space_ion_concentrations__K_c; + const double var_x60 = CHASTE_MATH::Pow((1 + CHASTE_CONST(0.027410122234342148) * var_x29), (-2)); + const double var_x61 = CHASTE_MATH::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_x63 = CHASTE_CONST(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_x65 = CHASTE_CONST(0.00020000000000000001) + var_chaste_interface__intracellular_ion_concentrations__Ca_i; + const double var_x66 = CHASTE_MATH::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_x69 = CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mParameters[1]; + const double var_x70 = 1 + CHASTE_CONST(0.00029999999999999997) * var_x68 + CHASTE_CONST(0.00029999999999999997) * var_x69; + const double var_x71 = CHASTE_MATH::Pow(var_x70, (-2)); + const double var_x72 = CHASTE_MATH::Exp(CHASTE_CONST(0.016955889611951675) * var_chaste_interface__membrane__V); + const double var_x73 = CHASTE_MATH::Exp(-CHASTE_CONST(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_x79 = CHASTE_MATH::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_x81 = CHASTE_CONST(0.021829942145742926) * var_x23; + const double var_x82 = -CHASTE_CONST(3.290319067574035e-6) - CHASTE_CONST(4.9354786013610522e-6) * var_x25; + const double var_x83 = CHASTE_CONST(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; + const double var_x87 = CHASTE_MATH::Log(var_x86); + const double var_x88 = var_x86 * CHASTE_MATH::Pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (CHASTE_CONST(0.36499999999999999) * var_chaste_interface__sodium_current_h2_gate__h2 + CHASTE_CONST(0.63500000000000001) * var_chaste_interface__sodium_current_h1_gate__h1) * mParameters[5]; + const double var_x89 = CHASTE_CONST(0.0096486999999999996) * var_x88; + const double var_x90 = var_x89 * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8) - var_x87) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8))); + const double var_x91 = CHASTE_CONST(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][0] = 1.0 - (mDt * (-CHASTE_CONST(14.98) - var_x4 + CHASTE_CONST(14.880000000000001) * var_chaste_interface__Ca_handling_by_the_SR__O_Calse)); + rJacobian[0][1] = -(mDt * (CHASTE_CONST(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][5] = -(mDt * (CHASTE_CONST(12.4) + CHASTE_CONST(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; @@ -512,8 +514,8 @@ 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][0] = -(mDt * (CHASTE_CONST(0.011085915847820609))); + rJacobian[1][1] = 1.0 - (mDt * (-CHASTE_CONST(0.011085915847820609) - CHASTE_CONST(2.6321499680605046e-9) * var_x11 - CHASTE_CONST(0.011698444302491135) * var_x8)); rJacobian[1][2] = 0.0; rJacobian[1][3] = 0.0; rJacobian[1][4] = 0.0; @@ -523,14 +525,14 @@ 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][11] = -(mDt * (CHASTE_CONST(121.85879481761599) * var_x8 - CHASTE_CONST(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][4] = -(mDt * (CHASTE_CONST(0.00081499999999999997))); rJacobian[2][5] = 0.0; rJacobian[2][6] = 0.0; rJacobian[2][7] = 0.0; @@ -558,7 +560,7 @@ 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][4] = 1.0 - (mDt * (-CHASTE_CONST(0.00081499999999999997))); rJacobian[4][5] = 0.0; rJacobian[4][6] = 0.0; rJacobian[4][7] = 0.0; @@ -568,12 +570,12 @@ 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][0] = -(mDt * (CHASTE_CONST(0.47999999999999998) - CHASTE_CONST(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][5] = 1.0 - (mDt * (-CHASTE_CONST(0.40000000000000002) - CHASTE_CONST(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; @@ -588,14 +590,14 @@ 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][6] = 1.0 - (mDt * (-CHASTE_CONST(0.00085446536839159674) * var_x36 - CHASTE_CONST(0.22004581682908866) * var_x48 - var_x22 * var_x24 - var_x23 * var_x28 - var_x24 * var_x37 - CHASTE_CONST(0.024873817198171774) * var_x49 * var_x51 + CHASTE_CONST(0.024873817198171774) * var_x38 * var_x40 * var_x45 * var_x49 * mParameters[6] + CHASTE_CONST(0.00085446536839159674) * var_x29 * var_x30 * var_x33 * var_x52 * var_chaste_interface__cleft_space_ion_concentrations__K_c + CHASTE_CONST(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[6][12] = -(mDt * (CHASTE_CONST(0.11002290841454433) * var_x54 + CHASTE_CONST(0.11002290841454433) * var_x55 + CHASTE_CONST(0.22004581682908866) * var_x57 + var_x28 * var_x41 - CHASTE_CONST(0.011549742452351092) * var_x56 * var_x58)); + rJacobian[6][13] = -(mDt * (-CHASTE_CONST(0.0012816980525873951) * var_x59 + CHASTE_CONST(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; @@ -603,7 +605,7 @@ 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][7] = 1.0 - (mDt * (-CHASTE_CONST(0.47599999999999998) - var_x62)); rJacobian[7][8] = 0.0; rJacobian[7][9] = 0.0; rJacobian[7][10] = 0.0; @@ -618,10 +620,10 @@ 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][8] = 1.0 - (mDt * (-CHASTE_CONST(0.39200000000000002) - CHASTE_CONST(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][11] = -(mDt * (CHASTE_CONST(78.400000000000006) - CHASTE_CONST(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; @@ -633,7 +635,7 @@ 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][9] = 1.0 - (mDt * (-CHASTE_CONST(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; @@ -648,59 +650,59 @@ 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][10] = 1.0 - (mDt * (-CHASTE_CONST(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][1] = -(mDt * (CHASTE_CONST(1.7754934097947219e-10) * var_x11 + CHASTE_CONST(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][3] = -(mDt * (-CHASTE_CONST(0.0017614021922566689) * var_x5 * var_x7 + CHASTE_CONST(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][7] = -(mDt * (CHASTE_CONST(0.021419999999999998) + 9 * var_chaste_interface__intracellular_ion_concentrations__Ca_i)); + rJacobian[11][8] = -(mDt * (CHASTE_CONST(0.031359999999999999) + CHASTE_CONST(6.2720000000000002) * var_chaste_interface__intracellular_ion_concentrations__Ca_i)); + rJacobian[11][9] = -(mDt * (CHASTE_CONST(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][11] = 1.0 - (mDt * (-CHASTE_CONST(47.271999999999998) - var_x63 + CHASTE_CONST(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 - CHASTE_CONST(8.3745867230843319e-6) / var_x65 - CHASTE_CONST(5.2842065767700058e-7) * var_x76 - CHASTE_CONST(8.2198768971977874) * var_x8 - CHASTE_CONST(0.0017614021922566689) * var_x78 - CHASTE_CONST(2.3373323507508574e-7) / var_chaste_interface__intracellular_ion_concentrations__Ca_i + CHASTE_CONST(8.3745867230843319e-6) * var_chaste_interface__intracellular_ion_concentrations__Ca_i / CHASTE_MATH::Pow(var_x65, 2) + CHASTE_CONST(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[11][13] = -(mDt * (-CHASTE_CONST(1.5852619730310017e-6) * var_x75 * var_x80 + CHASTE_CONST(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][6] = -(mDt * (CHASTE_CONST(0.043659884291485852) * var_x48 + CHASTE_CONST(0.00016953677944277714) * var_x36 - CHASTE_CONST(0.00016953677944277714) * var_x84 + var_x22 * var_x81 + var_x37 * var_x81 + var_x51 * var_x83 - var_x48 * var_x83 - CHASTE_CONST(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[12][12] = 1.0 - (mDt * (-CHASTE_CONST(0.021829942145742926) * var_x54 - CHASTE_CONST(0.021829942145742926) * var_x55 - CHASTE_CONST(0.043659884291485852) * var_x57 + CHASTE_CONST(26.53945091048535) * var_x26 * var_x41 * var_x82 * var_chaste_interface__Ca_independent_transient_outward_K_current_r_gate__r + CHASTE_CONST(0.0022916155659426776) * var_x40 * var_x41 * var_x43 * var_x49 * var_x50 * var_x53 * mParameters[6])); + rJacobian[12][13] = -(mDt * (CHASTE_CONST(0.00025430516916416572) * var_x59 - CHASTE_CONST(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][6] = -(mDt * (CHASTE_CONST(0.00025430516916416572) * var_x84 - CHASTE_CONST(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][11] = -(mDt * (CHASTE_CONST(0.0024676405950567236) * var_x78 + CHASTE_CONST(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)); + rJacobian[13][13] = 1.0 - (mDt * (-CHASTE_CONST(0.00038145775374624855) * var_x59 - CHASTE_CONST(4.3659884291485854e-7) * var_x85 - CHASTE_CONST(0.00082254686501890791) * (((var_chaste_interface__membrane__V >= -CHASTE_CONST(2.6539450910485349e-6)) && (var_chaste_interface__membrane__V <= CHASTE_CONST(2.6539450910485349e-6))) ? (-var_x90 + (CHASTE_CONST(0.5) + CHASTE_CONST(188398.77346612973) * var_chaste_interface__membrane__V) * (var_x90 + var_x89 * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8) - var_x87) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))))) : (CHASTE_CONST(3635.606491085292) * var_x88 * var_chaste_interface__membrane__V * CHASTE_MATH::Exp(var_x91 - var_x87) / (-1 + CHASTE_MATH::Exp(var_x91)))) - CHASTE_CONST(0.0074029217851701709) * var_x72 * var_x77 * var_x80 + CHASTE_CONST(2.2208765355510512e-6) * var_x71 * var_x74 * var_x79 * mParameters[9] * mParameters[1] + CHASTE_CONST(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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -739,49 +741,49 @@ 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_Ca_independent_transient_outward_K_current__g_to = CHASTE_CONST(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_Na_Ca_ion_exchanger_current__d_NaCa = CHASTE_CONST(0.00029999999999999997); // per_millimolar_4 + const double var_Na_Ca_ion_exchanger_current__gamma = CHASTE_CONST(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_T_type_Ca_channel__g_Ca_T = CHASTE_CONST(0.0060000000000000001); // nanoS + const double var_background_currents__g_B_Ca = CHASTE_CONST(3.1000000000000001e-5); // nanoS + const double var_background_currents__g_B_Na = CHASTE_CONST(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_inward_rectifier__KmK1 = CHASTE_CONST(0.58999999999999997); // millimolar + const double var_inward_rectifier__shiftK1 = -CHASTE_CONST(3.6000000000000001); // millivolt + const double var_inward_rectifier__steepK1 = CHASTE_CONST(1.393); // dimensionless + const double var_membrane__Cm_converted = CHASTE_CONST(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_Ca_independent_transient_outward_K_current__E_K = var_membrane__R * var_membrane__T * CHASTE_MATH::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 = CHASTE_CONST(0.5) * var_membrane__R * var_membrane__T * CHASTE_MATH::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)) ? (CHASTE_CONST(0.098000000000000004) + CHASTE_CONST(0.0014) * var_chaste_interface__membrane__V) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (CHASTE_CONST(0.16799999999999998) + CHASTE_CONST(0.0023999999999999998) * var_chaste_interface__membrane__V) : (CHASTE_CONST(0.070000000000000007) + CHASTE_CONST(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)) ? (CHASTE_CONST(0.20000000000000001) * (CHASTE_CONST(0.40000000000000002) + CHASTE_CONST(0.59999999999999998) * CHASTE_MATH::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) * (CHASTE_CONST(0.58999999999999997) * CHASTE_MATH::Pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s1_gate__s1, 3) + CHASTE_CONST(0.40999999999999998) * CHASTE_MATH::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)) ? (CHASTE_CONST(0.34999999999999998) * (CHASTE_CONST(0.40000000000000002) + CHASTE_CONST(0.59999999999999998) * CHASTE_MATH::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) * (CHASTE_CONST(0.58999999999999997) * CHASTE_MATH::Pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s1_gate__s1, 3) + CHASTE_CONST(0.40999999999999998) * CHASTE_MATH::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) : ((CHASTE_CONST(0.40000000000000002) + CHASTE_CONST(0.59999999999999998) * CHASTE_MATH::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) * (CHASTE_CONST(0.58999999999999997) * CHASTE_MATH::Pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s1_gate__s1, 3) + CHASTE_CONST(0.40999999999999998) * CHASTE_MATH::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 + CHASTE_MATH::Exp(CHASTE_CONST(1.9166666666666667) - CHASTE_CONST(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)) ? (CHASTE_CONST(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)) ? (CHASTE_CONST(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 = (CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mParameters[1] * CHASTE_MATH::Exp(var_Na_Ca_ion_exchanger_current__gamma * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - CHASTE_MATH::Pow(mParameters[2], 3) * var_chaste_interface__intracellular_ion_concentrations__Ca_i * CHASTE_MATH::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 + (CHASTE_MATH::Pow(mParameters[2], 3) * var_chaste_interface__intracellular_ion_concentrations__Ca_i + CHASTE_MATH::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_background_currents__i_B_Ca = (((var_environment__CT == 1) && (var_environment__PM == 0)) ? (CHASTE_CONST(2.0000000000000002e-5) * var_chaste_interface__membrane__V - CHASTE_CONST(2.0000000000000002e-5) * var_background_currents__E_Ca) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (CHASTE_CONST(3.0000000000000001e-5) * var_chaste_interface__membrane__V - CHASTE_CONST(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_inward_rectifier__i_K1 = (((var_environment__CT == 1) && (var_environment__PM == 0)) ? (2 * CHASTE_MATH::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 + CHASTE_MATH::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))) * CHASTE_MATH::Pow((var_chaste_interface__cleft_space_ion_concentrations__K_c + var_inward_rectifier__KmK1), 3))) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (CHASTE_CONST(2.5) * CHASTE_MATH::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 + CHASTE_MATH::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))) * CHASTE_MATH::Pow((var_chaste_interface__cleft_space_ion_concentrations__K_c + var_inward_rectifier__KmK1), 3))) : (CHASTE_MATH::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 + CHASTE_MATH::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))) * CHASTE_MATH::Pow((var_chaste_interface__cleft_space_ion_concentrations__K_c + var_inward_rectifier__KmK1), 3))))); // picoA + const double var_membrane__i_Stim_converted = CHASTE_STIM(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 / CHASTE_CAP(); // picoA + const double var_sarcolemmal_calcium_pump_current__i_CaP_max = CHASTE_CONST(0.0095090000000000001); // picoA + const double var_sarcolemmal_calcium_pump_current__k_CaP = CHASTE_CONST(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_current__E_Na = var_membrane__R * var_membrane__T * CHASTE_MATH::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)) ? (CHASTE_CONST(2.0000000000000002e-5) * var_chaste_interface__membrane__V - CHASTE_CONST(2.0000000000000002e-5) * var_sodium_current__E_Na) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (CHASTE_CONST(3.0000000000000001e-5) * var_chaste_interface__membrane__V - CHASTE_CONST(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 >= -CHASTE_CONST(2.6539450910485349e-6)) && (var_chaste_interface__membrane__V <= CHASTE_CONST(2.6539450910485349e-6))) ? (CHASTE_CONST(188398.77346612973) * (CHASTE_CONST(2.6539450910485349e-6) + var_chaste_interface__membrane__V) * (CHASTE_CONST(0.0096486999999999996) * CHASTE_MATH::Pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8) - CHASTE_MATH::Log(mParameters[2] / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (CHASTE_CONST(0.36499999999999999) * var_chaste_interface__sodium_current_h2_gate__h2 + CHASTE_CONST(0.63500000000000001) * var_chaste_interface__sodium_current_h1_gate__h1) * mParameters[2] * mParameters[5] / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) + CHASTE_CONST(0.0096486999999999996) * CHASTE_MATH::Pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8) - CHASTE_MATH::Log(mParameters[2] / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (CHASTE_CONST(0.36499999999999999) * var_chaste_interface__sodium_current_h2_gate__h2 + CHASTE_CONST(0.63500000000000001) * var_chaste_interface__sodium_current_h1_gate__h1) * mParameters[2] * mParameters[5] / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) - CHASTE_CONST(0.0096486999999999996) * CHASTE_MATH::Pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8) - CHASTE_MATH::Log(mParameters[2] / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (CHASTE_CONST(0.36499999999999999) * var_chaste_interface__sodium_current_h2_gate__h2 + CHASTE_CONST(0.63500000000000001) * var_chaste_interface__sodium_current_h1_gate__h1) * mParameters[2] * mParameters[5] / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) : (CHASTE_CONST(3635.606491085292) * CHASTE_MATH::Pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + CHASTE_MATH::Exp(CHASTE_CONST(0.037679754693225945) * var_chaste_interface__membrane__V - CHASTE_MATH::Log(mParameters[2] / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (CHASTE_CONST(0.36499999999999999) * var_chaste_interface__sodium_current_h2_gate__h2 + CHASTE_CONST(0.63500000000000001) * var_chaste_interface__sodium_current_h1_gate__h1) * mParameters[2] * var_chaste_interface__membrane__V * mParameters[5] / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(0.037679754693225945) * var_chaste_interface__membrane__V)))); // picoA + const double var_sodium_potassium_pump__i_NaK_max = CHASTE_CONST(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_sodium_potassium_pump__i_p = CHASTE_CONST(1.6000000000000001) * CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, CHASTE_CONST(1.5)) * var_chaste_interface__cleft_space_ion_concentrations__K_c * var_sodium_potassium_pump__i_NaK_max / ((CHASTE_CONST(1.5) + CHASTE_MATH::Exp(-CHASTE_CONST(1.5) - CHASTE_CONST(0.025000000000000001) * var_chaste_interface__membrane__V)) * (CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, CHASTE_CONST(1.5)) + CHASTE_MATH::Pow(var_sodium_potassium_pump__k_NaK_Na, CHASTE_CONST(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 + const double d_dt_chaste_interface_var_membrane__V = CHASTE_CONST(0.001) * var_membrane__V_orig_deriv; // millivolt / millisecond rY[0] += mDt*d_dt_chaste_interface_var_membrane__V; } @@ -790,7 +792,7 @@ { // Time units: millisecond std::vector& rY = rGetStateVariables(); - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -821,72 +823,72 @@ 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_Ca_independent_transient_outward_K_current_r_gate__alpha_r = CHASTE_CONST(386.60000000000002) * CHASTE_MATH::Exp(CHASTE_CONST(0.083333333333333329) * var_chaste_interface__membrane__V); + const double var_Ca_independent_transient_outward_K_current_r_gate__beta_r = CHASTE_CONST(8.0109999999999992) * CHASTE_MATH::Exp(-CHASTE_CONST(0.1388888888888889) * var_chaste_interface__membrane__V); + const double var_Ca_independent_transient_outward_K_current_r_gate__r_infinity = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.6628794603230959) - CHASTE_CONST(0.17752529735487307) * var_chaste_interface__membrane__V)); + const double var_Ca_independent_transient_outward_K_current_r_gate__tau_r = CHASTE_CONST(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 + CHASTE_MATH::Exp(CHASTE_CONST(4.0070821529745047) + CHASTE_CONST(0.14164305949008499) * var_chaste_interface__membrane__V)); + const double var_Ca_independent_transient_outward_K_current_s1_gate__tau_s1 = CHASTE_CONST(0.020400000000000001) + CHASTE_CONST(0.54659999999999997) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(327.99999999999994) + 10 * var_chaste_interface__membrane__V)); + const double var_Ca_independent_transient_outward_K_current_s2_gate__s2_infinity = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(4.0070821529745047) + CHASTE_CONST(0.14164305949008499) * var_chaste_interface__membrane__V)); + const double var_Ca_independent_transient_outward_K_current_s2_gate__tau_s2 = CHASTE_CONST(5.75) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(327.99999999999994) + 10 * var_chaste_interface__membrane__V)) + CHASTE_CONST(0.45000000000000001) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(0.96921975662133131) - CHASTE_CONST(0.071581961345740866) * var_chaste_interface__membrane__V)); + const double var_Ca_independent_transient_outward_K_current_s3_gate__s3_infinity = CHASTE_CONST(0.39975990396158467) + CHASTE_CONST(0.60024009603841544) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.8506208911614319) + CHASTE_CONST(0.036523009495982472) * var_chaste_interface__membrane__V)); + const double var_Ca_independent_transient_outward_K_current_s3_gate__tau_s3 = CHASTE_CONST(0.5) + CHASTE_CONST(7.5) / (1 + CHASTE_MATH::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__alpha_d_L = (((var_chaste_interface__membrane__V >= -CHASTE_CONST(10.000000480800001)) && (var_chaste_interface__membrane__V <= -CHASTE_CONST(9.9999995191999993))) ? (CHASTE_CONST(2.4040000000391526e-5) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(1.0000000000162864e-7))) + CHASTE_CONST(1039933.4442576389) * (CHASTE_CONST(10.000000480800001) + var_chaste_interface__membrane__V) * (-CHASTE_CONST(2.4040000000391526e-5) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(1.0000000000162864e-7))) - CHASTE_CONST(2.4039999999697637e-5) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999998742257e-8))))) : (-50 * (10 + var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.0798668885191347) - CHASTE_CONST(0.20798668885191349) * var_chaste_interface__membrane__V)))) + (((var_chaste_interface__membrane__V >= -CHASTE_CONST(45.000000249999999)) && (var_chaste_interface__membrane__V <= -CHASTE_CONST(44.999999750000001))) ? (CHASTE_CONST(4.1799999996561256e-6) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999991773334e-8))) + CHASTE_CONST(1999999.9999424887) * (CHASTE_CONST(45.000000249999999) + var_chaste_interface__membrane__V) * (-CHASTE_CONST(4.1800000005842713e-6) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.000000000139778e-7))) - CHASTE_CONST(4.1799999996561256e-6) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999991773334e-8))))) : (-CHASTE_CONST(16.719999999999999) * (45 + var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(-18 - CHASTE_CONST(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 >= -CHASTE_CONST(5.0000002500000003)) && (var_chaste_interface__membrane__V <= -CHASTE_CONST(4.9999997499999997))) ? (-CHASTE_CONST(1.1200000000011203e-6) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.0000000000010001e-7))) + CHASTE_CONST(1999999.9999979998) * (CHASTE_CONST(5.0000002500000003) + var_chaste_interface__membrane__V) * (CHASTE_CONST(1.1200000000011203e-6) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(1.0000000000010001e-7))) + CHASTE_CONST(1.1200000000011203e-6) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.0000000000010001e-7))))) : (CHASTE_CONST(4.4800000000000004) * (5 + var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(2 + CHASTE_CONST(0.40000000000000002) * var_chaste_interface__membrane__V)))); + const double var_L_type_Ca_channel_d_L_gate__d_L_infinity = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.14393939393939395) - CHASTE_CONST(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__alpha_f_L = (((var_chaste_interface__membrane__V >= -CHASTE_CONST(18.000000400000001)) && (var_chaste_interface__membrane__V <= -CHASTE_CONST(17.999999599999999))) ? (-CHASTE_CONST(3.3960000000976542e-6) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.0000000000287557e-7))) + CHASTE_CONST(1249999.9999640554) * (CHASTE_CONST(18.000000400000001) + var_chaste_interface__membrane__V) * (CHASTE_CONST(3.3960000000976542e-6) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(1.0000000000287557e-7))) + CHASTE_CONST(3.3960000000976542e-6) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.0000000000287557e-7))))) : (CHASTE_CONST(8.4900000000000002) * (18 + var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(4.5) + CHASTE_CONST(0.25) * var_chaste_interface__membrane__V)))); + const double var_L_type_Ca_channel_f_L_gate__beta_f_L = CHASTE_CONST(67.921999999999997) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(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__E0_d_T = CHASTE_CONST(23.300000000000001) + var_chaste_interface__membrane__V; + const double var_T_type_Ca_channel_d_T_gate__alpha_d_T = CHASTE_CONST(674.173) * CHASTE_MATH::Exp(CHASTE_CONST(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 = CHASTE_CONST(674.173) * CHASTE_MATH::Exp(-CHASTE_CONST(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 + CHASTE_MATH::Exp(CHASTE_CONST(0.049180327868852458) - CHASTE_CONST(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__alpha_f_T = CHASTE_CONST(9.6370000000000005) * CHASTE_MATH::Exp(-CHASTE_CONST(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 = CHASTE_CONST(9.6370000000000005) * CHASTE_MATH::Exp(CHASTE_CONST(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__alpha_p_a = 9 * CHASTE_MATH::Exp(CHASTE_CONST(0.03941508020968823) * var_chaste_interface__membrane__V); + const double var_delayed_rectifier_K_current_pa_gate__beta_p_a = CHASTE_CONST(1.3) * CHASTE_MATH::Exp(-CHASTE_CONST(0.076769537847382163) * var_chaste_interface__membrane__V); + const double var_delayed_rectifier_K_current_pa_gate__p_a_infinity = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.68918918918918914) - CHASTE_CONST(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__alpha_p_i = 100 * CHASTE_MATH::Exp(-CHASTE_CONST(0.018299935950224173) * var_chaste_interface__membrane__V); + const double var_delayed_rectifier_K_current_pi_gate__beta_p_i = 656 * CHASTE_MATH::Exp(CHASTE_CONST(0.009420009985210585) * var_chaste_interface__membrane__V); + const double var_delayed_rectifier_K_current_pi_gate__p_i_infinity = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(2.539728728905752) + CHASTE_CONST(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_delayed_rectifier_K_current_z_gate__alpha_z = CHASTE_CONST(1.6599999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(0.014398433450440593) * var_chaste_interface__membrane__V); + const double var_delayed_rectifier_K_current_z_gate__beta_z = CHASTE_CONST(0.29999999999999999) * CHASTE_MATH::Exp(-CHASTE_CONST(0.045816915605241454) * var_chaste_interface__membrane__V); + const double var_delayed_rectifier_K_current_z_gate__tau_z = CHASTE_CONST(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 + CHASTE_MATH::Exp(CHASTE_CONST(0.065217391304347824) - CHASTE_CONST(0.072463768115942032) * var_chaste_interface__membrane__V)); + const double var_sodium_current_h1_gate__alpha_h = CHASTE_CONST(44.899999999999999) * CHASTE_MATH::Exp(-CHASTE_CONST(12.010771992818672) - CHASTE_CONST(0.17953321364452424) * var_chaste_interface__membrane__V); + const double var_sodium_current_h1_gate__beta_h = 1491 / (1 + CHASTE_CONST(323.30000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(7.333333333333333) - CHASTE_CONST(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); + const double var_sodium_current_h1_gate__tau_h1 = CHASTE_CONST(0.00014999999999999999) + CHASTE_CONST(0.029999999999999999) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(6.666666666666667) + CHASTE_CONST(0.16666666666666666) * var_chaste_interface__membrane__V)); + const double var_sodium_current_h2_gate__tau_h2 = CHASTE_CONST(0.00044999999999999999) + CHASTE_CONST(0.12) / (1 + CHASTE_MATH::Exp(30 + CHASTE_CONST(0.5) * var_chaste_interface__membrane__V)); + const double var_sodium_current_m_gate__E0_m = CHASTE_CONST(44.399999999999999) + var_chaste_interface__membrane__V; + const double var_sodium_current_m_gate__alpha_m = (((var_chaste_interface__membrane__V >= -CHASTE_CONST(44.400001267299999)) && (var_chaste_interface__membrane__V <= -CHASTE_CONST(44.399998732699999))) ? (CHASTE_CONST(0.00058295799999830145) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999708629e-8))) + CHASTE_CONST(394539.57232025318) * (CHASTE_CONST(44.400001267299999) + var_chaste_interface__membrane__V) * (-CHASTE_CONST(0.00058295799999830145) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999708629e-8))) - CHASTE_CONST(0.00058295799999830145) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999708629e-8))))) : (-460 * (CHASTE_CONST(44.399999999999999) + var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.5035114021936398) - CHASTE_CONST(0.078907914463820727) * var_chaste_interface__membrane__V)))); + const double var_sodium_current_m_gate__beta_m = 18400 * CHASTE_MATH::Exp(-CHASTE_CONST(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)); + rY[9] = (var_chaste_interface__Ca_independent_transient_outward_K_current_r_gate__r + ((CHASTE_CONST(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 - ((-CHASTE_CONST(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 + ((CHASTE_CONST(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 - ((-CHASTE_CONST(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 + ((CHASTE_CONST(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 - ((-CHASTE_CONST(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 + ((CHASTE_CONST(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 - ((-CHASTE_CONST(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 + ((CHASTE_CONST(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 - ((-CHASTE_CONST(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 + ((CHASTE_CONST(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 - ((-CHASTE_CONST(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 + ((CHASTE_CONST(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 - ((-CHASTE_CONST(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 + ((CHASTE_CONST(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 - ((-CHASTE_CONST(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 + ((CHASTE_CONST(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 - ((-CHASTE_CONST(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 + ((CHASTE_CONST(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 - ((-CHASTE_CONST(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 + ((CHASTE_CONST(0.001) * var_delayed_rectifier_K_current_z_gate__z_infinity / var_delayed_rectifier_K_current_z_gate__tau_z) * mDt)) / (1.0 - ((-CHASTE_CONST(0.001) / var_delayed_rectifier_K_current_z_gate__tau_z) * mDt)); + rY[3] = (var_chaste_interface__sodium_current_h1_gate__h1 + ((CHASTE_CONST(0.001) * var_sodium_current_h1_gate__h_infinity / var_sodium_current_h1_gate__tau_h1) * mDt)) / (1.0 - ((-CHASTE_CONST(0.001) / var_sodium_current_h1_gate__tau_h1) * mDt)); + rY[4] = (var_chaste_interface__sodium_current_h2_gate__h2 + ((CHASTE_CONST(0.001) * var_sodium_current_h1_gate__h_infinity / var_sodium_current_h2_gate__tau_h2) * mDt)) / (1.0 - ((-CHASTE_CONST(0.001) / var_sodium_current_h2_gate__tau_h2) * mDt)); + rY[2] = (var_chaste_interface__sodium_current_m_gate__m + ((CHASTE_CONST(0.001) * var_sodium_current_m_gate__alpha_m) * mDt)) / (1.0 - ((-CHASTE_CONST(0.001) * var_sodium_current_m_gate__alpha_m - CHASTE_CONST(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(); @@ -911,7 +913,7 @@ { // Inputs: // Time units: millisecond - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -944,33 +946,33 @@ // 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_Na_Ca_ion_exchanger_current__d_NaCa = CHASTE_CONST(0.00029999999999999997); // per_millimolar_4 + const double var_Na_Ca_ion_exchanger_current__gamma = CHASTE_CONST(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_Ca_handling_by_the_SR__i_rel = CHASTE_MATH::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] / CHASTE_MATH::Pow((CHASTE_CONST(0.25) + var_chaste_interface__Ca_handling_by_the_SR__F2), 2); // picoA + const double var_inward_rectifier__KmK1 = CHASTE_CONST(0.58999999999999997); // millimolar + const double var_inward_rectifier__shiftK1 = -CHASTE_CONST(3.6000000000000001); // millivolt + const double var_inward_rectifier__steepK1 = CHASTE_CONST(1.393); // dimensionless + const double var_membrane__Cm_converted = CHASTE_CONST(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_Ca_independent_transient_outward_K_current__E_K = var_membrane__R * var_membrane__T * CHASTE_MATH::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 + CHASTE_MATH::Exp(CHASTE_CONST(1.9166666666666667) - CHASTE_CONST(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)) ? (CHASTE_CONST(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)) ? (CHASTE_CONST(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 = CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * 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 = (CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mParameters[1] * CHASTE_MATH::Exp(var_Na_Ca_ion_exchanger_current__gamma * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - CHASTE_MATH::Pow(mParameters[2], 3) * var_chaste_interface__intracellular_ion_concentrations__Ca_i * CHASTE_MATH::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 + (CHASTE_MATH::Pow(mParameters[2], 3) * var_chaste_interface__intracellular_ion_concentrations__Ca_i + CHASTE_MATH::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 = CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * 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_Kr_converted = CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * 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 + const double var_delayed_rectifier_K_current__i_Ks_converted = CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * 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 * CHASTE_MATH::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 + CHASTE_MATH::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))) * CHASTE_MATH::Pow((var_chaste_interface__cleft_space_ion_concentrations__K_c + var_inward_rectifier__KmK1), 3))) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (CHASTE_CONST(2.5) * CHASTE_MATH::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 + CHASTE_MATH::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))) * CHASTE_MATH::Pow((var_chaste_interface__cleft_space_ion_concentrations__K_c + var_inward_rectifier__KmK1), 3))) : (CHASTE_MATH::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 + CHASTE_MATH::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))) * CHASTE_MATH::Pow((var_chaste_interface__cleft_space_ion_concentrations__K_c + var_inward_rectifier__KmK1), 3))))); // picoA + const double var_inward_rectifier__i_K1_converted = CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * var_inward_rectifier__i_K1 / var_membrane__Cm_converted; // uA_per_cm2 + const double var_membrane__i_Stim_converted = CHASTE_STIM(var_chaste_interface__environment__time_converted); // uA_per_cm2 + const double var_sodium_current__i_Na = (((var_chaste_interface__membrane__V >= -CHASTE_CONST(2.6539450910485349e-6)) && (var_chaste_interface__membrane__V <= CHASTE_CONST(2.6539450910485349e-6))) ? (CHASTE_CONST(188398.77346612973) * (CHASTE_CONST(2.6539450910485349e-6) + var_chaste_interface__membrane__V) * (CHASTE_CONST(0.0096486999999999996) * CHASTE_MATH::Pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8) - CHASTE_MATH::Log(mParameters[2] / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (CHASTE_CONST(0.36499999999999999) * var_chaste_interface__sodium_current_h2_gate__h2 + CHASTE_CONST(0.63500000000000001) * var_chaste_interface__sodium_current_h1_gate__h1) * mParameters[2] * mParameters[5] / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) + CHASTE_CONST(0.0096486999999999996) * CHASTE_MATH::Pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8) - CHASTE_MATH::Log(mParameters[2] / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (CHASTE_CONST(0.36499999999999999) * var_chaste_interface__sodium_current_h2_gate__h2 + CHASTE_CONST(0.63500000000000001) * var_chaste_interface__sodium_current_h1_gate__h1) * mParameters[2] * mParameters[5] / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) - CHASTE_CONST(0.0096486999999999996) * CHASTE_MATH::Pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8) - CHASTE_MATH::Log(mParameters[2] / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (CHASTE_CONST(0.36499999999999999) * var_chaste_interface__sodium_current_h2_gate__h2 + CHASTE_CONST(0.63500000000000001) * var_chaste_interface__sodium_current_h1_gate__h1) * mParameters[2] * mParameters[5] / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) : (CHASTE_CONST(3635.606491085292) * CHASTE_MATH::Pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + CHASTE_MATH::Exp(CHASTE_CONST(0.037679754693225945) * var_chaste_interface__membrane__V - CHASTE_MATH::Log(mParameters[2] / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (CHASTE_CONST(0.36499999999999999) * var_chaste_interface__sodium_current_h2_gate__h2 + CHASTE_CONST(0.63500000000000001) * var_chaste_interface__sodium_current_h1_gate__h1) * mParameters[2] * var_chaste_interface__membrane__V * mParameters[5] / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(0.037679754693225945) * var_chaste_interface__membrane__V)))); // picoA + const double var_sodium_current__i_Na_converted = CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * 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; diff --git a/chaste_codegen/data/tests/chaste_reference_models/BE/aslanidi_atrial_model_2009.hpp b/chaste_codegen/data/tests/chaste_reference_models/BE/aslanidi_atrial_model_2009.hpp index 2e3fbe1dd..d87814afe 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/BE/aslanidi_atrial_model_2009.hpp +++ b/chaste_codegen/data/tests/chaste_reference_models/BE/aslanidi_atrial_model_2009.hpp @@ -16,8 +16,16 @@ #include "ChasteSerialization.hpp" #include #include "AbstractStimulusFunction.hpp" +#if USING_DEVICE_COMPILER +#include "StimulusEvaluatorCuda.hpp" +#endif #include "AbstractBackwardEulerCardiacCell.hpp" +#if USING_DEVICE_COMPILER +template +class BackwardEulerKernelLauncher; // Forward declare to hide CUDA-specifics from standard C++ compiler +#endif + class Cellaslanidi_atrial_model_2009FromCellMLBackwardEuler : public AbstractBackwardEulerCardiacCell<14> { friend class boost::serialization::access; @@ -37,19 +45,50 @@ class Cellaslanidi_atrial_model_2009FromCellMLBackwardEuler : public AbstractBac 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: +#if USING_DEVICE_COMPILER + template using SolverKernelLauncher = BackwardEulerKernelLauncher; + static constexpr unsigned TOTAL_SIZE = 29u; + static constexpr unsigned NONLINEAR_SIZE = 14u; +#endif 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(boost::shared_ptr /* unused */, 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: + 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]); + +#if USING_DEVICE_COMPILER + template + DEVICE + static void ComputeResidualDevice(ValueType var_chaste_interface__environment__time_converted, const ValueType rCurrentGuess[NONLINEAR_SIZE], const ValueType rY[], ValueType rResidual[NONLINEAR_SIZE], ValueType mDt, const ValueType mParameters[], bool mSetVoltageDerivativeToZero, ValueType mFixedVoltage, ValueType capacitance, const DeviceStimulusFunctor stim); + + template + DEVICE + static void ComputeJacobianDevice(ValueType var_chaste_interface__environment__time_converted, const ValueType rCurrentGuess[NONLINEAR_SIZE], const ValueType rY[], ValueType rJacobian[NONLINEAR_SIZE][NONLINEAR_SIZE], ValueType mDt, const ValueType mParameters[], bool mSetVoltageDerivativeToZero, ValueType mFixedVoltage, ValueType capacitance, const DeviceStimulusFunctor stim); + template + DEVICE + static void UpdateTransmembranePotentialDevice(ValueType var_chaste_interface__environment__time_converted, ValueType rY[], ValueType mDt, const ValueType mParameters[], bool mSetVoltageDerivativeToZero, ValueType mFixedVoltage, DeviceStimulusFunctor stim, ValueType capacitance); + + template + DEVICE + static void SolveClosedFormVarsDevice(ValueType rY[TOTAL_SIZE], ValueType mDt, const ValueType mParameters[], bool mSetVoltageDerivativeToZero, ValueType mFixedVoltage, ValueType capacitance); + + template + DEVICE + static void FillInitialGuessDevice(ValueType _guess[NONLINEAR_SIZE], const ValueType rY[TOTAL_SIZE]); + + template + DEVICE + static void ScatterSolutionDevice(const ValueType _guess[NONLINEAR_SIZE], ValueType rY[TOTAL_SIZE]); +#endif +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); -}; + std::vector ComputeDerivedQuantities(double var_chaste_interface__environment__time_converted, const std::vector & rY);}; // Needs to be included last #include "SerializationExportWrapper.hpp" @@ -84,4 +123,9 @@ namespace boost } -#endif // CELLASLANIDI_ATRIAL_MODEL_2009FROMCELLMLBACKWARDEULER_HPP_ \ No newline at end of file +#endif // CELLASLANIDI_ATRIAL_MODEL_2009FROMCELLMLBACKWARDEULER_HPP_ + +#if USING_DEVICE_COMPILER + #include "aslanidi_atrial_model_2009Kernels.hpp" + #include "BackwardEulerKernels.hpp" +#endif \ No newline at end of file diff --git a/chaste_codegen/data/tests/chaste_reference_models/BE/bondarenko_szigeti_bett_kim_rasmusson_2004_apical.cpp b/chaste_codegen/data/tests/chaste_reference_models/BE/bondarenko_szigeti_bett_kim_rasmusson_2004_apical.cpp index da9a18ac0..a102d3d57 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/BE/bondarenko_szigeti_bett_kim_rasmusson_2004_apical.cpp +++ b/chaste_codegen/data/tests/chaste_reference_models/BE/bondarenko_szigeti_bett_kim_rasmusson_2004_apical.cpp @@ -22,6 +22,8 @@ #include "HeartConfig.hpp" #include "IsNan.hpp" #include "MathsCustomFunctions.hpp" +#include "ChasteMathDeviceNamespaces.hpp" +#include "ChasteCpuMacros.hpp" @@ -30,9 +32,9 @@ 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_amplitude_converted = -80 * CHASTE_CAP(); // uA_per_cm2 + const double var_chaste_interface__membrane__stim_duration = CHASTE_CONST(0.5); // millisecond + const double var_chaste_interface__membrane__stim_period = CHASTE_CONST(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), @@ -61,23 +63,23 @@ // 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[0] = CHASTE_CONST(1.7399999999999999e-5); // (var_calcium_fluxes__v2) [per_millisecond] + this->mParameters[1] = CHASTE_CONST(4.5); // (var_calcium_fluxes__v1) [per_millisecond] + this->mParameters[2] = CHASTE_CONST(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[7] = CHASTE_CONST(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] + this->mParameters[11] = CHASTE_CONST(0.29380000000000001); // (var_time_independent_potassium_current__g_K1) [milliS_per_microF] + this->mParameters[12] = CHASTE_CONST(0.050000000000000003); // (var_non_inactivating_steady_state_potassium_current__g_Kss) [milliS_per_microF] + this->mParameters[13] = CHASTE_CONST(0.078); // (var_rapid_delayed_rectifier_potassium_current__g_Kr) [milliS_per_microF] + this->mParameters[14] = CHASTE_CONST(0.0057499999999999999); // (var_slow_delayed_rectifier_potassium_current__g_Ks) [milliS_per_microF] + this->mParameters[15] = CHASTE_CONST(292.80000000000001); // (var_sodium_calcium_exchange_current__k_NaCa) [picoA_per_picoF] + this->mParameters[16] = CHASTE_CONST(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() @@ -124,7 +126,7 @@ // 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -161,53 +163,53 @@ 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_background_current__g_Cab = CHASTE_CONST(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__Km_pCa = CHASTE_CONST(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_calcium_pump_current__i_pCa = CHASTE_MATH::Pow(var_calcium_concentration__Cai, 2) * var_calcium_pump_current__i_pCa_max / (CHASTE_MATH::Pow(var_calcium_concentration__Cai, 2) + CHASTE_MATH::Pow(var_calcium_pump_current__Km_pCa, 2)); // picoA_per_picoF + const double var_membrane__F = CHASTE_CONST(96.5); // coulomb_per_millimole + const double var_membrane__R = CHASTE_CONST(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_calcium_background_current__E_CaN = CHASTE_CONST(0.5) * var_membrane__R * var_membrane__T * CHASTE_MATH::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_L_type_calcium_current__i_CaL_converted = CHASTE_CAP() * var_L_type_calcium_current__i_CaL; // uA_per_cm2 + const double var_calcium_activated_chloride_current__O_ClCa = CHASTE_CONST(0.20000000000000001) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(5.9871794871794881) - CHASTE_CONST(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_fast_transient_outward_potassium_current__E_K = var_membrane__R * var_membrane__T * CHASTE_MATH::Log(mParameters[5] / var_chaste_interface__potassium_concentration__Ki) / var_membrane__F; // millivolt + const double var_fast_transient_outward_potassium_current__i_Kto_f = CHASTE_MATH::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 = CHASTE_CAP() * 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_non_inactivating_steady_state_potassium_current__i_Kss_converted = CHASTE_CAP() * var_non_inactivating_steady_state_potassium_current__i_Kss; // uA_per_cm2 + const double var_slow_delayed_rectifier_potassium_current__i_Ks = CHASTE_MATH::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 = CHASTE_CAP() * 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_background_current__g_Nab = CHASTE_CONST(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_sodium_calcium_exchange_current__eta = CHASTE_CONST(0.34999999999999998); // dimensionless + const double var_sodium_calcium_exchange_current__k_sat = CHASTE_CONST(0.10000000000000001); // dimensionless + const double var_fast_sodium_current__E_Na = var_membrane__R * var_membrane__T * CHASTE_MATH::Log((mParameters[6] + CHASTE_CONST(0.1111111111111111) * mParameters[5]) / (var_chaste_interface__sodium_concentration__Nai + CHASTE_CONST(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_fast_sodium_current__i_Na_converted = CHASTE_CAP() * 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 * CHASTE_MATH::Log((mParameters[5] + CHASTE_CONST(0.020408163265306124) * mParameters[6]) / (var_chaste_interface__potassium_concentration__Ki + CHASTE_CONST(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 = CHASTE_CAP() * 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_calcium_exchange_current__i_NaCa = (CHASTE_MATH::Pow(var_chaste_interface__sodium_concentration__Nai, 3) * mParameters[4] * CHASTE_MATH::Exp(var_membrane__F * var_chaste_interface__membrane__V * var_sodium_calcium_exchange_current__eta / (var_membrane__R * var_membrane__T)) - CHASTE_MATH::Pow(mParameters[6], 3) * var_calcium_concentration__Cai * CHASTE_MATH::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 * CHASTE_MATH::Exp((-1 + var_sodium_calcium_exchange_current__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (CHASTE_MATH::Pow(mParameters[6], 3) + CHASTE_MATH::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 = CHASTE_CAP() * 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_sodium_potassium_pump_current__i_NaK_max = CHASTE_CONST(0.88); // picoA_per_picoF + const double var_sodium_potassium_pump_current__sigma = -CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(1.4858841010401188e-5) * mParameters[6]); // dimensionless + const double var_sodium_potassium_pump_current__f_NaK = 1 / (1 + CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(0.10000000000000001) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) + CHASTE_CONST(0.036499999999999998) * var_sodium_potassium_pump_current__sigma * CHASTE_MATH::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 + CHASTE_MATH::Pow((var_sodium_potassium_pump_current__Km_Nai / var_chaste_interface__sodium_concentration__Nai), CHASTE_CONST(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 + CHASTE_MATH::Exp(CHASTE_CONST(0.089599999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(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 = CHASTE_CAP() * var_time_independent_potassium_current__i_K1; // uA_per_cm2 + const double var_ultra_rapidly_activating_delayed_rectifier_potassium_current__g_Kur = CHASTE_CONST(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 var_chaste_interface__i_ionic = CHASTE_CAP() * var_calcium_activated_chloride_current__i_ClCa + CHASTE_CAP() * var_calcium_background_current__i_Cab + CHASTE_CAP() * var_calcium_pump_current__i_pCa + CHASTE_CAP() * var_slow_transient_outward_potassium_current__i_Kto_s + CHASTE_CAP() * var_sodium_background_current__i_Nab + CHASTE_CAP() * var_sodium_potassium_pump_current__i_NaK + CHASTE_CAP() * 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)); @@ -217,7 +219,7 @@ 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -274,28 +276,28 @@ 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__Kpc_max = CHASTE_CONST(0.23324); // per_millisecond + const double var_L_type_calcium_current__Kpcb = CHASTE_CONST(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_background_current__g_Cab = CHASTE_CONST(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_CMDN = CHASTE_CONST(0.23799999999999999); // micromolar + const double var_calcium_concentration__Bi = 1 / (1 + var_calcium_concentration__CMDN_tot * var_calcium_concentration__Km_CMDN / CHASTE_MATH::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 / CHASTE_MATH::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 var_calcium_concentration__BJSR = 1 / (1 + var_calcium_concentration__CSQN_tot * var_calcium_concentration__Km_CSQN / CHASTE_MATH::Pow((var_chaste_interface__calcium_concentration__CaJSR + var_calcium_concentration__Km_CSQN), 2)); // dimensionless + const double var_calcium_fluxes__Km_up = CHASTE_CONST(0.5); // micromolar + const double var_calcium_fluxes__k_minus_htrpn = CHASTE_CONST(3.1999999999999999e-5); // per_millisecond + const double var_calcium_fluxes__k_minus_ltrpn = CHASTE_CONST(0.019599999999999999); // per_millisecond + const double var_calcium_fluxes__k_plus_htrpn = CHASTE_CONST(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 var_calcium_fluxes__k_plus_ltrpn = CHASTE_CONST(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 @@ -303,40 +305,40 @@ 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_fluxes__J_up = CHASTE_MATH::Pow(var_calcium_concentration__Cai, 2) * mParameters[2] / (CHASTE_MATH::Pow(var_calcium_concentration__Cai, 2) + CHASTE_MATH::Pow(var_calcium_fluxes__Km_up, 2)); // micromolar_per_millisecond + const double var_calcium_pump_current__Km_pCa = CHASTE_CONST(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_calcium_pump_current__i_pCa = CHASTE_MATH::Pow(var_calcium_concentration__Cai, 2) * var_calcium_pump_current__i_pCa_max / (CHASTE_MATH::Pow(var_calcium_concentration__Cai, 2) + CHASTE_MATH::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__Acap = CHASTE_CONST(0.00015339999999999999); // cm2 + const double var_membrane__F = CHASTE_CONST(96.5); // coulomb_per_millimole + const double var_membrane__R = CHASTE_CONST(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 var_calcium_background_current__E_CaN = CHASTE_CONST(0.5) * var_membrane__R * var_membrane__T * CHASTE_MATH::Log(mParameters[4] / var_calcium_concentration__Cai) / var_membrane__F; // millivolt + const double var_L_type_calcium_current__Kpcf = 13 - 13 * CHASTE_MATH::Exp(-CHASTE_CONST(2.1025) * CHASTE_MATH::Pow((1 + CHASTE_CONST(0.068965517241379309) * var_chaste_interface__membrane__V), 2)); // per_millisecond + const double var_L_type_calcium_current__alpha = CHASTE_CONST(0.40000000000000002) * (1 + CHASTE_CONST(0.69999999999999996) * CHASTE_MATH::Exp(-160 * CHASTE_MATH::Pow((1 + CHASTE_CONST(0.025000000000000001) * var_chaste_interface__membrane__V), 2)) - CHASTE_CONST(0.75) * CHASTE_MATH::Exp(-CHASTE_MATH::Pow((1 + CHASTE_CONST(0.050000000000000003) * var_chaste_interface__membrane__V), 2))) * CHASTE_MATH::Exp(CHASTE_CONST(1.2) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V) / (1 + CHASTE_CONST(0.12) * CHASTE_MATH::Exp(CHASTE_CONST(1.2) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V)); // per_millisecond + const double var_L_type_calcium_current__beta = CHASTE_CONST(0.050000000000000003) * CHASTE_MATH::Exp(-CHASTE_CONST(0.92307692307692313) - CHASTE_CONST(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 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 + CHASTE_CONST(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 - CHASTE_CONST(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 + CHASTE_CONST(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 - CHASTE_CONST(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 + CHASTE_CONST(0.001) * var_chaste_interface__L_type_calcium_current__I3 * var_L_type_calcium_current__alpha - CHASTE_CONST(0.001) * var_chaste_interface__L_type_calcium_current__I1 * var_L_type_calcium_current__Kpcf + CHASTE_CONST(0.01) * var_chaste_interface__L_type_calcium_current__C4 * var_L_type_calcium_current__alpha * var_L_type_calcium_current__gamma - CHASTE_CONST(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 + CHASTE_CONST(0.001) * var_L_type_calcium_current__Kpcf * var_chaste_interface__L_type_calcium_current__O + CHASTE_CONST(0.002) * var_chaste_interface__L_type_calcium_current__C4 * var_L_type_calcium_current__Kpcf - CHASTE_CONST(0.001) * var_chaste_interface__L_type_calcium_current__I2 * var_L_type_calcium_current__alpha - CHASTE_CONST(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 + CHASTE_CONST(0.001) * var_chaste_interface__L_type_calcium_current__I1 * var_L_type_calcium_current__Kpcf - CHASTE_CONST(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 + CHASTE_CONST(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 - CHASTE_CONST(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 d_dt_chaste_interface_var_calcium_fluxes__P_RyR = -CHASTE_CONST(0.040000000000000001) * var_chaste_interface__calcium_fluxes__P_RyR - CHASTE_CONST(0.10000000000000001) * var_L_type_calcium_current__i_CaL * CHASTE_MATH::Exp(-CHASTE_CONST(0.038580246913580245) * CHASTE_MATH::Pow((-1 + CHASTE_CONST(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 var_fast_sodium_current__alpha_Na11 = CHASTE_CONST(3.802) / (CHASTE_CONST(0.20000000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(0.016666666666666666) - CHASTE_CONST(0.0066666666666666671) * var_chaste_interface__membrane__V) + CHASTE_CONST(0.1027) * CHASTE_MATH::Exp(-CHASTE_CONST(0.14705882352941177) - CHASTE_CONST(0.058823529411764705) * var_chaste_interface__membrane__V)); // per_millisecond + const double var_fast_sodium_current__alpha_Na12 = CHASTE_CONST(3.802) / (CHASTE_CONST(0.1027) * CHASTE_MATH::Exp(-CHASTE_CONST(0.16666666666666666) - CHASTE_CONST(0.066666666666666666) * var_chaste_interface__membrane__V) + CHASTE_CONST(0.23000000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(0.016666666666666666) - CHASTE_CONST(0.0066666666666666671) * var_chaste_interface__membrane__V)); // per_millisecond + const double var_fast_sodium_current__alpha_Na13 = CHASTE_CONST(3.802) / (CHASTE_CONST(0.25) * CHASTE_MATH::Exp(-CHASTE_CONST(0.016666666666666666) - CHASTE_CONST(0.0066666666666666671) * var_chaste_interface__membrane__V) + CHASTE_CONST(0.1027) * CHASTE_MATH::Exp(-CHASTE_CONST(0.20833333333333334) - CHASTE_CONST(0.083333333333333329) * var_chaste_interface__membrane__V)); // per_millisecond + const double var_fast_sodium_current__alpha_Na2 = 1 / (CHASTE_CONST(0.39395599999999997) + CHASTE_CONST(0.188495) * CHASTE_MATH::Exp(-CHASTE_CONST(0.42168674698795178) + CHASTE_CONST(0.060240963855421679) * mParameters[10] - CHASTE_CONST(0.060240963855421679) * var_chaste_interface__membrane__V)); // per_millisecond + const double var_fast_sodium_current__alpha_Na3 = CHASTE_CONST(6.9999999999999997e-7) * CHASTE_MATH::Exp(-CHASTE_CONST(0.90909090909090906) - CHASTE_CONST(0.12987012987012986) * var_chaste_interface__membrane__V); // per_millisecond + const double var_fast_sodium_current__alpha_Na4 = CHASTE_CONST(0.001) * var_fast_sodium_current__alpha_Na2; // per_millisecond + const double var_fast_sodium_current__alpha_Na5 = CHASTE_CONST(1.0526315789473684e-5) * var_fast_sodium_current__alpha_Na2; // per_millisecond + const double var_fast_sodium_current__beta_Na11 = CHASTE_CONST(0.19170000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(0.12315270935960591) - CHASTE_CONST(0.04926108374384236) * var_chaste_interface__membrane__V); // per_millisecond + const double var_fast_sodium_current__beta_Na12 = CHASTE_CONST(0.20000000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.12315270935960591) - CHASTE_CONST(0.04926108374384236) * var_chaste_interface__membrane__V); // per_millisecond + const double var_fast_sodium_current__beta_Na13 = CHASTE_CONST(0.22) * CHASTE_MATH::Exp(CHASTE_CONST(0.36945812807881773) - CHASTE_CONST(0.04926108374384236) * var_chaste_interface__membrane__V); // per_millisecond + const double var_fast_sodium_current__beta_Na3 = CHASTE_CONST(0.008539999999999999) + CHASTE_CONST(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 @@ -345,69 +347,69 @@ 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 var_fast_sodium_current__beta_Na5 = CHASTE_CONST(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 var_membrane__VJSR = CHASTE_CONST(1.1999999999999999e-7); // microlitre + const double var_membrane__VNSR = CHASTE_CONST(2.0980000000000001e-6); // microlitre + const double var_membrane__Vmyo = CHASTE_CONST(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_membrane__Vss = CHASTE_CONST(1.4849999999999999e-9); // microlitre + const double var_fast_transient_outward_potassium_current__E_K = var_membrane__R * var_membrane__T * CHASTE_MATH::Log(mParameters[5] / var_chaste_interface__potassium_concentration__Ki) / var_membrane__F; // millivolt + const double var_fast_transient_outward_potassium_current__i_Kto_f = CHASTE_MATH::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 var_rapid_delayed_rectifier_potassium_current__alpha_a0 = CHASTE_CONST(0.022348) * CHASTE_MATH::Exp(CHASTE_CONST(0.01176) * var_chaste_interface__membrane__V); // per_millisecond + const double var_rapid_delayed_rectifier_potassium_current__alpha_a1 = CHASTE_CONST(0.013733) * CHASTE_MATH::Exp(CHASTE_CONST(0.038198000000000003) * var_chaste_interface__membrane__V); // per_millisecond + const double var_rapid_delayed_rectifier_potassium_current__alpha_i = CHASTE_CONST(0.090820999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(0.11695499999999999) + CHASTE_CONST(0.023390999999999999) * var_chaste_interface__membrane__V); // per_millisecond + const double var_rapid_delayed_rectifier_potassium_current__beta_a0 = CHASTE_CONST(0.047002000000000002) * CHASTE_MATH::Exp(-CHASTE_CONST(0.063100000000000003) * var_chaste_interface__membrane__V); // per_millisecond + const double var_rapid_delayed_rectifier_potassium_current__beta_a1 = CHASTE_CONST(6.8899999999999994e-5) * CHASTE_MATH::Exp(-CHASTE_CONST(0.041779999999999998) * var_chaste_interface__membrane__V); // per_millisecond + const double var_rapid_delayed_rectifier_potassium_current__beta_i = CHASTE_CONST(0.0064970000000000002) * CHASTE_MATH::Exp(-CHASTE_CONST(0.16339999999999999) - CHASTE_CONST(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 var_rapid_delayed_rectifier_potassium_current__kb = CHASTE_CONST(0.036777999999999998); // per_millisecond + const double var_rapid_delayed_rectifier_potassium_current__kf = CHASTE_CONST(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 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 - CHASTE_CONST(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 var_ryanodine_receptors__k_minus_a = CHASTE_CONST(0.071249999999999994); // per_millisecond + const double var_ryanodine_receptors__k_minus_b = CHASTE_CONST(0.96499999999999997); // per_millisecond + const double var_ryanodine_receptors__k_minus_c = CHASTE_CONST(0.00080000000000000004); // per_millisecond + const double var_ryanodine_receptors__k_plus_a = CHASTE_CONST(0.0060749999999999997); // micromolar4_per_millisecond + const double var_ryanodine_receptors__k_plus_b = CHASTE_CONST(0.0040499999999999998); // micromolar3_per_millisecond + const double var_ryanodine_receptors__k_plus_c = CHASTE_CONST(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 d_dt_chaste_interface_var_ryanodine_receptors__P_O2 = -var_chaste_interface__ryanodine_receptors__P_O2 * var_ryanodine_receptors__k_minus_b + CHASTE_MATH::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 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 + CHASTE_MATH::Pow(var_chaste_interface__calcium_concentration__Cass, var_ryanodine_receptors__n) * var_ryanodine_receptors__P_C1 * var_ryanodine_receptors__k_plus_a - CHASTE_MATH::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 = CHASTE_MATH::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_background_current__g_Nab = CHASTE_CONST(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_sodium_calcium_exchange_current__eta = CHASTE_CONST(0.34999999999999998); // dimensionless + const double var_sodium_calcium_exchange_current__k_sat = CHASTE_CONST(0.10000000000000001); // dimensionless + const double var_fast_sodium_current__E_Na = var_membrane__R * var_membrane__T * CHASTE_MATH::Log((mParameters[6] + CHASTE_CONST(0.1111111111111111) * mParameters[5]) / (var_chaste_interface__sodium_concentration__Nai + CHASTE_CONST(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_rapid_delayed_rectifier_potassium_current__i_Kr = (-var_membrane__R * var_membrane__T * CHASTE_MATH::Log((mParameters[5] + CHASTE_CONST(0.020408163265306124) * mParameters[6]) / (var_chaste_interface__potassium_concentration__Ki + CHASTE_CONST(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_calcium_exchange_current__i_NaCa = (CHASTE_MATH::Pow(var_chaste_interface__sodium_concentration__Nai, 3) * mParameters[4] * CHASTE_MATH::Exp(var_membrane__F * var_chaste_interface__membrane__V * var_sodium_calcium_exchange_current__eta / (var_membrane__R * var_membrane__T)) - CHASTE_MATH::Pow(mParameters[6], 3) * var_calcium_concentration__Cai * CHASTE_MATH::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 * CHASTE_MATH::Exp((-1 + var_sodium_calcium_exchange_current__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (CHASTE_MATH::Pow(mParameters[6], 3) + CHASTE_MATH::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 - CHASTE_CONST(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 = CHASTE_CONST(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 var_sodium_potassium_pump_current__i_NaK_max = CHASTE_CONST(0.88); // picoA_per_picoF + const double var_sodium_potassium_pump_current__sigma = -CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(1.4858841010401188e-5) * mParameters[6]); // dimensionless + const double var_sodium_potassium_pump_current__f_NaK = 1 / (1 + CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(0.10000000000000001) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) + CHASTE_CONST(0.036499999999999998) * var_sodium_potassium_pump_current__sigma * CHASTE_MATH::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 + CHASTE_MATH::Pow((var_sodium_potassium_pump_current__Km_Nai / var_chaste_interface__sodium_concentration__Nai), CHASTE_CONST(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_time_independent_potassium_current__i_K1 = (-var_fast_transient_outward_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[5] * mParameters[11] / ((1 + CHASTE_MATH::Exp(CHASTE_CONST(0.089599999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(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 = CHASTE_CONST(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 @@ -448,7 +450,7 @@ 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -482,45 +484,45 @@ 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_x0 = CHASTE_MATH::Exp(-CHASTE_CONST(0.92307692307692313) - CHASTE_CONST(0.076923076923076927) * var_chaste_interface__membrane__V); + const double var_x1 = CHASTE_MATH::Exp(CHASTE_CONST(1.2) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V); + const double var_x2 = var_x1 * (1 + CHASTE_CONST(0.69999999999999996) * CHASTE_MATH::Exp(-160 * CHASTE_MATH::Pow((1 + CHASTE_CONST(0.025000000000000001) * var_chaste_interface__membrane__V), 2)) - CHASTE_CONST(0.75) * CHASTE_MATH::Exp(-CHASTE_MATH::Pow((1 + CHASTE_CONST(0.050000000000000003) * var_chaste_interface__membrane__V), 2))) / (1 + CHASTE_CONST(0.12) * var_x1); + const double var_x3 = CHASTE_CONST(0.10000000000000001) * var_x0; + const double var_x4 = -CHASTE_CONST(1.6000000000000001) * var_x2; + const double var_x5 = CHASTE_CONST(0.80000000000000004) * var_x2; + const double var_x6 = CHASTE_CONST(0.15000000000000002) * var_x0; + const double var_x7 = CHASTE_MATH::Exp(-CHASTE_CONST(2.1025) * CHASTE_MATH::Pow((1 + CHASTE_CONST(0.068965517241379309) * var_chaste_interface__membrane__V), 2)); + const double var_x8 = CHASTE_CONST(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_x11 = CHASTE_CONST(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_x14 = CHASTE_CONST(0.40000000000000002) * var_x2; + const double var_x15 = CHASTE_CONST(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_x17 = CHASTE_CONST(0.00040000000000000002) * var_x0; + const double var_x18 = CHASTE_CONST(0.0001) * var_x0; + const double var_x19 = CHASTE_CONST(0.20000000000000001) * var_x0; + const double var_x20 = var_chaste_interface__calcium_concentration__Cass / CHASTE_MATH::Pow((1 + CHASTE_CONST(0.050000000000000003) * var_chaste_interface__calcium_concentration__Cass), 2); + const double var_x21 = -var_x15 * var_chaste_interface__L_type_calcium_current__C4 + CHASTE_CONST(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_x23 = CHASTE_CONST(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_x25 = CHASTE_CONST(0.013000000000000001) * var_x7; + const double var_x26 = CHASTE_CONST(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_x28 = CHASTE_CONST(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_x30 = CHASTE_CONST(2.3700000000000001) * var_chaste_interface__calcium_concentration__Cai_converted; + const double var_x31 = CHASTE_CONST(3.1999999999999999e-5) + var_x30; + const double var_x32 = CHASTE_CONST(2.3700000000000001) * var_chaste_interface__calcium_buffering__HTRPN_Ca; + const double var_x33 = CHASTE_CONST(32.699999999999996) * var_chaste_interface__calcium_concentration__Cai_converted; + const double var_x34 = CHASTE_CONST(0.019599999999999999) + var_x33; + const double var_x35 = CHASTE_CONST(32.699999999999996) * var_chaste_interface__calcium_buffering__LTRPN_Ca; + const double var_x36 = 1 + CHASTE_CONST(0.00125) * var_chaste_interface__calcium_concentration__CaJSR; + const double var_x37 = CHASTE_MATH::Pow(var_x36, (-2)); + const double var_x38 = 1 / (1 + CHASTE_CONST(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; @@ -528,90 +530,90 @@ 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_x46 = CHASTE_MATH::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_x48 = 1 / (CHASTE_CONST(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_x51 = CHASTE_MATH::Pow((CHASTE_CONST(2.4999999999999999e-7) + var_x46), (-2)); + const double var_x52 = CHASTE_MATH::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_x54 = CHASTE_CONST(0.00023799999999999998) + var_chaste_interface__calcium_concentration__Cai_converted; + const double var_x55 = 1 + CHASTE_CONST(1.19e-5) / CHASTE_MATH::Pow(var_x54, 2); const double var_x56 = 1 / var_x55; - const double var_x57 = 0.001 * var_x56; + const double var_x57 = CHASTE_CONST(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_x59 = CHASTE_MATH::Exp(-CHASTE_CONST(0.025317124991725771) * var_chaste_interface__membrane__V); + const double var_x60 = CHASTE_MATH::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_x62 = mParameters[15] / ((1 + CHASTE_CONST(0.10000000000000001) * var_x59) * (1380 + mParameters[4]) * (CHASTE_CONST(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_x66 = CHASTE_MATH::Exp(CHASTE_CONST(0.013632298072467722) * var_chaste_interface__membrane__V); + const double var_x67 = var_x62 * var_x66 * CHASTE_MATH::Pow(var_chaste_interface__sodium_concentration__Nai, 2) * mParameters[4]; + const double var_x68 = CHASTE_CONST(0.23799999999999999) + var_chaste_interface__calcium_concentration__Cass; + const double var_x69 = CHASTE_MATH::Pow(var_x68, (-2)); + const double var_x70 = 1 / (1 + CHASTE_CONST(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_x72 = CHASTE_CONST(80.808080808080803) * var_chaste_interface__ryanodine_receptors__P_O1 + CHASTE_CONST(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_x74 = CHASTE_CONST(80.808080808080803) * var_chaste_interface__calcium_concentration__CaJSR - CHASTE_CONST(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_x76 = CHASTE_CONST(0.04926108374384236) * var_chaste_interface__membrane__V; + const double var_x77 = CHASTE_CONST(0.20000000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.12315270935960591) - var_x76); + const double var_x78 = CHASTE_MATH::Exp(-CHASTE_CONST(0.016666666666666666) - CHASTE_CONST(0.0066666666666666671) * var_chaste_interface__membrane__V); + const double var_x79 = 1 / (CHASTE_CONST(0.25) * var_x78 + CHASTE_CONST(0.1027) * CHASTE_MATH::Exp(-CHASTE_CONST(0.20833333333333334) - CHASTE_CONST(0.083333333333333329) * var_chaste_interface__membrane__V)); + const double var_x80 = CHASTE_CONST(3.802) * var_x79; + const double var_x81 = CHASTE_CONST(0.008539999999999999) + CHASTE_CONST(2.0000000000000002e-5) * var_chaste_interface__membrane__V; + const double var_x82 = CHASTE_CONST(3.802) / (CHASTE_CONST(0.1027) * CHASTE_MATH::Exp(-CHASTE_CONST(0.16666666666666666) - CHASTE_CONST(0.066666666666666666) * var_chaste_interface__membrane__V) + CHASTE_CONST(0.23000000000000001) * var_x78); + const double var_x83 = CHASTE_MATH::Exp(-CHASTE_CONST(0.90909090909090906) - CHASTE_CONST(0.12987012987012986) * var_chaste_interface__membrane__V); + const double var_x84 = CHASTE_CONST(6.9999999999999997e-7) * var_x83; + const double var_x85 = CHASTE_MATH::Exp(CHASTE_CONST(0.36945812807881773) - var_x76); + const double var_x86 = CHASTE_CONST(0.22) * var_x85; + const double var_x87 = CHASTE_CONST(3.802) / (CHASTE_CONST(0.20000000000000001) * var_x78 + CHASTE_CONST(0.1027) * CHASTE_MATH::Exp(-CHASTE_CONST(0.14705882352941177) - CHASTE_CONST(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_x89 = CHASTE_CONST(0.19170000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(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_x92 = 1 / (CHASTE_CONST(0.39395599999999997) + CHASTE_CONST(0.188495) * CHASTE_MATH::Exp(-CHASTE_CONST(0.42168674698795178) + CHASTE_CONST(0.060240963855421679) * mParameters[10] - CHASTE_CONST(0.060240963855421679) * var_chaste_interface__membrane__V)); + const double var_x93 = CHASTE_CONST(1.0526315789473684e-5) * var_x92; + const double var_x94 = CHASTE_CONST(1.4e-8) * var_x83; + const double var_x95 = CHASTE_CONST(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_x97 = CHASTE_CONST(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_x101 = CHASTE_MATH::Log(var_x100); + const double var_x102 = -CHASTE_CONST(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_x105 = CHASTE_CONST(0.061518471582797281) * var_x104; + const double var_x106 = 1 / (var_chaste_interface__potassium_concentration__Ki + CHASTE_CONST(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_x108 = CHASTE_CONST(1.5794450018272976) * var_x99; + const double var_x109 = CHASTE_MATH::Exp(CHASTE_CONST(0.089599999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(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_x113 = CHASTE_MATH::Pow(var_x112, CHASTE_CONST(1.5)); + const double var_x114 = var_x112 * var_x113 * mParameters[5] / ((1500 + mParameters[5]) * CHASTE_MATH::Pow((CHASTE_CONST(3.2860264730588296e-7) + var_x113), 2) * (1 + CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(0.0038949423064193493) * var_chaste_interface__membrane__V) + CHASTE_CONST(0.036499999999999998) * (-CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(1.4858841010401188e-5) * mParameters[6])) * CHASTE_MATH::Exp(-CHASTE_CONST(0.038949423064193495) * var_chaste_interface__membrane__V))); + const double var_x115 = CHASTE_CONST(0.022348) * CHASTE_MATH::Exp(CHASTE_CONST(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_x117 = CHASTE_CONST(0.013733) * CHASTE_MATH::Exp(CHASTE_CONST(0.038198000000000003) * var_chaste_interface__membrane__V); + const double var_x118 = CHASTE_CONST(6.8899999999999994e-5) * CHASTE_MATH::Exp(-CHASTE_CONST(0.041779999999999998) * var_chaste_interface__membrane__V); + const double var_x119 = CHASTE_CONST(0.0064970000000000002) * CHASTE_MATH::Exp(-CHASTE_CONST(0.16339999999999999) - CHASTE_CONST(0.032680000000000001) * var_chaste_interface__membrane__V); + const double var_x120 = CHASTE_CONST(0.090820999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(0.11695499999999999) + CHASTE_CONST(0.023390999999999999) * var_chaste_interface__membrane__V); + const double var_x121 = CHASTE_CONST(0.012149999999999999) * CHASTE_MATH::Pow(var_chaste_interface__calcium_concentration__Cass, 2) * var_chaste_interface__ryanodine_receptors__P_O1; + const double var_x122 = CHASTE_MATH::Pow(var_chaste_interface__calcium_concentration__Cass, 3); + const double var_x123 = CHASTE_CONST(0.0060749999999999997) * CHASTE_MATH::Pow(var_chaste_interface__calcium_concentration__Cass, 4); + const double var_x124 = CHASTE_CONST(0.0040499999999999998) * var_x122; + const double var_x125 = 1 / (var_chaste_interface__sodium_concentration__Nai + CHASTE_CONST(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][0] = 1.0 - (mDt * (-CHASTE_CONST(0.050000000000000003) * var_x0 - CHASTE_CONST(2.8000000000000003) * var_x2)); rJacobian[0][1] = -(mDt * (var_x3 + var_x4)); rJacobian[0][2] = -(mDt * (var_x4)); rJacobian[0][3] = -(mDt * (var_x4)); @@ -643,7 +645,7 @@ 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][0] = -(mDt * (CHASTE_CONST(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; @@ -677,8 +679,8 @@ 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][2] = 1.0 - (mDt * (-CHASTE_CONST(0.026000000000000002) + var_x8 - var_x13 - var_x14 - var_x16 - var_x6)); + rJacobian[2][3] = -(mDt * (CHASTE_CONST(1.0000000000000002e-6) * var_x0)); rJacobian[2][4] = -(mDt * (var_x17)); rJacobian[2][5] = -(mDt * (var_x18)); rJacobian[2][6] = -(mDt * (var_x19)); @@ -710,7 +712,7 @@ 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][3] = 1.0 - (mDt * (-CHASTE_CONST(0.0135) + var_x25 + var_x0 * (-CHASTE_CONST(0.026000000000000002) + CHASTE_CONST(0.026000000000000002) * var_x7))); rJacobian[3][4] = 0.0; rJacobian[3][5] = -(mDt * (var_x26)); rJacobian[3][6] = -(mDt * (var_x12)); @@ -741,10 +743,10 @@ 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][2] = -(mDt * (CHASTE_CONST(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][5] = -(mDt * (CHASTE_CONST(0.00050000000000000001))); rJacobian[4][6] = -(mDt * (var_x28)); rJacobian[4][7] = 0.0; rJacobian[4][8] = 0.0; @@ -776,7 +778,7 @@ 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][5] = 1.0 - (mDt * (-CHASTE_CONST(0.00050000000000000001) - var_x18 - var_x26)); rJacobian[5][6] = 0.0; rJacobian[5][7] = 0.0; rJacobian[5][8] = 0.0; @@ -806,10 +808,10 @@ rJacobian[6][0] = 0.0; rJacobian[6][1] = 0.0; rJacobian[6][2] = -(mDt * (var_x14)); - rJacobian[6][3] = -(mDt * (0.00050000000000000001)); + rJacobian[6][3] = -(mDt * (CHASTE_CONST(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][6] = 1.0 - (mDt * (-CHASTE_CONST(0.013000000000000001) + var_x25 - var_x12 - var_x19)); rJacobian[6][7] = 0.0; rJacobian[6][8] = 0.0; rJacobian[6][9] = 0.0; @@ -846,7 +848,7 @@ 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][11] = -(mDt * (CHASTE_CONST(331.80000000000001) - var_x32)); rJacobian[7][12] = 0.0; rJacobian[7][13] = 0.0; rJacobian[7][14] = 0.0; @@ -908,8 +910,8 @@ 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][9] = 1.0 - (mDt * (var_x38 * (-CHASTE_CONST(0.050000000000000003) - var_x39 * var_x40) + CHASTE_CONST(0.00013333333333333334) * (CHASTE_CONST(0.050000000000000003) * var_chaste_interface__calcium_concentration__CaNSR - CHASTE_CONST(0.050000000000000003) * var_chaste_interface__calcium_concentration__CaJSR - var_x41 * var_x42) / (CHASTE_MATH::Pow(var_x36, 3) * CHASTE_MATH::Pow((CHASTE_CONST(0.053333333333333337) + var_x37), 2)))); + rJacobian[9][10] = -(mDt * (CHASTE_CONST(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)); @@ -940,9 +942,9 @@ 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][9] = -(mDt * (CHASTE_CONST(0.0028598665395614866))); + rJacobian[10][10] = 1.0 - (mDt * (-CHASTE_CONST(0.0028598665395614866) - CHASTE_CONST(12.316491897044804) * mParameters[0])); + rJacobian[10][11] = -(mDt * (CHASTE_CONST(12316.491897044803) * mParameters[0] + CHASTE_CONST(24632983.794089608) * var_x50 - CHASTE_CONST(24.632983794089608) * var_x53)); rJacobian[10][12] = 0.0; rJacobian[10][13] = 0.0; rJacobian[10][14] = 0.0; @@ -974,8 +976,8 @@ 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][11] = 1.0 - (mDt * (var_x57 * (-CHASTE_CONST(2745.8000000000002) + var_x32 + var_x35 + 2 * var_x53 - 2000000 * var_x50 - 1000 * mParameters[0] + (-CHASTE_CONST(61518.471582797276) * var_x49 - CHASTE_CONST(61.518471582797282) * var_x63 - CHASTE_CONST(0.00014491407891765456) * var_x58 + CHASTE_CONST(0.061518471582797281) * var_x51 * var_x52) * mParameters[8]) + CHASTE_CONST(2.3800000000000001e-8) * (CHASTE_CONST(0.125) * var_chaste_interface__calcium_concentration__Cass + CHASTE_CONST(0.019599999999999999) * var_chaste_interface__calcium_buffering__LTRPN_Ca + CHASTE_CONST(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] - CHASTE_CONST(0.03075923579139864) * (var_x65 + CHASTE_CONST(0.00036699999999999998) * var_chaste_interface__membrane__V - CHASTE_CONST(0.0047112379481865285) * CHASTE_MATH::Log(CHASTE_CONST(0.001) * var_x58 * mParameters[4]) - 2 * var_x62 * (-var_x61 * var_x64 + var_x66 * CHASTE_MATH::Pow(var_chaste_interface__sodium_concentration__Nai, 3) * mParameters[4])) * mParameters[8]) / (CHASTE_MATH::Pow(var_x54, 3) * CHASTE_MATH::Pow(var_x55, 2)))); + rJacobian[11][12] = -(mDt * (CHASTE_CONST(0.000125) * var_x56)); rJacobian[11][13] = 0.0; rJacobian[11][14] = 0.0; rJacobian[11][15] = 0.0; @@ -994,20 +996,20 @@ 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[11][31] = -(mDt * (CHASTE_CONST(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][6] = -(mDt * (var_x70 * var_x71 * (CHASTE_CONST(33719.579211807191) - CHASTE_CONST(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][11] = -(mDt * (CHASTE_CONST(2175084.1750841751) * var_x70)); + rJacobian[12][12] = 1.0 - (mDt * (var_x70 * (-CHASTE_CONST(2175.0841750841751) - var_x40 * var_x72) + CHASTE_CONST(0.16806722689075632) * (CHASTE_CONST(2175084.1750841751) * var_chaste_interface__calcium_concentration__Cai_converted - CHASTE_CONST(2175.0841750841751) * var_chaste_interface__calcium_concentration__Cass - CHASTE_CONST(535.23141606043157) * var_x71 * (-63 + var_chaste_interface__membrane__V) * var_chaste_interface__L_type_calcium_current__O + CHASTE_CONST(80.808080808080803) * var_x39 * var_x41 * var_chaste_interface__calcium_fluxes__P_RyR * mParameters[1]) / (CHASTE_MATH::Pow(var_x68, 3) * CHASTE_MATH::Pow((CHASTE_CONST(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; @@ -1033,14 +1035,14 @@ 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][6] = -(mDt * ((CHASTE_CONST(0.90000000000000002) - CHASTE_CONST(0.014285714285714287) * var_chaste_interface__membrane__V) * mParameters[7] * CHASTE_MATH::Exp(-CHASTE_CONST(0.038580246913580245) * CHASTE_MATH::Pow((-1 + CHASTE_CONST(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][13] = 1.0 - (mDt * (-CHASTE_CONST(0.040000000000000001))); rJacobian[13][14] = 0.0; rJacobian[13][15] = 0.0; rJacobian[13][16] = 0.0; @@ -1370,15 +1372,15 @@ 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][23] = 1.0 - (mDt * (var_x104 * (-CHASTE_CONST(1.5794450018272976) * var_x107 - var_x103 * var_x108 * var_chaste_interface__non_inactivating_steady_state_potassium_current__iKss - var_x108 * CHASTE_MATH::Pow(var_chaste_interface__slow_delayed_rectifier_potassium_current__nKs, 2) * mParameters[14] - CHASTE_CONST(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 * CHASTE_MATH::Pow(var_chaste_interface__fast_transient_outward_potassium_current__ato_f, 3) * mParameters[16] * var_chaste_interface__fast_transient_outward_potassium_current__ito_f - CHASTE_CONST(1.5794450018272976) * var_x100 * var_x111 * mParameters[11] / var_x110 + CHASTE_CONST(0.14151827216372587) * var_x102 * var_x109 * var_x111 * var_x99 * mParameters[5] * mParameters[11] / CHASTE_MATH::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][27] = -(mDt * (-var_x105 * (-CHASTE_CONST(25.674321243523316) * CHASTE_MATH::Log(var_x106 * (mParameters[5] + CHASTE_CONST(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[23][31] = -(mDt * (var_x104 * (CHASTE_CONST(5.3367950117641947e-8) * var_x114 - CHASTE_CONST(0.032233571465863219) * var_x107))); rJacobian[24][0] = 0.0; rJacobian[24][1] = 0.0; rJacobian[24][2] = 0.0; @@ -1403,8 +1405,8 @@ 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][24] = 1.0 - (mDt * (-CHASTE_CONST(0.023761000000000001) - var_x115 - CHASTE_CONST(0.047002000000000002) * CHASTE_MATH::Exp(-CHASTE_CONST(0.063100000000000003) * var_chaste_interface__membrane__V))); + rJacobian[24][25] = -(mDt * (CHASTE_CONST(0.036777999999999998) - var_x115)); rJacobian[24][26] = -(mDt * (var_x116)); rJacobian[24][27] = -(mDt * (var_x116)); rJacobian[24][28] = 0.0; @@ -1435,8 +1437,8 @@ 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][24] = -(mDt * (CHASTE_CONST(0.023761000000000001))); + rJacobian[25][25] = 1.0 - (mDt * (-CHASTE_CONST(0.036777999999999998) - var_x117)); rJacobian[25][26] = 0.0; rJacobian[25][27] = -(mDt * (var_x118)); rJacobian[25][28] = 0.0; @@ -1535,8 +1537,8 @@ 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][28] = 1.0 - (mDt * (-CHASTE_CONST(0.00080000000000000004))); + rJacobian[28][29] = -(mDt * (CHASTE_CONST(0.0089999999999999993))); rJacobian[28][30] = 0.0; rJacobian[28][31] = 0.0; rJacobian[29][0] = 0.0; @@ -1551,7 +1553,7 @@ 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][12] = -(mDt * (-var_x121 + CHASTE_CONST(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; @@ -1567,9 +1569,9 @@ 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][28] = -(mDt * (CHASTE_CONST(0.00080000000000000004) - var_x123)); + rJacobian[29][29] = 1.0 - (mDt * (-CHASTE_CONST(0.080249999999999988) - var_x123 - var_x124)); + rJacobian[29][30] = -(mDt * (CHASTE_CONST(0.96499999999999997) - var_x123)); rJacobian[29][31] = 0.0; rJacobian[30][0] = 0.0; rJacobian[30][1] = 0.0; @@ -1601,7 +1603,7 @@ 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][30] = 1.0 - (mDt * (-CHASTE_CONST(0.96499999999999997))); rJacobian[30][31] = 0.0; rJacobian[31][0] = 0.0; rJacobian[31][1] = 0.0; @@ -1614,7 +1616,7 @@ 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][11] = -(mDt * (CHASTE_CONST(184.55541474839183) * var_x104 * var_x63)); rJacobian[31][12] = 0.0; rJacobian[31][13] = 0.0; rJacobian[31][14] = 0.0; @@ -1624,9 +1626,9 @@ 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][21] = -(mDt * (-var_x105 * (-CHASTE_CONST(25.674321243523316) * CHASTE_MATH::Log(var_x125 * (mParameters[6] + CHASTE_CONST(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][23] = -(mDt * (var_x104 * (-CHASTE_CONST(0.00045628411163899709) * var_x125 - CHASTE_CONST(0.17549388909192196) * var_x126))); rJacobian[31][24] = 0.0; rJacobian[31][25] = 0.0; rJacobian[31][26] = 0.0; @@ -1634,14 +1636,14 @@ 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))); + rJacobian[31][31] = 1.0 - (mDt * (var_x104 * (-CHASTE_CONST(1.5794450018272976) * var_x126 - CHASTE_CONST(0.0041065570047509742) * var_x125 - CHASTE_CONST(0.55366624424517552) * var_x67 - CHASTE_CONST(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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -1678,45 +1680,45 @@ 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_background_current__g_Cab = CHASTE_CONST(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__Km_pCa = CHASTE_CONST(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_calcium_pump_current__i_pCa = CHASTE_MATH::Pow(var_calcium_concentration__Cai, 2) * var_calcium_pump_current__i_pCa_max / (CHASTE_MATH::Pow(var_calcium_concentration__Cai, 2) + CHASTE_MATH::Pow(var_calcium_pump_current__Km_pCa, 2)); // picoA_per_picoF + const double var_membrane__F = CHASTE_CONST(96.5); // coulomb_per_millimole + const double var_membrane__R = CHASTE_CONST(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_calcium_background_current__E_CaN = CHASTE_CONST(0.5) * var_membrane__R * var_membrane__T * CHASTE_MATH::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__O_ClCa = CHASTE_CONST(0.20000000000000001) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(5.9871794871794881) - CHASTE_CONST(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_membrane__i_stim_converted = CHASTE_STIM(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_membrane__i_stim = var_membrane__i_stim_converted / CHASTE_CAP(); // picoA_per_picoF + const double var_fast_transient_outward_potassium_current__E_K = var_membrane__R * var_membrane__T * CHASTE_MATH::Log(mParameters[5] / var_chaste_interface__potassium_concentration__Ki) / var_membrane__F; // millivolt + const double var_fast_transient_outward_potassium_current__i_Kto_f = CHASTE_MATH::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_delayed_rectifier_potassium_current__i_Ks = CHASTE_MATH::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_background_current__g_Nab = CHASTE_CONST(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_sodium_calcium_exchange_current__eta = CHASTE_CONST(0.34999999999999998); // dimensionless + const double var_sodium_calcium_exchange_current__k_sat = CHASTE_CONST(0.10000000000000001); // dimensionless + const double var_fast_sodium_current__E_Na = var_membrane__R * var_membrane__T * CHASTE_MATH::Log((mParameters[6] + CHASTE_CONST(0.1111111111111111) * mParameters[5]) / (var_chaste_interface__sodium_concentration__Nai + CHASTE_CONST(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_rapid_delayed_rectifier_potassium_current__i_Kr = (-var_membrane__R * var_membrane__T * CHASTE_MATH::Log((mParameters[5] + CHASTE_CONST(0.020408163265306124) * mParameters[6]) / (var_chaste_interface__potassium_concentration__Ki + CHASTE_CONST(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_calcium_exchange_current__i_NaCa = (CHASTE_MATH::Pow(var_chaste_interface__sodium_concentration__Nai, 3) * mParameters[4] * CHASTE_MATH::Exp(var_membrane__F * var_chaste_interface__membrane__V * var_sodium_calcium_exchange_current__eta / (var_membrane__R * var_membrane__T)) - CHASTE_MATH::Pow(mParameters[6], 3) * var_calcium_concentration__Cai * CHASTE_MATH::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 * CHASTE_MATH::Exp((-1 + var_sodium_calcium_exchange_current__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (CHASTE_MATH::Pow(mParameters[6], 3) + CHASTE_MATH::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_sodium_potassium_pump_current__i_NaK_max = CHASTE_CONST(0.88); // picoA_per_picoF + const double var_sodium_potassium_pump_current__sigma = -CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(1.4858841010401188e-5) * mParameters[6]); // dimensionless + const double var_sodium_potassium_pump_current__f_NaK = 1 / (1 + CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(0.10000000000000001) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) + CHASTE_CONST(0.036499999999999998) * var_sodium_potassium_pump_current__sigma * CHASTE_MATH::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 + CHASTE_MATH::Pow((var_sodium_potassium_pump_current__Km_Nai / var_chaste_interface__sodium_concentration__Nai), CHASTE_CONST(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 + CHASTE_MATH::Exp(CHASTE_CONST(0.089599999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(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 = CHASTE_CONST(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 @@ -1727,7 +1729,7 @@ { // Time units: millisecond std::vector& rY = rGetStateVariables(); - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -1746,19 +1748,19 @@ 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)); + const double var_fast_transient_outward_potassium_current__alpha_a = CHASTE_CONST(0.18064) * CHASTE_MATH::Exp(CHASTE_CONST(1.0731000000000002) + CHASTE_CONST(0.035770000000000003) * var_chaste_interface__membrane__V); + const double var_fast_transient_outward_potassium_current__alpha_i = CHASTE_CONST(0.00015200000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(1.9285714285714286) - CHASTE_CONST(0.14285714285714285) * var_chaste_interface__membrane__V) / (1 + CHASTE_CONST(0.0067083000000000004) * CHASTE_MATH::Exp(-CHASTE_CONST(4.7857142857142856) - CHASTE_CONST(0.14285714285714285) * var_chaste_interface__membrane__V)); + const double var_fast_transient_outward_potassium_current__beta_a = CHASTE_CONST(0.39560000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(1.8711) - CHASTE_CONST(0.062370000000000002) * var_chaste_interface__membrane__V); + const double var_fast_transient_outward_potassium_current__beta_i = CHASTE_CONST(0.00095) * CHASTE_MATH::Exp(CHASTE_CONST(4.7857142857142856) + CHASTE_CONST(0.14285714285714285) * var_chaste_interface__membrane__V) / (1 + CHASTE_CONST(0.051334999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(4.7857142857142856) + CHASTE_CONST(0.14285714285714285) * var_chaste_interface__membrane__V)); + const double var_non_inactivating_steady_state_potassium_current__tau_Kss = CHASTE_CONST(13.17) + CHASTE_CONST(39.299999999999997) * CHASTE_MATH::Exp(-CHASTE_CONST(0.086199999999999999) * var_chaste_interface__membrane__V); + const double var_slow_delayed_rectifier_potassium_current__alpha_n = (((var_chaste_interface__membrane__V >= -CHASTE_CONST(26.500000781250002)) && (var_chaste_interface__membrane__V <= -CHASTE_CONST(26.499999218749998))) ? (-CHASTE_CONST(3.7604140624912359e-12) / (1 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999766942e-8))) + CHASTE_CONST(640000.00000149151) * (CHASTE_CONST(26.500000781250002) + var_chaste_interface__membrane__V) * (CHASTE_CONST(3.7604140624912359e-12) / (1 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999766942e-8))) + CHASTE_CONST(3.7604140624912359e-12) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999766942e-8))))) : (CHASTE_CONST(4.8133299999999997e-6) * (CHASTE_CONST(26.5) + var_chaste_interface__membrane__V) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(3.3919999999999999) - CHASTE_CONST(0.128) * var_chaste_interface__membrane__V)))); + const double var_slow_delayed_rectifier_potassium_current__beta_n = CHASTE_CONST(9.5333299999999997e-5) * CHASTE_MATH::Exp(-CHASTE_CONST(1.0069999999999999) - CHASTE_CONST(0.037999999999999999) * var_chaste_interface__membrane__V); + const double var_slow_transient_outward_potassium_current__ass = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.9220779220779218) - CHASTE_CONST(0.12987012987012986) * var_chaste_interface__membrane__V)); + const double var_slow_transient_outward_potassium_current__iss = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(7.9298245614035094) + CHASTE_CONST(0.17543859649122806) * var_chaste_interface__membrane__V)); + const double var_slow_transient_outward_potassium_current__tau_ta_s = CHASTE_CONST(2.0579999999999998) + CHASTE_CONST(0.49299999999999999) * CHASTE_MATH::Exp(-CHASTE_CONST(0.062899999999999998) * var_chaste_interface__membrane__V); + const double var_slow_transient_outward_potassium_current__tau_ti_s = 270 + 1050 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(7.9298245614035094) + CHASTE_CONST(0.17543859649122806) * var_chaste_interface__membrane__V)); + const double var_ultra_rapidly_activating_delayed_rectifier_potassium_current__tau_aur = CHASTE_CONST(2.0579999999999998) + CHASTE_CONST(0.49299999999999999) * CHASTE_MATH::Exp(-CHASTE_CONST(0.062899999999999998) * var_chaste_interface__membrane__V); + const double var_ultra_rapidly_activating_delayed_rectifier_potassium_current__tau_iur = 1200 - 170 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(7.9298245614035094) + CHASTE_CONST(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)); @@ -1811,7 +1813,7 @@ { // Inputs: // Time units: millisecond - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -1849,33 +1851,33 @@ // 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__F = CHASTE_CONST(96.5); // coulomb_per_millimole + const double var_membrane__R = CHASTE_CONST(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_L_type_calcium_current__i_CaL_converted = CHASTE_CAP() * var_L_type_calcium_current__i_CaL; // uA_per_cm2 + const double var_membrane__i_stim_converted = CHASTE_STIM(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_fast_transient_outward_potassium_current__E_K = var_membrane__R * var_membrane__T * CHASTE_MATH::Log(mParameters[5] / var_chaste_interface__potassium_concentration__Ki) / var_membrane__F; // millivolt + const double var_fast_transient_outward_potassium_current__i_Kto_f = CHASTE_MATH::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 = CHASTE_CAP() * 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_non_inactivating_steady_state_potassium_current__i_Kss_converted = CHASTE_CAP() * 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_slow_delayed_rectifier_potassium_current__i_Ks = CHASTE_MATH::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 = CHASTE_CAP() * 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_sodium_calcium_exchange_current__eta = CHASTE_CONST(0.34999999999999998); // dimensionless + const double var_sodium_calcium_exchange_current__k_sat = CHASTE_CONST(0.10000000000000001); // dimensionless + const double var_fast_sodium_current__E_Na = var_membrane__R * var_membrane__T * CHASTE_MATH::Log((mParameters[6] + CHASTE_CONST(0.1111111111111111) * mParameters[5]) / (var_chaste_interface__sodium_concentration__Nai + CHASTE_CONST(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 + const double var_fast_sodium_current__i_Na_converted = CHASTE_CAP() * 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 * CHASTE_MATH::Log((mParameters[5] + CHASTE_CONST(0.020408163265306124) * mParameters[6]) / (var_chaste_interface__potassium_concentration__Ki + CHASTE_CONST(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 = CHASTE_CAP() * var_rapid_delayed_rectifier_potassium_current__i_Kr; // uA_per_cm2 + const double var_sodium_calcium_exchange_current__i_NaCa = (CHASTE_MATH::Pow(var_chaste_interface__sodium_concentration__Nai, 3) * mParameters[4] * CHASTE_MATH::Exp(var_membrane__F * var_chaste_interface__membrane__V * var_sodium_calcium_exchange_current__eta / (var_membrane__R * var_membrane__T)) - CHASTE_MATH::Pow(mParameters[6], 3) * var_calcium_concentration__Cai * CHASTE_MATH::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 * CHASTE_MATH::Exp((-1 + var_sodium_calcium_exchange_current__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (CHASTE_MATH::Pow(mParameters[6], 3) + CHASTE_MATH::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 = CHASTE_CAP() * 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 + CHASTE_MATH::Exp(CHASTE_CONST(0.089599999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(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 = CHASTE_CAP() * var_time_independent_potassium_current__i_K1; // uA_per_cm2 std::vector dqs(12); dqs[0] = var_calcium_fluxes__J_rel; diff --git a/chaste_codegen/data/tests/chaste_reference_models/BE/bondarenko_szigeti_bett_kim_rasmusson_2004_apical.hpp b/chaste_codegen/data/tests/chaste_reference_models/BE/bondarenko_szigeti_bett_kim_rasmusson_2004_apical.hpp index a83222592..4a86a5ce5 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/BE/bondarenko_szigeti_bett_kim_rasmusson_2004_apical.hpp +++ b/chaste_codegen/data/tests/chaste_reference_models/BE/bondarenko_szigeti_bett_kim_rasmusson_2004_apical.hpp @@ -16,8 +16,16 @@ #include "ChasteSerialization.hpp" #include #include "AbstractStimulusFunction.hpp" +#if USING_DEVICE_COMPILER +#include "StimulusEvaluatorCuda.hpp" +#endif #include "AbstractBackwardEulerCardiacCell.hpp" +#if USING_DEVICE_COMPILER +template +class BackwardEulerKernelLauncher; // Forward declare to hide CUDA-specifics from standard C++ compiler +#endif + class Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEuler : public AbstractBackwardEulerCardiacCell<32> { friend class boost::serialization::access; @@ -37,19 +45,50 @@ class Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEul 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: +#if USING_DEVICE_COMPILER + template using SolverKernelLauncher = BackwardEulerKernelLauncher; + static constexpr unsigned TOTAL_SIZE = 41u; + static constexpr unsigned NONLINEAR_SIZE = 32u; +#endif 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(boost::shared_ptr /* unused */, 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: + 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]); + +#if USING_DEVICE_COMPILER + template + DEVICE + static void ComputeResidualDevice(ValueType var_chaste_interface__environment__time, const ValueType rCurrentGuess[NONLINEAR_SIZE], const ValueType rY[], ValueType rResidual[NONLINEAR_SIZE], ValueType mDt, const ValueType mParameters[], bool mSetVoltageDerivativeToZero, ValueType mFixedVoltage, ValueType capacitance, const DeviceStimulusFunctor stim); + + template + DEVICE + static void ComputeJacobianDevice(ValueType var_chaste_interface__environment__time, const ValueType rCurrentGuess[NONLINEAR_SIZE], const ValueType rY[], ValueType rJacobian[NONLINEAR_SIZE][NONLINEAR_SIZE], ValueType mDt, const ValueType mParameters[], bool mSetVoltageDerivativeToZero, ValueType mFixedVoltage, ValueType capacitance, const DeviceStimulusFunctor stim); + template + DEVICE + static void UpdateTransmembranePotentialDevice(ValueType var_chaste_interface__environment__time, ValueType rY[], ValueType mDt, const ValueType mParameters[], bool mSetVoltageDerivativeToZero, ValueType mFixedVoltage, DeviceStimulusFunctor stim, ValueType capacitance); + + template + DEVICE + static void SolveClosedFormVarsDevice(ValueType rY[TOTAL_SIZE], ValueType mDt, const ValueType mParameters[], bool mSetVoltageDerivativeToZero, ValueType mFixedVoltage, ValueType capacitance); + + template + DEVICE + static void FillInitialGuessDevice(ValueType _guess[NONLINEAR_SIZE], const ValueType rY[TOTAL_SIZE]); + + template + DEVICE + static void ScatterSolutionDevice(const ValueType _guess[NONLINEAR_SIZE], ValueType rY[TOTAL_SIZE]); +#endif +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); -}; + std::vector ComputeDerivedQuantities(double var_chaste_interface__environment__time, const std::vector & rY);}; // Needs to be included last #include "SerializationExportWrapper.hpp" @@ -84,4 +123,9 @@ namespace boost } -#endif // CELLBONDARENKO_SZIGETI_BETT_KIM_RASMUSSON_2004_APICALFROMCELLMLBACKWARDEULER_HPP_ \ No newline at end of file +#endif // CELLBONDARENKO_SZIGETI_BETT_KIM_RASMUSSON_2004_APICALFROMCELLMLBACKWARDEULER_HPP_ + +#if USING_DEVICE_COMPILER + #include "bondarenko_szigeti_bett_kim_rasmusson_2004_apicalKernels.hpp" + #include "BackwardEulerKernels.hpp" +#endif \ No newline at end of file diff --git a/chaste_codegen/data/tests/chaste_reference_models/BE/dynamic_courtemanche_ramirez_nattel_1998.cpp b/chaste_codegen/data/tests/chaste_reference_models/BE/dynamic_courtemanche_ramirez_nattel_1998.cpp index 169812214..5afae7b17 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/BE/dynamic_courtemanche_ramirez_nattel_1998.cpp +++ b/chaste_codegen/data/tests/chaste_reference_models/BE/dynamic_courtemanche_ramirez_nattel_1998.cpp @@ -22,6 +22,8 @@ #include "HeartConfig.hpp" #include "IsNan.hpp" #include "MathsCustomFunctions.hpp" +#include "ChasteMathDeviceNamespaces.hpp" +#include "ChasteCpuMacros.hpp" #include "ModelFactory.hpp" @@ -36,8 +38,8 @@ bool Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEuler::registered 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_membrane__Cm_converted = CHASTE_CONST(9.9999999999999995e-7) * mParameters[9]; // uF + const double var_chaste_interface__membrane__stim_amplitude_converted = -CHASTE_CONST(0.002) * CHASTE_CAP() / 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 @@ -70,22 +72,22 @@ bool Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEuler::registered 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[2] = CHASTE_CONST(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[4] = CHASTE_CONST(1.8); // (var_standard_ionic_concentrations__Ca_o) [millimolar] + this->mParameters[5] = CHASTE_CONST(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[7] = CHASTE_CONST(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[10] = CHASTE_CONST(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[13] = CHASTE_CONST(0.089999999999999997); // (var_time_independent_potassium_current__g_K1) [nanoS_per_picoF] + this->mParameters[14] = CHASTE_CONST(0.029411764999999999); // (var_rapid_delayed_rectifier_K_current__g_Kr) [nanoS_per_picoF] + this->mParameters[15] = CHASTE_CONST(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] + this->mParameters[17] = CHASTE_CONST(0.16520000000000001); // (var_transient_outward_K_current__g_to) [nanoS_per_picoF] } Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEuler::~Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEuler() @@ -132,7 +134,7 @@ bool Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEuler::registered // 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -165,46 +167,46 @@ bool Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEuler::registered 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_Na_Ca_exchanger_current__K_mCa = CHASTE_CONST(1.3799999999999999); // millimolar + const double var_Na_Ca_exchanger_current__K_mNa = CHASTE_CONST(87.5); // millimolar + const double var_Na_Ca_exchanger_current__K_sat = CHASTE_CONST(0.10000000000000001); // dimensionless + const double var_Na_Ca_exchanger_current__gamma = CHASTE_CONST(0.34999999999999998); // dimensionless + const double var_background_currents__g_B_Ca = CHASTE_CONST(0.0011310000000000001); // nanoS_per_picoF + const double var_background_currents__g_B_Na = CHASTE_CONST(0.00067443750000000002); // nanoS_per_picoF + const double var_membrane__Cm_converted = CHASTE_CONST(9.9999999999999995e-7) * mParameters[9]; // uF + const double var_membrane__F = CHASTE_CONST(96.486699999999999); // coulomb_per_millimole + const double var_membrane__R = CHASTE_CONST(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_L_type_Ca_channel__i_Ca_L_converted = CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * 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 = CHASTE_CONST(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 / (CHASTE_CONST(0.00050000000000000001) + var_chaste_interface__intracellular_ion_concentrations__Ca_i); // picoA + const double var_sodium_potassium_pump__Km_K_o = CHASTE_CONST(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_sodium_potassium_pump__i_NaK_max = CHASTE_CONST(0.59933873999999998); // picoA_per_picoF + const double var_background_currents__E_Ca = CHASTE_CONST(0.5) * var_membrane__R * var_membrane__T * CHASTE_MATH::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_Na_Ca_exchanger_current__i_NaCa = (CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mParameters[4] * CHASTE_MATH::Exp(var_Na_Ca_exchanger_current__gamma * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - CHASTE_MATH::Pow(mParameters[6], 3) * var_chaste_interface__intracellular_ion_concentrations__Ca_i * CHASTE_MATH::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 * CHASTE_MATH::Exp((-1 + var_Na_Ca_exchanger_current__gamma) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (CHASTE_MATH::Pow(var_Na_Ca_exchanger_current__K_mNa, 3) + CHASTE_MATH::Pow(mParameters[6], 3)) * (var_Na_Ca_exchanger_current__K_mCa + mParameters[4])); // picoA + const double var_Na_Ca_exchanger_current__i_NaCa_converted = CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * 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 * CHASTE_MATH::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 var_fast_sodium_current__i_Na = CHASTE_MATH::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 = CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * var_fast_sodium_current__i_Na / var_membrane__Cm_converted; // uA_per_cm2 + const double var_sodium_potassium_pump__sigma = -CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(0.01485884101040119) * mParameters[6]); // dimensionless + const double var_sodium_potassium_pump__f_NaK = 1 / (1 + CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(0.10000000000000001) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) + CHASTE_CONST(0.036499999999999998) * var_sodium_potassium_pump__sigma * CHASTE_MATH::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 + CHASTE_MATH::Pow((var_sodium_potassium_pump__Km_Na_i / var_chaste_interface__intracellular_ion_concentrations__Na_i), CHASTE_CONST(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 * CHASTE_MATH::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 + CHASTE_MATH::Exp(CHASTE_CONST(0.66964285714285721) + CHASTE_CONST(0.044642857142857144) * var_chaste_interface__membrane__V)); // picoA + const double var_rapid_delayed_rectifier_K_current__i_Kr_converted = CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * 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 = CHASTE_MATH::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 = CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * 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 + CHASTE_MATH::Exp(CHASTE_CONST(5.6000000000000005) + CHASTE_CONST(0.070000000000000007) * var_chaste_interface__membrane__V)); // picoA + const double var_time_independent_potassium_current__i_K1_converted = CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * var_time_independent_potassium_current__i_K1 / var_membrane__Cm_converted; // uA_per_cm2 + const double var_transient_outward_K_current__i_to = CHASTE_MATH::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 = CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * var_transient_outward_K_current__i_to / var_membrane__Cm_converted; // uA_per_cm2 + const double var_ultrarapid_delayed_rectifier_K_current__g_Kur = CHASTE_CONST(0.0050000000000000001) + CHASTE_CONST(0.050000000000000003) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.1538461538461537) - CHASTE_CONST(0.076923076923076927) * var_chaste_interface__membrane__V)); // nanoS_per_picoF + const double var_ultrarapid_delayed_rectifier_K_current__i_Kur = CHASTE_MATH::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 + CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * var_background_currents__i_B_Ca + CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * var_background_currents__i_B_Na + CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * var_sarcolemmal_calcium_pump_current__i_CaP + CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * var_sodium_potassium_pump__i_NaK + CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * 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)); @@ -214,7 +216,7 @@ bool Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEuler::registered 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -252,71 +254,71 @@ bool Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEuler::registered 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__CMDN_max = CHASTE_CONST(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_buffers__Km_CMDN = CHASTE_CONST(0.0023800000000000002); // millimolar + const double var_Ca_buffers__Km_CSQN = CHASTE_CONST(0.80000000000000004); // millimolar + const double var_Ca_buffers__Km_TRPN = CHASTE_CONST(0.00050000000000000001); // millimolar + const double var_Ca_buffers__TRPN_max = CHASTE_CONST(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_Ca_uptake_current_by_the_NSR__K_up = CHASTE_CONST(0.00092000000000000003); // millimolar + const double var_Na_Ca_exchanger_current__K_mCa = CHASTE_CONST(1.3799999999999999); // millimolar + const double var_Na_Ca_exchanger_current__K_mNa = CHASTE_CONST(87.5); // millimolar + const double var_Na_Ca_exchanger_current__K_sat = CHASTE_CONST(0.10000000000000001); // dimensionless + const double var_Na_Ca_exchanger_current__gamma = CHASTE_CONST(0.34999999999999998); // dimensionless + const double var_background_currents__g_B_Ca = CHASTE_CONST(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_background_currents__g_B_Na = CHASTE_CONST(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 var_L_type_Ca_channel_f_Ca_gate__f_Ca_infinity = 1 / (1 + CHASTE_CONST(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_intracellular_ion_concentrations__B2 = 1 + var_Ca_buffers__CMDN_max * var_Ca_buffers__Km_CMDN / CHASTE_MATH::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 / CHASTE_MATH::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 = CHASTE_MATH::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_intracellular_ion_concentrations__V_i = CHASTE_CONST(0.68000000000000005) * var_intracellular_ion_concentrations__V_cell; // micrometre_3 + const double var_intracellular_ion_concentrations__V_rel = CHASTE_CONST(0.0047999999999999996) * var_intracellular_ion_concentrations__V_cell; // micrometre_3 + const double var_intracellular_ion_concentrations__V_up = CHASTE_CONST(0.055199999999999999) * var_intracellular_ion_concentrations__V_cell; // micrometre_3 + const double var_membrane__F = CHASTE_CONST(96.486699999999999); // coulomb_per_millimole + const double var_membrane__R = CHASTE_CONST(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_sarcolemmal_calcium_pump_current__i_CaP_max = CHASTE_CONST(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 / (CHASTE_CONST(0.00050000000000000001) + var_chaste_interface__intracellular_ion_concentrations__Ca_i); // picoA + const double var_sodium_potassium_pump__Km_K_o = CHASTE_CONST(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_sodium_potassium_pump__i_NaK_max = CHASTE_CONST(0.59933873999999998); // picoA_per_picoF + const double var_background_currents__E_Ca = CHASTE_CONST(0.5) * var_membrane__R * var_membrane__T * CHASTE_MATH::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 var_Na_Ca_exchanger_current__i_NaCa = (CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mParameters[4] * CHASTE_MATH::Exp(var_Na_Ca_exchanger_current__gamma * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - CHASTE_MATH::Pow(mParameters[6], 3) * var_chaste_interface__intracellular_ion_concentrations__Ca_i * CHASTE_MATH::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 * CHASTE_MATH::Exp((-1 + var_Na_Ca_exchanger_current__gamma) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (CHASTE_MATH::Pow(var_Na_Ca_exchanger_current__K_mNa, 3) + CHASTE_MATH::Pow(mParameters[6], 3)) * (var_Na_Ca_exchanger_current__K_mCa + mParameters[4])); // picoA + const double var_Ca_release_current_from_JSR__Fn = CHASTE_CONST(9.9999999999999998e-13) * var_Ca_release_current_from_JSR__i_rel * var_intracellular_ion_concentrations__V_rel - CHASTE_CONST(4.9999999999999999e-13) * (CHASTE_CONST(0.5) * var_L_type_Ca_channel__i_Ca_L - CHASTE_CONST(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 + CHASTE_MATH::Exp(250 - CHASTE_CONST(731528895391368.0) * var_Ca_release_current_from_JSR__Fn)); // dimensionless + const double var_Ca_release_current_from_JSR_v_gate__tau_v = CHASTE_CONST(1.9099999999999999) + CHASTE_CONST(2.0899999999999999) / (1 + CHASTE_MATH::Exp(250 - CHASTE_CONST(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 + CHASTE_MATH::Exp(50 - CHASTE_CONST(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_fast_sodium_current__E_Na = var_membrane__R * var_membrane__T * CHASTE_MATH::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 var_fast_sodium_current__i_Na = CHASTE_MATH::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 + CHASTE_CONST(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 var_sodium_potassium_pump__sigma = -CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(0.01485884101040119) * mParameters[6]); // dimensionless + const double var_sodium_potassium_pump__f_NaK = 1 / (1 + CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(0.10000000000000001) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) + CHASTE_CONST(0.036499999999999998) * var_sodium_potassium_pump__sigma * CHASTE_MATH::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 + CHASTE_MATH::Pow((var_sodium_potassium_pump__Km_Na_i / var_chaste_interface__intracellular_ion_concentrations__Na_i), CHASTE_CONST(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_time_independent_potassium_current__E_K = var_membrane__R * var_membrane__T * CHASTE_MATH::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_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 + CHASTE_MATH::Exp(CHASTE_CONST(0.66964285714285721) + CHASTE_CONST(0.044642857142857144) * var_chaste_interface__membrane__V)); // picoA + const double var_slow_delayed_rectifier_K_current__i_Ks = CHASTE_MATH::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 + CHASTE_MATH::Exp(CHASTE_CONST(5.6000000000000005) + CHASTE_CONST(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_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 / CHASTE_MATH::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 var_transient_outward_K_current__i_to = CHASTE_MATH::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 = CHASTE_CONST(0.0050000000000000001) + CHASTE_CONST(0.050000000000000003) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.1538461538461537) - CHASTE_CONST(0.076923076923076927) * var_chaste_interface__membrane__V)); // nanoS_per_picoF + const double var_ultrarapid_delayed_rectifier_K_current__i_Kur = CHASTE_MATH::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; @@ -332,7 +334,7 @@ bool Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEuler::registered 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -369,117 +371,117 @@ bool Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEuler::registered 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_x1 = CHASTE_MATH::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_x4 = CHASTE_CONST(70577.907827359188) * var_x3; + const double var_x5 = CHASTE_MATH::Exp(-CHASTE_CONST(0.024332874996168673) * var_chaste_interface__membrane__V); + const double var_x6 = CHASTE_MATH::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_x8 = CHASTE_MATH::Exp(CHASTE_CONST(0.013102317305629283) * var_chaste_interface__membrane__V); + const double var_x9 = -var_x7 * var_chaste_interface__intracellular_ion_concentrations__Ca_i + var_x8 * CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mParameters[4]; + const double var_x10 = 1 / (1 + CHASTE_CONST(0.10000000000000001) * var_x5); + const double var_x11 = 1 / (CHASTE_CONST(669921.875) + var_x6); + const double var_x12 = 1 / (CHASTE_CONST(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_x16 = var_x0 * var_x4 + CHASTE_CONST(0.75816552477322585) * var_x14 * var_x9 - CHASTE_CONST(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 = CHASTE_MATH::Exp(250 - var_x16); const double var_x18 = 1 + var_x17; - const double var_x19 = var_x17 / pow(var_x18, 2); + const double var_x19 = var_x17 / CHASTE_MATH::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_x23 = CHASTE_CONST(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_x26 = var_x25 * (-CHASTE_CONST(123.20189777564919) + CHASTE_CONST(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_x29 = var_x4 + CHASTE_CONST(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_x31 = var_x8 * CHASTE_MATH::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_x34 = 1 / (CHASTE_CONST(1.9099999999999999) + CHASTE_CONST(2.0899999999999999) * var_x33); + const double var_x35 = CHASTE_MATH::Exp(50 - var_x16); const double var_x36 = 1 + var_x35; - const double var_x37 = var_x35 / pow(var_x36, 2); + const double var_x37 = var_x35 / CHASTE_MATH::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_x39 = (1 - 1 / var_x36 - var_chaste_interface__Ca_release_current_from_JSR_v_gate__v) / CHASTE_MATH::Pow((CHASTE_CONST(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_x41 = CHASTE_CONST(33769.333888688605) * var_x40; + const double var_x42 = CHASTE_CONST(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_x44 = CHASTE_CONST(0.0023800000000000002) + var_chaste_interface__intracellular_ion_concentrations__Ca_i; + const double var_x45 = CHASTE_CONST(0.00050000000000000001) + var_chaste_interface__intracellular_ion_concentrations__Ca_i; + const double var_x46 = CHASTE_MATH::Pow(var_x45, (-2)); + const double var_x47 = 1 + CHASTE_CONST(0.00011900000000000002) / CHASTE_MATH::Pow(var_x44, 2) + CHASTE_CONST(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_x51 = CHASTE_CONST(1.0426301393780176e-7) * mParameters[9] / var_x45; + const double var_x52 = 1 + CHASTE_CONST(0.00092000000000000003) * var_x50; + const double var_x53 = mParameters[2] / (CHASTE_MATH::Pow(var_x52, 2) * CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Ca_i, 2)); + const double var_x54 = CHASTE_CONST(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_x56 = CHASTE_CONST(0.80000000000000004) + var_chaste_interface__intracellular_ion_concentrations__Ca_rel; + const double var_x57 = CHASTE_MATH::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_x59 = CHASTE_CONST(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_x61 = CHASTE_MATH::Pow(var_x60, CHASTE_CONST(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))); + const double var_x63 = var_x61 * var_x62 * mParameters[5] / ((CHASTE_CONST(1.5) + mParameters[5]) * CHASTE_MATH::Pow((CHASTE_CONST(0.031622776601683791) + var_x61), 2) * (1 + CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(0.0037435192301797956) * var_chaste_interface__membrane__V) + CHASTE_CONST(0.036499999999999998) * (-CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(0.01485884101040119) * mParameters[6])) * CHASTE_MATH::Exp(-CHASTE_CONST(0.037435192301797954) * var_chaste_interface__membrane__V))); - rJacobian[0][0] = 1.0 - (mDt * (-0.125 + 17644.476956839797 * var_x21)); + rJacobian[0][0] = 1.0 - (mDt * (-CHASTE_CONST(0.125) + CHASTE_CONST(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][2] = -(mDt * (-CHASTE_CONST(0.125) * var_x27)); + rJacobian[0][3] = -(mDt * (-CHASTE_CONST(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[0][7] = -(mDt * (CHASTE_CONST(0.28431207178995971) * var_x19 * var_x32)); + rJacobian[1][0] = -(mDt * (-CHASTE_CONST(141155.81565471838) * var_x20 * var_x38 - CHASTE_CONST(67538.66777737721) * var_x21 * var_x39)); + rJacobian[1][1] = 1.0 - (mDt * (var_x34 * (-1 - CHASTE_CONST(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[1][7] = -(mDt * (-CHASTE_CONST(1.0882758728802286) * var_x32 * var_x40 - CHASTE_CONST(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][3] = -(mDt * (-CHASTE_CONST(0.00035) * var_x43 / CHASTE_MATH::Pow((CHASTE_CONST(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][0] = -(mDt * (CHASTE_CONST(0.014117647058823526) * var_x20 * var_x48)); + rJacobian[3][1] = -(mDt * (CHASTE_CONST(0.0070588235294117632) * var_x22 * var_x48)); + rJacobian[3][2] = -(mDt * (var_x24 * var_x49 * (CHASTE_CONST(2.4643985112571321e-5) - CHASTE_CONST(3.7913823250109726e-7) * var_chaste_interface__membrane__V))); + rJacobian[3][3] = 1.0 - (mDt * (var_x48 * (-var_x51 - var_x54 - CHASTE_CONST(7.4682352941176462e-5) * var_x53 - CHASTE_CONST(7.5827646500219453e-7) * var_x28 - CHASTE_CONST(5.7273025005690459e-9) * var_x50 * mParameters[9] + CHASTE_CONST(1.0426301393780176e-7) * var_x46 * var_chaste_interface__intracellular_ion_concentrations__Ca_i * mParameters[9]) + (CHASTE_CONST(0.00023800000000000004) / CHASTE_MATH::Pow(var_x44, 3) + CHASTE_CONST(7.0000000000000007e-5) / CHASTE_MATH::Pow(var_x45, 3)) * (-var_x51 * var_chaste_interface__intracellular_ion_concentrations__Ca_i - CHASTE_CONST(0.081176470588235281) * mParameters[2] / var_x52 - CHASTE_CONST(4.2880534095874102e-10) * (-CHASTE_CONST(13.356415961992688) * CHASTE_MATH::Log(var_x50 * mParameters[4]) + var_chaste_interface__membrane__V) * mParameters[9] + CHASTE_CONST(0.0054117647058823529) * mParameters[0] * mParameters[2] * var_chaste_interface__intracellular_ion_concentrations__Ca_up - CHASTE_CONST(3.7913823250109726e-7) * var_x15 * var_x25 * var_chaste_interface__L_type_Ca_channel_f_Ca_gate__f_Ca + CHASTE_CONST(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 + CHASTE_CONST(7.5827646500219453e-7) * var_x10 * var_x11 * var_x12 * var_x9 * mParameters[16] * mParameters[9]) / CHASTE_MATH::Pow(var_x47, 2))); rJacobian[3][4] = -(mDt * (var_x48 * var_x54)); - rJacobian[3][5] = -(mDt * (0.0054117647058823529 * var_x48 * var_x55)); + rJacobian[3][5] = -(mDt * (CHASTE_CONST(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[3][7] = -(mDt * (CHASTE_CONST(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][4] = 1.0 - (mDt * (var_x58 * (-CHASTE_CONST(0.0055555555555555558) - var_x3) + CHASTE_CONST(0.25) * (CHASTE_CONST(0.0055555555555555558) * var_chaste_interface__intracellular_ion_concentrations__Ca_up - CHASTE_CONST(0.0055555555555555558) * var_chaste_interface__intracellular_ion_concentrations__Ca_rel - var_x0 * var_x3) / (CHASTE_MATH::Pow(var_x56, 3) * CHASTE_MATH::Pow((CHASTE_CONST(0.125) + var_x57), 2)))); + rJacobian[4][5] = -(mDt * (CHASTE_CONST(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][3] = -(mDt * (CHASTE_CONST(0.00092000000000000003) * var_x53)); + rJacobian[5][4] = -(mDt * (CHASTE_CONST(0.00048309178743961351))); + rJacobian[5][5] = 1.0 - (mDt * (-CHASTE_CONST(0.00048309178743961351) - CHASTE_CONST(0.066666666666666666) * var_x55)); rJacobian[5][6] = 0.0; rJacobian[5][7] = 0.0; rJacobian[6][0] = 0.0; @@ -488,23 +490,23 @@ bool Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEuler::registered 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[6][6] = 1.0 - (mDt * ((-var_x59 * mParameters[13] / (1 + CHASTE_MATH::Exp(CHASTE_CONST(5.6000000000000005) + CHASTE_CONST(0.070000000000000007) * var_chaste_interface__membrane__V)) - var_x59 * CHASTE_MATH::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 + CHASTE_MATH::Exp(CHASTE_CONST(0.66964285714285721) + CHASTE_CONST(0.044642857142857144) * var_chaste_interface__membrane__V)) - var_x59 * CHASTE_MATH::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 * CHASTE_MATH::Pow(var_chaste_interface__ultrarapid_delayed_rectifier_K_current_ua_gate__ua, 3) * (CHASTE_CONST(0.0050000000000000001) + CHASTE_CONST(0.050000000000000003) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.1538461538461537) - CHASTE_CONST(0.076923076923076927) * var_chaste_interface__membrane__V))) * var_chaste_interface__ultrarapid_delayed_rectifier_K_current_ui_gate__ui) * mParameters[3])); + rJacobian[6][7] = -(mDt * (CHASTE_CONST(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][3] = -(mDt * (CHASTE_CONST(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])); + rJacobian[7][7] = 1.0 - (mDt * ((-CHASTE_CONST(6.4671426571328296e-8) * var_x63 - CHASTE_CONST(6.8244881850197506e-6) * var_x32 - CHASTE_CONST(1.3661211601158392e-8) * var_x62 - CHASTE_CONST(2.0255711761517402e-5) * var_x62 * CHASTE_MATH::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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -537,40 +539,40 @@ bool Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEuler::registered 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_Na_Ca_exchanger_current__K_mCa = CHASTE_CONST(1.3799999999999999); // millimolar + const double var_Na_Ca_exchanger_current__K_mNa = CHASTE_CONST(87.5); // millimolar + const double var_Na_Ca_exchanger_current__K_sat = CHASTE_CONST(0.10000000000000001); // dimensionless + const double var_Na_Ca_exchanger_current__gamma = CHASTE_CONST(0.34999999999999998); // dimensionless + const double var_background_currents__g_B_Ca = CHASTE_CONST(0.0011310000000000001); // nanoS_per_picoF + const double var_background_currents__g_B_Na = CHASTE_CONST(0.00067443750000000002); // nanoS_per_picoF + const double var_membrane__Cm_converted = CHASTE_CONST(9.9999999999999995e-7) * mParameters[9]; // uF + const double var_membrane__F = CHASTE_CONST(96.486699999999999); // coulomb_per_millimole + const double var_membrane__R = CHASTE_CONST(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_membrane__i_st_converted = CHASTE_STIM(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_membrane__i_st = 1000000 * var_membrane__Cm_converted * var_membrane__i_st_converted / CHASTE_CAP(); // picoA + const double var_sarcolemmal_calcium_pump_current__i_CaP_max = CHASTE_CONST(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 / (CHASTE_CONST(0.00050000000000000001) + var_chaste_interface__intracellular_ion_concentrations__Ca_i); // picoA + const double var_sodium_potassium_pump__Km_K_o = CHASTE_CONST(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_sodium_potassium_pump__i_NaK_max = CHASTE_CONST(0.59933873999999998); // picoA_per_picoF + const double var_background_currents__E_Ca = CHASTE_CONST(0.5) * var_membrane__R * var_membrane__T * CHASTE_MATH::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_Na_Ca_exchanger_current__i_NaCa = (CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mParameters[4] * CHASTE_MATH::Exp(var_Na_Ca_exchanger_current__gamma * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - CHASTE_MATH::Pow(mParameters[6], 3) * var_chaste_interface__intracellular_ion_concentrations__Ca_i * CHASTE_MATH::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 * CHASTE_MATH::Exp((-1 + var_Na_Ca_exchanger_current__gamma) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (CHASTE_MATH::Pow(var_Na_Ca_exchanger_current__K_mNa, 3) + CHASTE_MATH::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 * CHASTE_MATH::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 var_fast_sodium_current__i_Na = CHASTE_MATH::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 = -CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(0.01485884101040119) * mParameters[6]); // dimensionless + const double var_sodium_potassium_pump__f_NaK = 1 / (1 + CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(0.10000000000000001) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) + CHASTE_CONST(0.036499999999999998) * var_sodium_potassium_pump__sigma * CHASTE_MATH::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 + CHASTE_MATH::Pow((var_sodium_potassium_pump__Km_Na_i / var_chaste_interface__intracellular_ion_concentrations__Na_i), CHASTE_CONST(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 * CHASTE_MATH::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 + CHASTE_MATH::Exp(CHASTE_CONST(0.66964285714285721) + CHASTE_CONST(0.044642857142857144) * var_chaste_interface__membrane__V)); // picoA + const double var_slow_delayed_rectifier_K_current__i_Ks = CHASTE_MATH::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 + CHASTE_MATH::Exp(CHASTE_CONST(5.6000000000000005) + CHASTE_CONST(0.070000000000000007) * var_chaste_interface__membrane__V)); // picoA + const double var_transient_outward_K_current__i_to = CHASTE_MATH::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 = CHASTE_CONST(0.0050000000000000001) + CHASTE_CONST(0.050000000000000003) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.1538461538461537) - CHASTE_CONST(0.076923076923076927) * var_chaste_interface__membrane__V)); // nanoS_per_picoF + const double var_ultrarapid_delayed_rectifier_K_current__i_Kur = CHASTE_MATH::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; @@ -580,7 +582,7 @@ bool Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEuler::registered { // Time units: millisecond std::vector& rY = rGetStateVariables(); - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -607,49 +609,49 @@ bool Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEuler::registered 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_Ca_release_current_from_JSR_w_gate__tau_w = ((CHASTE_MATH::Abs(-CHASTE_CONST(7.9000000000000004) + var_chaste_interface__membrane__V) < CHASTE_CONST(1.0e-10)) ? (CHASTE_CONST(0.92307692307692313)) : (6 * (1 - CHASTE_MATH::Exp(CHASTE_CONST(1.5800000000000001) - CHASTE_CONST(0.20000000000000001) * var_chaste_interface__membrane__V)) / ((1 + CHASTE_CONST(0.29999999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(1.5800000000000001) - CHASTE_CONST(0.20000000000000001) * var_chaste_interface__membrane__V)) * (-CHASTE_CONST(7.9000000000000004) + var_chaste_interface__membrane__V)))); + const double var_Ca_release_current_from_JSR_w_gate__w_infinity = 1 - 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(2.3529411764705883) - CHASTE_CONST(0.058823529411764705) * var_chaste_interface__membrane__V)); + const double var_L_type_Ca_channel_d_gate__d_infinity = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.25) - CHASTE_CONST(0.125) * var_chaste_interface__membrane__V)); + const double var_L_type_Ca_channel_d_gate__tau_d = ((CHASTE_MATH::Abs(10 + var_chaste_interface__membrane__V) < CHASTE_CONST(1.0e-10)) ? (CHASTE_CONST(4.5789999999999997) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.6025641025641024) - CHASTE_CONST(0.16025641025641024) * var_chaste_interface__membrane__V))) : (CHASTE_CONST(28.571428571428569) * (1 - CHASTE_MATH::Exp(-CHASTE_CONST(1.6025641025641024) - CHASTE_CONST(0.16025641025641024) * var_chaste_interface__membrane__V)) / ((1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.6025641025641024) - CHASTE_CONST(0.16025641025641024) * var_chaste_interface__membrane__V)) * (10 + var_chaste_interface__membrane__V)))); + const double var_L_type_Ca_channel_f_gate__f_infinity = CHASTE_MATH::Exp(-CHASTE_CONST(4.057971014492753) - CHASTE_CONST(0.14492753623188406) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(4.057971014492753) - CHASTE_CONST(0.14492753623188406) * var_chaste_interface__membrane__V)); + const double var_L_type_Ca_channel_f_gate__tau_f = 9 / (CHASTE_CONST(0.02) + CHASTE_CONST(0.019699999999999999) * CHASTE_MATH::Exp(-CHASTE_CONST(0.113569) * CHASTE_MATH::Pow((1 + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V), 2))); + const double var_fast_sodium_current_h_gate__alpha_h = ((var_chaste_interface__membrane__V < -40) ? (CHASTE_CONST(0.13500000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(11.764705882352942) + CHASTE_CONST(0.14705882352941177) * mParameters[12] - CHASTE_CONST(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 * CHASTE_MATH::Exp(CHASTE_CONST(0.34999999999999998) * var_chaste_interface__membrane__V - CHASTE_CONST(0.34999999999999998) * mParameters[12]) + CHASTE_CONST(3.5600000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.079000000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.079000000000000001) * mParameters[12])) : (CHASTE_CONST(7.6923076923076916) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.96036036036036043) + CHASTE_CONST(0.0900900900900901) * mParameters[12] - CHASTE_CONST(0.0900900900900901) * var_chaste_interface__membrane__V)))); + const double var_fast_sodium_current_h_gate__h_inf = CHASTE_CONST(0.01) * mParameters[11] + (1 - CHASTE_CONST(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__alpha_j = ((var_chaste_interface__membrane__V < -40) ? ((CHASTE_CONST(37.780000000000001) + var_chaste_interface__membrane__V) * (-127140 * CHASTE_MATH::Exp(CHASTE_CONST(0.24440000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.24440000000000001) * mParameters[12]) - CHASTE_CONST(3.4740000000000003e-5) * CHASTE_MATH::Exp(CHASTE_CONST(0.043909999999999998) * mParameters[12] - CHASTE_CONST(0.043909999999999998) * var_chaste_interface__membrane__V)) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(24.640530000000002) + CHASTE_CONST(0.311) * var_chaste_interface__membrane__V - CHASTE_CONST(0.311) * mParameters[12]))) : (0)); + const double var_fast_sodium_current_j_gate__beta_j = ((var_chaste_interface__membrane__V < -40) ? (CHASTE_CONST(0.1212) * CHASTE_MATH::Exp(CHASTE_CONST(0.01052) * mParameters[12] - CHASTE_CONST(0.01052) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(5.5312920000000005) + CHASTE_CONST(0.13780000000000001) * mParameters[12] - CHASTE_CONST(0.13780000000000001) * var_chaste_interface__membrane__V))) : (CHASTE_CONST(0.29999999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(2.5349999999999999e-7) * mParameters[12] - CHASTE_CONST(2.5349999999999999e-7) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.2000000000000002) + CHASTE_CONST(0.10000000000000001) * mParameters[12] - CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V)))); + const double var_fast_sodium_current_j_gate__j_inf = CHASTE_CONST(0.01) * mParameters[11] + (1 - CHASTE_CONST(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__alpha_m = ((var_chaste_interface__membrane__V == (-CHASTE_CONST(47.130000000000003))) ? (CHASTE_CONST(3.2000000000000002)) : (CHASTE_CONST(0.32000000000000001) * (CHASTE_CONST(47.130000000000003) + var_chaste_interface__membrane__V) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(4.7130000000000001) - CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V)))); + const double var_fast_sodium_current_m_gate__beta_m = CHASTE_CONST(0.080000000000000002) * CHASTE_MATH::Exp(-CHASTE_CONST(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__alpha_xr = ((CHASTE_MATH::Abs(CHASTE_CONST(14.1) + var_chaste_interface__membrane__V) < CHASTE_CONST(1.0e-10)) ? (CHASTE_CONST(0.0015)) : (CHASTE_CONST(0.00029999999999999997) * (CHASTE_CONST(14.1) + var_chaste_interface__membrane__V) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(2.8199999999999998) - CHASTE_CONST(0.20000000000000001) * var_chaste_interface__membrane__V)))); + const double var_rapid_delayed_rectifier_K_current_xr_gate__beta_xr = ((CHASTE_MATH::Abs(-CHASTE_CONST(3.3328000000000002) + var_chaste_interface__membrane__V) < CHASTE_CONST(1.0e-10)) ? (CHASTE_CONST(0.00037836118)) : (CHASTE_CONST(7.3898000000000003e-5) * (-CHASTE_CONST(3.3328000000000002) + var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.65046743564221166) + CHASTE_CONST(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_rapid_delayed_rectifier_K_current_xr_gate__xr_infinity = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.1692307692307691) - CHASTE_CONST(0.15384615384615385) * var_chaste_interface__membrane__V)); + const double var_slow_delayed_rectifier_K_current_xs_gate__alpha_xs = ((CHASTE_MATH::Abs(-CHASTE_CONST(19.899999999999999) + var_chaste_interface__membrane__V) < CHASTE_CONST(1.0e-10)) ? (CHASTE_CONST(0.00068000000000000005)) : (CHASTE_CONST(4.0000000000000003e-5) * (-CHASTE_CONST(19.899999999999999) + var_chaste_interface__membrane__V) / (1 - CHASTE_MATH::Exp(CHASTE_CONST(1.1705882352941175) - CHASTE_CONST(0.058823529411764705) * var_chaste_interface__membrane__V)))); + const double var_slow_delayed_rectifier_K_current_xs_gate__beta_xs = ((CHASTE_MATH::Abs(-CHASTE_CONST(19.899999999999999) + var_chaste_interface__membrane__V) < CHASTE_CONST(1.0e-10)) ? (CHASTE_CONST(0.00031500000000000001)) : (CHASTE_CONST(3.4999999999999997e-5) * (-CHASTE_CONST(19.899999999999999) + var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.2111111111111108) + CHASTE_CONST(0.1111111111111111) * var_chaste_interface__membrane__V)))); + const double var_slow_delayed_rectifier_K_current_xs_gate__tau_xs = CHASTE_CONST(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 = CHASTE_MATH::Pow((1 + CHASTE_MATH::Exp(CHASTE_CONST(1.5669291338582676) - CHASTE_CONST(0.07874015748031496) * var_chaste_interface__membrane__V)), (-CHASTE_CONST(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__alpha_oa = CHASTE_CONST(0.65000000000000002) / (CHASTE_MATH::Exp(CHASTE_CONST(0.50847457627118642) - CHASTE_CONST(0.016949152542372881) * var_chaste_interface__membrane__V) + CHASTE_MATH::Exp(-CHASTE_CONST(1.1764705882352942) - CHASTE_CONST(0.11764705882352941) * var_chaste_interface__membrane__V)); + const double var_transient_outward_K_current_oa_gate__beta_oa = CHASTE_CONST(0.65000000000000002) / (CHASTE_CONST(2.5) + CHASTE_MATH::Exp(CHASTE_CONST(4.8235294117647056) + CHASTE_CONST(0.058823529411764705) * var_chaste_interface__membrane__V)); + const double var_transient_outward_K_current_oa_gate__oa_infinity = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.1670467502850628) - CHASTE_CONST(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__alpha_oi = 1 / (CHASTE_CONST(18.530000000000001) + CHASTE_MATH::Exp(CHASTE_CONST(10.383561643835618) + CHASTE_CONST(0.091324200913242018) * var_chaste_interface__membrane__V)); + const double var_transient_outward_K_current_oi_gate__beta_oi = 1 / (CHASTE_CONST(35.560000000000002) + CHASTE_MATH::Exp(-CHASTE_CONST(0.16935483870967738) - CHASTE_CONST(0.13440860215053763) * var_chaste_interface__membrane__V)); + const double var_transient_outward_K_current_oi_gate__oi_infinity = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(8.1320754716981138) + CHASTE_CONST(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__alpha_ua = CHASTE_CONST(0.65000000000000002) / (CHASTE_MATH::Exp(CHASTE_CONST(0.50847457627118642) - CHASTE_CONST(0.016949152542372881) * var_chaste_interface__membrane__V) + CHASTE_MATH::Exp(-CHASTE_CONST(1.1764705882352942) - CHASTE_CONST(0.11764705882352941) * var_chaste_interface__membrane__V)); + const double var_ultrarapid_delayed_rectifier_K_current_ua_gate__beta_ua = CHASTE_CONST(0.65000000000000002) / (CHASTE_CONST(2.5) + CHASTE_MATH::Exp(CHASTE_CONST(4.8235294117647056) + CHASTE_CONST(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_ua_gate__ua_infinity = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.15625) - CHASTE_CONST(0.10416666666666667) * var_chaste_interface__membrane__V)); + const double var_ultrarapid_delayed_rectifier_K_current_ui_gate__alpha_ui = 1 / (21 + CHASTE_MATH::Exp(CHASTE_CONST(6.6071428571428568) - CHASTE_CONST(0.035714285714285712) * var_chaste_interface__membrane__V)); + const double var_ultrarapid_delayed_rectifier_K_current_ui_gate__beta_ui = 1 / CHASTE_MATH::Exp(CHASTE_CONST(9.875) - CHASTE_CONST(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)); + const double var_ultrarapid_delayed_rectifier_K_current_ui_gate__ui_infinity = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.6189956331877728) + CHASTE_CONST(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)); @@ -682,7 +684,7 @@ bool Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEuler::registered { // Inputs: // Time units: millisecond - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -720,39 +722,39 @@ bool Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEuler::registered // 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_Na_Ca_exchanger_current__K_mCa = CHASTE_CONST(1.3799999999999999); // millimolar + const double var_Na_Ca_exchanger_current__K_mNa = CHASTE_CONST(87.5); // millimolar + const double var_Na_Ca_exchanger_current__K_sat = CHASTE_CONST(0.10000000000000001); // dimensionless + const double var_Na_Ca_exchanger_current__gamma = CHASTE_CONST(0.34999999999999998); // dimensionless + const double var_Ca_release_current_from_JSR__i_rel = CHASTE_MATH::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 = CHASTE_CONST(9.9999999999999995e-7) * mParameters[9]; // uF + const double var_membrane__F = CHASTE_CONST(96.486699999999999); // coulomb_per_millimole + const double var_membrane__R = CHASTE_CONST(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_L_type_Ca_channel__i_Ca_L_converted = CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * 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 / (CHASTE_CONST(0.02) + CHASTE_CONST(0.019699999999999999) * CHASTE_MATH::Exp(-CHASTE_CONST(0.113569) * CHASTE_MATH::Pow((1 + CHASTE_CONST(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) ? (CHASTE_CONST(0.13500000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(11.764705882352942) + CHASTE_CONST(0.14705882352941177) * mParameters[12] - CHASTE_CONST(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 * CHASTE_MATH::Exp(CHASTE_CONST(0.34999999999999998) * var_chaste_interface__membrane__V - CHASTE_CONST(0.34999999999999998) * mParameters[12]) + CHASTE_CONST(3.5600000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.079000000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.079000000000000001) * mParameters[12])) : (CHASTE_CONST(7.6923076923076916) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.96036036036036043) + CHASTE_CONST(0.0900900900900901) * mParameters[12] - CHASTE_CONST(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__alpha_j = ((var_chaste_interface__membrane__V < -40) ? ((CHASTE_CONST(37.780000000000001) + var_chaste_interface__membrane__V) * (-127140 * CHASTE_MATH::Exp(CHASTE_CONST(0.24440000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.24440000000000001) * mParameters[12]) - CHASTE_CONST(3.4740000000000003e-5) * CHASTE_MATH::Exp(CHASTE_CONST(0.043909999999999998) * mParameters[12] - CHASTE_CONST(0.043909999999999998) * var_chaste_interface__membrane__V)) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(24.640530000000002) + CHASTE_CONST(0.311) * var_chaste_interface__membrane__V - CHASTE_CONST(0.311) * mParameters[12]))) : (0)); // per_millisecond + const double var_fast_sodium_current_j_gate__beta_j = ((var_chaste_interface__membrane__V < -40) ? (CHASTE_CONST(0.1212) * CHASTE_MATH::Exp(CHASTE_CONST(0.01052) * mParameters[12] - CHASTE_CONST(0.01052) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(5.5312920000000005) + CHASTE_CONST(0.13780000000000001) * mParameters[12] - CHASTE_CONST(0.13780000000000001) * var_chaste_interface__membrane__V))) : (CHASTE_CONST(0.29999999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(2.5349999999999999e-7) * mParameters[12] - CHASTE_CONST(2.5349999999999999e-7) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.2000000000000002) + CHASTE_CONST(0.10000000000000001) * mParameters[12] - CHASTE_CONST(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 + const double var_membrane__i_st_converted = CHASTE_STIM(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_Na_Ca_exchanger_current__i_NaCa = (CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mParameters[4] * CHASTE_MATH::Exp(var_Na_Ca_exchanger_current__gamma * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - CHASTE_MATH::Pow(mParameters[6], 3) * var_chaste_interface__intracellular_ion_concentrations__Ca_i * CHASTE_MATH::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 * CHASTE_MATH::Exp((-1 + var_Na_Ca_exchanger_current__gamma) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (CHASTE_MATH::Pow(var_Na_Ca_exchanger_current__K_mNa, 3) + CHASTE_MATH::Pow(mParameters[6], 3)) * (var_Na_Ca_exchanger_current__K_mCa + mParameters[4])); // picoA + const double var_Na_Ca_exchanger_current__i_NaCa_converted = CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * 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 * CHASTE_MATH::Log(mParameters[6] / var_chaste_interface__intracellular_ion_concentrations__Na_i) / var_membrane__F; // millivolt + const double var_fast_sodium_current__i_Na = CHASTE_MATH::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 = CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * 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 * CHASTE_MATH::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 + CHASTE_MATH::Exp(CHASTE_CONST(0.66964285714285721) + CHASTE_CONST(0.044642857142857144) * var_chaste_interface__membrane__V)); // picoA + const double var_rapid_delayed_rectifier_K_current__i_Kr_converted = CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * 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 = CHASTE_MATH::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 = CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * 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 + CHASTE_MATH::Exp(CHASTE_CONST(5.6000000000000005) + CHASTE_CONST(0.070000000000000007) * var_chaste_interface__membrane__V)); // picoA + const double var_time_independent_potassium_current__i_K1_converted = CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * var_time_independent_potassium_current__i_K1 / var_membrane__Cm_converted; // uA_per_cm2 + const double var_transient_outward_K_current__i_to = CHASTE_MATH::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 = CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * 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; diff --git a/chaste_codegen/data/tests/chaste_reference_models/BE/dynamic_courtemanche_ramirez_nattel_1998.hpp b/chaste_codegen/data/tests/chaste_reference_models/BE/dynamic_courtemanche_ramirez_nattel_1998.hpp index 40e71e175..dab68f8af 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/BE/dynamic_courtemanche_ramirez_nattel_1998.hpp +++ b/chaste_codegen/data/tests/chaste_reference_models/BE/dynamic_courtemanche_ramirez_nattel_1998.hpp @@ -17,8 +17,16 @@ #include #include "AbstractDynamicallyLoadableEntity.hpp" #include "AbstractStimulusFunction.hpp" +#if USING_DEVICE_COMPILER +#include "StimulusEvaluatorCuda.hpp" +#endif #include "AbstractBackwardEulerCardiacCell.hpp" +#if USING_DEVICE_COMPILER +template +class BackwardEulerKernelLauncher; // Forward declare to hide CUDA-specifics from standard C++ compiler +#endif + class Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEuler : public AbstractBackwardEulerCardiacCell<8>, public AbstractDynamicallyLoadableEntity { friend class boost::serialization::access; @@ -40,19 +48,50 @@ class Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEuler : public Ab 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: +#if USING_DEVICE_COMPILER + template using SolverKernelLauncher = BackwardEulerKernelLauncher; + static constexpr unsigned TOTAL_SIZE = 21u; + static constexpr unsigned NONLINEAR_SIZE = 8u; +#endif 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(boost::shared_ptr /* unused */, 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: + 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]); + +#if USING_DEVICE_COMPILER + template + DEVICE + static void ComputeResidualDevice(ValueType var_chaste_interface__environment__time, const ValueType rCurrentGuess[NONLINEAR_SIZE], const ValueType rY[], ValueType rResidual[NONLINEAR_SIZE], ValueType mDt, const ValueType mParameters[], bool mSetVoltageDerivativeToZero, ValueType mFixedVoltage, ValueType capacitance, const DeviceStimulusFunctor stim); + + template + DEVICE + static void ComputeJacobianDevice(ValueType var_chaste_interface__environment__time, const ValueType rCurrentGuess[NONLINEAR_SIZE], const ValueType rY[], ValueType rJacobian[NONLINEAR_SIZE][NONLINEAR_SIZE], ValueType mDt, const ValueType mParameters[], bool mSetVoltageDerivativeToZero, ValueType mFixedVoltage, ValueType capacitance, const DeviceStimulusFunctor stim); + template + DEVICE + static void UpdateTransmembranePotentialDevice(ValueType var_chaste_interface__environment__time, ValueType rY[], ValueType mDt, const ValueType mParameters[], bool mSetVoltageDerivativeToZero, ValueType mFixedVoltage, DeviceStimulusFunctor stim, ValueType capacitance); + + template + DEVICE + static void SolveClosedFormVarsDevice(ValueType rY[TOTAL_SIZE], ValueType mDt, const ValueType mParameters[], bool mSetVoltageDerivativeToZero, ValueType mFixedVoltage, ValueType capacitance); + + template + DEVICE + static void FillInitialGuessDevice(ValueType _guess[NONLINEAR_SIZE], const ValueType rY[TOTAL_SIZE]); + + template + DEVICE + static void ScatterSolutionDevice(const ValueType _guess[NONLINEAR_SIZE], ValueType rY[TOTAL_SIZE]); +#endif +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); -}; + std::vector ComputeDerivedQuantities(double var_chaste_interface__environment__time, const std::vector & rY);}; // Needs to be included last #include "SerializationExportWrapper.hpp" @@ -87,4 +126,9 @@ namespace boost } -#endif // DYNAMICCOURTEMANCHE_RAMIREZ_NATTEL_1998FROMCELLMLBACKWARDEULER_HPP_ \ No newline at end of file +#endif // DYNAMICCOURTEMANCHE_RAMIREZ_NATTEL_1998FROMCELLMLBACKWARDEULER_HPP_ + +#if USING_DEVICE_COMPILER + #include "dynamic_courtemanche_ramirez_nattel_1998Kernels.hpp" + #include "BackwardEulerKernels.hpp" +#endif \ No newline at end of file diff --git a/chaste_codegen/data/tests/chaste_reference_models/BE/grandi_pasqualini_bers_2010_ssBackwardEuler.cpp b/chaste_codegen/data/tests/chaste_reference_models/BE/grandi_pasqualini_bers_2010_ssBackwardEuler.cpp index 8bc5a2974..63f1f76bd 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/BE/grandi_pasqualini_bers_2010_ssBackwardEuler.cpp +++ b/chaste_codegen/data/tests/chaste_reference_models/BE/grandi_pasqualini_bers_2010_ssBackwardEuler.cpp @@ -22,6 +22,8 @@ #include "HeartConfig.hpp" #include "IsNan.hpp" #include "MathsCustomFunctions.hpp" +#include "ChasteMathDeviceNamespaces.hpp" +#include "ChasteCpuMacros.hpp" #include "ModelFactory.hpp" @@ -36,7 +38,7 @@ bool Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler::registered = Mod 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_amplitude_converted = -CHASTE_CONST(9.5) * CHASTE_CAP(); // 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 @@ -67,29 +69,29 @@ bool Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler::registered = Mod // 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[0] = CHASTE_CONST(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[2] = CHASTE_CONST(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[5] = CHASTE_CONST(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[7] = CHASTE_CONST(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[11] = CHASTE_CONST(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[16] = CHASTE_CONST(0.34999999999999998); // (var_I_Ki__g_ki_factor) [mS_per_uF] + this->mParameters[17] = CHASTE_CONST(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[20] = CHASTE_CONST(4.5); // (var_parameters__IbarNCX) [uA_per_uF] + this->mParameters[21] = CHASTE_CONST(1.8); // (var_parameters__IbarNaK) [uA_per_uF] + this->mParameters[22] = CHASTE_CONST(1.3809999999999999e-10); // (var_parameters__Cmem) [farad] this->mParameters[23] = 310; // (var_parameters__Temp) [kelvin] } @@ -137,7 +139,7 @@ bool Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler::registered = Mod // 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]); + double var_chaste_interface__membrane_potential__V_m = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -180,112 +182,112 @@ bool Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler::registered = Mod 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_I_Ks__gks_junc = CHASTE_CONST(0.0035000000000000001); // mS_per_uF + const double var_I_Ks__gks_sl = CHASTE_CONST(0.0035000000000000001); // mS_per_uF + const double var_I_Kp__kp_kp = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(7.4880000000000004) - CHASTE_CONST(0.16722408026755853) * var_chaste_interface__membrane_potential__V_m)); // dimensionless + const double var_I_Kr__rkr = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(3.0833333333333335) + CHASTE_CONST(0.041666666666666664) * var_chaste_interface__membrane_potential__V_m)); // dimensionless + const double var_parameters__Fjunc = CHASTE_CONST(0.11); // dimensionless + const double var_parameters__Fjunc_CaL = CHASTE_CONST(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__GCaB = CHASTE_CONST(0.00055130000000000001); // mS_per_uF + const double var_parameters__GClB = CHASTE_CONST(0.0089999999999999993); // mS_per_uF + const double var_parameters__GClCa = CHASTE_CONST(0.0548125); // mS_per_uF + const double var_parameters__GNaB = CHASTE_CONST(0.00059699999999999998); // mS_per_uF + const double var_parameters__IbarSLCaP = CHASTE_CONST(0.067299999999999999); // uA_per_uF + const double var_parameters__KdClCa = CHASTE_CONST(0.10000000000000001); // mM + const double var_parameters__Kdact = CHASTE_CONST(0.00014999999999999999); // mM + const double var_I_NCX__Ka_junc = 1 / (1 + CHASTE_MATH::Pow(var_parameters__Kdact, 2) / CHASTE_MATH::Pow(var_chaste_interface__Ca_Concentrations__Ca_j, 2)); // dimensionless + const double var_I_NCX__Ka_sl = 1 / (1 + CHASTE_MATH::Pow(var_parameters__Kdact, 2) / CHASTE_MATH::Pow(var_chaste_interface__Ca_Concentrations__Ca_sl, 2)); // dimensionless + const double var_parameters__KmCai = CHASTE_CONST(0.0035899999999999999); // mM + const double var_parameters__KmCao = CHASTE_CONST(1.3); // mM + const double var_parameters__KmKo = CHASTE_CONST(1.5); // mM + const double var_parameters__KmNai = CHASTE_CONST(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__KmNao = CHASTE_CONST(87.5); // mM + const double var_parameters__KmPCa = CHASTE_CONST(0.00050000000000000001); // mM + const double var_I_Ki__g_K1 = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::Sqrt(mParameters[7]) * mParameters[16]; // mS_per_uF + const double var_I_Kr__gkr = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::Sqrt(mParameters[7]) * mParameters[17]; // mS_per_uF + const double var_I_NCX__s3_junc = CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_j, 3) * mParameters[5] + CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_j, 3) * var_parameters__KmCao + CHASTE_MATH::Pow(mParameters[8], 3) * var_chaste_interface__Ca_Concentrations__Ca_j + CHASTE_MATH::Pow(var_parameters__KmNao, 3) * (1 + var_chaste_interface__Ca_Concentrations__Ca_j / var_parameters__KmCai) * var_chaste_interface__Ca_Concentrations__Ca_j + CHASTE_MATH::Pow(mParameters[8], 3) * (1 + CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_j, 3) / CHASTE_MATH::Pow(var_parameters__KmNai, 3)) * var_parameters__KmCai; // mM4 + const double var_I_NCX__s3_sl = CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) * mParameters[5] + CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) * var_parameters__KmCao + CHASTE_MATH::Pow(mParameters[8], 3) * var_chaste_interface__Ca_Concentrations__Ca_sl + CHASTE_MATH::Pow(var_parameters__KmNao, 3) * (1 + var_chaste_interface__Ca_Concentrations__Ca_sl / var_parameters__KmCai) * var_chaste_interface__Ca_Concentrations__Ca_sl + CHASTE_MATH::Pow(mParameters[8], 3) * (1 + CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) / CHASTE_MATH::Pow(var_parameters__KmNai, 3)) * var_parameters__KmCai; // mM4 + const double var_I_NaK__sigma = -CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(0.01485884101040119) * mParameters[8]); // dimensionless + const double var_parameters__Q10CaL = CHASTE_CONST(1.8); // dimensionless + const double var_parameters__Q10NCX = CHASTE_CONST(1.5700000000000001); // dimensionless + const double var_parameters__Q10SLCaP = CHASTE_CONST(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__fnak = 1 / (1 + CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT) + CHASTE_CONST(0.036499999999999998) * var_I_NaK__sigma * CHASTE_MATH::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 + CHASTE_MATH::Pow(var_parameters__KmNaip, 4) / CHASTE_MATH::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 + CHASTE_MATH::Pow(var_parameters__KmNaip, 4) / CHASTE_MATH::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_parameters__Qpow = -31 + CHASTE_CONST(0.10000000000000001) * mParameters[23]; // dimensionless + const double var_I_PCa__I_pca_junc = CHASTE_MATH::Pow(var_chaste_interface__Ca_Concentrations__Ca_j, CHASTE_CONST(1.6000000000000001)) * CHASTE_MATH::Pow(var_parameters__Q10SLCaP, var_parameters__Qpow) * var_parameters__Fjunc * var_parameters__IbarSLCaP / (CHASTE_MATH::Pow(var_chaste_interface__Ca_Concentrations__Ca_j, CHASTE_CONST(1.6000000000000001)) + CHASTE_MATH::Pow(var_parameters__KmPCa, CHASTE_CONST(1.6000000000000001))); // uA_per_uF + const double var_I_PCa__I_pca_sl = CHASTE_MATH::Pow(var_chaste_interface__Ca_Concentrations__Ca_sl, CHASTE_CONST(1.6000000000000001)) * CHASTE_MATH::Pow(var_parameters__Q10SLCaP, var_parameters__Qpow) * var_parameters__Fsl * var_parameters__IbarSLCaP / (CHASTE_MATH::Pow(var_chaste_interface__Ca_Concentrations__Ca_sl, CHASTE_CONST(1.6000000000000001)) + CHASTE_MATH::Pow(var_parameters__KmPCa, CHASTE_CONST(1.6000000000000001))); // uA_per_uF + const double var_parameters__eca_junc = CHASTE_CONST(0.5) * CHASTE_MATH::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_parameters__eca_sl = CHASTE_CONST(0.5) * CHASTE_MATH::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_parameters__ecl = CHASTE_MATH::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_parameters__ek = CHASTE_MATH::Log(mParameters[7] / var_chaste_interface__K_Concentration__K_i) / var_parameters__FoRT; // mV + const double var_I_Ki__aki = CHASTE_CONST(1.02) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(0.23849999999999999) * var_parameters__ek)); // dimensionless + const double var_I_Ki__bki = (CHASTE_CONST(0.49124000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(0.080320000000000003) * var_parameters__ek) + CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(0.061749999999999999) * var_parameters__ek)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(0.51429999999999998) * var_parameters__ek - CHASTE_CONST(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_parameters__ena_junc = CHASTE_MATH::Log(mParameters[8] / var_chaste_interface__Na_Concentrations__Na_j) / var_parameters__FoRT; // mV + const double var_I_Na__I_Na_junc = CHASTE_MATH::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_parameters__ena_sl = CHASTE_MATH::Log(mParameters[8] / var_chaste_interface__Na_Concentrations__Na_sl) / var_parameters__FoRT; // mV + const double var_I_Na__I_Na_sl = CHASTE_MATH::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__GtoFast = ((var_parameters__epi == 1) ? (CHASTE_CONST(0.1144) * mParameters[15]) : (CHASTE_CONST(0.0014039999999999999) * mParameters[15])); // mS_per_uF + const double var_I_to__GtoSlow = ((var_parameters__epi == 1) ? (CHASTE_CONST(0.015599999999999999) * mParameters[19]) : (CHASTE_CONST(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_parameters__gkp = CHASTE_CONST(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_parameters__ksat = CHASTE_CONST(0.32000000000000001); // dimensionless + const double var_parameters__nu = CHASTE_CONST(0.27000000000000002); // dimensionless + const double var_I_NCX__s1_junc = CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_j, 3) * mParameters[5] * CHASTE_MATH::Exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * var_parameters__nu); // mM4 + const double var_I_NCX__s1_sl = CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) * mParameters[5] * CHASTE_MATH::Exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * var_parameters__nu); // mM4 + const double var_I_NCX__s2_junc = CHASTE_MATH::Pow(mParameters[8], 3) * var_chaste_interface__Ca_Concentrations__Ca_j * CHASTE_MATH::Exp((-1 + var_parameters__nu) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT); // mM4 + const double var_I_NCX__I_ncx_junc = CHASTE_MATH::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 * CHASTE_MATH::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 = CHASTE_MATH::Pow(mParameters[8], 3) * var_chaste_interface__Ca_Concentrations__Ca_sl * CHASTE_MATH::Exp((-1 + var_parameters__nu) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT); // mM4 + const double var_I_NCX__I_ncx_sl = CHASTE_MATH::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 * CHASTE_MATH::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 = CHASTE_CONST(0.00054000000000000001) * mParameters[11]; // cm_per_sec + const double var_I_Ca__ibarca_j = 4 * (-CHASTE_CONST(0.34100000000000003) * mParameters[5] + CHASTE_CONST(0.34100000000000003) * var_chaste_interface__Ca_Concentrations__Ca_j * CHASTE_MATH::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 + CHASTE_MATH::Exp(2 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double var_I_Ca__I_Ca_junc = CHASTE_CONST(0.45000000000000001) * CHASTE_MATH::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_I_Ca__ibarca_sl = 4 * (-CHASTE_CONST(0.34100000000000003) * mParameters[5] + CHASTE_CONST(0.34100000000000003) * var_chaste_interface__Ca_Concentrations__Ca_sl * CHASTE_MATH::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 + CHASTE_MATH::Exp(2 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double var_I_Ca__I_Ca_sl = CHASTE_CONST(0.45000000000000001) * CHASTE_MATH::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_parameters__pK = CHASTE_CONST(1.35e-7); // cm_per_sec + const double var_I_Ca__ibark = (-CHASTE_CONST(0.75) * mParameters[7] + CHASTE_CONST(0.75) * var_chaste_interface__K_Concentration__K_i * CHASTE_MATH::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 + CHASTE_MATH::Exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double var_I_Ca__I_CaK = CHASTE_CONST(0.45000000000000001) * CHASTE_MATH::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 = CHASTE_CONST(7.4999999999999993e-9); // cm_per_sec + const double var_I_Ca__ibarna_j = (-CHASTE_CONST(0.75) * mParameters[8] + CHASTE_CONST(0.75) * var_chaste_interface__Na_Concentrations__Na_j * CHASTE_MATH::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 + CHASTE_MATH::Exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double var_I_Ca__I_CaNa_junc = CHASTE_CONST(0.45000000000000001) * CHASTE_MATH::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 = (-CHASTE_CONST(0.75) * mParameters[8] + CHASTE_CONST(0.75) * var_chaste_interface__Na_Concentrations__Na_sl * CHASTE_MATH::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 + CHASTE_MATH::Exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double var_I_Ca__I_CaNa_sl = CHASTE_CONST(0.45000000000000001) * CHASTE_MATH::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_parameters__pNaK = CHASTE_CONST(0.018329999999999999); // dimensionless + const double var_I_Ks__eks = CHASTE_MATH::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 = CHASTE_MATH::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 var_chaste_interface__i_ionic = CHASTE_CAP() * var_membrane_potential__I_tot; // uA_per_cm2 const double i_ionic = var_chaste_interface__i_ionic; EXCEPT_IF_NOT(!std::isnan(i_ionic)); @@ -295,7 +297,7 @@ bool Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler::registered = Mod 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]); + double var_chaste_interface__membrane_potential__V_m = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -338,115 +340,115 @@ bool Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler::registered = Mod //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 d_dt_chaste_interface_var_I_Ca__f_Ca_Bj = -CHASTE_CONST(0.011900000000000001) * var_chaste_interface__I_Ca__f_Ca_Bj + CHASTE_CONST(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 = -CHASTE_CONST(0.011900000000000001) * var_chaste_interface__I_Ca__f_Ca_Bsl + CHASTE_CONST(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__Bmax_CaM = CHASTE_CONST(0.024); // mM + const double var_parameters__Bmax_Naj = CHASTE_CONST(7.5609999999999999); // mM + const double var_parameters__Bmax_Nasl = CHASTE_CONST(1.6499999999999999); // mM + const double var_parameters__Bmax_SR = CHASTE_CONST(0.017100000000000001); // mM + const double var_parameters__Bmax_TnChigh = CHASTE_CONST(0.14000000000000001); // mM + const double var_parameters__Bmax_TnClow = CHASTE_CONST(0.070000000000000007); // mM + const double var_parameters__Bmax_myosin = CHASTE_CONST(0.14000000000000001); // mM + const double var_parameters__Fjunc = CHASTE_CONST(0.11); // dimensionless + const double var_parameters__Fjunc_CaL = CHASTE_CONST(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__GCaB = CHASTE_CONST(0.00055130000000000001); // mS_per_uF + const double var_parameters__GNaB = CHASTE_CONST(0.00059699999999999998); // mS_per_uF + const double var_parameters__IbarSLCaP = CHASTE_CONST(0.067299999999999999); // uA_per_uF + const double var_parameters__J_ca_juncsl = CHASTE_CONST(8.2413000000000004e-13); // liters_per_msec + const double var_parameters__J_ca_slmyo = CHASTE_CONST(3.2742999999999999e-12); // liters_per_msec + const double var_parameters__J_na_juncsl = CHASTE_CONST(1.8312999999999999e-14); // liters_per_msec + const double var_parameters__J_na_slmyo = CHASTE_CONST(1.6385999999999999e-12); // liters_per_msec + const double var_parameters__Kdact = CHASTE_CONST(0.00014999999999999999); // mM + const double var_I_NCX__Ka_junc = 1 / (1 + CHASTE_MATH::Pow(var_parameters__Kdact, 2) / CHASTE_MATH::Pow(var_chaste_interface__Ca_Concentrations__Ca_j, 2)); // dimensionless + const double var_I_NCX__Ka_sl = 1 / (1 + CHASTE_MATH::Pow(var_parameters__Kdact, 2) / CHASTE_MATH::Pow(var_chaste_interface__Ca_Concentrations__Ca_sl, 2)); // dimensionless + const double var_parameters__KmCai = CHASTE_CONST(0.0035899999999999999); // mM + const double var_parameters__KmCao = CHASTE_CONST(1.3); // mM + const double var_parameters__KmKo = CHASTE_CONST(1.5); // mM + const double var_parameters__KmNai = CHASTE_CONST(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__KmNao = CHASTE_CONST(87.5); // mM + const double var_parameters__KmPCa = CHASTE_CONST(0.00050000000000000001); // mM + const double var_parameters__Kmf = CHASTE_CONST(0.00024600000000000002); // mM + const double var_parameters__Kmr = CHASTE_CONST(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_I_NCX__s3_junc = CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_j, 3) * mParameters[5] + CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_j, 3) * var_parameters__KmCao + CHASTE_MATH::Pow(mParameters[8], 3) * var_chaste_interface__Ca_Concentrations__Ca_j + CHASTE_MATH::Pow(var_parameters__KmNao, 3) * (1 + var_chaste_interface__Ca_Concentrations__Ca_j / var_parameters__KmCai) * var_chaste_interface__Ca_Concentrations__Ca_j + CHASTE_MATH::Pow(mParameters[8], 3) * (1 + CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_j, 3) / CHASTE_MATH::Pow(var_parameters__KmNai, 3)) * var_parameters__KmCai; // mM4 + const double var_I_NCX__s3_sl = CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) * mParameters[5] + CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) * var_parameters__KmCao + CHASTE_MATH::Pow(mParameters[8], 3) * var_chaste_interface__Ca_Concentrations__Ca_sl + CHASTE_MATH::Pow(var_parameters__KmNao, 3) * (1 + var_chaste_interface__Ca_Concentrations__Ca_sl / var_parameters__KmCai) * var_chaste_interface__Ca_Concentrations__Ca_sl + CHASTE_MATH::Pow(mParameters[8], 3) * (1 + CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) / CHASTE_MATH::Pow(var_parameters__KmNai, 3)) * var_parameters__KmCai; // mM4 + const double var_I_NaK__sigma = -CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(0.01485884101040119) * mParameters[8]); // dimensionless + const double var_parameters__Q10CaL = CHASTE_CONST(1.8); // dimensionless + const double var_parameters__Q10NCX = CHASTE_CONST(1.5700000000000001); // dimensionless + const double var_parameters__Q10SLCaP = CHASTE_CONST(2.3500000000000001); // dimensionless + const double var_parameters__Q10SRCaP = CHASTE_CONST(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_I_NaK__fnak = 1 / (1 + CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT) + CHASTE_CONST(0.036499999999999998) * var_I_NaK__sigma * CHASTE_MATH::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 + CHASTE_MATH::Pow(var_parameters__KmNaip, 4) / CHASTE_MATH::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 + CHASTE_MATH::Pow(var_parameters__KmNaip, 4) / CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_sl, 4)) * (var_parameters__KmKo + mParameters[7])); // uA_per_uF + const double var_parameters__Qpow = -31 + CHASTE_CONST(0.10000000000000001) * mParameters[23]; // dimensionless + const double var_I_PCa__I_pca_junc = CHASTE_MATH::Pow(var_chaste_interface__Ca_Concentrations__Ca_j, CHASTE_CONST(1.6000000000000001)) * CHASTE_MATH::Pow(var_parameters__Q10SLCaP, var_parameters__Qpow) * var_parameters__Fjunc * var_parameters__IbarSLCaP / (CHASTE_MATH::Pow(var_chaste_interface__Ca_Concentrations__Ca_j, CHASTE_CONST(1.6000000000000001)) + CHASTE_MATH::Pow(var_parameters__KmPCa, CHASTE_CONST(1.6000000000000001))); // uA_per_uF + const double var_I_PCa__I_pca_sl = CHASTE_MATH::Pow(var_chaste_interface__Ca_Concentrations__Ca_sl, CHASTE_CONST(1.6000000000000001)) * CHASTE_MATH::Pow(var_parameters__Q10SLCaP, var_parameters__Qpow) * var_parameters__Fsl * var_parameters__IbarSLCaP / (CHASTE_MATH::Pow(var_chaste_interface__Ca_Concentrations__Ca_sl, CHASTE_CONST(1.6000000000000001)) + CHASTE_MATH::Pow(var_parameters__KmPCa, CHASTE_CONST(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 var_parameters__cellRadius = CHASTE_CONST(10.25); // um + const double var_parameters__Vcell = CHASTE_CONST(1.0000000000000001e-15) * CHASTE_CONST(CHASTE_MATH::Pi) * CHASTE_MATH::Pow(var_parameters__cellRadius, 2) * var_parameters__cellLength; // liter + const double var_parameters__Vjunc = CHASTE_CONST(0.00053900000000000009) * var_parameters__Vcell; // liter + const double var_parameters__Vmyo = CHASTE_CONST(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_parameters__Bmax_SLhighj = CHASTE_CONST(0.000165) * var_parameters__Vmyo / var_parameters__Vjunc; // mM + const double var_parameters__Bmax_SLlowj = CHASTE_CONST(0.00046000000000000001) * var_parameters__Vmyo / var_parameters__Vjunc; // mM + const double var_parameters__Vsl = CHASTE_CONST(0.02) * var_parameters__Vcell; // liter + const double var_parameters__Bmax_SLhighsl = CHASTE_CONST(0.0134) * var_parameters__Vmyo / var_parameters__Vsl; // mM + const double var_parameters__Bmax_SLlowsl = CHASTE_CONST(0.037400000000000003) * var_parameters__Vmyo / var_parameters__Vsl; // mM + const double var_parameters__Vsr = CHASTE_CONST(0.035000000000000003) * var_parameters__Vcell; // liter + const double var_parameters__Bmax_Csqn = CHASTE_CONST(0.14000000000000001) * var_parameters__Vmyo / var_parameters__Vsr; // mM + const double var_parameters__ec50SR = CHASTE_CONST(0.45000000000000001); // mM + const double var_SR_Fluxes__kCaSR = -(-var_SR_Fluxes__MinSR + var_SR_Fluxes__MaxSR) / (1 + CHASTE_MATH::Pow((var_parameters__ec50SR / var_chaste_interface__SR_Ca_Concentrations__Ca_sr), CHASTE_CONST(2.5))) + var_SR_Fluxes__MaxSR; // dimensionless + const double var_parameters__eca_junc = CHASTE_CONST(0.5) * CHASTE_MATH::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_parameters__eca_sl = CHASTE_CONST(0.5) * CHASTE_MATH::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_parameters__ena_junc = CHASTE_MATH::Log(mParameters[8] / var_chaste_interface__Na_Concentrations__Na_j) / var_parameters__FoRT; // mV + const double var_I_Na__I_Na_junc = CHASTE_MATH::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_parameters__ena_sl = CHASTE_MATH::Log(mParameters[8] / var_chaste_interface__Na_Concentrations__Na_sl) / var_parameters__FoRT; // mV + const double var_I_Na__I_Na_sl = CHASTE_MATH::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_parameters__hillSRCaP = CHASTE_CONST(1.7869999999999999); // dimensionless + const double var_SR_Fluxes__J_serca = CHASTE_MATH::Pow(var_parameters__Q10SRCaP, var_parameters__Qpow) * (CHASTE_MATH::Pow((var_chaste_interface__Ca_Concentrations__Ca_i / var_parameters__Kmf), var_parameters__hillSRCaP) - CHASTE_MATH::Pow((var_chaste_interface__SR_Ca_Concentrations__Ca_sr / var_parameters__Kmr), var_parameters__hillSRCaP)) * mParameters[2] / (1 + CHASTE_MATH::Pow((var_chaste_interface__Ca_Concentrations__Ca_i / var_parameters__Kmf), var_parameters__hillSRCaP) + CHASTE_MATH::Pow((var_chaste_interface__SR_Ca_Concentrations__Ca_sr / var_parameters__Kmr), var_parameters__hillSRCaP)); // mM_per_msec + const double var_parameters__kiCa = CHASTE_CONST(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__kim = CHASTE_CONST(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_cam = CHASTE_CONST(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__koff_myoca = CHASTE_CONST(0.00046000000000000001); // per_msec + const double var_parameters__koff_myomg = CHASTE_CONST(5.7000000000000003e-5); // per_msec + const double var_parameters__koff_na = CHASTE_CONST(0.001); // per_msec + const double var_parameters__koff_slh = CHASTE_CONST(0.029999999999999999); // per_msec + const double var_parameters__koff_sll = CHASTE_CONST(1.3); // per_msec + const double var_parameters__koff_sr = CHASTE_CONST(0.059999999999999998); // per_msec + const double var_parameters__koff_tnchca = CHASTE_CONST(3.1999999999999999e-5); // per_msec + const double var_parameters__koff_tnchmg = CHASTE_CONST(0.0033300000000000001); // per_msec + const double var_parameters__koff_tncl = CHASTE_CONST(0.019599999999999999); // per_msec + const double var_parameters__kom = CHASTE_CONST(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 + CHASTE_MATH::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 + CHASTE_MATH::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 - CHASTE_MATH::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 var_parameters__kon_myoca = CHASTE_CONST(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 var_parameters__kon_myomg = CHASTE_CONST(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_parameters__kon_na = CHASTE_CONST(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 @@ -461,38 +463,38 @@ bool Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler::registered = Mod 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 var_parameters__kon_tnchca = CHASTE_CONST(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 var_parameters__kon_tnchmg = CHASTE_CONST(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_parameters__kon_tncl = CHASTE_CONST(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_parameters__ksat = CHASTE_CONST(0.32000000000000001); // dimensionless + const double var_parameters__nu = CHASTE_CONST(0.27000000000000002); // dimensionless + const double var_I_NCX__s1_junc = CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_j, 3) * mParameters[5] * CHASTE_MATH::Exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * var_parameters__nu); // mM4 + const double var_I_NCX__s1_sl = CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) * mParameters[5] * CHASTE_MATH::Exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * var_parameters__nu); // mM4 + const double var_I_NCX__s2_junc = CHASTE_MATH::Pow(mParameters[8], 3) * var_chaste_interface__Ca_Concentrations__Ca_j * CHASTE_MATH::Exp((-1 + var_parameters__nu) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT); // mM4 + const double var_I_NCX__I_ncx_junc = CHASTE_MATH::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 * CHASTE_MATH::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 = CHASTE_MATH::Pow(mParameters[8], 3) * var_chaste_interface__Ca_Concentrations__Ca_sl * CHASTE_MATH::Exp((-1 + var_parameters__nu) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT); // mM4 + const double var_I_NCX__I_ncx_sl = CHASTE_MATH::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 * CHASTE_MATH::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 = CHASTE_CONST(0.00054000000000000001) * mParameters[11]; // cm_per_sec + const double var_I_Ca__ibarca_j = 4 * (-CHASTE_CONST(0.34100000000000003) * mParameters[5] + CHASTE_CONST(0.34100000000000003) * var_chaste_interface__Ca_Concentrations__Ca_j * CHASTE_MATH::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 + CHASTE_MATH::Exp(2 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double var_I_Ca__I_Ca_junc = CHASTE_CONST(0.45000000000000001) * CHASTE_MATH::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 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 - CHASTE_CONST(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 * (-CHASTE_CONST(0.34100000000000003) * mParameters[5] + CHASTE_CONST(0.34100000000000003) * var_chaste_interface__Ca_Concentrations__Ca_sl * CHASTE_MATH::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 + CHASTE_MATH::Exp(2 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double var_I_Ca__I_Ca_sl = CHASTE_CONST(0.45000000000000001) * CHASTE_MATH::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 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 - CHASTE_CONST(0.5) * var_Ca_Concentrations__I_Ca_tot_sl * mParameters[22] / (mParameters[9] * var_parameters__Vsl); // mM / msec + const double var_parameters__pNa = CHASTE_CONST(7.4999999999999993e-9); // cm_per_sec + const double var_I_Ca__ibarna_j = (-CHASTE_CONST(0.75) * mParameters[8] + CHASTE_CONST(0.75) * var_chaste_interface__Na_Concentrations__Na_j * CHASTE_MATH::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 + CHASTE_MATH::Exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double var_I_Ca__I_CaNa_junc = CHASTE_CONST(0.45000000000000001) * CHASTE_MATH::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 = (-CHASTE_CONST(0.75) * mParameters[8] + CHASTE_CONST(0.75) * var_chaste_interface__Na_Concentrations__Na_sl * CHASTE_MATH::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 + CHASTE_MATH::Exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double var_I_Ca__I_CaNa_sl = CHASTE_CONST(0.45000000000000001) * CHASTE_MATH::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 @@ -530,7 +532,7 @@ bool Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler::registered = Mod 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]); + double var_chaste_interface__membrane_potential__V_m = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -571,164 +573,164 @@ bool Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler::registered = Mod 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_x2 = CHASTE_CONST(32.700000000000003) * var_chaste_interface__Cytosolic_Ca_Buffers__Tn_CL; + const double var_x3 = 1 / CHASTE_CONST(CHASTE_MATH::Pi); + const double var_x4 = CHASTE_CONST(0.4794655196082917) * var_x3; + const double var_x5 = CHASTE_MATH::Pow(var_chaste_interface__Ca_Concentrations__Ca_i, CHASTE_CONST(0.78699999999999992)); + const double var_x6 = CHASTE_MATH::Pow(var_chaste_interface__SR_Ca_Concentrations__Ca_sr, CHASTE_CONST(1.7869999999999999)); + const double var_x7 = CHASTE_CONST(0.38742512113256738) * var_x6; + const double var_x8 = CHASTE_MATH::Pow(var_chaste_interface__Ca_Concentrations__Ca_i, CHASTE_CONST(1.7869999999999999)); + const double var_x9 = CHASTE_CONST(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_x11 = -31 + CHASTE_CONST(0.10000000000000001) * mParameters[23]; + const double var_x12 = CHASTE_MATH::Pow(CHASTE_CONST(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_x15 = var_x13 * (var_x9 - var_x7) / CHASTE_MATH::Pow((CHASTE_CONST(3.5530476870814998e-7) + var_x8 + CHASTE_CONST(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_x17 = CHASTE_CONST(13.800000000000001) * var_chaste_interface__Cytosolic_Ca_Buffers__Myo_c + CHASTE_CONST(13.800000000000001) * var_chaste_interface__Cytosolic_Ca_Buffers__Myo_m; + const double var_x18 = CHASTE_CONST(2.3700000000000001) * var_chaste_interface__Cytosolic_Ca_Buffers__Tn_CHc + CHASTE_CONST(2.3700000000000001) * var_chaste_interface__Cytosolic_Ca_Buffers__Tn_CHm; + const double var_x19 = CHASTE_CONST(0.23799999999999999) + 34 * var_chaste_interface__Ca_Concentrations__Ca_i; + const double var_x20 = CHASTE_CONST(13.800000000000001) * var_chaste_interface__Ca_Concentrations__Ca_i; + const double var_x21 = CHASTE_CONST(0.059999999999999998) + 100 * var_chaste_interface__Ca_Concentrations__Ca_i; + const double var_x22 = CHASTE_CONST(2.3700000000000001) * var_chaste_interface__Ca_Concentrations__Ca_i; + const double var_x23 = CHASTE_CONST(0.019599999999999999) + CHASTE_CONST(32.700000000000003) * var_chaste_interface__Ca_Concentrations__Ca_i; + const double var_x24 = CHASTE_MATH::Pow(var_chaste_interface__SR_Ca_Concentrations__Ca_sr, CHASTE_CONST(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_x27 = CHASTE_CONST(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_x30 = CHASTE_CONST(5.2281977629563632e-6) + CHASTE_MATH::Pow(var_chaste_interface__Ca_Concentrations__Ca_j, CHASTE_CONST(1.6000000000000001)); + const double var_x31 = CHASTE_MATH::Pow(CHASTE_CONST(2.3500000000000001), var_x11); + const double var_x32 = CHASTE_CONST(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_x37 = CHASTE_MATH::Exp(-CHASTE_CONST(0.72999999999999998) * var_x36); + const double var_x38 = CHASTE_MATH::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_x40 = CHASTE_MATH::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_x43 = (1 + CHASTE_CONST(278.55153203342621) * var_chaste_interface__Ca_Concentrations__Ca_j) * var_chaste_interface__Ca_Concentrations__Ca_j; + const double var_x44 = var_x38 * (1 + CHASTE_CONST(0.00053869674493876331) * var_x40); + const double var_x45 = 1 / (var_x41 + var_x42 + CHASTE_CONST(669921.875) * var_x43 + CHASTE_CONST(1.3) * var_x40 + CHASTE_CONST(0.0035899999999999999) * var_x44); + const double var_x46 = CHASTE_MATH::Pow(var_chaste_interface__Ca_Concentrations__Ca_j, 2); + const double var_x47 = 1 + CHASTE_CONST(2.2499999999999996e-8) / var_x46; + const double var_x48 = CHASTE_MATH::Pow(CHASTE_CONST(1.5700000000000001), var_x11) * mParameters[20] / (1 + CHASTE_CONST(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_x52 = CHASTE_CONST(669921.875) + var_x38; + const double var_x53 = -var_x52 - CHASTE_CONST(373215529.24791086) * var_chaste_interface__Ca_Concentrations__Ca_j; + const double var_x54 = CHASTE_MATH::Exp(CHASTE_CONST(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_x56 = var_x49 * var_x55 / CHASTE_MATH::Pow((var_x43 + CHASTE_CONST(1.9405247813411081e-6) * var_x40 + CHASTE_CONST(5.3588338192419823e-9) * var_x44 + CHASTE_CONST(1.4927113702623908e-6) * var_x41 + CHASTE_CONST(1.4927113702623908e-6) * var_x42), 2); + const double var_x57 = CHASTE_CONST(4.9020119168033731e-13) * var_x56; + const double var_x58 = var_x45 * var_x48 * var_x55 / (CHASTE_MATH::Pow(var_x47, 2) * CHASTE_MATH::Pow(var_chaste_interface__Ca_Concentrations__Ca_j, 3)); + const double var_x59 = var_x35 * CHASTE_MATH::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_x61 = CHASTE_MATH::Exp(2 * var_x36); + const double var_x62 = CHASTE_MATH::Pow(CHASTE_CONST(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_x67 = CHASTE_CONST(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_x69 = CHASTE_CONST(64.935064935064929) * var_x68 + CHASTE_CONST(1205.9369202226344) * mParameters[0]; + const double var_x70 = -CHASTE_CONST(0.34100000000000003) * mParameters[5]; + const double var_x71 = CHASTE_CONST(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_x75 = CHASTE_CONST(0.029999999999999999) + var_x74; + const double var_x76 = CHASTE_CONST(1.3) + var_x74; + const double var_x77 = CHASTE_MATH::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_x79 = CHASTE_CONST(5.8017639429904805e-6) * var_x38; + const double var_x80 = -CHASTE_CONST(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_x85 = CHASTE_CONST(5.2281977629563632e-6) + CHASTE_MATH::Pow(var_chaste_interface__Ca_Concentrations__Ca_sl, CHASTE_CONST(1.6000000000000001)); + const double var_x86 = CHASTE_CONST(0.095835200000000009) * var_x31; + const double var_x87 = CHASTE_MATH::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_x90 = (1 + CHASTE_CONST(278.55153203342621) * var_chaste_interface__Ca_Concentrations__Ca_sl) * var_chaste_interface__Ca_Concentrations__Ca_sl; + const double var_x91 = var_x38 * (1 + CHASTE_CONST(0.00053869674493876331) * var_x87); + const double var_x92 = 1 / (var_x88 + var_x89 + CHASTE_CONST(669921.875) * var_x90 + CHASTE_CONST(1.3) * var_x87 + CHASTE_CONST(0.0035899999999999999) * var_x91); + const double var_x93 = 1 + CHASTE_CONST(2.2499999999999996e-8) / CHASTE_MATH::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_x97 = -var_x52 - CHASTE_CONST(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_x99 = var_x94 * var_x98 / CHASTE_MATH::Pow((var_x90 + CHASTE_CONST(1.9405247813411081e-6) * var_x87 + CHASTE_CONST(5.3588338192419823e-9) * var_x91 + CHASTE_CONST(1.4927113702623908e-6) * var_x88 + CHASTE_CONST(1.4927113702623908e-6) * var_x89), 2); + const double var_x100 = CHASTE_CONST(3.9661732781409103e-12) * var_x99; + const double var_x101 = var_x48 * var_x92 * var_x98 / (CHASTE_MATH::Pow(var_x93, 2) * CHASTE_MATH::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_x103 = CHASTE_CONST(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_x105 = CHASTE_CONST(0.029999999999999999) + var_x104; + const double var_x106 = CHASTE_CONST(1.3) + var_x104; + const double var_x107 = CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_sl, 2); + const double var_x108 = -CHASTE_CONST(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_x110 = CHASTE_CONST(0.001) + CHASTE_CONST(0.0001) * var_chaste_interface__Na_Concentrations__Na_j; + const double var_x111 = CHASTE_CONST(0.0001) * var_chaste_interface__Na_Buffers__Na_Bj; + const double var_x112 = CHASTE_CONST(0.001) + CHASTE_CONST(0.0001) * var_chaste_interface__Na_Concentrations__Na_sl; + const double var_x113 = CHASTE_CONST(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_x115 = CHASTE_CONST(0.23994508763098885) * var_x114; + const double var_x116 = CHASTE_CONST(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_x118 = -CHASTE_CONST(0.75) * mParameters[8]; + const double var_x119 = CHASTE_MATH::Exp(var_x36); + const double var_x120 = CHASTE_CONST(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_x123 = CHASTE_CONST(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_x125 = mParameters[21] * mParameters[7] / ((CHASTE_CONST(1.5) + mParameters[7]) * (1 + CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(0.10000000000000001) * var_x36) + CHASTE_CONST(0.036499999999999998) * (-CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(0.01485884101040119) * mParameters[8])) * CHASTE_MATH::Exp(-var_x36))); + const double var_x126 = CHASTE_MATH::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_x128 = CHASTE_CONST(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_x130 = var_x68 + CHASTE_CONST(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_x134 = CHASTE_MATH::Pow(var_x133, CHASTE_CONST(2.5)); + const double var_x135 = 1 + CHASTE_CONST(0.13584112963311223) * var_x134; const double var_x136 = 1 / var_x135; - const double var_x137 = 7.5 - 7 * var_x136; + const double var_x137 = CHASTE_CONST(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_x141 = CHASTE_MATH::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_x143 = CHASTE_CONST(2.3772197685794643) * var_x142 * var_chaste_interface__Ca_Concentrations__Ca_j * var_chaste_interface__SR_Fluxes__Ry_Ro; + const double var_x144 = CHASTE_CONST(0.21130842387373014) * var_x142 * var_x46 / CHASTE_MATH::Pow((1 - CHASTE_CONST(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][0] = 1.0 - (mDt * (-CHASTE_CONST(7.0788000000000011) + var_x0 + var_x1 + var_x17 + var_x18 + var_x2 - var_x4 + CHASTE_CONST(3.4188518090540365e-8) * var_x16 - CHASTE_CONST(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][4] = -(mDt * (CHASTE_CONST(0.016159999999999997) + var_x20)); + rJacobian[0][5] = -(mDt * (CHASTE_CONST(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][7] = -(mDt * (CHASTE_CONST(0.003032) + var_x22)); + rJacobian[0][8] = -(mDt * (CHASTE_CONST(0.0063300000000000006) + var_x22)); rJacobian[0][9] = -(mDt * (var_x23)); rJacobian[0][10] = 0.0; rJacobian[0][11] = 0.0; @@ -742,13 +744,13 @@ bool Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler::registered = Mod 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][22] = -(mDt * (CHASTE_CONST(0.037279237232671424) * var_x25 + CHASTE_CONST(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][1] = 1.0 - (mDt * (-CHASTE_CONST(75.37105751391465) + var_x28 + var_x29 - var_x27 - var_x69 - var_x67 * (CHASTE_CONST(0.22) * var_x51 - CHASTE_CONST(9.8999999999999977e-9) * var_x58 - var_x53 * var_x57 + CHASTE_CONST(3.0321500000000001e-5) * var_x34 / var_chaste_interface__Ca_Concentrations__Ca_j + CHASTE_CONST(0.00029830680000000003) * var_x60 * var_x64 + var_x32 * CHASTE_MATH::Pow(var_chaste_interface__Ca_Concentrations__Ca_j, CHASTE_CONST(0.60000000000000009)) / var_x30 - var_x32 * CHASTE_MATH::Pow(var_chaste_interface__Ca_Concentrations__Ca_j, CHASTE_CONST(2.2000000000000002)) / CHASTE_MATH::Pow(var_x30, 2)))); rJacobian[1][2] = -(mDt * (var_x27)); rJacobian[1][3] = 0.0; rJacobian[1][4] = 0.0; @@ -757,7 +759,7 @@ bool Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler::registered = Mod 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][10] = -(mDt * (CHASTE_CONST(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; @@ -767,16 +769,16 @@ bool Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler::registered = Mod 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][20] = -(mDt * (-var_x67 * (-CHASTE_CONST(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][25] = -(mDt * ((CHASTE_CONST(64.935064935064929) * var_chaste_interface__SR_Ca_Concentrations__Ca_sr - CHASTE_CONST(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][0] = -(mDt * (CHASTE_CONST(15.582629387269481) * var_x3)); + rJacobian[2][1] = -(mDt * (CHASTE_CONST(3.9220939916716238) * var_x3)); + rJacobian[2][2] = 1.0 - (mDt * (-CHASTE_CONST(165.10000000000002) + var_x83 + var_x84 - CHASTE_CONST(19.504723378941105) * var_x3 - var_x103 * (CHASTE_CONST(1.78) * var_x96 - CHASTE_CONST(8.0099999999999983e-8) * var_x101 - var_x100 * var_x97 + CHASTE_CONST(0.00024532850000000001) * var_x34 / var_chaste_interface__Ca_Concentrations__Ca_sl + CHASTE_CONST(3.3145199999999996e-5) * var_x102 * var_x64 + var_x86 * CHASTE_MATH::Pow(var_chaste_interface__Ca_Concentrations__Ca_sl, CHASTE_CONST(0.60000000000000009)) / var_x85 - var_x86 * CHASTE_MATH::Pow(var_chaste_interface__Ca_Concentrations__Ca_sl, CHASTE_CONST(2.2000000000000002)) / CHASTE_MATH::Pow(var_x85, 2)))); rJacobian[2][3] = 0.0; rJacobian[2][4] = 0.0; rJacobian[2][5] = 0.0; @@ -785,7 +787,7 @@ bool Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler::registered = Mod 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][11] = -(mDt * (CHASTE_CONST(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; @@ -795,13 +797,13 @@ bool Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler::registered = Mod 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][21] = -(mDt * (-var_x103 * (-CHASTE_CONST(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][0] = -(mDt * (CHASTE_CONST(0.81600000000000006) - var_x0)); rJacobian[3][1] = 0.0; rJacobian[3][2] = 0.0; rJacobian[3][3] = 1.0 - (mDt * (-var_x19)); @@ -828,11 +830,11 @@ bool Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler::registered = Mod 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][0] = -(mDt * (CHASTE_CONST(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][4] = 1.0 - (mDt * (-CHASTE_CONST(0.00046000000000000001) - var_x20)); rJacobian[4][5] = -(mDt * (-var_x20)); rJacobian[4][6] = 0.0; rJacobian[4][7] = 0.0; @@ -859,8 +861,8 @@ bool Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler::registered = Mod 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][4] = -(mDt * (-CHASTE_CONST(0.015699999999999999))); + rJacobian[5][5] = 1.0 - (mDt * (-CHASTE_CONST(0.015757))); rJacobian[5][6] = 0.0; rJacobian[5][7] = 0.0; rJacobian[5][8] = 0.0; @@ -882,7 +884,7 @@ bool Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler::registered = Mod 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][0] = -(mDt * (CHASTE_CONST(1.71) - var_x1)); rJacobian[6][1] = 0.0; rJacobian[6][2] = 0.0; rJacobian[6][3] = 0.0; @@ -909,14 +911,14 @@ bool Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler::registered = Mod 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][0] = -(mDt * (CHASTE_CONST(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][7] = 1.0 - (mDt * (-CHASTE_CONST(3.1999999999999999e-5) - var_x22)); rJacobian[7][8] = -(mDt * (-var_x22)); rJacobian[7][9] = 0.0; rJacobian[7][10] = 0.0; @@ -943,8 +945,8 @@ bool Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler::registered = Mod 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][7] = -(mDt * (-CHASTE_CONST(0.0030000000000000001))); + rJacobian[8][8] = 1.0 - (mDt * (-CHASTE_CONST(0.0063300000000000006))); rJacobian[8][9] = 0.0; rJacobian[8][10] = 0.0; rJacobian[8][11] = 0.0; @@ -963,7 +965,7 @@ bool Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler::registered = Mod 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][0] = -(mDt * (CHASTE_CONST(2.2890000000000006) - var_x2)); rJacobian[9][1] = 0.0; rJacobian[9][2] = 0.0; rJacobian[9][3] = 0.0; @@ -991,7 +993,7 @@ bool Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler::registered = Mod 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][1] = -(mDt * (CHASTE_CONST(1.7) - CHASTE_CONST(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; @@ -1000,7 +1002,7 @@ bool Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler::registered = Mod 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][10] = 1.0 - (mDt * (-CHASTE_CONST(0.011900000000000001) - CHASTE_CONST(1.7) * var_chaste_interface__Ca_Concentrations__Ca_j)); rJacobian[10][11] = 0.0; rJacobian[10][12] = 0.0; rJacobian[10][13] = 0.0; @@ -1019,7 +1021,7 @@ bool Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler::registered = Mod 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][2] = -(mDt * (CHASTE_CONST(1.7) - CHASTE_CONST(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; @@ -1028,7 +1030,7 @@ bool Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler::registered = Mod 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][11] = 1.0 - (mDt * (-CHASTE_CONST(0.011900000000000001) - CHASTE_CONST(1.7) * var_chaste_interface__Ca_Concentrations__Ca_sl)); rJacobian[11][12] = 0.0; rJacobian[11][13] = 0.0; rJacobian[11][14] = 0.0; @@ -1045,7 +1047,7 @@ bool Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler::registered = Mod 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][1] = -(mDt * (CHASTE_CONST(19.897959183673468) - var_x28)); rJacobian[12][2] = 0.0; rJacobian[12][3] = 0.0; rJacobian[12][4] = 0.0; @@ -1073,7 +1075,7 @@ bool Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler::registered = Mod 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][2] = -(mDt * (CHASTE_CONST(43.550000000000004) - var_x83)); rJacobian[13][3] = 0.0; rJacobian[13][4] = 0.0; rJacobian[13][5] = 0.0; @@ -1099,7 +1101,7 @@ bool Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler::registered = Mod 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][1] = -(mDt * (CHASTE_CONST(55.473098330241186) - var_x29)); rJacobian[14][2] = 0.0; rJacobian[14][3] = 0.0; rJacobian[14][4] = 0.0; @@ -1127,7 +1129,7 @@ bool Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler::registered = Mod 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][2] = -(mDt * (CHASTE_CONST(121.55000000000001) - var_x84)); rJacobian[15][3] = 0.0; rJacobian[15][4] = 0.0; rJacobian[15][5] = 0.0; @@ -1199,7 +1201,7 @@ bool Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler::registered = Mod 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][20] = -(mDt * (CHASTE_CONST(0.0007561) - var_x111)); rJacobian[17][21] = 0.0; rJacobian[17][22] = 0.0; rJacobian[17][23] = 0.0; @@ -1227,7 +1229,7 @@ bool Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler::registered = Mod 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][21] = -(mDt * (CHASTE_CONST(0.000165) - var_x113)); rJacobian[18][22] = 0.0; rJacobian[18][23] = 0.0; rJacobian[18][24] = 0.0; @@ -1261,7 +1263,7 @@ bool Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler::registered = Mod 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][1] = -(mDt * (-CHASTE_CONST(176588941779729.56) * var_x117 * (CHASTE_CONST(1.4849999999999997e-8) * var_x58 - CHASTE_CONST(0.33000000000000002) * var_x51 + var_x116 * var_x53))); rJacobian[20][2] = 0.0; rJacobian[20][3] = 0.0; rJacobian[20][4] = 0.0; @@ -1270,7 +1272,7 @@ bool Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler::registered = Mod 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][10] = -(mDt * (CHASTE_CONST(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; @@ -1280,7 +1282,7 @@ bool Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler::registered = Mod 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][20] = 1.0 - (mDt * ((-CHASTE_CONST(0.0007561) + var_x111 - var_x123 - CHASTE_CONST(176588941779729.56) * var_x66 * (CHASTE_CONST(0.98999999999999999) * var_x82 + CHASTE_CONST(6.567e-5) * var_x124 + var_x116 * var_x80 + CHASTE_CONST(0.11) * var_x124 * var_x126 + CHASTE_CONST(2.2781249999999999e-9) * var_x127 * var_x60 + CHASTE_CONST(9.0157776108189337e-5) * var_x125 / (CHASTE_MATH::Pow((CHASTE_CONST(6.8301345536507063e-5) + CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_j, (-4))), 2) * CHASTE_MATH::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; @@ -1289,7 +1291,7 @@ bool Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler::registered = Mod 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][2] = -(mDt * (-CHASTE_CONST(4759071980963.7119) * var_x117 * (CHASTE_CONST(1.2014999999999997e-7) * var_x101 - CHASTE_CONST(2.6699999999999999) * var_x96 + var_x128 * var_x97))); rJacobian[21][3] = 0.0; rJacobian[21][4] = 0.0; rJacobian[21][5] = 0.0; @@ -1298,7 +1300,7 @@ bool Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler::registered = Mod 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][11] = -(mDt * (CHASTE_CONST(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; @@ -1306,15 +1308,15 @@ bool Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler::registered = Mod 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][19] = -(mDt * (CHASTE_CONST(7.7982153480071377) * var_x114)); + rJacobian[21][20] = -(mDt * (CHASTE_CONST(0.087152885187388451) * var_x114)); + rJacobian[21][21] = 1.0 - (mDt * ((-CHASTE_CONST(0.000165) + var_x113 - CHASTE_CONST(7.8853682331945256) * var_x3 - CHASTE_CONST(4759071980963.7119) * var_x66 * (CHASTE_CONST(0.00053133) * var_x129 + CHASTE_CONST(8.0099999999999998) * var_x109 + var_x108 * var_x128 + CHASTE_CONST(2.5312499999999994e-10) * var_x102 * var_x127 + CHASTE_CONST(0.89000000000000001) * var_x126 * var_x129 + CHASTE_CONST(0.00072945837032989554) * var_x125 / (CHASTE_MATH::Pow((CHASTE_CONST(6.8301345536507063e-5) + CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_sl, (-4))), 2) * CHASTE_MATH::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][0] = -(mDt * (-CHASTE_CONST(6.3492962168146398e-7) * var_x16 + CHASTE_CONST(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; @@ -1336,7 +1338,7 @@ bool Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler::registered = Mod 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][22] = 1.0 - (mDt * (-260 + var_x131 - var_x130 - CHASTE_CONST(0.69232869146389786) * var_x25 - CHASTE_CONST(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])); @@ -1392,7 +1394,7 @@ bool Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler::registered = Mod 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][24] = 1.0 - (mDt * (-CHASTE_CONST(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; @@ -1419,8 +1421,8 @@ bool Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler::registered = Mod 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][24] = -(mDt * (CHASTE_CONST(0.0050000000000000001))); + rJacobian[25][25] = 1.0 - (mDt * (-CHASTE_CONST(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)); @@ -1444,18 +1446,18 @@ bool Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler::registered = Mod 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][22] = -(mDt * (-var_x148 + CHASTE_CONST(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)); + rJacobian[26][24] = -(mDt * (-CHASTE_CONST(0.0050000000000000001))); + rJacobian[26][25] = -(mDt * (CHASTE_CONST(0.055))); + rJacobian[26][26] = 1.0 - (mDt * (-CHASTE_CONST(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]); + double var_chaste_interface__membrane_potential__V_m = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -1498,111 +1500,111 @@ bool Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler::registered = Mod 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_I_Ks__gks_junc = CHASTE_CONST(0.0035000000000000001); // mS_per_uF + const double var_I_Ks__gks_sl = CHASTE_CONST(0.0035000000000000001); // mS_per_uF + const double var_I_Kp__kp_kp = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(7.4880000000000004) - CHASTE_CONST(0.16722408026755853) * var_chaste_interface__membrane_potential__V_m)); // dimensionless + const double var_I_Kr__rkr = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(3.0833333333333335) + CHASTE_CONST(0.041666666666666664) * var_chaste_interface__membrane_potential__V_m)); // dimensionless + const double var_membrane_potential__i_Stim_converted = CHASTE_STIM(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_membrane_potential__i_Stim = var_membrane_potential__i_Stim_converted / CHASTE_CAP(); // uA_per_uF + const double var_parameters__Fjunc = CHASTE_CONST(0.11); // dimensionless + const double var_parameters__Fjunc_CaL = CHASTE_CONST(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__GCaB = CHASTE_CONST(0.00055130000000000001); // mS_per_uF + const double var_parameters__GClB = CHASTE_CONST(0.0089999999999999993); // mS_per_uF + const double var_parameters__GClCa = CHASTE_CONST(0.0548125); // mS_per_uF + const double var_parameters__GNaB = CHASTE_CONST(0.00059699999999999998); // mS_per_uF + const double var_parameters__IbarSLCaP = CHASTE_CONST(0.067299999999999999); // uA_per_uF + const double var_parameters__KdClCa = CHASTE_CONST(0.10000000000000001); // mM + const double var_parameters__Kdact = CHASTE_CONST(0.00014999999999999999); // mM + const double var_I_NCX__Ka_junc = 1 / (1 + CHASTE_MATH::Pow(var_parameters__Kdact, 2) / CHASTE_MATH::Pow(var_chaste_interface__Ca_Concentrations__Ca_j, 2)); // dimensionless + const double var_I_NCX__Ka_sl = 1 / (1 + CHASTE_MATH::Pow(var_parameters__Kdact, 2) / CHASTE_MATH::Pow(var_chaste_interface__Ca_Concentrations__Ca_sl, 2)); // dimensionless + const double var_parameters__KmCai = CHASTE_CONST(0.0035899999999999999); // mM + const double var_parameters__KmCao = CHASTE_CONST(1.3); // mM + const double var_parameters__KmKo = CHASTE_CONST(1.5); // mM + const double var_parameters__KmNai = CHASTE_CONST(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__KmNao = CHASTE_CONST(87.5); // mM + const double var_parameters__KmPCa = CHASTE_CONST(0.00050000000000000001); // mM + const double var_I_Ki__g_K1 = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::Sqrt(mParameters[7]) * mParameters[16]; // mS_per_uF + const double var_I_Kr__gkr = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::Sqrt(mParameters[7]) * mParameters[17]; // mS_per_uF + const double var_I_NCX__s3_junc = CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_j, 3) * mParameters[5] + CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_j, 3) * var_parameters__KmCao + CHASTE_MATH::Pow(mParameters[8], 3) * var_chaste_interface__Ca_Concentrations__Ca_j + CHASTE_MATH::Pow(var_parameters__KmNao, 3) * (1 + var_chaste_interface__Ca_Concentrations__Ca_j / var_parameters__KmCai) * var_chaste_interface__Ca_Concentrations__Ca_j + CHASTE_MATH::Pow(mParameters[8], 3) * (1 + CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_j, 3) / CHASTE_MATH::Pow(var_parameters__KmNai, 3)) * var_parameters__KmCai; // mM4 + const double var_I_NCX__s3_sl = CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) * mParameters[5] + CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) * var_parameters__KmCao + CHASTE_MATH::Pow(mParameters[8], 3) * var_chaste_interface__Ca_Concentrations__Ca_sl + CHASTE_MATH::Pow(var_parameters__KmNao, 3) * (1 + var_chaste_interface__Ca_Concentrations__Ca_sl / var_parameters__KmCai) * var_chaste_interface__Ca_Concentrations__Ca_sl + CHASTE_MATH::Pow(mParameters[8], 3) * (1 + CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) / CHASTE_MATH::Pow(var_parameters__KmNai, 3)) * var_parameters__KmCai; // mM4 + const double var_I_NaK__sigma = -CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(0.01485884101040119) * mParameters[8]); // dimensionless + const double var_parameters__Q10CaL = CHASTE_CONST(1.8); // dimensionless + const double var_parameters__Q10NCX = CHASTE_CONST(1.5700000000000001); // dimensionless + const double var_parameters__Q10SLCaP = CHASTE_CONST(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__fnak = 1 / (1 + CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT) + CHASTE_CONST(0.036499999999999998) * var_I_NaK__sigma * CHASTE_MATH::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 + CHASTE_MATH::Pow(var_parameters__KmNaip, 4) / CHASTE_MATH::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 + CHASTE_MATH::Pow(var_parameters__KmNaip, 4) / CHASTE_MATH::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_parameters__Qpow = -31 + CHASTE_CONST(0.10000000000000001) * mParameters[23]; // dimensionless + const double var_I_PCa__I_pca_junc = CHASTE_MATH::Pow(var_chaste_interface__Ca_Concentrations__Ca_j, CHASTE_CONST(1.6000000000000001)) * CHASTE_MATH::Pow(var_parameters__Q10SLCaP, var_parameters__Qpow) * var_parameters__Fjunc * var_parameters__IbarSLCaP / (CHASTE_MATH::Pow(var_chaste_interface__Ca_Concentrations__Ca_j, CHASTE_CONST(1.6000000000000001)) + CHASTE_MATH::Pow(var_parameters__KmPCa, CHASTE_CONST(1.6000000000000001))); // uA_per_uF + const double var_I_PCa__I_pca_sl = CHASTE_MATH::Pow(var_chaste_interface__Ca_Concentrations__Ca_sl, CHASTE_CONST(1.6000000000000001)) * CHASTE_MATH::Pow(var_parameters__Q10SLCaP, var_parameters__Qpow) * var_parameters__Fsl * var_parameters__IbarSLCaP / (CHASTE_MATH::Pow(var_chaste_interface__Ca_Concentrations__Ca_sl, CHASTE_CONST(1.6000000000000001)) + CHASTE_MATH::Pow(var_parameters__KmPCa, CHASTE_CONST(1.6000000000000001))); // uA_per_uF + const double var_parameters__eca_junc = CHASTE_CONST(0.5) * CHASTE_MATH::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_parameters__eca_sl = CHASTE_CONST(0.5) * CHASTE_MATH::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_parameters__ecl = CHASTE_MATH::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_parameters__ek = CHASTE_MATH::Log(mParameters[7] / var_chaste_interface__K_Concentration__K_i) / var_parameters__FoRT; // mV + const double var_I_Ki__aki = CHASTE_CONST(1.02) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(0.23849999999999999) * var_parameters__ek)); // dimensionless + const double var_I_Ki__bki = (CHASTE_CONST(0.49124000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(0.080320000000000003) * var_parameters__ek) + CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(0.061749999999999999) * var_parameters__ek)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(0.51429999999999998) * var_parameters__ek - CHASTE_CONST(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_parameters__ena_junc = CHASTE_MATH::Log(mParameters[8] / var_chaste_interface__Na_Concentrations__Na_j) / var_parameters__FoRT; // mV + const double var_I_Na__I_Na_junc = CHASTE_MATH::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_parameters__ena_sl = CHASTE_MATH::Log(mParameters[8] / var_chaste_interface__Na_Concentrations__Na_sl) / var_parameters__FoRT; // mV + const double var_I_Na__I_Na_sl = CHASTE_MATH::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__GtoFast = ((var_parameters__epi == 1) ? (CHASTE_CONST(0.1144) * mParameters[15]) : (CHASTE_CONST(0.0014039999999999999) * mParameters[15])); // mS_per_uF + const double var_I_to__GtoSlow = ((var_parameters__epi == 1) ? (CHASTE_CONST(0.015599999999999999) * mParameters[19]) : (CHASTE_CONST(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_parameters__gkp = CHASTE_CONST(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_parameters__ksat = CHASTE_CONST(0.32000000000000001); // dimensionless + const double var_parameters__nu = CHASTE_CONST(0.27000000000000002); // dimensionless + const double var_I_NCX__s1_junc = CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_j, 3) * mParameters[5] * CHASTE_MATH::Exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * var_parameters__nu); // mM4 + const double var_I_NCX__s1_sl = CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) * mParameters[5] * CHASTE_MATH::Exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * var_parameters__nu); // mM4 + const double var_I_NCX__s2_junc = CHASTE_MATH::Pow(mParameters[8], 3) * var_chaste_interface__Ca_Concentrations__Ca_j * CHASTE_MATH::Exp((-1 + var_parameters__nu) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT); // mM4 + const double var_I_NCX__I_ncx_junc = CHASTE_MATH::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 * CHASTE_MATH::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 = CHASTE_MATH::Pow(mParameters[8], 3) * var_chaste_interface__Ca_Concentrations__Ca_sl * CHASTE_MATH::Exp((-1 + var_parameters__nu) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT); // mM4 + const double var_I_NCX__I_ncx_sl = CHASTE_MATH::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 * CHASTE_MATH::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 = CHASTE_CONST(0.00054000000000000001) * mParameters[11]; // cm_per_sec + const double var_I_Ca__ibarca_j = 4 * (-CHASTE_CONST(0.34100000000000003) * mParameters[5] + CHASTE_CONST(0.34100000000000003) * var_chaste_interface__Ca_Concentrations__Ca_j * CHASTE_MATH::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 + CHASTE_MATH::Exp(2 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double var_I_Ca__I_Ca_junc = CHASTE_CONST(0.45000000000000001) * CHASTE_MATH::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_I_Ca__ibarca_sl = 4 * (-CHASTE_CONST(0.34100000000000003) * mParameters[5] + CHASTE_CONST(0.34100000000000003) * var_chaste_interface__Ca_Concentrations__Ca_sl * CHASTE_MATH::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 + CHASTE_MATH::Exp(2 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double var_I_Ca__I_Ca_sl = CHASTE_CONST(0.45000000000000001) * CHASTE_MATH::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_parameters__pK = CHASTE_CONST(1.35e-7); // cm_per_sec + const double var_I_Ca__ibark = (-CHASTE_CONST(0.75) * mParameters[7] + CHASTE_CONST(0.75) * var_chaste_interface__K_Concentration__K_i * CHASTE_MATH::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 + CHASTE_MATH::Exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double var_I_Ca__I_CaK = CHASTE_CONST(0.45000000000000001) * CHASTE_MATH::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 = CHASTE_CONST(7.4999999999999993e-9); // cm_per_sec + const double var_I_Ca__ibarna_j = (-CHASTE_CONST(0.75) * mParameters[8] + CHASTE_CONST(0.75) * var_chaste_interface__Na_Concentrations__Na_j * CHASTE_MATH::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 + CHASTE_MATH::Exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double var_I_Ca__I_CaNa_junc = CHASTE_CONST(0.45000000000000001) * CHASTE_MATH::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 = (-CHASTE_CONST(0.75) * mParameters[8] + CHASTE_CONST(0.75) * var_chaste_interface__Na_Concentrations__Na_sl * CHASTE_MATH::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 + CHASTE_MATH::Exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double var_I_Ca__I_CaNa_sl = CHASTE_CONST(0.45000000000000001) * CHASTE_MATH::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_parameters__pNaK = CHASTE_CONST(0.018329999999999999); // dimensionless + const double var_I_Ks__eks = CHASTE_MATH::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 = CHASTE_MATH::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 @@ -1614,7 +1616,7 @@ bool Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler::registered = Mod { // Time units: millisecond std::vector& rY = rGetStateVariables(); - double var_chaste_interface__membrane_potential__V_m = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane_potential__V_m = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -1639,30 +1641,30 @@ bool Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler::registered = Mod 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_Ca__dss = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.83333333333333337) - CHASTE_CONST(0.16666666666666666) * var_chaste_interface__membrane_potential__V_m)); + const double var_I_Ca__fss = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(3.8888888888888888) + CHASTE_CONST(0.1111111111111111) * var_chaste_interface__membrane_potential__V_m)) + CHASTE_CONST(0.59999999999999998) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(2.5) - CHASTE_CONST(0.050000000000000003) * var_chaste_interface__membrane_potential__V_m)); + const double var_I_Ca__taud = CHASTE_CONST(28.571428571428569) * (1 - CHASTE_MATH::Exp(-CHASTE_CONST(0.83333333333333337) - CHASTE_CONST(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 / (CHASTE_CONST(0.02) + CHASTE_CONST(0.019699999999999999) * CHASTE_MATH::Exp(-CHASTE_CONST(0.23877882250000002) * CHASTE_MATH::Pow((1 + CHASTE_CONST(0.068965517241379309) * var_chaste_interface__membrane_potential__V_m), 2))); + const double var_I_Kr__tauxr = 230 / (1 + CHASTE_MATH::Exp(2 + CHASTE_CONST(0.050000000000000003) * var_chaste_interface__membrane_potential__V_m)) + 3300 / ((1 + CHASTE_MATH::Exp(CHASTE_CONST(1.2222222222222223) + CHASTE_CONST(0.1111111111111111) * var_chaste_interface__membrane_potential__V_m)) * (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4444444444444446) - CHASTE_CONST(0.1111111111111111) * var_chaste_interface__membrane_potential__V_m))); + const double var_I_Kr__xrss = 1 / (1 + CHASTE_MATH::Exp(-2 - CHASTE_CONST(0.20000000000000001) * var_chaste_interface__membrane_potential__V_m)); + const double var_I_Ks__tauxs = CHASTE_CONST(990.10000000000002) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.17252124645892353) - CHASTE_CONST(0.070821529745042494) * var_chaste_interface__membrane_potential__V_m)); + const double var_I_Ks__xsss = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.26666666666666666) - CHASTE_CONST(0.070175438596491224) * var_chaste_interface__membrane_potential__V_m)); + const double var_I_Na__ah = ((var_chaste_interface__membrane_potential__V_m >= -40) ? (0) : (CHASTE_CONST(0.057000000000000002) * CHASTE_MATH::Exp(-CHASTE_CONST(11.764705882352942) + CHASTE_CONST(0.14705882352941177) * mParameters[14] - CHASTE_CONST(0.14705882352941177) * var_chaste_interface__membrane_potential__V_m))); + const double var_I_Na__aj = ((var_chaste_interface__membrane_potential__V_m >= -40) ? (0) : ((CHASTE_CONST(37.780000000000001) + var_chaste_interface__membrane_potential__V_m) * (-25428 * CHASTE_MATH::Exp(CHASTE_CONST(0.24440000000000001) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(0.24440000000000001) * mParameters[14]) - CHASTE_CONST(6.9480000000000002e-6) * CHASTE_MATH::Exp(CHASTE_CONST(0.043909999999999998) * mParameters[14] - CHASTE_CONST(0.043909999999999998) * var_chaste_interface__membrane_potential__V_m)) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(24.640530000000002) + CHASTE_CONST(0.311) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(0.311) * mParameters[14])))); + const double var_I_Na__bh = ((var_chaste_interface__membrane_potential__V_m >= -40) ? (CHASTE_CONST(5.9230769230769234) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.96036036036036043) + CHASTE_CONST(0.0900900900900901) * mParameters[14] - CHASTE_CONST(0.0900900900900901) * var_chaste_interface__membrane_potential__V_m))) : (310000 * CHASTE_MATH::Exp(CHASTE_CONST(0.34849999999999998) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(0.34849999999999998) * mParameters[14]) + CHASTE_CONST(2.7000000000000002) * CHASTE_MATH::Exp(CHASTE_CONST(0.079000000000000001) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(0.079000000000000001) * mParameters[14]))); + const double var_I_Na__bj = ((var_chaste_interface__membrane_potential__V_m >= -40) ? (CHASTE_CONST(0.59999999999999998) * CHASTE_MATH::Exp(CHASTE_CONST(0.057000000000000002) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(0.057000000000000002) * mParameters[14]) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.2000000000000002) + CHASTE_CONST(0.10000000000000001) * mParameters[14] - CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane_potential__V_m))) : (CHASTE_CONST(0.024240000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.01052) * mParameters[14] - CHASTE_CONST(0.01052) * var_chaste_interface__membrane_potential__V_m) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(5.5312920000000005) + CHASTE_CONST(0.13780000000000001) * mParameters[14] - CHASTE_CONST(0.13780000000000001) * var_chaste_interface__membrane_potential__V_m)))); + const double var_I_Na__hss = CHASTE_CONST(0.01) * mParameters[13] + (1 - CHASTE_CONST(0.01) * mParameters[13]) / CHASTE_MATH::Pow((1 + CHASTE_MATH::Exp(CHASTE_CONST(9.6298788694481825) + CHASTE_CONST(0.13458950201884254) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(0.13458950201884254) * mParameters[14])), 2); + const double var_I_Na__jss = CHASTE_CONST(0.01) * mParameters[13] + (1 - CHASTE_CONST(0.01) * mParameters[13]) / CHASTE_MATH::Pow((1 + CHASTE_MATH::Exp(CHASTE_CONST(9.6298788694481825) + CHASTE_CONST(0.13458950201884254) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(0.13458950201884254) * mParameters[14])), 2); + const double var_I_Na__mss = 1 / CHASTE_MATH::Pow((1 + CHASTE_MATH::Exp(-CHASTE_CONST(6.2967884828349945) - CHASTE_CONST(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)); + const double var_I_Na__taum = CHASTE_CONST(0.12920000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(8.682389366752302) * CHASTE_MATH::Pow((1 + CHASTE_CONST(0.021838829438742085) * var_chaste_interface__membrane_potential__V_m), 2)) + CHASTE_CONST(0.064869999999999997) * CHASTE_MATH::Exp(-CHASTE_CONST(0.0089012876052174655) * CHASTE_MATH::Pow((-1 + CHASTE_CONST(0.2073398299813394) * var_chaste_interface__membrane_potential__V_m), 2)); + const double var_I_to__tauxtof = CHASTE_CONST(0.5) + CHASTE_CONST(8.5) * CHASTE_MATH::Exp(-CHASTE_CONST(0.81000000000000005) * CHASTE_MATH::Pow((1 + CHASTE_CONST(0.022222222222222223) * var_chaste_interface__membrane_potential__V_m), 2)); + const double var_I_to__tauxtos = CHASTE_CONST(0.5) + 9 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(0.20000000000000001) + CHASTE_CONST(0.066666666666666666) * var_chaste_interface__membrane_potential__V_m)); + const double var_I_to__tauytof = 7 + 85 * CHASTE_MATH::Exp(-CHASTE_CONST(7.2727272727272725) * CHASTE_MATH::Pow((1 + CHASTE_CONST(0.025000000000000001) * var_chaste_interface__membrane_potential__V_m), 2)); + const double var_I_to__tauytos = 30 + 800 / (1 + CHASTE_MATH::Exp(6 + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane_potential__V_m)); + const double var_I_to__xtoss = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.4615384615384615) - CHASTE_CONST(0.076923076923076927) * var_chaste_interface__membrane_potential__V_m)); + const double var_I_to__ytoss = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(3.8999999999999999) + CHASTE_CONST(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)); @@ -1713,7 +1715,7 @@ bool Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler::registered = Mod { // Inputs: // Time units: millisecond - double var_chaste_interface__membrane_potential__V_m = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane_potential__V_m = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -1763,105 +1765,105 @@ bool Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler::registered = Mod // 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_I_Ks__gks_junc = CHASTE_CONST(0.0035000000000000001); // mS_per_uF + const double var_I_Ks__gks_sl = CHASTE_CONST(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_Ca__tauf = 1 / (CHASTE_CONST(0.02) + CHASTE_CONST(0.019699999999999999) * CHASTE_MATH::Exp(-CHASTE_CONST(0.23877882250000002) * CHASTE_MATH::Pow((1 + CHASTE_CONST(0.068965517241379309) * var_chaste_interface__membrane_potential__V_m), 2))); // msec + const double var_I_Kr__rkr = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(3.0833333333333335) + CHASTE_CONST(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) : (CHASTE_CONST(0.057000000000000002) * CHASTE_MATH::Exp(-CHASTE_CONST(11.764705882352942) + CHASTE_CONST(0.14705882352941177) * mParameters[14] - CHASTE_CONST(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) : ((CHASTE_CONST(37.780000000000001) + var_chaste_interface__membrane_potential__V_m) * (-25428 * CHASTE_MATH::Exp(CHASTE_CONST(0.24440000000000001) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(0.24440000000000001) * mParameters[14]) - CHASTE_CONST(6.9480000000000002e-6) * CHASTE_MATH::Exp(CHASTE_CONST(0.043909999999999998) * mParameters[14] - CHASTE_CONST(0.043909999999999998) * var_chaste_interface__membrane_potential__V_m)) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(24.640530000000002) + CHASTE_CONST(0.311) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(0.311) * mParameters[14])))); // dimensionless + const double var_I_Na__bh = ((var_chaste_interface__membrane_potential__V_m >= -40) ? (CHASTE_CONST(5.9230769230769234) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.96036036036036043) + CHASTE_CONST(0.0900900900900901) * mParameters[14] - CHASTE_CONST(0.0900900900900901) * var_chaste_interface__membrane_potential__V_m))) : (310000 * CHASTE_MATH::Exp(CHASTE_CONST(0.34849999999999998) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(0.34849999999999998) * mParameters[14]) + CHASTE_CONST(2.7000000000000002) * CHASTE_MATH::Exp(CHASTE_CONST(0.079000000000000001) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(0.079000000000000001) * mParameters[14]))); // dimensionless + const double var_I_Na__bj = ((var_chaste_interface__membrane_potential__V_m >= -40) ? (CHASTE_CONST(0.59999999999999998) * CHASTE_MATH::Exp(CHASTE_CONST(0.057000000000000002) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(0.057000000000000002) * mParameters[14]) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.2000000000000002) + CHASTE_CONST(0.10000000000000001) * mParameters[14] - CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane_potential__V_m))) : (CHASTE_CONST(0.024240000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.01052) * mParameters[14] - CHASTE_CONST(0.01052) * var_chaste_interface__membrane_potential__V_m) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(5.5312920000000005) + CHASTE_CONST(0.13780000000000001) * mParameters[14] - CHASTE_CONST(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_membrane_potential__i_Stim_converted = CHASTE_STIM(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__Fjunc = CHASTE_CONST(0.11); // dimensionless + const double var_parameters__Fjunc_CaL = CHASTE_CONST(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__IbarSLCaP = CHASTE_CONST(0.067299999999999999); // uA_per_uF + const double var_parameters__Kdact = CHASTE_CONST(0.00014999999999999999); // mM + const double var_I_NCX__Ka_junc = 1 / (1 + CHASTE_MATH::Pow(var_parameters__Kdact, 2) / CHASTE_MATH::Pow(var_chaste_interface__Ca_Concentrations__Ca_j, 2)); // dimensionless + const double var_I_NCX__Ka_sl = 1 / (1 + CHASTE_MATH::Pow(var_parameters__Kdact, 2) / CHASTE_MATH::Pow(var_chaste_interface__Ca_Concentrations__Ca_sl, 2)); // dimensionless + const double var_parameters__KmCai = CHASTE_CONST(0.0035899999999999999); // mM + const double var_parameters__KmCao = CHASTE_CONST(1.3); // mM + const double var_parameters__KmKo = CHASTE_CONST(1.5); // mM + const double var_parameters__KmNai = CHASTE_CONST(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__KmNao = CHASTE_CONST(87.5); // mM + const double var_parameters__KmPCa = CHASTE_CONST(0.00050000000000000001); // mM + const double var_parameters__Kmf = CHASTE_CONST(0.00024600000000000002); // mM + const double var_parameters__Kmr = CHASTE_CONST(1.7); // mM + const double var_I_Ki__g_K1 = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::Sqrt(mParameters[7]) * mParameters[16]; // mS_per_uF + const double var_I_Kr__gkr = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::Sqrt(mParameters[7]) * mParameters[17]; // mS_per_uF + const double var_I_NCX__s3_junc = CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_j, 3) * mParameters[5] + CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_j, 3) * var_parameters__KmCao + CHASTE_MATH::Pow(mParameters[8], 3) * var_chaste_interface__Ca_Concentrations__Ca_j + CHASTE_MATH::Pow(var_parameters__KmNao, 3) * (1 + var_chaste_interface__Ca_Concentrations__Ca_j / var_parameters__KmCai) * var_chaste_interface__Ca_Concentrations__Ca_j + CHASTE_MATH::Pow(mParameters[8], 3) * (1 + CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_j, 3) / CHASTE_MATH::Pow(var_parameters__KmNai, 3)) * var_parameters__KmCai; // mM4 + const double var_I_NCX__s3_sl = CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) * mParameters[5] + CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) * var_parameters__KmCao + CHASTE_MATH::Pow(mParameters[8], 3) * var_chaste_interface__Ca_Concentrations__Ca_sl + CHASTE_MATH::Pow(var_parameters__KmNao, 3) * (1 + var_chaste_interface__Ca_Concentrations__Ca_sl / var_parameters__KmCai) * var_chaste_interface__Ca_Concentrations__Ca_sl + CHASTE_MATH::Pow(mParameters[8], 3) * (1 + CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) / CHASTE_MATH::Pow(var_parameters__KmNai, 3)) * var_parameters__KmCai; // mM4 + const double var_I_NaK__sigma = -CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(0.01485884101040119) * mParameters[8]); // dimensionless + const double var_parameters__Q10CaL = CHASTE_CONST(1.8); // dimensionless + const double var_parameters__Q10NCX = CHASTE_CONST(1.5700000000000001); // dimensionless + const double var_parameters__Q10SLCaP = CHASTE_CONST(2.3500000000000001); // dimensionless + const double var_parameters__Q10SRCaP = CHASTE_CONST(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__fnak = 1 / (1 + CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT) + CHASTE_CONST(0.036499999999999998) * var_I_NaK__sigma * CHASTE_MATH::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 + CHASTE_MATH::Pow(var_parameters__KmNaip, 4) / CHASTE_MATH::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 + CHASTE_MATH::Pow(var_parameters__KmNaip, 4) / CHASTE_MATH::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_NaK__I_nak_converted = CHASTE_CAP() * var_I_NaK__I_nak; // uA_per_cm2 + const double var_parameters__Qpow = -31 + CHASTE_CONST(0.10000000000000001) * mParameters[23]; // dimensionless + const double var_I_PCa__I_pca_junc = CHASTE_MATH::Pow(var_chaste_interface__Ca_Concentrations__Ca_j, CHASTE_CONST(1.6000000000000001)) * CHASTE_MATH::Pow(var_parameters__Q10SLCaP, var_parameters__Qpow) * var_parameters__Fjunc * var_parameters__IbarSLCaP / (CHASTE_MATH::Pow(var_chaste_interface__Ca_Concentrations__Ca_j, CHASTE_CONST(1.6000000000000001)) + CHASTE_MATH::Pow(var_parameters__KmPCa, CHASTE_CONST(1.6000000000000001))); // uA_per_uF + const double var_I_PCa__I_pca_sl = CHASTE_MATH::Pow(var_chaste_interface__Ca_Concentrations__Ca_sl, CHASTE_CONST(1.6000000000000001)) * CHASTE_MATH::Pow(var_parameters__Q10SLCaP, var_parameters__Qpow) * var_parameters__Fsl * var_parameters__IbarSLCaP / (CHASTE_MATH::Pow(var_chaste_interface__Ca_Concentrations__Ca_sl, CHASTE_CONST(1.6000000000000001)) + CHASTE_MATH::Pow(var_parameters__KmPCa, CHASTE_CONST(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_PCa__I_pca_converted = CHASTE_CAP() * var_I_PCa__I_pca; // uA_per_cm2 + const double var_parameters__ecl = CHASTE_MATH::Log(mParameters[4] / mParameters[6]) / var_parameters__FoRT; // mV + const double var_parameters__ek = CHASTE_MATH::Log(mParameters[7] / var_chaste_interface__K_Concentration__K_i) / var_parameters__FoRT; // mV + const double var_I_Ki__aki = CHASTE_CONST(1.02) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(0.23849999999999999) * var_parameters__ek)); // dimensionless + const double var_I_Ki__bki = (CHASTE_CONST(0.49124000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(0.080320000000000003) * var_parameters__ek) + CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(0.061749999999999999) * var_parameters__ek)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(0.51429999999999998) * var_parameters__ek - CHASTE_CONST(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_Ki__I_ki_converted = CHASTE_CAP() * 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_Kr__I_kr_converted = CHASTE_CAP() * var_I_Kr__I_kr; // uA_per_cm2 + const double var_parameters__ena_junc = CHASTE_MATH::Log(mParameters[8] / var_chaste_interface__Na_Concentrations__Na_j) / var_parameters__FoRT; // mV + const double var_I_Na__I_Na_junc = CHASTE_MATH::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 = CHASTE_MATH::Log(mParameters[8] / var_chaste_interface__Na_Concentrations__Na_sl) / var_parameters__FoRT; // mV + const double var_I_Na__I_Na_sl = CHASTE_MATH::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_I_Na__I_Na_converted = CHASTE_CAP() * 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__GtoFast = ((var_parameters__epi == 1) ? (CHASTE_CONST(0.1144) * mParameters[15]) : (CHASTE_CONST(0.0014039999999999999) * mParameters[15])); // mS_per_uF + const double var_I_to__GtoSlow = ((var_parameters__epi == 1) ? (CHASTE_CONST(0.015599999999999999) * mParameters[19]) : (CHASTE_CONST(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_tof_converted = CHASTE_CAP() * 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_I_to__I_to_converted = CHASTE_CAP() * var_I_to__I_to; // uA_per_cm2 + const double var_I_to__I_tos_converted = CHASTE_CAP() * var_I_to__I_tos; // uA_per_cm2 + const double var_parameters__hillSRCaP = CHASTE_CONST(1.7869999999999999); // dimensionless + const double var_SR_Fluxes__J_serca = CHASTE_MATH::Pow(var_parameters__Q10SRCaP, var_parameters__Qpow) * (CHASTE_MATH::Pow((var_chaste_interface__Ca_Concentrations__Ca_i / var_parameters__Kmf), var_parameters__hillSRCaP) - CHASTE_MATH::Pow((var_chaste_interface__SR_Ca_Concentrations__Ca_sr / var_parameters__Kmr), var_parameters__hillSRCaP)) * mParameters[2] / (1 + CHASTE_MATH::Pow((var_chaste_interface__Ca_Concentrations__Ca_i / var_parameters__Kmf), var_parameters__hillSRCaP) + CHASTE_MATH::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_parameters__ksat = CHASTE_CONST(0.32000000000000001); // dimensionless + const double var_parameters__nu = CHASTE_CONST(0.27000000000000002); // dimensionless + const double var_I_NCX__s1_junc = CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_j, 3) * mParameters[5] * CHASTE_MATH::Exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * var_parameters__nu); // mM4 + const double var_I_NCX__s1_sl = CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) * mParameters[5] * CHASTE_MATH::Exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * var_parameters__nu); // mM4 + const double var_I_NCX__s2_junc = CHASTE_MATH::Pow(mParameters[8], 3) * var_chaste_interface__Ca_Concentrations__Ca_j * CHASTE_MATH::Exp((-1 + var_parameters__nu) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT); // mM4 + const double var_I_NCX__I_ncx_junc = CHASTE_MATH::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 * CHASTE_MATH::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 = CHASTE_MATH::Pow(mParameters[8], 3) * var_chaste_interface__Ca_Concentrations__Ca_sl * CHASTE_MATH::Exp((-1 + var_parameters__nu) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT); // mM4 + const double var_I_NCX__I_ncx_sl = CHASTE_MATH::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 * CHASTE_MATH::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_NCX__I_ncx_converted = CHASTE_CAP() * var_I_NCX__I_ncx; // uA_per_cm2 + const double var_parameters__pCa = CHASTE_CONST(0.00054000000000000001) * mParameters[11]; // cm_per_sec + const double var_I_Ca__ibarca_j = 4 * (-CHASTE_CONST(0.34100000000000003) * mParameters[5] + CHASTE_CONST(0.34100000000000003) * var_chaste_interface__Ca_Concentrations__Ca_j * CHASTE_MATH::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 + CHASTE_MATH::Exp(2 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double var_I_Ca__I_Ca_junc = CHASTE_CONST(0.45000000000000001) * CHASTE_MATH::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 * (-CHASTE_CONST(0.34100000000000003) * mParameters[5] + CHASTE_CONST(0.34100000000000003) * var_chaste_interface__Ca_Concentrations__Ca_sl * CHASTE_MATH::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 + CHASTE_MATH::Exp(2 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double var_I_Ca__I_Ca_sl = CHASTE_CONST(0.45000000000000001) * CHASTE_MATH::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 + const double var_I_Ca__I_Ca_converted = CHASTE_CAP() * var_I_Ca__I_Ca; // uA_per_cm2 + const double var_parameters__pNaK = CHASTE_CONST(0.018329999999999999); // dimensionless + const double var_I_Ks__eks = CHASTE_MATH::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 = CHASTE_MATH::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 = CHASTE_CAP() * var_I_Ks__I_ks; // uA_per_cm2 std::vector dqs(26); dqs[0] = var_SR_Fluxes__J_SRleak; diff --git a/chaste_codegen/data/tests/chaste_reference_models/BE/grandi_pasqualini_bers_2010_ssBackwardEuler.hpp b/chaste_codegen/data/tests/chaste_reference_models/BE/grandi_pasqualini_bers_2010_ssBackwardEuler.hpp index ac5acca84..56d674649 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/BE/grandi_pasqualini_bers_2010_ssBackwardEuler.hpp +++ b/chaste_codegen/data/tests/chaste_reference_models/BE/grandi_pasqualini_bers_2010_ssBackwardEuler.hpp @@ -16,8 +16,16 @@ #include "ChasteSerialization.hpp" #include #include "AbstractStimulusFunction.hpp" +#if USING_DEVICE_COMPILER +#include "StimulusEvaluatorCuda.hpp" +#endif #include "AbstractBackwardEulerCardiacCell.hpp" +#if USING_DEVICE_COMPILER +template +class BackwardEulerKernelLauncher; // Forward declare to hide CUDA-specifics from standard C++ compiler +#endif + class Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler : public AbstractBackwardEulerCardiacCell<27> { friend class boost::serialization::access; @@ -39,19 +47,50 @@ class Cellgrandi_pasqualini_bers_2010_ssFromCellMLBackwardEuler : public Abstrac 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: +#if USING_DEVICE_COMPILER + template using SolverKernelLauncher = BackwardEulerKernelLauncher; + static constexpr unsigned TOTAL_SIZE = 39u; + static constexpr unsigned NONLINEAR_SIZE = 27u; +#endif 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(boost::shared_ptr /* unused */, 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: + 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]); + +#if USING_DEVICE_COMPILER + template + DEVICE + static void ComputeResidualDevice(ValueType var_chaste_interface__environment__time, const ValueType rCurrentGuess[NONLINEAR_SIZE], const ValueType rY[], ValueType rResidual[NONLINEAR_SIZE], ValueType mDt, const ValueType mParameters[], bool mSetVoltageDerivativeToZero, ValueType mFixedVoltage, ValueType capacitance, const DeviceStimulusFunctor stim); + + template + DEVICE + static void ComputeJacobianDevice(ValueType var_chaste_interface__environment__time, const ValueType rCurrentGuess[NONLINEAR_SIZE], const ValueType rY[], ValueType rJacobian[NONLINEAR_SIZE][NONLINEAR_SIZE], ValueType mDt, const ValueType mParameters[], bool mSetVoltageDerivativeToZero, ValueType mFixedVoltage, ValueType capacitance, const DeviceStimulusFunctor stim); + template + DEVICE + static void UpdateTransmembranePotentialDevice(ValueType var_chaste_interface__environment__time, ValueType rY[], ValueType mDt, const ValueType mParameters[], bool mSetVoltageDerivativeToZero, ValueType mFixedVoltage, DeviceStimulusFunctor stim, ValueType capacitance); + + template + DEVICE + static void SolveClosedFormVarsDevice(ValueType rY[TOTAL_SIZE], ValueType mDt, const ValueType mParameters[], bool mSetVoltageDerivativeToZero, ValueType mFixedVoltage, ValueType capacitance); + + template + DEVICE + static void FillInitialGuessDevice(ValueType _guess[NONLINEAR_SIZE], const ValueType rY[TOTAL_SIZE]); + + template + DEVICE + static void ScatterSolutionDevice(const ValueType _guess[NONLINEAR_SIZE], ValueType rY[TOTAL_SIZE]); +#endif +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); -}; + std::vector ComputeDerivedQuantities(double var_chaste_interface__environment__time, const std::vector & rY);}; // Needs to be included last #include "SerializationExportWrapper.hpp" @@ -86,4 +125,9 @@ namespace boost } -#endif // CELLGRANDI_PASQUALINI_BERS_2010_SSFROMCELLMLBACKWARDEULER_HPP_ \ No newline at end of file +#endif // CELLGRANDI_PASQUALINI_BERS_2010_SSFROMCELLMLBACKWARDEULER_HPP_ + +#if USING_DEVICE_COMPILER + #include "grandi_pasqualini_bers_2010_ssBackwardEulerKernels.hpp" + #include "BackwardEulerKernels.hpp" +#endif \ No newline at end of file diff --git a/chaste_codegen/data/tests/chaste_reference_models/BE/li_mouse_2010.cpp b/chaste_codegen/data/tests/chaste_reference_models/BE/li_mouse_2010.cpp index 6ac6a31a9..7582a681d 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/BE/li_mouse_2010.cpp +++ b/chaste_codegen/data/tests/chaste_reference_models/BE/li_mouse_2010.cpp @@ -22,6 +22,8 @@ #include "HeartConfig.hpp" #include "IsNan.hpp" #include "MathsCustomFunctions.hpp" +#include "ChasteMathDeviceNamespaces.hpp" +#include "ChasteCpuMacros.hpp" @@ -30,10 +32,10 @@ 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_amplitude_converted = -15 * CHASTE_CAP(); // 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 + const double var_chaste_interface__cell__stim_period = CHASTE_CONST(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, @@ -61,18 +63,18 @@ // 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[0] = CHASTE_CONST(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[4] = CHASTE_CONST(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] + this->mParameters[7] = CHASTE_CONST(0.34999999999999998); // (var_time_independent_K_I__g_K1) [milliS_per_microF] + this->mParameters[8] = CHASTE_CONST(0.059499999999999997); // (var_non_inactivating_steady_state_K_I__g_Kss) [milliS_per_microF] + this->mParameters[9] = CHASTE_CONST(0.016500000000000001); // (var_rapid_delayed_rectifier_K_I__g_Kr) [milliS_per_microF] + this->mParameters[10] = CHASTE_CONST(0.0057499999999999999); // (var_slow_delayed_rectifier_K_I__g_Ks) [milliS_per_microF] + this->mParameters[11] = CHASTE_CONST(3.9390000000000001); // (var_sodium_calcium_exchange_current__V_max_NCX) [picoA_per_picoF] } Cellli_mouse_2010FromCellMLBackwardEuler::~Cellli_mouse_2010FromCellMLBackwardEuler() @@ -119,7 +121,7 @@ // 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]); + double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -159,60 +161,60 @@ 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_background_current__g_Cab = CHASTE_CONST(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_calcium_pump_current__Km_pCa = CHASTE_CONST(0.28849999999999998); // micromolar + const double var_calcium_pump_current__i_pCa_max = CHASTE_CONST(0.095500000000000002); // picoA_per_picoF + const double var_calcium_pump_current__i_pCa = CHASTE_MATH::Pow(var_calcium_concentration__Cai, 2) * var_calcium_pump_current__i_pCa_max / (CHASTE_MATH::Pow(var_calcium_concentration__Cai, 2) + CHASTE_MATH::Pow(var_calcium_pump_current__Km_pCa, 2)); // picoA_per_picoF + const double var_cell__Acap = CHASTE_CONST(0.00013866); // cm2 + const double var_cell__F = CHASTE_CONST(96.5); // coulomb_per_millimole + const double var_cell__R = CHASTE_CONST(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_calcium_background_current__E_CaN = CHASTE_CONST(0.5) * var_cell__R * var_cell__T * CHASTE_MATH::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__O_ClCa = CHASTE_CONST(0.20000000000000001) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(5.9871794871794881) - CHASTE_CONST(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_cell__Vss = CHASTE_CONST(2.1999999999999998e-8); // microlitre + const double var_L_type_calcium_current__i_CaL = ((CHASTE_MATH::Abs(var_L_type_calcium_current__FVRT_Ca) > CHASTE_CONST(1.0000000000000001e-5)) ? (-2 * (-var_chaste_interface__calcium_concentration__Cass + mParameters[1] * CHASTE_MATH::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 - CHASTE_MATH::Exp(-var_L_type_calcium_current__FVRT_Ca)) * var_cell__Acap * mParameters[5])) : (-CHASTE_CONST(2.0000000000000002e-5) * (-var_chaste_interface__calcium_concentration__Cass + mParameters[1] * CHASTE_MATH::Exp(-CHASTE_CONST(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 - CHASTE_MATH::Exp(-CHASTE_CONST(1.0000000000000001e-5))) * var_cell__Acap * mParameters[5]))); // picoA_per_picoF + const double var_L_type_calcium_current__i_CaL_converted = CHASTE_CAP() * var_L_type_calcium_current__i_CaL; // uA_per_cm2 + const double var_fast_transient_outward_K_I__g_Kto_f = CHASTE_CONST(0.53469999999999995); // milliS_per_microF + const double var_fast_transient_outward_K_I__E_K = var_cell__R * var_cell__T * CHASTE_MATH::Log(mParameters[2] / var_chaste_interface__potassium_concentration__Ki) / var_cell__F; // millivolt + const double var_fast_transient_outward_K_I__i_Kto_f = CHASTE_MATH::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_non_inactivating_steady_state_K_I__i_Kss_converted = CHASTE_CAP() * var_non_inactivating_steady_state_K_I__i_Kss; // uA_per_cm2 + const double var_slow_delayed_rectifier_K_I__i_Ks = CHASTE_MATH::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 = CHASTE_CAP() * 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_background_current__g_Nab = CHASTE_CONST(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_mCai = CHASTE_CONST(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_sodium_calcium_exchange_current__eta = CHASTE_CONST(0.34999999999999998); // dimensionless + const double var_sodium_calcium_exchange_current__k_sat = CHASTE_CONST(0.27000000000000002); // dimensionless + const double var_fast_sodium_current__E_Na = var_cell__R * var_cell__T * CHASTE_MATH::Log((mParameters[3] + CHASTE_CONST(0.1111111111111111) * mParameters[2]) / (var_chaste_interface__sodium_concentration__Nai + CHASTE_CONST(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_fast_sodium_current__i_Na_converted = CHASTE_CAP() * 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 * CHASTE_MATH::Log((mParameters[2] + CHASTE_CONST(0.020408163265306124) * mParameters[3]) / (var_chaste_interface__potassium_concentration__Ki + CHASTE_CONST(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 = CHASTE_CAP() * 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_calcium_exchange_current__i_NCX = (CHASTE_MATH::Pow(var_chaste_interface__sodium_concentration__Nai, 3) * mParameters[1] * CHASTE_MATH::Exp(var_cell__F * var_chaste_interface__cell__V * var_sodium_calcium_exchange_current__eta / (var_cell__R * var_cell__T)) - CHASTE_MATH::Pow(mParameters[3], 3) * var_calcium_concentration__Cai * CHASTE_MATH::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 + CHASTE_MATH::Pow(var_sodium_calcium_exchange_current__K_mAllo, 2) / CHASTE_MATH::Pow(var_calcium_concentration__Cai, 2)) * (1 + var_sodium_calcium_exchange_current__k_sat * CHASTE_MATH::Exp((-1 + var_sodium_calcium_exchange_current__eta) * var_cell__F * var_chaste_interface__cell__V / (var_cell__R * var_cell__T))) * (CHASTE_MATH::Pow(mParameters[3], 3) * var_calcium_concentration__Cai + CHASTE_MATH::Pow(var_sodium_calcium_exchange_current__K_mNao, 3) * var_calcium_concentration__Cai + CHASTE_MATH::Pow(var_chaste_interface__sodium_concentration__Nai, 3) * mParameters[1] + CHASTE_MATH::Pow(var_chaste_interface__sodium_concentration__Nai, 3) * var_sodium_calcium_exchange_current__K_mCao + CHASTE_MATH::Pow(mParameters[3], 3) * (1 + CHASTE_MATH::Pow(var_chaste_interface__sodium_concentration__Nai, 3) / CHASTE_MATH::Pow(var_sodium_calcium_exchange_current__K_mNai, 3)) * var_sodium_calcium_exchange_current__K_mCai + CHASTE_MATH::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 = CHASTE_CAP() * 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_sodium_potassium_pump_current__i_NaK_max = CHASTE_CONST(2.4860000000000002); // picoA_per_picoF + const double var_sodium_potassium_pump_current__sigma = -CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(1.4858841010401188e-5) * mParameters[3]); // dimensionless + const double var_sodium_potassium_pump_current__f_NaK = 1 / (1 + CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(0.10000000000000001) * var_cell__F * var_chaste_interface__cell__V / (var_cell__R * var_cell__T)) + CHASTE_CONST(0.036499999999999998) * var_sodium_potassium_pump_current__sigma * CHASTE_MATH::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 + CHASTE_MATH::Pow((var_sodium_potassium_pump_current__Km_Nai / var_chaste_interface__sodium_concentration__Nai), CHASTE_CONST(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 + CHASTE_MATH::Exp(CHASTE_CONST(0.089599999999999999) * var_chaste_interface__cell__V - CHASTE_CONST(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 = CHASTE_CAP() * var_time_independent_K_I__i_K1; // uA_per_cm2 + const double var_ultra_rapidly_activating_delayed_rectifier_K_I__g_Kur = CHASTE_CONST(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 var_chaste_interface__i_ionic = CHASTE_CAP() * var_calcium_activated_chloride_current__i_ClCa + CHASTE_CAP() * var_calcium_background_current__i_Cab + CHASTE_CAP() * var_calcium_pump_current__i_pCa + CHASTE_CAP() * var_fast_transient_outward_K_I__i_Kto_f + CHASTE_CAP() * var_slow_transient_outward_K_I__i_Kto_s + CHASTE_CAP() * var_sodium_background_current__i_Nab + CHASTE_CAP() * var_sodium_potassium_pump_current__i_NaK + CHASTE_CAP() * 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)); @@ -222,7 +224,7 @@ 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]); + double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -273,85 +275,85 @@ //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__K_L = CHASTE_CONST(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__a = CHASTE_CONST(0.0625); // dimensionless + const double var_L_type_calcium_current__b = CHASTE_CONST(0.40000000000000002); // dimensionless + const double var_L_type_calcium_current__delta_V_L = CHASTE_CONST(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__phi_L = CHASTE_CONST(1.798); // dimensionless + const double var_L_type_calcium_current__t_L = CHASTE_CONST(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_background_current__g_Cab = CHASTE_CONST(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__Kd = CHASTE_CONST(0.59999999999999998); // micromolar + const double var_calcium_concentration__Bi = 1 / (1 + var_calcium_concentration__Bmax * var_calcium_concentration__Kd / CHASTE_MATH::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 / CHASTE_MATH::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_concentration__BJSR = 1 / (1 + var_calcium_concentration__CSQN_tot * var_calcium_concentration__Km_CSQN / CHASTE_MATH::Pow((var_chaste_interface__calcium_concentration__CaJSR + var_calcium_concentration__Km_CSQN), 2)); // dimensionless + const double var_calcium_fluxes__CaMKb = CHASTE_CONST(0.050000000000000003) * (1 - var_chaste_interface__calcium_fluxes__CaMKt) / (1 + CHASTE_CONST(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__Km_up = CHASTE_CONST(0.41199999999999998); // micromolar + const double var_calcium_fluxes__P_ryr_const1 = -CHASTE_CONST(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 var_calcium_fluxes__off_rate = CHASTE_CONST(0.00020000000000000001); // per_millisecond + const double var_calcium_fluxes__on_rate = CHASTE_CONST(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_calcium_fluxes__v2 = CHASTE_CONST(3.0000000000000001e-5); // per_millisecond + const double var_calcium_fluxes__v2_caff = CHASTE_CONST(0.10000000000000001); // per_millisecond + const double var_calcium_fluxes__vmup_init = CHASTE_CONST(0.50590000000000002); // micromolar_per_millisecond + const double var_calcium_fluxes__vmup = (1 + CHASTE_CONST(2.9982000000000002) * CHASTE_MATH::Pow(var_calcium_fluxes__CaMKa, CHASTE_CONST(2.5830000000000002)) / (CHASTE_CONST(1.7590641847756086) + CHASTE_MATH::Pow(var_calcium_fluxes__CaMKa, CHASTE_CONST(2.5830000000000002)))) * var_calcium_fluxes__vmup_init; // micromolar_per_millisecond + const double var_calcium_fluxes__J_serca = CHASTE_MATH::Pow(var_calcium_concentration__Cai, 2) * var_calcium_fluxes__vmup / (CHASTE_MATH::Pow(var_calcium_concentration__Cai, 2) + CHASTE_MATH::Pow(var_calcium_fluxes__Km_up, 2)); // micromolar_per_millisecond + const double var_calcium_pump_current__Km_pCa = CHASTE_CONST(0.28849999999999998); // micromolar + const double var_calcium_pump_current__i_pCa_max = CHASTE_CONST(0.095500000000000002); // picoA_per_picoF + const double var_calcium_pump_current__i_pCa = CHASTE_MATH::Pow(var_calcium_concentration__Cai, 2) * var_calcium_pump_current__i_pCa_max / (CHASTE_MATH::Pow(var_calcium_concentration__Cai, 2) + CHASTE_MATH::Pow(var_calcium_pump_current__Km_pCa, 2)); // picoA_per_picoF + const double var_cell__Acap = CHASTE_CONST(0.00013866); // cm2 + const double var_cell__F = CHASTE_CONST(96.5); // coulomb_per_millimole + const double var_cell__R = CHASTE_CONST(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_calcium_background_current__E_CaN = CHASTE_CONST(0.5) * var_cell__R * var_cell__T * CHASTE_MATH::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__expVL = CHASTE_MATH::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_cell__VJSR = CHASTE_CONST(7.7000000000000001e-8); // microlitre + const double var_cell__VNSR = CHASTE_CONST(2.3099999999999999e-7); // microlitre + const double var_cell__Vmyo = CHASTE_CONST(2.1999999999999999e-5); // microlitre + const double var_cell__Vss = CHASTE_CONST(2.1999999999999998e-8); // microlitre + const double var_L_type_calcium_current__i_CaL = ((CHASTE_MATH::Abs(var_L_type_calcium_current__FVRT_Ca) > CHASTE_CONST(1.0000000000000001e-5)) ? (-2 * (-var_chaste_interface__calcium_concentration__Cass + mParameters[1] * CHASTE_MATH::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 - CHASTE_MATH::Exp(-var_L_type_calcium_current__FVRT_Ca)) * var_cell__Acap * mParameters[5])) : (-CHASTE_CONST(2.0000000000000002e-5) * (-var_chaste_interface__calcium_concentration__Cass + mParameters[1] * CHASTE_MATH::Exp(-CHASTE_CONST(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 - CHASTE_MATH::Exp(-CHASTE_CONST(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 * CHASTE_MATH::Exp(-CHASTE_CONST(0.038580246913580245) * CHASTE_MATH::Pow((-1 + CHASTE_CONST(0.20000000000000001) * var_chaste_interface__cell__V), 2)) / var_L_type_calcium_current__i_CaL_max; // 1 / millisecond + const double var_cell__prepulses_number = CHASTE_CONST(10000000000.0); // dimensionless + const double var_chaste_interface__cell__stim_period = CHASTE_CONST(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_cell__i_Stim_converted = CHASTE_STIM(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_cell__i_Stim = var_cell__i_Stim_converted / CHASTE_CAP(); // 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 var_fast_sodium_current__alpha_Na11 = CHASTE_CONST(3.802) / (CHASTE_CONST(0.20000000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(0.016666666666666666) - CHASTE_CONST(0.0066666666666666671) * var_chaste_interface__cell__V) + CHASTE_CONST(0.1027) * CHASTE_MATH::Exp(-CHASTE_CONST(0.14705882352941177) - CHASTE_CONST(0.058823529411764705) * var_chaste_interface__cell__V)); // per_millisecond + const double var_fast_sodium_current__alpha_Na12 = CHASTE_CONST(3.802) / (CHASTE_CONST(0.1027) * CHASTE_MATH::Exp(-CHASTE_CONST(0.16666666666666666) - CHASTE_CONST(0.066666666666666666) * var_chaste_interface__cell__V) + CHASTE_CONST(0.23000000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(0.016666666666666666) - CHASTE_CONST(0.0066666666666666671) * var_chaste_interface__cell__V)); // per_millisecond + const double var_fast_sodium_current__alpha_Na13 = CHASTE_CONST(3.802) / (CHASTE_CONST(0.25) * CHASTE_MATH::Exp(-CHASTE_CONST(0.016666666666666666) - CHASTE_CONST(0.0066666666666666671) * var_chaste_interface__cell__V) + CHASTE_CONST(0.1027) * CHASTE_MATH::Exp(-CHASTE_CONST(0.20833333333333334) - CHASTE_CONST(0.083333333333333329) * var_chaste_interface__cell__V)); // per_millisecond + const double var_fast_sodium_current__alpha_Na2 = 1 / (CHASTE_CONST(0.39395599999999997) + CHASTE_CONST(0.188495) * CHASTE_MATH::Exp(-CHASTE_CONST(0.42168674698795178) - CHASTE_CONST(0.060240963855421679) * var_chaste_interface__cell__V)); // per_millisecond + const double var_fast_sodium_current__alpha_Na3 = CHASTE_CONST(6.9999999999999997e-7) * CHASTE_MATH::Exp(-CHASTE_CONST(0.90909090909090906) - CHASTE_CONST(0.12987012987012986) * var_chaste_interface__cell__V); // per_millisecond + const double var_fast_sodium_current__alpha_Na4 = CHASTE_CONST(0.001) * var_fast_sodium_current__alpha_Na2; // per_millisecond + const double var_fast_sodium_current__alpha_Na5 = CHASTE_CONST(1.0526315789473684e-5) * var_fast_sodium_current__alpha_Na2; // per_millisecond + const double var_fast_sodium_current__beta_Na11 = CHASTE_CONST(0.19170000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(0.12315270935960591) - CHASTE_CONST(0.04926108374384236) * var_chaste_interface__cell__V); // per_millisecond + const double var_fast_sodium_current__beta_Na12 = CHASTE_CONST(0.20000000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.12315270935960591) - CHASTE_CONST(0.04926108374384236) * var_chaste_interface__cell__V); // per_millisecond + const double var_fast_sodium_current__beta_Na13 = CHASTE_CONST(0.22) * CHASTE_MATH::Exp(CHASTE_CONST(0.36945812807881773) - CHASTE_CONST(0.04926108374384236) * var_chaste_interface__cell__V); // per_millisecond + const double var_fast_sodium_current__beta_Na3 = CHASTE_CONST(0.008539999999999999) + CHASTE_CONST(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 @@ -360,68 +362,68 @@ 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 var_fast_sodium_current__beta_Na5 = CHASTE_CONST(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_fast_transient_outward_K_I__g_Kto_f = CHASTE_CONST(0.53469999999999995); // milliS_per_microF + const double var_fast_transient_outward_K_I__E_K = var_cell__R * var_cell__T * CHASTE_MATH::Log(mParameters[2] / var_chaste_interface__potassium_concentration__Ki) / var_cell__F; // millivolt + const double var_fast_transient_outward_K_I__i_Kto_f = CHASTE_MATH::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 var_rapid_delayed_rectifier_K_I__alpha_a0 = CHASTE_CONST(0.022348) * CHASTE_MATH::Exp(CHASTE_CONST(0.01176) * var_chaste_interface__cell__V); // per_millisecond + const double var_rapid_delayed_rectifier_K_I__alpha_a1 = CHASTE_CONST(0.033500000000000002) * CHASTE_MATH::Exp(CHASTE_CONST(0.0109) * var_chaste_interface__cell__V); // per_millisecond + const double var_rapid_delayed_rectifier_K_I__alpha_i = CHASTE_CONST(0.070300000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.14349999999999999) + CHASTE_CONST(0.0287) * var_chaste_interface__cell__V); // per_millisecond + const double var_rapid_delayed_rectifier_K_I__beta_a0 = CHASTE_CONST(0.047002000000000002) * CHASTE_MATH::Exp(-CHASTE_CONST(0.063100000000000003) * var_chaste_interface__cell__V); // per_millisecond + const double var_rapid_delayed_rectifier_K_I__beta_a1 = CHASTE_CONST(6.8899999999999994e-5) * CHASTE_MATH::Exp(-CHASTE_CONST(0.041779999999999998) * var_chaste_interface__cell__V); // per_millisecond + const double var_rapid_delayed_rectifier_K_I__beta_i = CHASTE_CONST(0.0064970000000000002) * CHASTE_MATH::Exp(-CHASTE_CONST(0.16339999999999999) - CHASTE_CONST(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 var_rapid_delayed_rectifier_K_I__kb = CHASTE_CONST(0.036777999999999998); // per_millisecond + const double var_rapid_delayed_rectifier_K_I__kf = CHASTE_CONST(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 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 - CHASTE_CONST(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 var_ryanodine_receptors__k_minus_a = CHASTE_CONST(0.071249999999999994); // per_millisecond + const double var_ryanodine_receptors__k_minus_b = CHASTE_CONST(0.96499999999999997); // per_millisecond + const double var_ryanodine_receptors__k_minus_c = CHASTE_CONST(0.00080000000000000004); // per_millisecond + const double var_ryanodine_receptors__k_plus_a = CHASTE_CONST(0.0060749999999999997); // micromolar4_per_millisecond + const double var_ryanodine_receptors__k_plus_b = CHASTE_CONST(0.0040499999999999998); // micromolar3_per_millisecond + const double var_ryanodine_receptors__k_plus_c = CHASTE_CONST(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 d_dt_chaste_interface_var_ryanodine_receptors__P_O2 = -var_chaste_interface__ryanodine_receptors__P_O2 * var_ryanodine_receptors__k_minus_b + CHASTE_MATH::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 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 + CHASTE_MATH::Pow(var_chaste_interface__calcium_concentration__Cass, var_ryanodine_receptors__n) * var_ryanodine_receptors__P_C1 * var_ryanodine_receptors__k_plus_a - CHASTE_MATH::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 = CHASTE_MATH::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_background_current__g_Nab = CHASTE_CONST(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_mCai = CHASTE_CONST(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_sodium_calcium_exchange_current__eta = CHASTE_CONST(0.34999999999999998); // dimensionless + const double var_sodium_calcium_exchange_current__k_sat = CHASTE_CONST(0.27000000000000002); // dimensionless + const double var_fast_sodium_current__E_Na = var_cell__R * var_cell__T * CHASTE_MATH::Log((mParameters[3] + CHASTE_CONST(0.1111111111111111) * mParameters[2]) / (var_chaste_interface__sodium_concentration__Nai + CHASTE_CONST(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_rapid_delayed_rectifier_K_I__i_Kr = (-var_cell__R * var_cell__T * CHASTE_MATH::Log((mParameters[2] + CHASTE_CONST(0.020408163265306124) * mParameters[3]) / (var_chaste_interface__potassium_concentration__Ki + CHASTE_CONST(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_calcium_exchange_current__i_NCX = (CHASTE_MATH::Pow(var_chaste_interface__sodium_concentration__Nai, 3) * mParameters[1] * CHASTE_MATH::Exp(var_cell__F * var_chaste_interface__cell__V * var_sodium_calcium_exchange_current__eta / (var_cell__R * var_cell__T)) - CHASTE_MATH::Pow(mParameters[3], 3) * var_calcium_concentration__Cai * CHASTE_MATH::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 + CHASTE_MATH::Pow(var_sodium_calcium_exchange_current__K_mAllo, 2) / CHASTE_MATH::Pow(var_calcium_concentration__Cai, 2)) * (1 + var_sodium_calcium_exchange_current__k_sat * CHASTE_MATH::Exp((-1 + var_sodium_calcium_exchange_current__eta) * var_cell__F * var_chaste_interface__cell__V / (var_cell__R * var_cell__T))) * (CHASTE_MATH::Pow(mParameters[3], 3) * var_calcium_concentration__Cai + CHASTE_MATH::Pow(var_sodium_calcium_exchange_current__K_mNao, 3) * var_calcium_concentration__Cai + CHASTE_MATH::Pow(var_chaste_interface__sodium_concentration__Nai, 3) * mParameters[1] + CHASTE_MATH::Pow(var_chaste_interface__sodium_concentration__Nai, 3) * var_sodium_calcium_exchange_current__K_mCao + CHASTE_MATH::Pow(mParameters[3], 3) * (1 + CHASTE_MATH::Pow(var_chaste_interface__sodium_concentration__Nai, 3) / CHASTE_MATH::Pow(var_sodium_calcium_exchange_current__K_mNai, 3)) * var_sodium_calcium_exchange_current__K_mCai + CHASTE_MATH::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 - CHASTE_CONST(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 = CHASTE_CONST(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 var_sodium_potassium_pump_current__i_NaK_max = CHASTE_CONST(2.4860000000000002); // picoA_per_picoF + const double var_sodium_potassium_pump_current__sigma = -CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(1.4858841010401188e-5) * mParameters[3]); // dimensionless + const double var_sodium_potassium_pump_current__f_NaK = 1 / (1 + CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(0.10000000000000001) * var_cell__F * var_chaste_interface__cell__V / (var_cell__R * var_cell__T)) + CHASTE_CONST(0.036499999999999998) * var_sodium_potassium_pump_current__sigma * CHASTE_MATH::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 + CHASTE_MATH::Pow((var_sodium_potassium_pump_current__Km_Nai / var_chaste_interface__sodium_concentration__Nai), CHASTE_CONST(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_time_independent_K_I__i_K1 = (-var_fast_transient_outward_K_I__E_K + var_chaste_interface__cell__V) * mParameters[2] * mParameters[7] / ((1 + CHASTE_MATH::Exp(CHASTE_CONST(0.089599999999999999) * var_chaste_interface__cell__V - CHASTE_CONST(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 = CHASTE_CONST(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 @@ -456,7 +458,7 @@ 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]); + double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -490,19 +492,19 @@ 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_x0 = CHASTE_MATH::Exp(CHASTE_CONST(0.15506520491866829) * var_chaste_interface__cell__V); + const double var_x1 = CHASTE_CONST(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_x3 = CHASTE_CONST(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_x5 = CHASTE_CONST(0.66666666666666663) * var_x0 * var_x2; + const double var_x6 = 1 + CHASTE_CONST(0.0015873015873015873) * var_chaste_interface__calcium_concentration__CaJSR; + const double var_x7 = CHASTE_MATH::Pow(var_x6, (-2)); + const double var_x8 = 1 / (1 + CHASTE_CONST(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_x12 = var_chaste_interface__environment__time < CHASTE_CONST(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)); @@ -510,131 +512,131 @@ 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_x20 = ((var_x12) ? (CHASTE_CONST(3.0000000000000001e-5)) : (CHASTE_CONST(0.10000000000000001))); + const double var_x21 = ((var_x12) ? (-CHASTE_CONST(0.029999999999999999)) : (-100)); + const double var_x22 = CHASTE_MATH::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_x24 = 1 + CHASTE_CONST(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_x26 = CHASTE_CONST(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_x28 = CHASTE_MATH::Pow(var_x27, CHASTE_CONST(2.5830000000000002)); + const double var_x29 = 1 / (CHASTE_CONST(1.7590641847756086) + var_x28); + const double var_x30 = CHASTE_CONST(1.5167893800000001) * var_x29; + const double var_x31 = CHASTE_CONST(0.50590000000000002) + var_x28 * var_x30; + const double var_x32 = CHASTE_MATH::Pow(var_chaste_interface__calcium_concentration__Cai_converted, 2); + const double var_x33 = var_x22 * var_x31 / CHASTE_MATH::Pow((CHASTE_CONST(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_x35 = 1 / (CHASTE_CONST(0.16974399999999998) + var_x34); + const double var_x36 = CHASTE_MATH::Pow(var_x27, CHASTE_CONST(1.5830000000000002)); + const double var_x37 = CHASTE_MATH::Pow(var_chaste_interface__calcium_concentration__Cass, (-2)); + const double var_x38 = var_x23 * var_x37 / CHASTE_MATH::Pow(var_x24, 2); + const double var_x39 = CHASTE_MATH::Pow(var_x27, CHASTE_CONST(4.1660000000000004)) / CHASTE_MATH::Pow((1 + CHASTE_CONST(0.56848408867329814) * var_x28), 2); + const double var_x40 = var_x35 * (-CHASTE_CONST(0.044315367702357472) * var_x38 * var_x39 + CHASTE_CONST(0.13712534389890002) * var_x29 * var_x36 * var_x38); + const double var_x41 = CHASTE_CONST(95238095.238095239) * var_x32; + const double var_x42 = CHASTE_CONST(2.5830000000000002) - CHASTE_CONST(0.12915000000000001) * var_x25; + const double var_x43 = var_x35 * (-CHASTE_CONST(0.49018713237495126) * var_x39 * var_x42 + var_x30 * var_x36 * var_x42); + const double var_x44 = CHASTE_CONST(0.00059999999999999995) + var_chaste_interface__calcium_concentration__Cai_converted; + const double var_x45 = 1 + CHASTE_CONST(6.5400000000000004e-5) / CHASTE_MATH::Pow(var_x44, 2); const double var_x46 = 1 / var_x45; - const double var_x47 = 0.001 * var_x46; + const double var_x47 = CHASTE_CONST(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_x49 = 1 / (CHASTE_CONST(0.083232249999999994) + var_x34); + const double var_x50 = CHASTE_MATH::Exp(-CHASTE_CONST(0.024495140414072337) * var_chaste_interface__cell__V); + const double var_x51 = CHASTE_MATH::Pow(mParameters[3], 3); + const double var_x52 = 1 / (1 + CHASTE_CONST(0.27000000000000002) * var_x50); + const double var_x53 = CHASTE_MATH::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_x55 = (1 + CHASTE_CONST(277.77777777777777) * var_chaste_interface__calcium_concentration__Cai_converted) * mParameters[1]; + const double var_x56 = var_x51 * (1 + CHASTE_CONST(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_x59 = 1 / (var_x54 + var_x58 + 1400 * var_x53 + CHASTE_CONST(1728000000000.0) * var_x55 + CHASTE_CONST(3.6000000000000001) * var_x56 + CHASTE_CONST(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_x62 = CHASTE_MATH::Pow((CHASTE_CONST(2.0543764087152516e-15) * var_x53 + CHASTE_CONST(5.282682193839219e-18) * var_x56 + CHASTE_CONST(2.535687453042825e-6) * var_x55 + CHASTE_CONST(1.4674117205108941e-18) * var_x54 + CHASTE_CONST(1.4674117205108941e-15) * var_x51 * var_chaste_interface__calcium_concentration__Cai_converted + var_chaste_interface__calcium_concentration__Cai_converted), (-2)); + const double var_x63 = CHASTE_MATH::Exp(CHASTE_CONST(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_x65 = -CHASTE_CONST(6.81472e+17) - var_x57 - CHASTE_CONST(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_x68 = CHASTE_MATH::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_x70 = -3 * var_x69 - 4200 * var_x68 - CHASTE_CONST(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_x73 = CHASTE_CONST(0.59999999999999998) + var_chaste_interface__calcium_concentration__Cass; + const double var_x74 = CHASTE_MATH::Pow(var_x73, (-2)); + const double var_x75 = 1 / (1 + CHASTE_CONST(65.399999999999991) * var_x74); + const double var_x76 = CHASTE_CONST(0.075369662812530269) * var_chaste_interface__cell__V; + const double var_x77 = CHASTE_MATH::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_x79 = CHASTE_CONST(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_x81 = CHASTE_MATH::Abs(var_x76) > CHASTE_CONST(1.0000000000000001e-5); + const double var_x82 = CHASTE_MATH::Exp(-CHASTE_CONST(1.0000000000000001e-5)); + const double var_x83 = CHASTE_CONST(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_x86 = CHASTE_CONST(32.656617993405561) * mParameters[5]; + const double var_x87 = CHASTE_CONST(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_x90 = CHASTE_CONST(0.2857142857142857) * CHASTE_MATH::Exp(-CHASTE_CONST(0.038580246913580245) * CHASTE_MATH::Pow((-1 + CHASTE_CONST(0.20000000000000001) * var_chaste_interface__cell__V), 2)); + const double var_x91 = CHASTE_CONST(0.04926108374384236) * var_chaste_interface__cell__V; + const double var_x92 = CHASTE_CONST(0.20000000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.12315270935960591) - var_x91); + const double var_x93 = CHASTE_MATH::Exp(-CHASTE_CONST(0.016666666666666666) - CHASTE_CONST(0.0066666666666666671) * var_chaste_interface__cell__V); + const double var_x94 = 1 / (CHASTE_CONST(0.25) * var_x93 + CHASTE_CONST(0.1027) * CHASTE_MATH::Exp(-CHASTE_CONST(0.20833333333333334) - CHASTE_CONST(0.083333333333333329) * var_chaste_interface__cell__V)); + const double var_x95 = CHASTE_CONST(3.802) * var_x94; + const double var_x96 = CHASTE_CONST(0.008539999999999999) + CHASTE_CONST(2.0000000000000002e-5) * var_chaste_interface__cell__V; + const double var_x97 = CHASTE_CONST(3.802) / (CHASTE_CONST(0.1027) * CHASTE_MATH::Exp(-CHASTE_CONST(0.16666666666666666) - CHASTE_CONST(0.066666666666666666) * var_chaste_interface__cell__V) + CHASTE_CONST(0.23000000000000001) * var_x93); + const double var_x98 = CHASTE_MATH::Exp(-CHASTE_CONST(0.90909090909090906) - CHASTE_CONST(0.12987012987012986) * var_chaste_interface__cell__V); + const double var_x99 = CHASTE_CONST(6.9999999999999997e-7) * var_x98; + const double var_x100 = CHASTE_MATH::Exp(CHASTE_CONST(0.36945812807881773) - var_x91); + const double var_x101 = CHASTE_CONST(0.22) * var_x100; + const double var_x102 = CHASTE_CONST(3.802) / (CHASTE_CONST(0.20000000000000001) * var_x93 + CHASTE_CONST(0.1027) * CHASTE_MATH::Exp(-CHASTE_CONST(0.14705882352941177) - CHASTE_CONST(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_x104 = CHASTE_CONST(0.19170000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(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_x107 = 1 / (CHASTE_CONST(0.39395599999999997) + CHASTE_CONST(0.188495) * CHASTE_MATH::Exp(-CHASTE_CONST(0.42168674698795178) - CHASTE_CONST(0.060240963855421679) * var_chaste_interface__cell__V)); + const double var_x108 = CHASTE_CONST(1.0526315789473684e-5) * var_x107; + const double var_x109 = CHASTE_CONST(1.4e-8) * var_x98; + const double var_x110 = CHASTE_CONST(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_x112 = CHASTE_CONST(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_x116 = CHASTE_MATH::Log(var_x115); + const double var_x117 = -CHASTE_CONST(26.535875647668394) * var_x116 + var_chaste_interface__cell__V; + const double var_x118 = CHASTE_CONST(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_x120 = 1 / (var_chaste_interface__potassium_concentration__Ki + CHASTE_CONST(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_x122 = CHASTE_CONST(1.7331439082928402) * var_x114; + const double var_x123 = CHASTE_MATH::Exp(CHASTE_CONST(0.089599999999999999) * var_chaste_interface__cell__V - CHASTE_CONST(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_x127 = CHASTE_MATH::Pow(var_x126, CHASTE_CONST(2.3999999999999999)); + const double var_x128 = var_x126 * var_x127 * mParameters[2] / ((1500 + mParameters[2]) * CHASTE_MATH::Pow((CHASTE_CONST(7.44287265976699e-11) + var_x127), 2) * (1 + CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(0.0037684831406265135) * var_chaste_interface__cell__V) + CHASTE_CONST(0.036499999999999998) * (-CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(1.4858841010401188e-5) * mParameters[3])) * CHASTE_MATH::Exp(-CHASTE_CONST(0.037684831406265135) * var_chaste_interface__cell__V))); + const double var_x129 = CHASTE_CONST(0.022348) * CHASTE_MATH::Exp(CHASTE_CONST(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_x131 = CHASTE_CONST(0.033500000000000002) * CHASTE_MATH::Exp(CHASTE_CONST(0.0109) * var_chaste_interface__cell__V); + const double var_x132 = CHASTE_CONST(6.8899999999999994e-5) * CHASTE_MATH::Exp(-CHASTE_CONST(0.041779999999999998) * var_chaste_interface__cell__V); + const double var_x133 = CHASTE_CONST(0.0064970000000000002) * CHASTE_MATH::Exp(-CHASTE_CONST(0.16339999999999999) - CHASTE_CONST(0.032680000000000001) * var_chaste_interface__cell__V); + const double var_x134 = CHASTE_CONST(0.070300000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.14349999999999999) + CHASTE_CONST(0.0287) * var_chaste_interface__cell__V); + const double var_x135 = CHASTE_CONST(0.012149999999999999) * CHASTE_MATH::Pow(var_chaste_interface__calcium_concentration__Cass, 2) * var_chaste_interface__ryanodine_receptors__P_O1; + const double var_x136 = CHASTE_MATH::Pow(var_chaste_interface__calcium_concentration__Cass, 3); + const double var_x137 = CHASTE_CONST(0.0060749999999999997) * CHASTE_MATH::Pow(var_chaste_interface__calcium_concentration__Cass, 4); + const double var_x138 = CHASTE_CONST(0.0040499999999999998) * var_x136; + const double var_x139 = CHASTE_CONST(4.2191641619115923e-37) * var_x71; + const double var_x140 = 1 / (var_chaste_interface__sodium_concentration__Nai + CHASTE_CONST(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][0] = 1.0 - (mDt * (-var_x4 - CHASTE_CONST(0.00034782608695652176) * var_x1 / (CHASTE_CONST(0.0625) + CHASTE_CONST(0.40000000000000002) * var_x0))); rJacobian[0][1] = -(mDt * (-var_x4)); rJacobian[0][2] = 0.0; rJacobian[0][3] = 0.0; @@ -661,7 +663,7 @@ 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][1] = 1.0 - (mDt * (-CHASTE_CONST(1.1986666666666668) - var_x5)); rJacobian[1][2] = 0.0; rJacobian[1][3] = 0.0; rJacobian[1][4] = 0.0; @@ -688,8 +690,8 @@ 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][2] = 1.0 - (mDt * (var_x8 * (-CHASTE_CONST(0.050000000000000003) - var_x13) + CHASTE_CONST(4.0000000000000003e-5) * (-var_x15 + CHASTE_CONST(0.050000000000000003) * var_chaste_interface__calcium_concentration__CaNSR - CHASTE_CONST(0.050000000000000003) * var_chaste_interface__calcium_concentration__CaJSR) / (CHASTE_MATH::Pow(var_x6, 3) * CHASTE_MATH::Pow((CHASTE_CONST(0.0126) + var_x7), 2)))); + rJacobian[2][3] = -(mDt * (CHASTE_CONST(0.050000000000000003) * var_x8)); rJacobian[2][4] = 0.0; rJacobian[2][5] = -(mDt * (-var_x16 * var_x8)); rJacobian[2][6] = 0.0; @@ -714,9 +716,9 @@ 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][2] = -(mDt * (CHASTE_CONST(0.016666666666666666))); + rJacobian[3][3] = 1.0 - (mDt * (-CHASTE_CONST(0.016666666666666666) - CHASTE_CONST(95.238095238095241) * var_x20)); + rJacobian[3][4] = -(mDt * (-CHASTE_CONST(95.238095238095241) * var_x21 - CHASTE_CONST(190.47619047619048) * var_x33 + CHASTE_CONST(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; @@ -742,8 +744,8 @@ 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][4] = 1.0 - (mDt * (var_x47 * (-125 + var_x21 + 2 * var_x33 + (-CHASTE_CONST(65.313235986811122) * var_x61 - CHASTE_CONST(0.00030330018395124703) * var_x48 + CHASTE_CONST(0.0062374140367404624) * var_x22 / CHASTE_MATH::Pow((CHASTE_CONST(8.3232249999999994e-8) + var_x32), 2) - CHASTE_CONST(6237.4140367404616) * var_x49 * var_chaste_interface__calcium_concentration__Cai_converted + CHASTE_CONST(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) + CHASTE_CONST(1.3080000000000001e-7) * (CHASTE_CONST(0.125) * var_chaste_interface__calcium_concentration__Cass - 125 * var_chaste_interface__calcium_concentration__Cai_converted - var_x34 * var_x66 - CHASTE_CONST(0.032656617993405558) * (CHASTE_CONST(0.00069999999999999999) * var_chaste_interface__cell__V - CHASTE_CONST(0.0092875564766839377) * CHASTE_MATH::Log(CHASTE_CONST(0.001) * var_x48 * mParameters[1]) + 95500 * var_x32 * var_x49 - 2 * var_x59 * var_x67) * mParameters[5] + ((var_x12) ? (CHASTE_CONST(3.0000000000000001e-5) * var_chaste_interface__calcium_concentration__CaNSR - CHASTE_CONST(0.029999999999999999) * var_chaste_interface__calcium_concentration__Cai_converted) : (CHASTE_CONST(0.10000000000000001) * var_chaste_interface__calcium_concentration__CaNSR - 100 * var_chaste_interface__calcium_concentration__Cai_converted))) / (CHASTE_MATH::Pow(var_x44, 3) * CHASTE_MATH::Pow(var_x45, 2)))); + rJacobian[4][5] = -(mDt * (var_x47 * (CHASTE_CONST(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; @@ -763,13 +765,13 @@ 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[4][25] = -(mDt * (var_x47 * (CHASTE_CONST(0.19593970796043336) * var_x72 + CHASTE_CONST(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][5] = 1.0 - (mDt * (var_x75 * (-125 + CHASTE_CONST(3.5000000000000004) * var_x16 - var_x86 * var_x88) + CHASTE_CONST(0.030581039755351685) * (125000 * var_chaste_interface__calcium_concentration__Cai_converted + CHASTE_CONST(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))) / (CHASTE_MATH::Pow(var_x73, 3) * CHASTE_MATH::Pow((CHASTE_CONST(0.015290519877675841) + var_x74), 2)))); rJacobian[5][6] = 0.0; rJacobian[5][7] = -(mDt * (var_x17 * var_x87)); rJacobian[5][8] = 0.0; @@ -795,8 +797,8 @@ 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][5] = -(mDt * (CHASTE_CONST(0.00175) * var_x27 * var_x38 + CHASTE_CONST(8.7500000000000013e-5) * var_x37 * CHASTE_MATH::Pow(var_x23, 2) / CHASTE_MATH::Pow(var_x24, 3))); + rJacobian[6][6] = 1.0 - (mDt * (-CHASTE_CONST(0.00020000000000000001) - CHASTE_CONST(0.0025000000000000005) * var_x25 * var_x27 + CHASTE_CONST(0.0025000000000000005) * var_x23 * var_x25 * (1 - var_x26))); rJacobian[6][7] = 0.0; rJacobian[6][8] = 0.0; rJacobian[6][9] = 0.0; @@ -823,7 +825,7 @@ 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][7] = 1.0 - (mDt * (-CHASTE_CONST(0.01))); rJacobian[7][8] = 0.0; rJacobian[7][9] = 0.0; rJacobian[7][10] = 0.0; @@ -1093,15 +1095,15 @@ 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][17] = 1.0 - (mDt * ((-CHASTE_CONST(1.7331439082928402) * var_x121 - var_x119 * var_x122 * var_chaste_interface__non_inactivating_steady_state_K_I__iKss - var_x122 * CHASTE_MATH::Pow(var_chaste_interface__slow_delayed_rectifier_K_I__nKs, 2) * mParameters[10] - CHASTE_CONST(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 - CHASTE_CONST(0.92671204776418159) * var_x114 * CHASTE_MATH::Pow(var_chaste_interface__fast_transient_outward_K_I__ato_f, 3) * var_chaste_interface__fast_transient_outward_K_I__ito_f - CHASTE_CONST(1.7331439082928402) * var_x115 * var_x125 * mParameters[7] / var_x124 + CHASTE_CONST(0.15528969418303848) * var_x114 * var_x117 * var_x123 * var_x125 * mParameters[2] * mParameters[7] / CHASTE_MATH::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][21] = -(mDt * (var_x118 * (-var_chaste_interface__cell__V + CHASTE_CONST(26.535875647668394) * CHASTE_MATH::Log(var_x120 * (mParameters[2] + CHASTE_CONST(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[17][25] = -(mDt * ((CHASTE_CONST(5.8007500451501034e-11) * var_x128 - CHASTE_CONST(0.035370283842711021) * var_x121) * mParameters[5])); rJacobian[18][0] = 0.0; rJacobian[18][1] = 0.0; rJacobian[18][2] = 0.0; @@ -1120,8 +1122,8 @@ 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][18] = 1.0 - (mDt * (-CHASTE_CONST(0.023761000000000001) - var_x129 - CHASTE_CONST(0.047002000000000002) * CHASTE_MATH::Exp(-CHASTE_CONST(0.063100000000000003) * var_chaste_interface__cell__V))); + rJacobian[18][19] = -(mDt * (CHASTE_CONST(0.036777999999999998) - var_x129)); rJacobian[18][20] = -(mDt * (var_x130)); rJacobian[18][21] = -(mDt * (var_x130)); rJacobian[18][22] = 0.0; @@ -1146,8 +1148,8 @@ 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][18] = -(mDt * (CHASTE_CONST(0.023761000000000001))); + rJacobian[19][19] = 1.0 - (mDt * (-CHASTE_CONST(0.036777999999999998) - var_x131)); rJacobian[19][20] = 0.0; rJacobian[19][21] = -(mDt * (var_x132)); rJacobian[19][22] = 0.0; @@ -1228,8 +1230,8 @@ 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][22] = 1.0 - (mDt * (-CHASTE_CONST(0.00080000000000000004))); + rJacobian[22][23] = -(mDt * (CHASTE_CONST(0.0089999999999999993))); rJacobian[22][24] = 0.0; rJacobian[22][25] = 0.0; rJacobian[23][0] = 0.0; @@ -1237,7 +1239,7 @@ 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][5] = -(mDt * (-var_x135 + CHASTE_CONST(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; @@ -1254,9 +1256,9 @@ 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][22] = -(mDt * (CHASTE_CONST(0.00080000000000000004) - var_x137)); + rJacobian[23][23] = 1.0 - (mDt * (-CHASTE_CONST(0.080249999999999988) - var_x137 - var_x138)); + rJacobian[23][24] = -(mDt * (CHASTE_CONST(0.96499999999999997) - var_x137)); rJacobian[23][25] = 0.0; rJacobian[24][0] = 0.0; rJacobian[24][1] = 0.0; @@ -1282,13 +1284,13 @@ 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][24] = 1.0 - (mDt * (-CHASTE_CONST(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][4] = -(mDt * ((CHASTE_CONST(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; @@ -1299,9 +1301,9 @@ 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][15] = -(mDt * (var_x118 * (-var_chaste_interface__cell__V + CHASTE_CONST(26.535875647668394) * CHASTE_MATH::Log(var_x140 * (mParameters[3] + CHASTE_CONST(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][17] = -(mDt * ((-CHASTE_CONST(0.0005006860179512649) * var_x140 - CHASTE_CONST(0.19257154536587112) * var_x141) * mParameters[5])); rJacobian[25][18] = 0.0; rJacobian[25][19] = 0.0; rJacobian[25][20] = 0.0; @@ -1309,14 +1311,14 @@ 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])); + rJacobian[25][25] = 1.0 - (mDt * ((-CHASTE_CONST(1.7331439082928402) * var_x141 - CHASTE_CONST(0.004506174161561384) * var_x140 - CHASTE_CONST(0.58781912388130009) * var_x72 - CHASTE_CONST(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]); + double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -1356,53 +1358,53 @@ 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_background_current__g_Cab = CHASTE_CONST(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_calcium_pump_current__Km_pCa = CHASTE_CONST(0.28849999999999998); // micromolar + const double var_calcium_pump_current__i_pCa_max = CHASTE_CONST(0.095500000000000002); // picoA_per_picoF + const double var_calcium_pump_current__i_pCa = CHASTE_MATH::Pow(var_calcium_concentration__Cai, 2) * var_calcium_pump_current__i_pCa_max / (CHASTE_MATH::Pow(var_calcium_concentration__Cai, 2) + CHASTE_MATH::Pow(var_calcium_pump_current__Km_pCa, 2)); // picoA_per_picoF + const double var_cell__Acap = CHASTE_CONST(0.00013866); // cm2 + const double var_cell__F = CHASTE_CONST(96.5); // coulomb_per_millimole + const double var_cell__R = CHASTE_CONST(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_calcium_background_current__E_CaN = CHASTE_CONST(0.5) * var_cell__R * var_cell__T * CHASTE_MATH::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__O_ClCa = CHASTE_CONST(0.20000000000000001) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(5.9871794871794881) - CHASTE_CONST(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_cell__Vss = CHASTE_CONST(2.1999999999999998e-8); // microlitre + const double var_L_type_calcium_current__i_CaL = ((CHASTE_MATH::Abs(var_L_type_calcium_current__FVRT_Ca) > CHASTE_CONST(1.0000000000000001e-5)) ? (-2 * (-var_chaste_interface__calcium_concentration__Cass + mParameters[1] * CHASTE_MATH::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 - CHASTE_MATH::Exp(-var_L_type_calcium_current__FVRT_Ca)) * var_cell__Acap * mParameters[5])) : (-CHASTE_CONST(2.0000000000000002e-5) * (-var_chaste_interface__calcium_concentration__Cass + mParameters[1] * CHASTE_MATH::Exp(-CHASTE_CONST(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 - CHASTE_MATH::Exp(-CHASTE_CONST(1.0000000000000001e-5))) * var_cell__Acap * mParameters[5]))); // picoA_per_picoF + const double var_cell__i_Stim_converted = CHASTE_STIM(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_cell__i_Stim = var_cell__i_Stim_converted / CHASTE_CAP(); // picoA_per_picoF + const double var_fast_transient_outward_K_I__g_Kto_f = CHASTE_CONST(0.53469999999999995); // milliS_per_microF + const double var_fast_transient_outward_K_I__E_K = var_cell__R * var_cell__T * CHASTE_MATH::Log(mParameters[2] / var_chaste_interface__potassium_concentration__Ki) / var_cell__F; // millivolt + const double var_fast_transient_outward_K_I__i_Kto_f = CHASTE_MATH::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_delayed_rectifier_K_I__i_Ks = CHASTE_MATH::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_background_current__g_Nab = CHASTE_CONST(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_mCai = CHASTE_CONST(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_sodium_calcium_exchange_current__eta = CHASTE_CONST(0.34999999999999998); // dimensionless + const double var_sodium_calcium_exchange_current__k_sat = CHASTE_CONST(0.27000000000000002); // dimensionless + const double var_fast_sodium_current__E_Na = var_cell__R * var_cell__T * CHASTE_MATH::Log((mParameters[3] + CHASTE_CONST(0.1111111111111111) * mParameters[2]) / (var_chaste_interface__sodium_concentration__Nai + CHASTE_CONST(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_rapid_delayed_rectifier_K_I__i_Kr = (-var_cell__R * var_cell__T * CHASTE_MATH::Log((mParameters[2] + CHASTE_CONST(0.020408163265306124) * mParameters[3]) / (var_chaste_interface__potassium_concentration__Ki + CHASTE_CONST(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_calcium_exchange_current__i_NCX = (CHASTE_MATH::Pow(var_chaste_interface__sodium_concentration__Nai, 3) * mParameters[1] * CHASTE_MATH::Exp(var_cell__F * var_chaste_interface__cell__V * var_sodium_calcium_exchange_current__eta / (var_cell__R * var_cell__T)) - CHASTE_MATH::Pow(mParameters[3], 3) * var_calcium_concentration__Cai * CHASTE_MATH::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 + CHASTE_MATH::Pow(var_sodium_calcium_exchange_current__K_mAllo, 2) / CHASTE_MATH::Pow(var_calcium_concentration__Cai, 2)) * (1 + var_sodium_calcium_exchange_current__k_sat * CHASTE_MATH::Exp((-1 + var_sodium_calcium_exchange_current__eta) * var_cell__F * var_chaste_interface__cell__V / (var_cell__R * var_cell__T))) * (CHASTE_MATH::Pow(mParameters[3], 3) * var_calcium_concentration__Cai + CHASTE_MATH::Pow(var_sodium_calcium_exchange_current__K_mNao, 3) * var_calcium_concentration__Cai + CHASTE_MATH::Pow(var_chaste_interface__sodium_concentration__Nai, 3) * mParameters[1] + CHASTE_MATH::Pow(var_chaste_interface__sodium_concentration__Nai, 3) * var_sodium_calcium_exchange_current__K_mCao + CHASTE_MATH::Pow(mParameters[3], 3) * (1 + CHASTE_MATH::Pow(var_chaste_interface__sodium_concentration__Nai, 3) / CHASTE_MATH::Pow(var_sodium_calcium_exchange_current__K_mNai, 3)) * var_sodium_calcium_exchange_current__K_mCai + CHASTE_MATH::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_sodium_potassium_pump_current__i_NaK_max = CHASTE_CONST(2.4860000000000002); // picoA_per_picoF + const double var_sodium_potassium_pump_current__sigma = -CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(1.4858841010401188e-5) * mParameters[3]); // dimensionless + const double var_sodium_potassium_pump_current__f_NaK = 1 / (1 + CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(0.10000000000000001) * var_cell__F * var_chaste_interface__cell__V / (var_cell__R * var_cell__T)) + CHASTE_CONST(0.036499999999999998) * var_sodium_potassium_pump_current__sigma * CHASTE_MATH::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 + CHASTE_MATH::Pow((var_sodium_potassium_pump_current__Km_Nai / var_chaste_interface__sodium_concentration__Nai), CHASTE_CONST(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 + CHASTE_MATH::Exp(CHASTE_CONST(0.089599999999999999) * var_chaste_interface__cell__V - CHASTE_CONST(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 = CHASTE_CONST(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 @@ -1413,7 +1415,7 @@ { // Time units: millisecond std::vector& rY = rGetStateVariables(); - double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -1434,25 +1436,25 @@ 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__const5 = CHASTE_CONST(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_L_type_calcium_current__y_gate_inf = 1 / (1 + CHASTE_MATH::Exp((33 + var_chaste_interface__cell__V) / var_L_type_calcium_current__const5)) + CHASTE_CONST(0.10000000000000001) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(6.666666666666667) - CHASTE_CONST(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 + CHASTE_MATH::Exp(CHASTE_CONST(7.5) + CHASTE_CONST(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 = CHASTE_CONST(0.18064) * CHASTE_MATH::Exp(CHASTE_CONST(1.6096500000000002) + CHASTE_CONST(0.035770000000000003) * var_chaste_interface__cell__V); + const double var_fast_transient_outward_K_I__beta_a = CHASTE_CONST(0.39560000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(2.8066499999999999) - CHASTE_CONST(0.062370000000000002) * var_chaste_interface__cell__V); + const double var_fast_transient_outward_K_I__itof_iss = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(10.279999999999999) + CHASTE_CONST(0.20000000000000001) * var_chaste_interface__cell__V)); + const double var_fast_transient_outward_K_I__tau_ito_f = CHASTE_CONST(9.6645000000000003) + CHASTE_CONST(10.936199999999999) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(10.279999999999999) + CHASTE_CONST(0.20000000000000001) * var_chaste_interface__cell__V)); + const double var_non_inactivating_steady_state_K_I__tau_Kss = CHASTE_CONST(13.17) + CHASTE_CONST(39.299999999999997) * CHASTE_MATH::Exp(-CHASTE_CONST(0.050000000000000003) * var_chaste_interface__cell__V); + const double var_slow_delayed_rectifier_K_I__alpha_n = (((var_chaste_interface__cell__V >= -CHASTE_CONST(26.500000781250002)) && (var_chaste_interface__cell__V <= -CHASTE_CONST(26.499999218749998))) ? (-CHASTE_CONST(3.7604140624912359e-12) / (1 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999766942e-8))) + CHASTE_CONST(640000.00000149151) * (CHASTE_CONST(26.500000781250002) + var_chaste_interface__cell__V) * (CHASTE_CONST(3.7604140624912359e-12) / (1 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999766942e-8))) + CHASTE_CONST(3.7604140624912359e-12) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999766942e-8))))) : (CHASTE_CONST(4.8133299999999997e-6) * (CHASTE_CONST(26.5) + var_chaste_interface__cell__V) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(3.3919999999999999) - CHASTE_CONST(0.128) * var_chaste_interface__cell__V)))); + const double var_slow_delayed_rectifier_K_I__beta_n = CHASTE_CONST(9.5333299999999997e-5) * CHASTE_MATH::Exp(-CHASTE_CONST(1.0069999999999999) - CHASTE_CONST(0.037999999999999999) * var_chaste_interface__cell__V); + const double var_slow_transient_outward_K_I__tau_ta_s = CHASTE_CONST(2.0579999999999998) + CHASTE_CONST(0.49299999999999999) * CHASTE_MATH::Exp(-CHASTE_CONST(0.062899999999999998) * var_chaste_interface__cell__V); + const double var_slow_transient_outward_K_I__tau_ti_s = 270 + 1050 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(7.9298245614035094) + CHASTE_CONST(0.17543859649122806) * var_chaste_interface__cell__V)); + const double var_ultra_rapidly_activating_delayed_rectifier_K_I__ass = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.64479166666666676) - CHASTE_CONST(0.10416666666666667) * var_chaste_interface__cell__V)); + const double var_ultra_rapidly_activating_delayed_rectifier_K_I__iss = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(7.7962962962962958) + CHASTE_CONST(0.18518518518518517) * var_chaste_interface__cell__V)); + const double var_ultra_rapidly_activating_delayed_rectifier_K_I__tau_aur = CHASTE_CONST(2.0579999999999998) + CHASTE_CONST(0.49299999999999999) * CHASTE_MATH::Exp(-CHASTE_CONST(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; + const double var_ultra_rapidly_activating_delayed_rectifier_K_I__tau_iur = 1000 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(7.7962962962962958) + CHASTE_CONST(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)); @@ -1500,7 +1502,7 @@ { // Inputs: // Time units: millisecond - double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -1536,40 +1538,40 @@ // 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__Acap = CHASTE_CONST(0.00013866); // cm2 + const double var_cell__F = CHASTE_CONST(96.5); // coulomb_per_millimole + const double var_cell__R = CHASTE_CONST(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_cell__Vss = CHASTE_CONST(2.1999999999999998e-8); // microlitre + const double var_L_type_calcium_current__i_CaL = ((CHASTE_MATH::Abs(var_L_type_calcium_current__FVRT_Ca) > CHASTE_CONST(1.0000000000000001e-5)) ? (-2 * (-var_chaste_interface__calcium_concentration__Cass + mParameters[1] * CHASTE_MATH::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 - CHASTE_MATH::Exp(-var_L_type_calcium_current__FVRT_Ca)) * var_cell__Acap * mParameters[5])) : (-CHASTE_CONST(2.0000000000000002e-5) * (-var_chaste_interface__calcium_concentration__Cass + mParameters[1] * CHASTE_MATH::Exp(-CHASTE_CONST(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 - CHASTE_MATH::Exp(-CHASTE_CONST(1.0000000000000001e-5))) * var_cell__Acap * mParameters[5]))); // picoA_per_picoF + const double var_L_type_calcium_current__i_CaL_converted = CHASTE_CAP() * var_L_type_calcium_current__i_CaL; // uA_per_cm2 + const double var_cell__prepulses_number = CHASTE_CONST(10000000000.0); // dimensionless + const double var_chaste_interface__cell__stim_period = CHASTE_CONST(333.33300000000003); // millisecond + const double var_cell__i_Stim_converted = CHASTE_STIM(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_fast_transient_outward_K_I__E_K = var_cell__R * var_cell__T * CHASTE_MATH::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_non_inactivating_steady_state_K_I__i_Kss_converted = CHASTE_CAP() * 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_slow_delayed_rectifier_K_I__i_Ks = CHASTE_MATH::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 = CHASTE_CAP() * 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_mCai = CHASTE_CONST(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_sodium_calcium_exchange_current__eta = CHASTE_CONST(0.34999999999999998); // dimensionless + const double var_sodium_calcium_exchange_current__k_sat = CHASTE_CONST(0.27000000000000002); // dimensionless + const double var_fast_sodium_current__E_Na = var_cell__R * var_cell__T * CHASTE_MATH::Log((mParameters[3] + CHASTE_CONST(0.1111111111111111) * mParameters[2]) / (var_chaste_interface__sodium_concentration__Nai + CHASTE_CONST(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 + const double var_fast_sodium_current__i_Na_converted = CHASTE_CAP() * 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 * CHASTE_MATH::Log((mParameters[2] + CHASTE_CONST(0.020408163265306124) * mParameters[3]) / (var_chaste_interface__potassium_concentration__Ki + CHASTE_CONST(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 = CHASTE_CAP() * var_rapid_delayed_rectifier_K_I__i_Kr; // uA_per_cm2 + const double var_sodium_calcium_exchange_current__i_NCX = (CHASTE_MATH::Pow(var_chaste_interface__sodium_concentration__Nai, 3) * mParameters[1] * CHASTE_MATH::Exp(var_cell__F * var_chaste_interface__cell__V * var_sodium_calcium_exchange_current__eta / (var_cell__R * var_cell__T)) - CHASTE_MATH::Pow(mParameters[3], 3) * var_calcium_concentration__Cai * CHASTE_MATH::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 + CHASTE_MATH::Pow(var_sodium_calcium_exchange_current__K_mAllo, 2) / CHASTE_MATH::Pow(var_calcium_concentration__Cai, 2)) * (1 + var_sodium_calcium_exchange_current__k_sat * CHASTE_MATH::Exp((-1 + var_sodium_calcium_exchange_current__eta) * var_cell__F * var_chaste_interface__cell__V / (var_cell__R * var_cell__T))) * (CHASTE_MATH::Pow(mParameters[3], 3) * var_calcium_concentration__Cai + CHASTE_MATH::Pow(var_sodium_calcium_exchange_current__K_mNao, 3) * var_calcium_concentration__Cai + CHASTE_MATH::Pow(var_chaste_interface__sodium_concentration__Nai, 3) * mParameters[1] + CHASTE_MATH::Pow(var_chaste_interface__sodium_concentration__Nai, 3) * var_sodium_calcium_exchange_current__K_mCao + CHASTE_MATH::Pow(mParameters[3], 3) * (1 + CHASTE_MATH::Pow(var_chaste_interface__sodium_concentration__Nai, 3) / CHASTE_MATH::Pow(var_sodium_calcium_exchange_current__K_mNai, 3)) * var_sodium_calcium_exchange_current__K_mCai + CHASTE_MATH::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 = CHASTE_CAP() * 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 + CHASTE_MATH::Exp(CHASTE_CONST(0.089599999999999999) * var_chaste_interface__cell__V - CHASTE_CONST(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 = CHASTE_CAP() * var_time_independent_K_I__i_K1; // uA_per_cm2 std::vector dqs(11); dqs[0] = var_calcium_fluxes__J_rel; diff --git a/chaste_codegen/data/tests/chaste_reference_models/BE/li_mouse_2010.hpp b/chaste_codegen/data/tests/chaste_reference_models/BE/li_mouse_2010.hpp index 4f517cf73..758a9f9da 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/BE/li_mouse_2010.hpp +++ b/chaste_codegen/data/tests/chaste_reference_models/BE/li_mouse_2010.hpp @@ -16,8 +16,16 @@ #include "ChasteSerialization.hpp" #include #include "AbstractStimulusFunction.hpp" +#if USING_DEVICE_COMPILER +#include "StimulusEvaluatorCuda.hpp" +#endif #include "AbstractBackwardEulerCardiacCell.hpp" +#if USING_DEVICE_COMPILER +template +class BackwardEulerKernelLauncher; // Forward declare to hide CUDA-specifics from standard C++ compiler +#endif + class Cellli_mouse_2010FromCellMLBackwardEuler : public AbstractBackwardEulerCardiacCell<26> { friend class boost::serialization::access; @@ -37,19 +45,50 @@ class Cellli_mouse_2010FromCellMLBackwardEuler : public AbstractBackwardEulerCar 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: +#if USING_DEVICE_COMPILER + template using SolverKernelLauncher = BackwardEulerKernelLauncher; + static constexpr unsigned TOTAL_SIZE = 36u; + static constexpr unsigned NONLINEAR_SIZE = 26u; +#endif boost::shared_ptr UseCellMLDefaultStimulus(); double GetIntracellularCalciumConcentration(); - Cellli_mouse_2010FromCellMLBackwardEuler(boost::shared_ptr /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus); + Cellli_mouse_2010FromCellMLBackwardEuler(boost::shared_ptr /* unused */, 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: + 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]); + +#if USING_DEVICE_COMPILER + template + DEVICE + static void ComputeResidualDevice(ValueType var_chaste_interface__environment__time, const ValueType rCurrentGuess[NONLINEAR_SIZE], const ValueType rY[], ValueType rResidual[NONLINEAR_SIZE], ValueType mDt, const ValueType mParameters[], bool mSetVoltageDerivativeToZero, ValueType mFixedVoltage, ValueType capacitance, const DeviceStimulusFunctor stim); + + template + DEVICE + static void ComputeJacobianDevice(ValueType var_chaste_interface__environment__time, const ValueType rCurrentGuess[NONLINEAR_SIZE], const ValueType rY[], ValueType rJacobian[NONLINEAR_SIZE][NONLINEAR_SIZE], ValueType mDt, const ValueType mParameters[], bool mSetVoltageDerivativeToZero, ValueType mFixedVoltage, ValueType capacitance, const DeviceStimulusFunctor stim); + template + DEVICE + static void UpdateTransmembranePotentialDevice(ValueType var_chaste_interface__environment__time, ValueType rY[], ValueType mDt, const ValueType mParameters[], bool mSetVoltageDerivativeToZero, ValueType mFixedVoltage, DeviceStimulusFunctor stim, ValueType capacitance); + + template + DEVICE + static void SolveClosedFormVarsDevice(ValueType rY[TOTAL_SIZE], ValueType mDt, const ValueType mParameters[], bool mSetVoltageDerivativeToZero, ValueType mFixedVoltage, ValueType capacitance); + + template + DEVICE + static void FillInitialGuessDevice(ValueType _guess[NONLINEAR_SIZE], const ValueType rY[TOTAL_SIZE]); + + template + DEVICE + static void ScatterSolutionDevice(const ValueType _guess[NONLINEAR_SIZE], ValueType rY[TOTAL_SIZE]); +#endif +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); -}; + std::vector ComputeDerivedQuantities(double var_chaste_interface__environment__time, const std::vector & rY);}; // Needs to be included last #include "SerializationExportWrapper.hpp" @@ -84,4 +123,9 @@ namespace boost } -#endif // CELLLI_MOUSE_2010FROMCELLMLBACKWARDEULER_HPP_ \ No newline at end of file +#endif // CELLLI_MOUSE_2010FROMCELLMLBACKWARDEULER_HPP_ + +#if USING_DEVICE_COMPILER + #include "li_mouse_2010Kernels.hpp" + #include "BackwardEulerKernels.hpp" +#endif \ No newline at end of file diff --git a/chaste_codegen/data/tests/chaste_reference_models/BE/sachse_moreno_abildskov_2008_b.cpp b/chaste_codegen/data/tests/chaste_reference_models/BE/sachse_moreno_abildskov_2008_b.cpp index c975de3ee..4389ba9dc 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/BE/sachse_moreno_abildskov_2008_b.cpp +++ b/chaste_codegen/data/tests/chaste_reference_models/BE/sachse_moreno_abildskov_2008_b.cpp @@ -22,6 +22,8 @@ #include "HeartConfig.hpp" #include "IsNan.hpp" #include "MathsCustomFunctions.hpp" +#include "ChasteMathDeviceNamespaces.hpp" +#include "ChasteCpuMacros.hpp" @@ -33,7 +35,7 @@ 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 + const double var_chaste_interface__I_stim__stim_amplitude_converted = CHASTE_CONST(0.0001) * CHASTE_CAP() / 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, @@ -60,10 +62,10 @@ 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[2] = CHASTE_CONST(4.5000000000000001e-6); // (var_membrane__Cm) [microfarad] + this->mParameters[3] = CHASTE_CONST(5.4000000000000004e-9); // (var_I_Shkr__PShkr) [microlitre_per_second] + this->mParameters[4] = CHASTE_CONST(0.001); // (var_I_Kir__GKir) [microsiemens] + this->mParameters[5] = CHASTE_CONST(6.9e-6); // (var_I_b__Gb) [microsiemens] this->mParameters[6] = 295; // (var_model_parameters__T) [kelvin] } @@ -111,24 +113,24 @@ // 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]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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_Kir__aKir = CHASTE_CONST(0.93999999999999995); // dimensionless + const double var_I_Kir__bKir = CHASTE_CONST(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_I_b__I_b_converted = CHASTE_CONST(0.001) * CHASTE_CAP() * 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_I_Kir__EK = var_model_parameters__R * mParameters[6] * CHASTE_MATH::Log(mParameters[1] / mParameters[0]) / var_model_parameters__F; // millivolt + const double var_I_Kir__OKir = 1 / (var_I_Kir__aKir + CHASTE_MATH::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 = CHASTE_CONST(0.031622776601683791) * CHASTE_MATH::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 = CHASTE_CONST(0.001) * CHASTE_CAP() * var_I_Kir__I_Kir / mParameters[2]; // uA_per_cm2 + const double var_I_Shkr__I_Shkr = ((((var_chaste_interface__membrane__Vm >= -CHASTE_CONST(8.6113989637305703e-9) * mParameters[6]) && (var_chaste_interface__membrane__Vm <= CHASTE_CONST(8.6113989637305703e-9) * mParameters[6])) || ((var_chaste_interface__membrane__Vm >= CHASTE_CONST(8.6113989637305703e-9) * mParameters[6]) && (var_chaste_interface__membrane__Vm <= -CHASTE_CONST(8.6113989637305703e-9) * mParameters[6]))) ? (CHASTE_CONST(58062575.210589655) * (CHASTE_CONST(8.6113989637305703e-9) * mParameters[6] + var_chaste_interface__membrane__Vm) * (CHASTE_CONST(0.0096499999999999989) * (-mParameters[1] * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8)) + mParameters[0]) * var_chaste_interface__I_Shkr__OShkr * mParameters[3] / (1 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) + CHASTE_CONST(0.0096499999999999989) * (-mParameters[1] * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)) + mParameters[0]) * var_chaste_interface__I_Shkr__OShkr * mParameters[3] / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) / mParameters[6] - CHASTE_CONST(0.0096499999999999989) * (-mParameters[1] * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8)) + mParameters[0]) * var_chaste_interface__I_Shkr__OShkr * mParameters[3] / (1 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8)))) : (CHASTE_CONST(1120607.7015643802) * (-mParameters[1] * CHASTE_MATH::Exp(-CHASTE_CONST(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 - CHASTE_MATH::Exp(-CHASTE_CONST(11.612515042117931) * var_chaste_interface__membrane__Vm / mParameters[6])) * mParameters[6]))); // nanoampere + const double var_I_Shkr__I_Shkr_converted = CHASTE_CONST(0.001) * CHASTE_CAP() * 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; @@ -139,7 +141,7 @@ 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]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_THIS(mFixedVoltage) : rY[0]); // Units: millivolt; Initial value: -58.0 //output_nonlinear_state_assignments @@ -155,24 +157,24 @@ 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 d_dt_chaste_interface_var_I_Shkr__OShkr = CHASTE_CONST(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_I_Shkr__z_v = -CHASTE_CONST(1.53); // dimensionless + const double var_I_Shkr__zv = CHASTE_CONST(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__k_v = var_I_Shkr__k_v0 * CHASTE_MATH::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 * CHASTE_MATH::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 d_dt_chaste_interface_var_I_Shkr__C0Shkr = CHASTE_CONST(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 d_dt_chaste_interface_var_I_Shkr__C1Shkr = CHASTE_CONST(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 d_dt_chaste_interface_var_I_Shkr__C2Shkr = CHASTE_CONST(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 d_dt_chaste_interface_var_I_Shkr__C3Shkr = CHASTE_CONST(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 + const double d_dt_chaste_interface_var_I_Shkr__C4Shkr = CHASTE_CONST(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; @@ -185,21 +187,21 @@ 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]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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; + const double var_x1 = CHASTE_MATH::Exp(CHASTE_CONST(14.864019253910952) * var_x0); + const double var_x2 = CHASTE_CONST(0.12) * var_x1; + const double var_x3 = CHASTE_MATH::Exp(-CHASTE_CONST(17.767148014440433) * var_x0); + const double var_x4 = CHASTE_CONST(0.002) * var_x3; + const double var_x5 = CHASTE_CONST(0.089999999999999997) * var_x1; + const double var_x6 = CHASTE_CONST(0.0040000000000000001) * var_x3; + const double var_x7 = CHASTE_CONST(0.059999999999999998) * var_x1; + const double var_x8 = CHASTE_CONST(0.0060000000000000001) * var_x3; + const double var_x9 = CHASTE_CONST(0.029999999999999999) * var_x1; + const double var_x10 = CHASTE_CONST(0.0080000000000000002) * var_x3; rJacobian[0][0] = 1.0 - (mDt * (-var_x2)); @@ -230,39 +232,39 @@ 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[4][4] = 1.0 - (mDt * (-CHASTE_CONST(0.076999999999999999) - var_x10)); + rJacobian[4][5] = -(mDt * (CHASTE_CONST(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)); + rJacobian[5][4] = -(mDt * (CHASTE_CONST(0.076999999999999999))); + rJacobian[5][5] = 1.0 - (mDt * (-CHASTE_CONST(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]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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_Kir__aKir = CHASTE_CONST(0.93999999999999995); // dimensionless + const double var_I_Kir__bKir = CHASTE_CONST(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_stim__I_stim_converted = -CHASTE_STIM(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] / CHASTE_CAP(); // 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_I_Kir__EK = var_model_parameters__R * mParameters[6] * CHASTE_MATH::Log(mParameters[1] / mParameters[0]) / var_model_parameters__F; // millivolt + const double var_I_Kir__OKir = 1 / (var_I_Kir__aKir + CHASTE_MATH::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 = CHASTE_CONST(0.031622776601683791) * CHASTE_MATH::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 >= -CHASTE_CONST(8.6113989637305703e-9) * mParameters[6]) && (var_chaste_interface__membrane__Vm <= CHASTE_CONST(8.6113989637305703e-9) * mParameters[6])) || ((var_chaste_interface__membrane__Vm >= CHASTE_CONST(8.6113989637305703e-9) * mParameters[6]) && (var_chaste_interface__membrane__Vm <= -CHASTE_CONST(8.6113989637305703e-9) * mParameters[6]))) ? (CHASTE_CONST(58062575.210589655) * (CHASTE_CONST(8.6113989637305703e-9) * mParameters[6] + var_chaste_interface__membrane__Vm) * (CHASTE_CONST(0.0096499999999999989) * (-mParameters[1] * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8)) + mParameters[0]) * var_chaste_interface__I_Shkr__OShkr * mParameters[3] / (1 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) + CHASTE_CONST(0.0096499999999999989) * (-mParameters[1] * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)) + mParameters[0]) * var_chaste_interface__I_Shkr__OShkr * mParameters[3] / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) / mParameters[6] - CHASTE_CONST(0.0096499999999999989) * (-mParameters[1] * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8)) + mParameters[0]) * var_chaste_interface__I_Shkr__OShkr * mParameters[3] / (1 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8)))) : (CHASTE_CONST(1120607.7015643802) * (-mParameters[1] * CHASTE_MATH::Exp(-CHASTE_CONST(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 - CHASTE_MATH::Exp(-CHASTE_CONST(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 + const double d_dt_chaste_interface_var_membrane__Vm = CHASTE_CONST(0.001) * var_membrane__Vm_orig_deriv; // millivolt / millisecond rY[0] += mDt*d_dt_chaste_interface_var_membrane__Vm; } @@ -290,26 +292,26 @@ { // Inputs: // Time units: millisecond - double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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_Kir__aKir = CHASTE_CONST(0.93999999999999995); // dimensionless + const double var_I_Kir__bKir = CHASTE_CONST(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_converted = -CHASTE_STIM(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_I_b__I_b_converted = CHASTE_CONST(0.001) * CHASTE_CAP() * 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_I_Kir__EK = var_model_parameters__R * mParameters[6] * CHASTE_MATH::Log(mParameters[1] / mParameters[0]) / var_model_parameters__F; // millivolt + const double var_I_Kir__OKir = 1 / (var_I_Kir__aKir + CHASTE_MATH::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 = CHASTE_CONST(0.031622776601683791) * CHASTE_MATH::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 = CHASTE_CONST(0.001) * CHASTE_CAP() * var_I_Kir__I_Kir / mParameters[2]; // uA_per_cm2 + const double var_I_Shkr__I_Shkr = ((((var_chaste_interface__membrane__Vm >= -CHASTE_CONST(8.6113989637305703e-9) * mParameters[6]) && (var_chaste_interface__membrane__Vm <= CHASTE_CONST(8.6113989637305703e-9) * mParameters[6])) || ((var_chaste_interface__membrane__Vm >= CHASTE_CONST(8.6113989637305703e-9) * mParameters[6]) && (var_chaste_interface__membrane__Vm <= -CHASTE_CONST(8.6113989637305703e-9) * mParameters[6]))) ? (CHASTE_CONST(58062575.210589655) * (CHASTE_CONST(8.6113989637305703e-9) * mParameters[6] + var_chaste_interface__membrane__Vm) * (CHASTE_CONST(0.0096499999999999989) * (-mParameters[1] * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8)) + mParameters[0]) * var_chaste_interface__I_Shkr__OShkr * mParameters[3] / (1 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) + CHASTE_CONST(0.0096499999999999989) * (-mParameters[1] * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)) + mParameters[0]) * var_chaste_interface__I_Shkr__OShkr * mParameters[3] / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) / mParameters[6] - CHASTE_CONST(0.0096499999999999989) * (-mParameters[1] * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8)) + mParameters[0]) * var_chaste_interface__I_Shkr__OShkr * mParameters[3] / (1 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8)))) : (CHASTE_CONST(1120607.7015643802) * (-mParameters[1] * CHASTE_MATH::Exp(-CHASTE_CONST(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 - CHASTE_MATH::Exp(-CHASTE_CONST(11.612515042117931) * var_chaste_interface__membrane__Vm / mParameters[6])) * mParameters[6]))); // nanoampere + const double var_I_Shkr__I_Shkr_converted = CHASTE_CONST(0.001) * CHASTE_CAP() * var_I_Shkr__I_Shkr / mParameters[2]; // uA_per_cm2 std::vector dqs(5); dqs[0] = var_I_Shkr__I_Shkr_converted; diff --git a/chaste_codegen/data/tests/chaste_reference_models/BE/sachse_moreno_abildskov_2008_b.hpp b/chaste_codegen/data/tests/chaste_reference_models/BE/sachse_moreno_abildskov_2008_b.hpp index 6014b3194..398c04d18 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/BE/sachse_moreno_abildskov_2008_b.hpp +++ b/chaste_codegen/data/tests/chaste_reference_models/BE/sachse_moreno_abildskov_2008_b.hpp @@ -16,8 +16,16 @@ #include "ChasteSerialization.hpp" #include #include "AbstractStimulusFunction.hpp" +#if USING_DEVICE_COMPILER +#include "StimulusEvaluatorCuda.hpp" +#endif #include "AbstractBackwardEulerCardiacCell.hpp" +#if USING_DEVICE_COMPILER +template +class BackwardEulerKernelLauncher; // Forward declare to hide CUDA-specifics from standard C++ compiler +#endif + class Cellsachse_moreno_abildskov_2008_bFromCellMLBackwardEuler : public AbstractBackwardEulerCardiacCell<6> { friend class boost::serialization::access; @@ -37,18 +45,49 @@ class Cellsachse_moreno_abildskov_2008_bFromCellMLBackwardEuler : public Abstrac 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: +#if USING_DEVICE_COMPILER + template using SolverKernelLauncher = BackwardEulerKernelLauncher; + static constexpr unsigned TOTAL_SIZE = 7u; + static constexpr unsigned NONLINEAR_SIZE = 6u; +#endif 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(boost::shared_ptr /* unused */, 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: + 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]); + +#if USING_DEVICE_COMPILER + template + DEVICE + static void ComputeResidualDevice(ValueType var_chaste_interface__environment__time_converted, const ValueType rCurrentGuess[NONLINEAR_SIZE], const ValueType rY[], ValueType rResidual[NONLINEAR_SIZE], ValueType mDt, const ValueType mParameters[], bool mSetVoltageDerivativeToZero, ValueType mFixedVoltage, ValueType capacitance, const DeviceStimulusFunctor stim); + + template + DEVICE + static void ComputeJacobianDevice(ValueType var_chaste_interface__environment__time_converted, const ValueType rCurrentGuess[NONLINEAR_SIZE], const ValueType rY[], ValueType rJacobian[NONLINEAR_SIZE][NONLINEAR_SIZE], ValueType mDt, const ValueType mParameters[], bool mSetVoltageDerivativeToZero, ValueType mFixedVoltage, ValueType capacitance, const DeviceStimulusFunctor stim); + template + DEVICE + static void UpdateTransmembranePotentialDevice(ValueType var_chaste_interface__environment__time_converted, ValueType rY[], ValueType mDt, const ValueType mParameters[], bool mSetVoltageDerivativeToZero, ValueType mFixedVoltage, DeviceStimulusFunctor stim, ValueType capacitance); + + template + DEVICE + static void SolveClosedFormVarsDevice(ValueType rY[TOTAL_SIZE], ValueType mDt, const ValueType mParameters[], bool mSetVoltageDerivativeToZero, ValueType mFixedVoltage, ValueType capacitance); + + template + DEVICE + static void FillInitialGuessDevice(ValueType _guess[NONLINEAR_SIZE], const ValueType rY[TOTAL_SIZE]); + + template + DEVICE + static void ScatterSolutionDevice(const ValueType _guess[NONLINEAR_SIZE], ValueType rY[TOTAL_SIZE]); +#endif +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); -}; + std::vector ComputeDerivedQuantities(double var_chaste_interface__environment__time_converted, const std::vector & rY);}; // Needs to be included last #include "SerializationExportWrapper.hpp" @@ -83,4 +122,9 @@ namespace boost } -#endif // CELLSACHSE_MORENO_ABILDSKOV_2008_BFROMCELLMLBACKWARDEULER_HPP_ \ No newline at end of file +#endif // CELLSACHSE_MORENO_ABILDSKOV_2008_BFROMCELLMLBACKWARDEULER_HPP_ + +#if USING_DEVICE_COMPILER + #include "sachse_moreno_abildskov_2008_bKernels.hpp" + #include "BackwardEulerKernels.hpp" +#endif \ No newline at end of file diff --git a/chaste_codegen/data/tests/chaste_reference_models/BE/test_piecewises_be.cpp b/chaste_codegen/data/tests/chaste_reference_models/BE/test_piecewises_be.cpp index b1ca1bcb5..7a0a934cd 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/BE/test_piecewises_be.cpp +++ b/chaste_codegen/data/tests/chaste_reference_models/BE/test_piecewises_be.cpp @@ -22,6 +22,8 @@ #include "HeartConfig.hpp" #include "IsNan.hpp" #include "MathsCustomFunctions.hpp" +#include "ChasteMathDeviceNamespaces.hpp" +#include "ChasteCpuMacros.hpp" @@ -96,7 +98,7 @@ 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_THIS(mFixedVoltage) : rY[0]); // Units: millivolt; Initial value: -69.1865 //output_nonlinear_state_assignments @@ -104,12 +106,12 @@ 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__alpha_m = ((CHASTE_MATH::Abs(CHASTE_MATH::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 - CHASTE_MATH::Exp(-CHASTE_CONST(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 d_dt_chaste_interface_var_fast_sodium_current_m_gate__m = CHASTE_CONST(0.001) * var_fast_sodium_current_m_gate__m_orig_deriv; // 1 / millisecond + const double var_fast_sodium_current_m_gate2__alpha_m = ((CHASTE_MATH::Abs(var_chaste_interface__membrane__V) < 0) ? (2000 * CHASTE_MATH::Pow(var_chaste_interface__fast_sodium_current_m_gate2__m, 2)) : (200 * var_chaste_interface__membrane__V / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(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 + const double d_dt_chaste_interface_var_fast_sodium_current_m_gate2__m = CHASTE_CONST(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; @@ -118,14 +120,14 @@ 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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][0] = 1.0 - (mDt * (CHASTE_CONST(0.001) * ((CHASTE_MATH::Abs(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; @@ -135,11 +137,11 @@ { // Time units: millisecond std::vector& rY = rGetStateVariables(); - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 + const double d_dt_chaste_interface_var_membrane__V = CHASTE_CONST(0.001) * var_membrane__V_orig_deriv; // millivolt / millisecond rY[0] += mDt*d_dt_chaste_interface_var_membrane__V; } @@ -148,14 +150,14 @@ { // Time units: millisecond std::vector& rY = rGetStateVariables(); - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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)); + rY[1] = (var_chaste_interface__fast_sodium_current_h_gate__h + ((((var_chaste_interface__membrane__V > 9999999) ? (CHASTE_CONST(0.001) * var_chaste_interface__membrane__V) : (0))) * mDt)) / (1.0 - ((CHASTE_CONST(0.001)) * mDt)); double _guess[2] = {rY[3],rY[2]}; CardiacNewtonSolver<2,Celltest_piecewises_beFromCellMLBackwardEuler>* _p_solver = CardiacNewtonSolver<2,Celltest_piecewises_beFromCellMLBackwardEuler>::Instance(); diff --git a/chaste_codegen/data/tests/chaste_reference_models/BE/test_piecewises_be.hpp b/chaste_codegen/data/tests/chaste_reference_models/BE/test_piecewises_be.hpp index 4a89bba79..cb1fb9e87 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/BE/test_piecewises_be.hpp +++ b/chaste_codegen/data/tests/chaste_reference_models/BE/test_piecewises_be.hpp @@ -16,8 +16,16 @@ #include "ChasteSerialization.hpp" #include #include "AbstractStimulusFunction.hpp" +#if USING_DEVICE_COMPILER +#include "StimulusEvaluatorCuda.hpp" +#endif #include "AbstractBackwardEulerCardiacCell.hpp" +#if USING_DEVICE_COMPILER +template +class BackwardEulerKernelLauncher; // Forward declare to hide CUDA-specifics from standard C++ compiler +#endif + class Celltest_piecewises_beFromCellMLBackwardEuler : public AbstractBackwardEulerCardiacCell<2> { friend class boost::serialization::access; @@ -37,17 +45,48 @@ class Celltest_piecewises_beFromCellMLBackwardEuler : public AbstractBackwardEul const bool is_concentration[4] = {false, false, false, false}; const bool is_probability[4] = {false, false, false, false}; public: +#if USING_DEVICE_COMPILER + template using SolverKernelLauncher = BackwardEulerKernelLauncher; + static constexpr unsigned TOTAL_SIZE = 4u; + static constexpr unsigned NONLINEAR_SIZE = 2u; +#endif - Celltest_piecewises_beFromCellMLBackwardEuler(boost::shared_ptr /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus); + Celltest_piecewises_beFromCellMLBackwardEuler(boost::shared_ptr /* unused */, 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: + 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]); + +#if USING_DEVICE_COMPILER + template + DEVICE + static void ComputeResidualDevice(ValueType var_chaste_interface__environment__time_converted, const ValueType rCurrentGuess[NONLINEAR_SIZE], const ValueType rY[], ValueType rResidual[NONLINEAR_SIZE], ValueType mDt, const ValueType mParameters[], bool mSetVoltageDerivativeToZero, ValueType mFixedVoltage, ValueType capacitance, const DeviceStimulusFunctor stim); + + template + DEVICE + static void ComputeJacobianDevice(ValueType var_chaste_interface__environment__time_converted, const ValueType rCurrentGuess[NONLINEAR_SIZE], const ValueType rY[], ValueType rJacobian[NONLINEAR_SIZE][NONLINEAR_SIZE], ValueType mDt, const ValueType mParameters[], bool mSetVoltageDerivativeToZero, ValueType mFixedVoltage, ValueType capacitance, const DeviceStimulusFunctor stim); + template + DEVICE + static void UpdateTransmembranePotentialDevice(ValueType var_chaste_interface__environment__time_converted, ValueType rY[], ValueType mDt, const ValueType mParameters[], bool mSetVoltageDerivativeToZero, ValueType mFixedVoltage, DeviceStimulusFunctor stim, ValueType capacitance); + + template + DEVICE + static void SolveClosedFormVarsDevice(ValueType rY[TOTAL_SIZE], ValueType mDt, const ValueType mParameters[], bool mSetVoltageDerivativeToZero, ValueType mFixedVoltage, ValueType capacitance); + + template + DEVICE + static void FillInitialGuessDevice(ValueType _guess[NONLINEAR_SIZE], const ValueType rY[TOTAL_SIZE]); + + template + DEVICE + static void ScatterSolutionDevice(const ValueType _guess[NONLINEAR_SIZE], ValueType rY[TOTAL_SIZE]); +#endif +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); -}; + std::vector ComputeDerivedQuantities(double var_chaste_interface__environment__time_converted, const std::vector & rY);}; // Needs to be included last #include "SerializationExportWrapper.hpp" @@ -82,4 +121,9 @@ namespace boost } -#endif // CELLTEST_PIECEWISES_BEFROMCELLMLBACKWARDEULER_HPP_ \ No newline at end of file +#endif // CELLTEST_PIECEWISES_BEFROMCELLMLBACKWARDEULER_HPP_ + +#if USING_DEVICE_COMPILER + #include "test_piecewises_beKernels.hpp" + #include "BackwardEulerKernels.hpp" +#endif \ No newline at end of file diff --git a/chaste_codegen/data/tests/chaste_reference_models/BEopt/bondarenko_szigeti_bett_kim_rasmusson_2004_apical.cpp b/chaste_codegen/data/tests/chaste_reference_models/BEopt/bondarenko_szigeti_bett_kim_rasmusson_2004_apical.cpp index 2b07a92a8..973434d17 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/BEopt/bondarenko_szigeti_bett_kim_rasmusson_2004_apical.cpp +++ b/chaste_codegen/data/tests/chaste_reference_models/BEopt/bondarenko_szigeti_bett_kim_rasmusson_2004_apical.cpp @@ -22,6 +22,8 @@ #include "HeartConfig.hpp" #include "IsNan.hpp" #include "MathsCustomFunctions.hpp" +#include "ChasteMathDeviceNamespaces.hpp" +#include "ChasteCpuMacros.hpp" @@ -144,7 +146,7 @@ class Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEul for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 + exp(5.9871794871794881 - 0.12820512820512822 * var_chaste_interface__membrane__V); + return 1 + CHASTE_MATH::Exp(CHASTE_CONST(5.9871794871794881) - CHASTE_CONST(0.12820512820512822) * 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); @@ -155,7 +157,7 @@ class Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEul for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(0.013632298072467722 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(CHASTE_CONST(0.013632298072467722) * 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); @@ -166,7 +168,7 @@ class Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEul for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(-0.025317124991725771 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(-CHASTE_CONST(0.025317124991725771) * 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); @@ -177,7 +179,7 @@ class Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEul for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 + 0.10000000000000001 * exp(-0.025317124991725771 * var_chaste_interface__membrane__V); + return 1 + CHASTE_CONST(0.10000000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(0.025317124991725771) * 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); @@ -188,7 +190,7 @@ class Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEul for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(-0.038949423064193495 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(-CHASTE_CONST(0.038949423064193495) * 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); @@ -199,7 +201,7 @@ class Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEul for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 0.1245 * exp(-0.0038949423064193493 * var_chaste_interface__membrane__V); + return CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(0.0038949423064193493) * 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); @@ -210,7 +212,7 @@ class Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEul for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 13 - 13 * exp(-2.1025 * pow((1 + 0.068965517241379309 * var_chaste_interface__membrane__V), 2)); + return 13 - 13 * CHASTE_MATH::Exp(-CHASTE_CONST(2.1025) * CHASTE_MATH::Pow((1 + CHASTE_CONST(0.068965517241379309) * var_chaste_interface__membrane__V), 2)); }; const double var_chaste_interface__membrane__V = mTableMins[0] + i*mTableSteps[0]; double val = f(var_chaste_interface__membrane__V); @@ -221,7 +223,7 @@ class Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEul for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 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)); + return CHASTE_CONST(0.40000000000000002) * (1 + CHASTE_CONST(0.69999999999999996) * CHASTE_MATH::Exp(-160 * CHASTE_MATH::Pow((1 + CHASTE_CONST(0.025000000000000001) * var_chaste_interface__membrane__V), 2)) - CHASTE_CONST(0.75) * CHASTE_MATH::Exp(-CHASTE_MATH::Pow((1 + CHASTE_CONST(0.050000000000000003) * var_chaste_interface__membrane__V), 2))) * CHASTE_MATH::Exp(CHASTE_CONST(1.2) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V) / (1 + CHASTE_CONST(0.12) * CHASTE_MATH::Exp(CHASTE_CONST(1.2) + CHASTE_CONST(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); @@ -232,7 +234,7 @@ class Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEul for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 0.050000000000000003 * exp(-0.92307692307692313 - 0.076923076923076927 * var_chaste_interface__membrane__V); + return CHASTE_CONST(0.050000000000000003) * CHASTE_MATH::Exp(-CHASTE_CONST(0.92307692307692313) - CHASTE_CONST(0.076923076923076927) * 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); @@ -243,7 +245,7 @@ class Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEul for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(-0.038580246913580245 * pow((-1 + 0.20000000000000001 * var_chaste_interface__membrane__V), 2)); + return CHASTE_MATH::Exp(-CHASTE_CONST(0.038580246913580245) * CHASTE_MATH::Pow((-1 + CHASTE_CONST(0.20000000000000001) * var_chaste_interface__membrane__V), 2)); }; const double var_chaste_interface__membrane__V = mTableMins[0] + i*mTableSteps[0]; double val = f(var_chaste_interface__membrane__V); @@ -254,7 +256,7 @@ class Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEul for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 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)); + return CHASTE_CONST(3.802) / (CHASTE_CONST(0.20000000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(0.016666666666666666) - CHASTE_CONST(0.0066666666666666671) * var_chaste_interface__membrane__V) + CHASTE_CONST(0.1027) * CHASTE_MATH::Exp(-CHASTE_CONST(0.14705882352941177) - CHASTE_CONST(0.058823529411764705) * 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); @@ -265,7 +267,7 @@ class Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEul for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 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)); + return CHASTE_CONST(3.802) / (CHASTE_CONST(0.1027) * CHASTE_MATH::Exp(-CHASTE_CONST(0.16666666666666666) - CHASTE_CONST(0.066666666666666666) * var_chaste_interface__membrane__V) + CHASTE_CONST(0.23000000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(0.016666666666666666) - CHASTE_CONST(0.0066666666666666671) * 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); @@ -276,7 +278,7 @@ class Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEul for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 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)); + return CHASTE_CONST(3.802) / (CHASTE_CONST(0.25) * CHASTE_MATH::Exp(-CHASTE_CONST(0.016666666666666666) - CHASTE_CONST(0.0066666666666666671) * var_chaste_interface__membrane__V) + CHASTE_CONST(0.1027) * CHASTE_MATH::Exp(-CHASTE_CONST(0.20833333333333334) - CHASTE_CONST(0.083333333333333329) * 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); @@ -287,7 +289,7 @@ class Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEul for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 6.9999999999999997e-7 * exp(-0.90909090909090906 - 0.12987012987012986 * var_chaste_interface__membrane__V); + return CHASTE_CONST(6.9999999999999997e-7) * CHASTE_MATH::Exp(-CHASTE_CONST(0.90909090909090906) - CHASTE_CONST(0.12987012987012986) * 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); @@ -298,7 +300,7 @@ class Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEul for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 0.19170000000000001 * exp(-0.12315270935960591 - 0.04926108374384236 * var_chaste_interface__membrane__V); + return CHASTE_CONST(0.19170000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(0.12315270935960591) - CHASTE_CONST(0.04926108374384236) * 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); @@ -309,7 +311,7 @@ class Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEul for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 0.20000000000000001 * exp(0.12315270935960591 - 0.04926108374384236 * var_chaste_interface__membrane__V); + return CHASTE_CONST(0.20000000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.12315270935960591) - CHASTE_CONST(0.04926108374384236) * 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); @@ -320,7 +322,7 @@ class Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEul for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 0.22 * exp(0.36945812807881773 - 0.04926108374384236 * var_chaste_interface__membrane__V); + return CHASTE_CONST(0.22) * CHASTE_MATH::Exp(CHASTE_CONST(0.36945812807881773) - CHASTE_CONST(0.04926108374384236) * 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); @@ -331,7 +333,7 @@ class Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEul for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(1.0731000000000002 + 0.035770000000000003 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(CHASTE_CONST(1.0731000000000002) + CHASTE_CONST(0.035770000000000003) * 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); @@ -342,7 +344,7 @@ class Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEul for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(-1.8711 - 0.062370000000000002 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(-CHASTE_CONST(1.8711) - CHASTE_CONST(0.062370000000000002) * 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); @@ -353,7 +355,7 @@ class Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEul for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 + 0.0067083000000000004 * exp(-4.7857142857142856 - 0.14285714285714285 * var_chaste_interface__membrane__V); + return 1 + CHASTE_CONST(0.0067083000000000004) * CHASTE_MATH::Exp(-CHASTE_CONST(4.7857142857142856) - CHASTE_CONST(0.14285714285714285) * 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); @@ -364,7 +366,7 @@ class Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEul for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(-1.9285714285714286 - 0.14285714285714285 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(-CHASTE_CONST(1.9285714285714286) - CHASTE_CONST(0.14285714285714285) * 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); @@ -375,7 +377,7 @@ class Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEul for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 + 0.051334999999999999 * exp(4.7857142857142856 + 0.14285714285714285 * var_chaste_interface__membrane__V); + return 1 + CHASTE_CONST(0.051334999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(4.7857142857142856) + CHASTE_CONST(0.14285714285714285) * 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); @@ -386,7 +388,7 @@ class Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEul for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(4.7857142857142856 + 0.14285714285714285 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(CHASTE_CONST(4.7857142857142856) + CHASTE_CONST(0.14285714285714285) * 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); @@ -397,7 +399,7 @@ class Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEul for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 0.013733 * exp(0.038198000000000003 * var_chaste_interface__membrane__V); + return CHASTE_CONST(0.013733) * CHASTE_MATH::Exp(CHASTE_CONST(0.038198000000000003) * 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); @@ -408,7 +410,7 @@ class Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEul for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 0.090820999999999999 * exp(0.11695499999999999 + 0.023390999999999999 * var_chaste_interface__membrane__V); + return CHASTE_CONST(0.090820999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(0.11695499999999999) + CHASTE_CONST(0.023390999999999999) * 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); @@ -419,7 +421,7 @@ class Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEul for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 6.8899999999999994e-5 * exp(-0.041779999999999998 * var_chaste_interface__membrane__V); + return CHASTE_CONST(6.8899999999999994e-5) * CHASTE_MATH::Exp(-CHASTE_CONST(0.041779999999999998) * 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); @@ -430,7 +432,7 @@ class Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEul for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 0.0064970000000000002 * exp(-0.16339999999999999 - 0.032680000000000001 * var_chaste_interface__membrane__V); + return CHASTE_CONST(0.0064970000000000002) * CHASTE_MATH::Exp(-CHASTE_CONST(0.16339999999999999) - CHASTE_CONST(0.032680000000000001) * 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); @@ -441,7 +443,7 @@ class Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEul for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(0.01176 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(CHASTE_CONST(0.01176) * 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); @@ -452,7 +454,7 @@ class Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEul for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(-0.063100000000000003 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(-CHASTE_CONST(0.063100000000000003) * 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); @@ -463,7 +465,7 @@ class Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEul for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return (((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)))); + return (((var_chaste_interface__membrane__V >= -CHASTE_CONST(26.500000781250002)) && (var_chaste_interface__membrane__V <= -CHASTE_CONST(26.499999218749998))) ? (-CHASTE_CONST(3.7604140624912359e-12) / (1 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999766942e-8))) + CHASTE_CONST(640000.00000149151) * (CHASTE_CONST(26.500000781250002) + var_chaste_interface__membrane__V) * (CHASTE_CONST(3.7604140624912359e-12) / (1 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999766942e-8))) + CHASTE_CONST(3.7604140624912359e-12) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999766942e-8))))) : (CHASTE_CONST(4.8133299999999997e-6) * (CHASTE_CONST(26.5) + var_chaste_interface__membrane__V) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(3.3919999999999999) - CHASTE_CONST(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); @@ -485,7 +487,7 @@ class Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEul for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(-1.0069999999999999 - 0.037999999999999999 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(-CHASTE_CONST(1.0069999999999999) - CHASTE_CONST(0.037999999999999999) * 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); @@ -496,7 +498,7 @@ class Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEul for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 / (1 + exp(-2.9220779220779218 - 0.12987012987012986 * var_chaste_interface__membrane__V)); + return 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.9220779220779218) - CHASTE_CONST(0.12987012987012986) * 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); @@ -507,7 +509,7 @@ class Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEul for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 13.17 + 39.299999999999997 * exp(-0.086199999999999999 * var_chaste_interface__membrane__V); + return CHASTE_CONST(13.17) + CHASTE_CONST(39.299999999999997) * CHASTE_MATH::Exp(-CHASTE_CONST(0.086199999999999999) * 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); @@ -518,7 +520,7 @@ class Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEul for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 / (1 + exp(7.9298245614035094 + 0.17543859649122806 * var_chaste_interface__membrane__V)); + return 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(7.9298245614035094) + CHASTE_CONST(0.17543859649122806) * 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); @@ -529,7 +531,7 @@ class Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEul for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 2.0579999999999998 + 0.49299999999999999 * exp(-0.062899999999999998 * var_chaste_interface__membrane__V); + return CHASTE_CONST(2.0579999999999998) + CHASTE_CONST(0.49299999999999999) * CHASTE_MATH::Exp(-CHASTE_CONST(0.062899999999999998) * 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); @@ -540,7 +542,7 @@ class Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEul for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 270 + 1050 / (1 + exp(7.9298245614035094 + 0.17543859649122806 * var_chaste_interface__membrane__V)); + return 270 + 1050 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(7.9298245614035094) + CHASTE_CONST(0.17543859649122806) * 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); @@ -551,7 +553,7 @@ class Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEul for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1200 - 170 / (1 + exp(7.9298245614035094 + 0.17543859649122806 * var_chaste_interface__membrane__V)); + return 1200 - 170 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(7.9298245614035094) + CHASTE_CONST(0.17543859649122806) * 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); @@ -562,7 +564,7 @@ class Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEul for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(-0.92307692307692313 - 0.076923076923076927 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(-CHASTE_CONST(0.92307692307692313) - CHASTE_CONST(0.076923076923076927) * 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); @@ -573,7 +575,7 @@ class Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEul for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(1.2 + 0.10000000000000001 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(CHASTE_CONST(1.2) + CHASTE_CONST(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); @@ -584,7 +586,7 @@ class Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEul for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 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)); + return 1 + CHASTE_CONST(0.69999999999999996) * CHASTE_MATH::Exp(-160 * CHASTE_MATH::Pow((1 + CHASTE_CONST(0.025000000000000001) * var_chaste_interface__membrane__V), 2)) - CHASTE_CONST(0.75) * CHASTE_MATH::Exp(-CHASTE_MATH::Pow((1 + CHASTE_CONST(0.050000000000000003) * var_chaste_interface__membrane__V), 2)); }; const double var_chaste_interface__membrane__V = mTableMins[0] + i*mTableSteps[0]; double val = f(var_chaste_interface__membrane__V); @@ -595,7 +597,7 @@ class Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEul for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(-2.1025 * pow((1 + 0.068965517241379309 * var_chaste_interface__membrane__V), 2)); + return CHASTE_MATH::Exp(-CHASTE_CONST(2.1025) * CHASTE_MATH::Pow((1 + CHASTE_CONST(0.068965517241379309) * var_chaste_interface__membrane__V), 2)); }; const double var_chaste_interface__membrane__V = mTableMins[0] + i*mTableSteps[0]; double val = f(var_chaste_interface__membrane__V); @@ -606,7 +608,7 @@ class Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEul for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(-0.016666666666666666 - 0.0066666666666666671 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(-CHASTE_CONST(0.016666666666666666) - CHASTE_CONST(0.0066666666666666671) * 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); @@ -617,7 +619,7 @@ class Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEul for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 0.1027 * exp(-0.20833333333333334 - 0.083333333333333329 * var_chaste_interface__membrane__V); + return CHASTE_CONST(0.1027) * CHASTE_MATH::Exp(-CHASTE_CONST(0.20833333333333334) - CHASTE_CONST(0.083333333333333329) * 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); @@ -628,7 +630,7 @@ class Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEul for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 0.1027 * exp(-0.16666666666666666 - 0.066666666666666666 * var_chaste_interface__membrane__V); + return CHASTE_CONST(0.1027) * CHASTE_MATH::Exp(-CHASTE_CONST(0.16666666666666666) - CHASTE_CONST(0.066666666666666666) * 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); @@ -639,7 +641,7 @@ class Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEul for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(-0.90909090909090906 - 0.12987012987012986 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(-CHASTE_CONST(0.90909090909090906) - CHASTE_CONST(0.12987012987012986) * 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); @@ -650,7 +652,7 @@ class Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEul for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 0.1027 * exp(-0.14705882352941177 - 0.058823529411764705 * var_chaste_interface__membrane__V); + return CHASTE_CONST(0.1027) * CHASTE_MATH::Exp(-CHASTE_CONST(0.14705882352941177) - CHASTE_CONST(0.058823529411764705) * 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); @@ -661,7 +663,7 @@ class Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEul for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 0.022348 * exp(0.01176 * var_chaste_interface__membrane__V); + return CHASTE_CONST(0.022348) * CHASTE_MATH::Exp(CHASTE_CONST(0.01176) * 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); @@ -694,9 +696,9 @@ std::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_amplitude_converted = -80 * CHASTE_CAP(); // uA_per_cm2 + const double var_chaste_interface__membrane__stim_duration = CHASTE_CONST(0.5); // millisecond + const double var_chaste_interface__membrane__stim_period = CHASTE_CONST(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), @@ -725,23 +727,23 @@ std::shared_ptrmHasDefaultStimulusFromCellML = 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[0] = CHASTE_CONST(1.7399999999999999e-5); // (var_calcium_fluxes__v2) [per_millisecond] + this->mParameters[1] = CHASTE_CONST(4.5); // (var_calcium_fluxes__v1) [per_millisecond] + this->mParameters[2] = CHASTE_CONST(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[7] = CHASTE_CONST(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] + this->mParameters[11] = CHASTE_CONST(0.29380000000000001); // (var_time_independent_potassium_current__g_K1) [milliS_per_microF] + this->mParameters[12] = CHASTE_CONST(0.050000000000000003); // (var_non_inactivating_steady_state_potassium_current__g_Kss) [milliS_per_microF] + this->mParameters[13] = CHASTE_CONST(0.078); // (var_rapid_delayed_rectifier_potassium_current__g_Kr) [milliS_per_microF] + this->mParameters[14] = CHASTE_CONST(0.0057499999999999999); // (var_slow_delayed_rectifier_potassium_current__g_Ks) [milliS_per_microF] + this->mParameters[15] = CHASTE_CONST(292.80000000000001); // (var_sodium_calcium_exchange_current__k_NaCa) [picoA_per_picoF] + this->mParameters[16] = CHASTE_CONST(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() @@ -792,7 +794,7 @@ std::shared_ptr& rY = *pStateVariables; - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -830,24 +832,24 @@ std::shared_ptrIndexTable0(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_pump_current__i_pCa = CHASTE_MATH::Pow(var_calcium_concentration__Cai, 2) / (CHASTE_CONST(0.25) + CHASTE_MATH::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) * CHASTE_CAP() * 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_calcium_background_current__i_Cab = CHASTE_CONST(0.00036699999999999998) * var_chaste_interface__membrane__V - CHASTE_CONST(0.0047112379481865285) * CHASTE_MATH::Log(mParameters[4] / var_calcium_concentration__Cai); // picoA_per_picoF + const double var_fast_transient_outward_potassium_current__E_K = CHASTE_CONST(25.674321243523316) * CHASTE_MATH::Log(mParameters[5] / var_chaste_interface__potassium_concentration__Ki); // millivolt + const double var_fast_transient_outward_potassium_current__i_Kto_f_converted = CHASTE_MATH::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) * CHASTE_CAP() * 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) * CHASTE_CAP() * 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 = CHASTE_MATH::Pow(var_chaste_interface__slow_delayed_rectifier_potassium_current__nKs, 2) * (-var_fast_transient_outward_potassium_current__E_K + var_chaste_interface__membrane__V) * CHASTE_CAP() * 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 var_fast_sodium_current__E_Na = CHASTE_CONST(25.674321243523316) * CHASTE_MATH::Log((mParameters[6] + CHASTE_CONST(0.1111111111111111) * mParameters[5]) / (var_chaste_interface__sodium_concentration__Nai + CHASTE_CONST(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) * CHASTE_CAP() * var_chaste_interface__fast_sodium_current__O_Na * mParameters[9]; // uA_per_cm2 + const double var_rapid_delayed_rectifier_potassium_current__i_Kr_converted = (-CHASTE_CONST(25.674321243523316) * CHASTE_MATH::Log((mParameters[5] + CHASTE_CONST(0.020408163265306124) * mParameters[6]) / (var_chaste_interface__potassium_concentration__Ki + CHASTE_CONST(0.020408163265306124) * var_chaste_interface__sodium_concentration__Nai)) + var_chaste_interface__membrane__V) * CHASTE_CAP() * var_chaste_interface__rapid_delayed_rectifier_potassium_current__O_K * mParameters[13]; // uA_per_cm2 + const double var_sodium_background_current__i_Nab = CHASTE_CONST(0.0025999999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.0025999999999999999) * var_fast_sodium_current__E_Na; // picoA_per_picoF + const double var_sodium_calcium_exchange_current__i_NaCa_converted = (CHASTE_MATH::Pow(var_chaste_interface__sodium_concentration__Nai, 3) * mParameters[4] * _lt_0_row[1] - CHASTE_MATH::Pow(mParameters[6], 3) * var_calcium_concentration__Cai * _lt_0_row[2]) * CHASTE_CAP() * mParameters[15] / ((_lt_0_row[3]) * (1380 + mParameters[4]) * (CHASTE_CONST(669921875000000.0) + CHASTE_MATH::Pow(mParameters[6], 3))); // uA_per_cm2 + const double var_sodium_potassium_pump_current__i_NaK = CHASTE_CONST(0.88) * mParameters[5] / ((1 + CHASTE_CONST(3043189.1166997822) * CHASTE_MATH::Pow((1 / var_chaste_interface__sodium_concentration__Nai), CHASTE_CONST(1.5))) * (1500 + mParameters[5]) * (1 + _lt_0_row[5] + CHASTE_CONST(0.036499999999999998) * (-CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(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) * CHASTE_CAP() * mParameters[5] * mParameters[11] / ((1 + CHASTE_MATH::Exp(CHASTE_CONST(0.089599999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(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 = CHASTE_CONST(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 = CHASTE_CAP() * var_calcium_activated_chloride_current__i_ClCa + CHASTE_CAP() * var_calcium_background_current__i_Cab + CHASTE_CAP() * var_calcium_pump_current__i_pCa + CHASTE_CAP() * var_slow_transient_outward_potassium_current__i_Kto_s + CHASTE_CAP() * var_sodium_background_current__i_Nab + CHASTE_CAP() * var_sodium_potassium_pump_current__i_NaK + CHASTE_CAP() * 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)); @@ -857,7 +859,7 @@ std::shared_ptr& rY = rGetStateVariables(); - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -917,39 +919,39 @@ std::shared_ptr& rY = rGetStateVariables(); - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -1074,43 +1076,43 @@ std::shared_ptr& rY = rGetStateVariables(); - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -2269,23 +2271,23 @@ std::shared_ptrIndexTable0(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_calcium_pump_current__i_pCa = CHASTE_MATH::Pow(var_calcium_concentration__Cai, 2) / (CHASTE_CONST(0.25) + CHASTE_MATH::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_calcium_background_current__i_Cab = CHASTE_CONST(0.00036699999999999998) * var_chaste_interface__membrane__V - CHASTE_CONST(0.0047112379481865285) * CHASTE_MATH::Log(mParameters[4] / var_calcium_concentration__Cai); // picoA_per_picoF + const double var_fast_transient_outward_potassium_current__E_K = CHASTE_CONST(25.674321243523316) * CHASTE_MATH::Log(mParameters[5] / var_chaste_interface__potassium_concentration__Ki); // millivolt + const double var_fast_transient_outward_potassium_current__i_Kto_f = CHASTE_MATH::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_delayed_rectifier_potassium_current__i_Ks = CHASTE_MATH::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__E_Na = CHASTE_CONST(25.674321243523316) * CHASTE_MATH::Log((mParameters[6] + CHASTE_CONST(0.1111111111111111) * mParameters[5]) / (var_chaste_interface__sodium_concentration__Nai + CHASTE_CONST(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 + const double var_rapid_delayed_rectifier_potassium_current__i_Kr = (-CHASTE_CONST(25.674321243523316) * CHASTE_MATH::Log((mParameters[5] + CHASTE_CONST(0.020408163265306124) * mParameters[6]) / (var_chaste_interface__potassium_concentration__Ki + CHASTE_CONST(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 = CHASTE_CONST(0.0025999999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.0025999999999999999) * var_fast_sodium_current__E_Na; // picoA_per_picoF + const double var_sodium_calcium_exchange_current__i_NaCa = (CHASTE_MATH::Pow(var_chaste_interface__sodium_concentration__Nai, 3) * mParameters[4] * _lt_0_row[1] - CHASTE_MATH::Pow(mParameters[6], 3) * var_calcium_concentration__Cai * _lt_0_row[2]) * mParameters[15] / ((_lt_0_row[3]) * (1380 + mParameters[4]) * (CHASTE_CONST(669921875000000.0) + CHASTE_MATH::Pow(mParameters[6], 3))); // picoA_per_picoF + const double var_sodium_potassium_pump_current__i_NaK = CHASTE_CONST(0.88) * mParameters[5] / ((1 + CHASTE_CONST(3043189.1166997822) * CHASTE_MATH::Pow((1 / var_chaste_interface__sodium_concentration__Nai), CHASTE_CONST(1.5))) * (1500 + mParameters[5]) * (1 + _lt_0_row[5] + CHASTE_CONST(0.036499999999999998) * (-CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(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 + CHASTE_MATH::Exp(CHASTE_CONST(0.089599999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(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 = CHASTE_CONST(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 - CHASTE_STIM(var_chaste_interface__environment__time) / CHASTE_CAP() - 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; } @@ -2294,7 +2296,7 @@ std::shared_ptr& rY = rGetStateVariables(); - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -2321,13 +2323,13 @@ std::shared_ptrIndexTable0(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_fast_transient_outward_potassium_current__alpha_a = CHASTE_CONST(0.18064) * _lt_0_row[17]; + const double var_fast_transient_outward_potassium_current__alpha_i = CHASTE_CONST(0.00015200000000000001) * _lt_0_row[20] / (_lt_0_row[19]); + const double var_fast_transient_outward_potassium_current__beta_a = CHASTE_CONST(0.39560000000000001) * _lt_0_row[18]; + const double var_fast_transient_outward_potassium_current__beta_i = CHASTE_CONST(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_delayed_rectifier_potassium_current__beta_n = CHASTE_CONST(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]; @@ -2386,7 +2388,7 @@ std::shared_ptrmFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -2425,33 +2427,33 @@ std::shared_ptrGetCapacitance() * 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_L_type_calcium_current__i_CaL_converted = CHASTE_CAP() * var_L_type_calcium_current__i_CaL; // uA_per_cm2 + const double var_membrane__i_stim_converted = CHASTE_STIM(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_fast_transient_outward_potassium_current__E_K = var_membrane__R * var_membrane__T * CHASTE_MATH::Log(mParameters[5] / var_chaste_interface__potassium_concentration__Ki) / var_membrane__F; // millivolt + const double var_fast_transient_outward_potassium_current__i_Kto_f = CHASTE_MATH::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 = CHASTE_CAP() * 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_non_inactivating_steady_state_potassium_current__i_Kss_converted = CHASTE_CAP() * 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_slow_delayed_rectifier_potassium_current__i_Ks = CHASTE_MATH::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 = CHASTE_CAP() * 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_sodium_calcium_exchange_current__eta = CHASTE_CONST(0.34999999999999998); // dimensionless + const double var_sodium_calcium_exchange_current__k_sat = CHASTE_CONST(0.10000000000000001); // dimensionless + const double var_fast_sodium_current__E_Na = var_membrane__R * var_membrane__T * CHASTE_MATH::Log((mParameters[6] + CHASTE_CONST(0.1111111111111111) * mParameters[5]) / (var_chaste_interface__sodium_concentration__Nai + CHASTE_CONST(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 + const double var_fast_sodium_current__i_Na_converted = CHASTE_CAP() * 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 * CHASTE_MATH::Log((mParameters[5] + CHASTE_CONST(0.020408163265306124) * mParameters[6]) / (var_chaste_interface__potassium_concentration__Ki + CHASTE_CONST(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 = CHASTE_CAP() * var_rapid_delayed_rectifier_potassium_current__i_Kr; // uA_per_cm2 + const double var_sodium_calcium_exchange_current__i_NaCa = (CHASTE_MATH::Pow(var_chaste_interface__sodium_concentration__Nai, 3) * mParameters[4] * CHASTE_MATH::Exp(var_membrane__F * var_chaste_interface__membrane__V * var_sodium_calcium_exchange_current__eta / (var_membrane__R * var_membrane__T)) - CHASTE_MATH::Pow(mParameters[6], 3) * var_calcium_concentration__Cai * CHASTE_MATH::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 * CHASTE_MATH::Exp((-1 + var_sodium_calcium_exchange_current__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (CHASTE_MATH::Pow(mParameters[6], 3) + CHASTE_MATH::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 = CHASTE_CAP() * 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 + CHASTE_MATH::Exp(CHASTE_CONST(0.089599999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(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 = CHASTE_CAP() * var_time_independent_potassium_current__i_K1; // uA_per_cm2 std::vector dqs(12); dqs[0] = var_calcium_fluxes__J_rel; diff --git a/chaste_codegen/data/tests/chaste_reference_models/BEopt/bondarenko_szigeti_bett_kim_rasmusson_2004_apical.hpp b/chaste_codegen/data/tests/chaste_reference_models/BEopt/bondarenko_szigeti_bett_kim_rasmusson_2004_apical.hpp index 2ce7f7d61..c2d2ebb4e 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/BEopt/bondarenko_szigeti_bett_kim_rasmusson_2004_apical.hpp +++ b/chaste_codegen/data/tests/chaste_reference_models/BEopt/bondarenko_szigeti_bett_kim_rasmusson_2004_apical.hpp @@ -16,8 +16,13 @@ #include "ChasteSerialization.hpp" #include #include "AbstractStimulusFunction.hpp" +#if USING_DEVICE_COMPILER +#include "StimulusEvaluatorCuda.hpp" +#endif #include "AbstractBackwardEulerCardiacCell.hpp" + + class Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEulerOpt : public AbstractBackwardEulerCardiacCell<32> { friend class boost::serialization::access; @@ -38,19 +43,25 @@ const bool is_concentration[41] = {false, true, true, true, 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(boost::shared_ptr /* unused */, 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: + 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]); + +#if USING_DEVICE_COMPILER + +#endif +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); -}; + std::vector ComputeDerivedQuantities(double var_chaste_interface__environment__time, const std::vector & rY);}; // Needs to be included last #include "SerializationExportWrapper.hpp" @@ -85,4 +96,5 @@ namespace boost } -#endif // CELLBONDARENKO_SZIGETI_BETT_KIM_RASMUSSON_2004_APICALFROMCELLMLBACKWARDEULEROPT_HPP_ \ No newline at end of file +#endif // CELLBONDARENKO_SZIGETI_BETT_KIM_RASMUSSON_2004_APICALFROMCELLMLBACKWARDEULEROPT_HPP_ + diff --git a/chaste_codegen/data/tests/chaste_reference_models/BEopt/decker_2009.cpp b/chaste_codegen/data/tests/chaste_reference_models/BEopt/decker_2009.cpp index 15fb93e53..0603ca175 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/BEopt/decker_2009.cpp +++ b/chaste_codegen/data/tests/chaste_reference_models/BEopt/decker_2009.cpp @@ -22,6 +22,8 @@ #include "HeartConfig.hpp" #include "IsNan.hpp" #include "MathsCustomFunctions.hpp" +#include "ChasteMathDeviceNamespaces.hpp" +#include "ChasteCpuMacros.hpp" @@ -144,7 +146,7 @@ class Celldecker_2009FromCellMLBackwardEulerOpt_LookupTables : public AbstractLo for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return exp(0.010107688547106707 * var_chaste_interface__membrane__Vm); + return CHASTE_MATH::Exp(CHASTE_CONST(0.010107688547106707) * 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); @@ -155,7 +157,7 @@ class Celldecker_2009FromCellMLBackwardEulerOpt_LookupTables : public AbstractLo for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return exp(-0.027328194960695912 * var_chaste_interface__membrane__Vm); + return CHASTE_MATH::Exp(-CHASTE_CONST(0.027328194960695912) * 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); @@ -166,7 +168,7 @@ class Celldecker_2009FromCellMLBackwardEulerOpt_LookupTables : public AbstractLo for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return 1 + 0.32000000000000001 * exp(-0.027328194960695912 * var_chaste_interface__membrane__Vm); + return 1 + CHASTE_CONST(0.32000000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(0.027328194960695912) * 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); @@ -177,7 +179,7 @@ class Celldecker_2009FromCellMLBackwardEulerOpt_LookupTables : public AbstractLo for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return 1 + exp(-3.444101282717841 - 0.037435883507802616 * var_chaste_interface__membrane__Vm); + return 1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.444101282717841) - CHASTE_CONST(0.037435883507802616) * 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); @@ -188,7 +190,7 @@ class Celldecker_2009FromCellMLBackwardEulerOpt_LookupTables : public AbstractLo for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return exp(0.074871767015605231 * var_chaste_interface__membrane__Vm); + return CHASTE_MATH::Exp(CHASTE_CONST(0.074871767015605231) * 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); @@ -210,7 +212,7 @@ class Celldecker_2009FromCellMLBackwardEulerOpt_LookupTables : public AbstractLo for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return -1 + exp(0.074871767015605231 * var_chaste_interface__membrane__Vm); + return -1 + CHASTE_MATH::Exp(CHASTE_CONST(0.074871767015605231) * 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); @@ -232,7 +234,7 @@ class Celldecker_2009FromCellMLBackwardEulerOpt_LookupTables : public AbstractLo for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return -100 * exp(0.037435883507802616 * var_chaste_interface__membrane__Vm); + return -100 * CHASTE_MATH::Exp(CHASTE_CONST(0.037435883507802616) * 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); @@ -254,7 +256,7 @@ class Celldecker_2009FromCellMLBackwardEulerOpt_LookupTables : public AbstractLo for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return -1 + exp(0.037435883507802616 * var_chaste_interface__membrane__Vm); + return -1 + CHASTE_MATH::Exp(CHASTE_CONST(0.037435883507802616) * 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); @@ -276,7 +278,7 @@ class Celldecker_2009FromCellMLBackwardEulerOpt_LookupTables : public AbstractLo for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return 1 + exp(1.2521739130434781 - 0.16722408026755853 * var_chaste_interface__membrane__Vm); + return 1 + CHASTE_MATH::Exp(CHASTE_CONST(1.2521739130434781) - CHASTE_CONST(0.16722408026755853) * 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); @@ -287,7 +289,7 @@ class Celldecker_2009FromCellMLBackwardEulerOpt_LookupTables : public AbstractLo for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return 1 + exp(0.64935064935064934 + 0.064935064935064929 * var_chaste_interface__membrane__Vm); + return 1 + CHASTE_MATH::Exp(CHASTE_CONST(0.64935064935064934) + CHASTE_CONST(0.064935064935064929) * 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); @@ -298,7 +300,7 @@ class Celldecker_2009FromCellMLBackwardEulerOpt_LookupTables : public AbstractLo for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return exp(0.0018181818181818182 * var_chaste_interface__membrane__Vm); + return CHASTE_MATH::Exp(CHASTE_CONST(0.0018181818181818182) * 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); @@ -309,7 +311,7 @@ class Celldecker_2009FromCellMLBackwardEulerOpt_LookupTables : public AbstractLo for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return 1 / (1 + exp(1.4349206349206352 - 0.10582010582010583 * var_chaste_interface__membrane__Vm)); + return 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.4349206349206352) - CHASTE_CONST(0.10582010582010583) * 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); @@ -320,7 +322,7 @@ class Celldecker_2009FromCellMLBackwardEulerOpt_LookupTables : public AbstractLo for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return 0.58999999999999997 + 0.80000000000000004 * exp(0.67599999999999993 + 0.051999999999999998 * var_chaste_interface__membrane__Vm) / (1 + exp(1.7160000000000002 + 0.13200000000000001 * var_chaste_interface__membrane__Vm)); + return CHASTE_CONST(0.58999999999999997) + CHASTE_CONST(0.80000000000000004) * CHASTE_MATH::Exp(CHASTE_CONST(0.67599999999999993) + CHASTE_CONST(0.051999999999999998) * var_chaste_interface__membrane__Vm) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.7160000000000002) + CHASTE_CONST(0.13200000000000001) * 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); @@ -331,7 +333,7 @@ class Celldecker_2009FromCellMLBackwardEulerOpt_LookupTables : public AbstractLo for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return 0.20000000000000001 + 0.80000000000000004 / (1 + exp(5.833333333333333 + 0.33333333333333331 * var_chaste_interface__membrane__Vm)); + return CHASTE_CONST(0.20000000000000001) + CHASTE_CONST(0.80000000000000004) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(5.833333333333333) + CHASTE_CONST(0.33333333333333331) * 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); @@ -342,7 +344,7 @@ class Celldecker_2009FromCellMLBackwardEulerOpt_LookupTables : public AbstractLo for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return 9.9990000999900015e-5 + 0.99990000999900008 / (1 + exp(5.833333333333333 + 0.33333333333333331 * var_chaste_interface__membrane__Vm)); + return CHASTE_CONST(9.9990000999900015e-5) + CHASTE_CONST(0.99990000999900008) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(5.833333333333333) + CHASTE_CONST(0.33333333333333331) * 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); @@ -353,7 +355,7 @@ class Celldecker_2009FromCellMLBackwardEulerOpt_LookupTables : public AbstractLo for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return 1 / (0.040277106492669565 / (1 + exp(4.7444197507005512 + 0.096627693496956227 * var_chaste_interface__membrane__Vm)) + 0.032730010146303147 / (1 + exp(-0.019709447580272044 - 0.092532617747756077 * var_chaste_interface__membrane__Vm))); + return 1 / (CHASTE_CONST(0.040277106492669565) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(4.7444197507005512) + CHASTE_CONST(0.096627693496956227) * var_chaste_interface__membrane__Vm)) + CHASTE_CONST(0.032730010146303147) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.019709447580272044) - CHASTE_CONST(0.092532617747756077) * 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); @@ -364,7 +366,7 @@ class Celldecker_2009FromCellMLBackwardEulerOpt_LookupTables : public AbstractLo for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return 1 + exp(-0.019709447580272044 - 0.092532617747756077 * var_chaste_interface__membrane__Vm); + return 1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.019709447580272044) - CHASTE_CONST(0.092532617747756077) * 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); @@ -375,7 +377,7 @@ class Celldecker_2009FromCellMLBackwardEulerOpt_LookupTables : public AbstractLo for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return 0.040277106492669565 / (1 + exp(4.7444197507005512 + 0.096627693496956227 * var_chaste_interface__membrane__Vm)); + return CHASTE_CONST(0.040277106492669565) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(4.7444197507005512) + CHASTE_CONST(0.096627693496956227) * 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); @@ -386,7 +388,7 @@ class Celldecker_2009FromCellMLBackwardEulerOpt_LookupTables : public AbstractLo for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return 1 / (1 + exp(-2.3729411764705883 - 0.23529411764705882 * var_chaste_interface__membrane__Vm)); + return 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.3729411764705883) - CHASTE_CONST(0.23529411764705882) * 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); @@ -397,7 +399,7 @@ class Celldecker_2009FromCellMLBackwardEulerOpt_LookupTables : public AbstractLo for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return (((-0.2364224 + 0.13600000000000001 * var_chaste_interface__membrane__Vm >= -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)))); + return (((-CHASTE_CONST(0.2364224) + CHASTE_CONST(0.13600000000000001) * var_chaste_interface__membrane__Vm >= -CHASTE_CONST(9.9999999999999995e-8)) && (-CHASTE_CONST(0.2364224) + CHASTE_CONST(0.13600000000000001) * var_chaste_interface__membrane__Vm <= CHASTE_CONST(9.9999999999999995e-8))) ? (CHASTE_CONST(0.0038902447058823523) + CHASTE_CONST(0.00029999999999999997) * var_chaste_interface__membrane__Vm) : (-CHASTE_CONST(0.004411764705882352) * (-CHASTE_CONST(0.2364224) + CHASTE_CONST(0.13600000000000001) * var_chaste_interface__membrane__Vm) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(0.2364224) - CHASTE_CONST(0.13600000000000001) * var_chaste_interface__membrane__Vm)))) + (((CHASTE_CONST(5.8385137599999997) + CHASTE_CONST(0.1522) * var_chaste_interface__membrane__Vm >= -CHASTE_CONST(9.9999999999999995e-8)) && (CHASTE_CONST(5.8385137599999997) + CHASTE_CONST(0.1522) * var_chaste_interface__membrane__Vm <= CHASTE_CONST(9.9999999999999995e-8))) ? (-CHASTE_CONST(0.0037830293298291716) - CHASTE_CONST(0.00014999999999999999) * var_chaste_interface__membrane__Vm) : (CHASTE_CONST(0.0019710906701708277) * (CHASTE_CONST(5.8385137599999997) + CHASTE_CONST(0.1522) * var_chaste_interface__membrane__Vm) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(5.8385137599999997) + CHASTE_CONST(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); @@ -408,7 +410,7 @@ class Celldecker_2009FromCellMLBackwardEulerOpt_LookupTables : public AbstractLo 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)); + return CHASTE_CONST(0.0016666666666666668) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(14.918032786885247) + CHASTE_CONST(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); @@ -419,7 +421,7 @@ class Celldecker_2009FromCellMLBackwardEulerOpt_LookupTables : public AbstractLo 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)))); + return (((CHASTE_CONST(4.7130000000000001) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__Vm >= -CHASTE_CONST(9.9999999999999995e-8)) && (CHASTE_CONST(4.7130000000000001) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__Vm <= CHASTE_CONST(9.9999999999999995e-8))) ? (CHASTE_CONST(10.7408) + CHASTE_CONST(0.16) * var_chaste_interface__membrane__Vm) : (-CHASTE_CONST(3.1999999999999997) * (CHASTE_CONST(4.7130000000000001) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__Vm) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(4.7130000000000001) - CHASTE_CONST(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); @@ -441,7 +443,7 @@ class Celldecker_2009FromCellMLBackwardEulerOpt_LookupTables : public AbstractLo for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return exp(-0.090909090909090912 * var_chaste_interface__membrane__Vm); + return CHASTE_MATH::Exp(-CHASTE_CONST(0.090909090909090912) * 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); @@ -452,7 +454,7 @@ class Celldecker_2009FromCellMLBackwardEulerOpt_LookupTables : public AbstractLo for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return ((var_chaste_interface__membrane__Vm >= -40) ? (0) : (0.13500000000000001 * exp(-11.764705882352942 - 0.14705882352941177 * var_chaste_interface__membrane__Vm))); + return ((var_chaste_interface__membrane__Vm >= -40) ? (0) : (CHASTE_CONST(0.13500000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(11.764705882352942) - CHASTE_CONST(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); @@ -474,7 +476,7 @@ class Celldecker_2009FromCellMLBackwardEulerOpt_LookupTables : public AbstractLo for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return ((var_chaste_interface__membrane__Vm >= -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))); + return ((var_chaste_interface__membrane__Vm >= -40) ? (CHASTE_CONST(7.6923076923076916) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.96036036036036043) - CHASTE_CONST(0.0900900900900901) * var_chaste_interface__membrane__Vm))) : (310000 * CHASTE_MATH::Exp(CHASTE_CONST(0.34999999999999998) * var_chaste_interface__membrane__Vm) + CHASTE_CONST(3.5600000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(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); @@ -496,7 +498,7 @@ class Celldecker_2009FromCellMLBackwardEulerOpt_LookupTables : public AbstractLo for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return ((var_chaste_interface__membrane__Vm >= -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)))); + return ((var_chaste_interface__membrane__Vm >= -40) ? (0) : ((CHASTE_CONST(37.780000000000001) + var_chaste_interface__membrane__Vm) * (-127140 * CHASTE_MATH::Exp(CHASTE_CONST(0.24440000000000001) * var_chaste_interface__membrane__Vm) - CHASTE_CONST(6.9480000000000006e-5) * CHASTE_MATH::Exp(-CHASTE_CONST(0.043909999999999998) * var_chaste_interface__membrane__Vm)) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(24.640530000000002) + CHASTE_CONST(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); @@ -518,7 +520,7 @@ class Celldecker_2009FromCellMLBackwardEulerOpt_LookupTables : public AbstractLo for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return ((var_chaste_interface__membrane__Vm >= -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)))); + return ((var_chaste_interface__membrane__Vm >= -40) ? (CHASTE_CONST(0.29999999999999999) * CHASTE_MATH::Exp(-CHASTE_CONST(2.5349999999999999e-7) * var_chaste_interface__membrane__Vm) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.2000000000000002) - CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__Vm))) : (CHASTE_CONST(0.1212) * CHASTE_MATH::Exp(-CHASTE_CONST(0.01052) * var_chaste_interface__membrane__Vm) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(5.5312920000000005) - CHASTE_CONST(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); @@ -540,7 +542,7 @@ class Celldecker_2009FromCellMLBackwardEulerOpt_LookupTables : public AbstractLo for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return 1 / (1 + exp(-1.3230057479321462 - 0.14019346698443852 * var_chaste_interface__membrane__Vm)); + return 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.3230057479321462) - CHASTE_CONST(0.14019346698443852) * 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); @@ -551,7 +553,7 @@ class Celldecker_2009FromCellMLBackwardEulerOpt_LookupTables : public AbstractLo for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return 3.5 / (1 + exp(3.403513787634354 + 0.034035137876343539 * var_chaste_interface__membrane__Vm)) + 0.82719827942757873 / (1 + exp(0.62658348478969694 - 0.034035137876343539 * var_chaste_interface__membrane__Vm)); + return CHASTE_CONST(3.5) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(3.403513787634354) + CHASTE_CONST(0.034035137876343539) * var_chaste_interface__membrane__Vm)) + CHASTE_CONST(0.82719827942757873) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(0.62658348478969694) - CHASTE_CONST(0.034035137876343539) * 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); @@ -562,7 +564,7 @@ class Celldecker_2009FromCellMLBackwardEulerOpt_LookupTables : public AbstractLo for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return 1 + exp(11.6 + 0.20000000000000001 * var_chaste_interface__membrane__Vm); + return 1 + CHASTE_MATH::Exp(CHASTE_CONST(11.6) + CHASTE_CONST(0.20000000000000001) * 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); @@ -573,7 +575,7 @@ class Celldecker_2009FromCellMLBackwardEulerOpt_LookupTables : public AbstractLo for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return 1 + exp(-2.1111111111111112 - 0.1111111111111111 * var_chaste_interface__membrane__Vm); + return 1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.1111111111111112) - CHASTE_CONST(0.1111111111111111) * 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); @@ -584,7 +586,7 @@ class Celldecker_2009FromCellMLBackwardEulerOpt_LookupTables : public AbstractLo for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return 1 + exp(12 + 0.20000000000000001 * var_chaste_interface__membrane__Vm); + return 1 + CHASTE_MATH::Exp(12 + CHASTE_CONST(0.20000000000000001) * 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); @@ -595,7 +597,7 @@ class Celldecker_2009FromCellMLBackwardEulerOpt_LookupTables : public AbstractLo for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return 0.0031250000000000002 / ((1 + exp(11.6 + 0.20000000000000001 * var_chaste_interface__membrane__Vm)) * (0.025000000000000001 / (1 + exp(11.6 + 0.20000000000000001 * var_chaste_interface__membrane__Vm)) + 0.20000000000000001 / (1 + exp(-2.1111111111111112 - 0.1111111111111111 * var_chaste_interface__membrane__Vm)))); + return CHASTE_CONST(0.0031250000000000002) / ((1 + CHASTE_MATH::Exp(CHASTE_CONST(11.6) + CHASTE_CONST(0.20000000000000001) * var_chaste_interface__membrane__Vm)) * (CHASTE_CONST(0.025000000000000001) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(11.6) + CHASTE_CONST(0.20000000000000001) * var_chaste_interface__membrane__Vm)) + CHASTE_CONST(0.20000000000000001) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.1111111111111112) - CHASTE_CONST(0.1111111111111111) * 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); @@ -606,7 +608,7 @@ class Celldecker_2009FromCellMLBackwardEulerOpt_LookupTables : public AbstractLo for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return 0.014864597980859999 * exp(0.0011184831685939309 * var_chaste_interface__membrane__Vm); + return CHASTE_CONST(0.014864597980859999) * CHASTE_MATH::Exp(CHASTE_CONST(0.0011184831685939309) * 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); @@ -617,7 +619,7 @@ class Celldecker_2009FromCellMLBackwardEulerOpt_LookupTables : public AbstractLo for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return 0.083986312199829993 * exp(-0.0020762336738124813 * var_chaste_interface__membrane__Vm); + return CHASTE_CONST(0.083986312199829993) * CHASTE_MATH::Exp(-CHASTE_CONST(0.0020762336738124813) * 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); @@ -628,7 +630,7 @@ class Celldecker_2009FromCellMLBackwardEulerOpt_LookupTables : public AbstractLo for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return 0.0031173268874 * exp(-0.015957214534570986 * var_chaste_interface__membrane__Vm); + return CHASTE_CONST(0.0031173268874) * CHASTE_MATH::Exp(-CHASTE_CONST(0.015957214534570986) * 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); @@ -639,7 +641,7 @@ class Celldecker_2009FromCellMLBackwardEulerOpt_LookupTables : public AbstractLo for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return 0.077319900973309999 * exp(-0.002423079581399111 * var_chaste_interface__membrane__Vm); + return CHASTE_CONST(0.077319900973309999) * CHASTE_MATH::Exp(-CHASTE_CONST(0.002423079581399111) * 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); @@ -650,7 +652,7 @@ class Celldecker_2009FromCellMLBackwardEulerOpt_LookupTables : public AbstractLo for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return 0.01460066118316 * exp(0.0091586713426216482 * var_chaste_interface__membrane__Vm); + return CHASTE_CONST(0.01460066118316) * CHASTE_MATH::Exp(CHASTE_CONST(0.0091586713426216482) * 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); @@ -661,7 +663,7 @@ class Celldecker_2009FromCellMLBackwardEulerOpt_LookupTables : public AbstractLo for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return -0.58638228663014003 * exp(0.010558998462268819 * var_chaste_interface__membrane__Vm); + return -CHASTE_CONST(0.58638228663014003) * CHASTE_MATH::Exp(CHASTE_CONST(0.010558998462268819) * 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); @@ -672,7 +674,7 @@ class Celldecker_2009FromCellMLBackwardEulerOpt_LookupTables : public AbstractLo for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return exp(-0.00300137636070284 * var_chaste_interface__membrane__Vm); + return CHASTE_MATH::Exp(-CHASTE_CONST(0.00300137636070284) * 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); @@ -683,7 +685,7 @@ class Celldecker_2009FromCellMLBackwardEulerOpt_LookupTables : public AbstractLo for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return 1 + exp(5.833333333333333 + 0.33333333333333331 * var_chaste_interface__membrane__Vm); + return 1 + CHASTE_MATH::Exp(CHASTE_CONST(5.833333333333333) + CHASTE_CONST(0.33333333333333331) * 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); @@ -694,7 +696,7 @@ class Celldecker_2009FromCellMLBackwardEulerOpt_LookupTables : public AbstractLo for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return exp(0.0011184831685939309 * var_chaste_interface__membrane__Vm); + return CHASTE_MATH::Exp(CHASTE_CONST(0.0011184831685939309) * 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); @@ -705,7 +707,7 @@ class Celldecker_2009FromCellMLBackwardEulerOpt_LookupTables : public AbstractLo for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return exp(-0.0020762336738124813 * var_chaste_interface__membrane__Vm); + return CHASTE_MATH::Exp(-CHASTE_CONST(0.0020762336738124813) * 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); @@ -716,7 +718,7 @@ class Celldecker_2009FromCellMLBackwardEulerOpt_LookupTables : public AbstractLo for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return exp(-0.015957214534570986 * var_chaste_interface__membrane__Vm); + return CHASTE_MATH::Exp(-CHASTE_CONST(0.015957214534570986) * 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); @@ -727,7 +729,7 @@ class Celldecker_2009FromCellMLBackwardEulerOpt_LookupTables : public AbstractLo for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return exp(0.0091586713426216482 * var_chaste_interface__membrane__Vm); + return CHASTE_MATH::Exp(CHASTE_CONST(0.0091586713426216482) * 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); @@ -738,7 +740,7 @@ class Celldecker_2009FromCellMLBackwardEulerOpt_LookupTables : public AbstractLo for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return 0.79405459958640001 * exp(-0.00300137636070284 * var_chaste_interface__membrane__Vm); + return CHASTE_CONST(0.79405459958640001) * CHASTE_MATH::Exp(-CHASTE_CONST(0.00300137636070284) * 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); @@ -771,8 +773,8 @@ std::shared_ptr Celldeck 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_amplitude_converted = -80 * CHASTE_CAP(); // uA_per_cm2 + const double var_chaste_interface__membrane__stim_duration = CHASTE_CONST(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( @@ -802,27 +804,27 @@ std::shared_ptr Celldeck // 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[0] = CHASTE_CONST(0.0043750000000000004); // (var_Ileak__Ileak_max) [mM_per_ms] + this->mParameters[1] = CHASTE_CONST(0.1125); // (var_Irel__kappa) [mM_per_uA_per_uF_per_ms_per_ms] + this->mParameters[2] = CHASTE_CONST(0.0043750000000000004); // (var_Iup__iupbar) [mM_per_ms] + this->mParameters[3] = CHASTE_CONST(1.8); // (var_model_parameters__Ca_o) [mM] + this->mParameters[4] = CHASTE_CONST(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] + this->mParameters[6] = CHASTE_CONST(0.00015552); // (var_ICaL__PCa) [L_per_F_ms] + this->mParameters[7] = CHASTE_CONST(1.9950799999999999e-7); // (var_ICab__PCab) [L_per_F_ms] + this->mParameters[8] = CHASTE_CONST(0.00022499999999999999); // (var_IClb__gClb) [mS_per_uF] + this->mParameters[9] = CHASTE_CONST(3.2000000000000001e-9); // (var_INab__PNab) [L_per_F_ms] + this->mParameters[10] = CHASTE_CONST(0.057500000000000002); // (var_IpCa__gpCa) [uA_per_uF] + this->mParameters[11] = CHASTE_CONST(9.0749999999999993); // (var_INa__g_Na) [mS_per_uF] + this->mParameters[12] = CHASTE_CONST(0.5); // (var_IK1__g_K1_max) [mS_per_uF] + this->mParameters[13] = CHASTE_CONST(0.0064999999999999997); // (var_INaL__gNaL) [mS_per_uF] + this->mParameters[14] = CHASTE_CONST(0.0027599999999999999); // (var_IKp__gKp) [mS_per_uF] + this->mParameters[15] = CHASTE_CONST(0.013854200000000001); // (var_IKr__gKr_max) [mS_per_uF] + this->mParameters[16] = CHASTE_CONST(0.082600000000000007); // (var_IKs__gKs_max) [mS_per_uF] + this->mParameters[17] = CHASTE_CONST(4.5); // (var_INaCa__Vmax) [uA_per_uF] + this->mParameters[18] = CHASTE_CONST(1.3999999999999999); // (var_INaK__ibarnak) [uA_per_uF] + this->mParameters[19] = CHASTE_CONST(8.9999999999999996e-7); // (var_Ito2__PCl) [L_per_F_ms] + this->mParameters[20] = CHASTE_CONST(0.49745800000000001); // (var_Ito1__gto1) [mS_per_uF] } Celldecker_2009FromCellMLBackwardEulerOpt::~Celldecker_2009FromCellMLBackwardEulerOpt() @@ -873,7 +875,7 @@ std::shared_ptr Celldeck // 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]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -954,17 +956,17 @@ std::shared_ptr Celldeck // 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 var_INaCa__INaCa_ss_sr = CHASTE_CONST(0.20000000000000001) * (CHASTE_MATH::Pow(var_chaste_interface__Na__Na_ss_sr, 3) * mParameters[3] * _lt_0_row[0] - CHASTE_MATH::Pow(mParameters[5], 3) * var_chaste_interface__Ca__Ca_ss_sr * _lt_0_row[1]) * mParameters[17] / ((_lt_0_row[2]) * (1 + CHASTE_CONST(1.5624999999999999e-8) / CHASTE_MATH::Pow(var_chaste_interface__Ca__Ca_ss_sr, 2)) * (CHASTE_CONST(669921.875) * var_chaste_interface__Ca__Ca_ss_sr + CHASTE_CONST(1.3) * CHASTE_MATH::Pow(var_chaste_interface__Na__Na_ss_sr, 3) + CHASTE_MATH::Pow(var_chaste_interface__Na__Na_ss_sr, 3) * mParameters[3] + CHASTE_MATH::Pow(mParameters[5], 3) * var_chaste_interface__Ca__Ca_ss_sr + CHASTE_CONST(0.0035999999999999999) * CHASTE_MATH::Pow(mParameters[5], 3) * (1 + CHASTE_CONST(0.00053738391835633597) * CHASTE_MATH::Pow(var_chaste_interface__Na__Na_ss_sr, 3)) + CHASTE_CONST(1860.8670000000004) * (1 + CHASTE_CONST(277.77777777777777) * var_chaste_interface__Ca__Ca_ss_sr) * mParameters[3])); // uA_per_uF + const double var_INaCa__INaCa = CHASTE_CONST(0.80000000000000004) * (CHASTE_MATH::Pow(var_chaste_interface__Na__Na_i, 3) * mParameters[3] * _lt_0_row[0] - CHASTE_MATH::Pow(mParameters[5], 3) * var_chaste_interface__Ca__Ca_i * _lt_0_row[1]) * mParameters[17] / ((_lt_0_row[2]) * (1 + CHASTE_CONST(1.5624999999999999e-8) / CHASTE_MATH::Pow(var_chaste_interface__Ca__Ca_i, 2)) * (CHASTE_CONST(669921.875) * var_chaste_interface__Ca__Ca_i + CHASTE_CONST(1.3) * CHASTE_MATH::Pow(var_chaste_interface__Na__Na_i, 3) + CHASTE_MATH::Pow(var_chaste_interface__Na__Na_i, 3) * mParameters[3] + CHASTE_MATH::Pow(mParameters[5], 3) * var_chaste_interface__Ca__Ca_i + CHASTE_CONST(0.0035999999999999999) * CHASTE_MATH::Pow(mParameters[5], 3) * (1 + CHASTE_CONST(0.00053738391835633597) * CHASTE_MATH::Pow(var_chaste_interface__Na__Na_i, 3)) + CHASTE_CONST(1860.8670000000004) * (1 + CHASTE_CONST(277.77777777777777) * var_chaste_interface__Ca__Ca_i) * mParameters[3])) + var_INaCa__INaCa_ss_sr; // uA_per_uF + const double var_INaK__INaK = CHASTE_CONST(0.056895766954938545) * CHASTE_MATH::Pow(var_chaste_interface__Na__Na_i, 3) * mParameters[18] * mParameters[4] / (CHASTE_MATH::Pow((1 + CHASTE_CONST(0.38461538461538458) * var_chaste_interface__Na__Na_i), 3) * (_lt_0_row[3]) * (CHASTE_CONST(1.5) + mParameters[4])); // uA_per_uF + const double var_INab__phi = CHASTE_CONST(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) * (((CHASTE_CONST(0.074871767015605231) * var_chaste_interface__membrane__Vm >= -CHASTE_CONST(9.9999999999999995e-8)) && (CHASTE_CONST(0.074871767015605231) * var_chaste_interface__membrane__Vm <= CHASTE_CONST(9.9999999999999995e-8))) ? (192970 * (1 - CHASTE_CONST(0.037435883507802616) * var_chaste_interface__membrane__Vm) * (-CHASTE_CONST(0.34100000000000003) * mParameters[3] + var_chaste_interface__Ca__Ca_ss_CaL * _lt_0_row[4]) * mParameters[6]) : (CHASTE_CONST(14448.004881001343) * (-CHASTE_CONST(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] / (CHASTE_CONST(0.00050000000000000001) + var_chaste_interface__Ca__Ca_i) + (((CHASTE_CONST(0.074871767015605231) * var_chaste_interface__membrane__Vm >= -CHASTE_CONST(9.9999999999999995e-8)) && (CHASTE_CONST(0.074871767015605231) * var_chaste_interface__membrane__Vm <= CHASTE_CONST(9.9999999999999995e-8))) ? (192970 * (1 - CHASTE_CONST(0.037435883507802616) * var_chaste_interface__membrane__Vm) * (-CHASTE_CONST(0.34100000000000003) * mParameters[3] + var_chaste_interface__Ca__Ca_i * _lt_0_row[4]) * mParameters[7]) : (CHASTE_CONST(14448.004881001343) * (-CHASTE_CONST(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 = (CHASTE_CONST(26.712338705498265) * CHASTE_MATH::Log(100 / var_chaste_interface__Cl__Cl_i) + var_chaste_interface__membrane__Vm) * mParameters[8] + (1 - 1 / (1 + CHASTE_CONST(6.2499999999999991) * CHASTE_MATH::Pow(var_chaste_interface__Irel__Irel, 2))) * (((CHASTE_CONST(0.037435883507802616) * var_chaste_interface__membrane__Vm >= -CHASTE_CONST(9.9999999999999995e-8)) && (CHASTE_CONST(0.037435883507802616) * var_chaste_interface__membrane__Vm <= CHASTE_CONST(9.9999999999999995e-8))) ? (-96485 * (1 - CHASTE_CONST(0.018717941753901308) * var_chaste_interface__membrane__Vm) * (_lt_0_row[6] + var_chaste_interface__Cl__Cl_i) * mParameters[19]) : (-CHASTE_CONST(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 = CHASTE_CONST(26.712338705498265) * CHASTE_MATH::Log(mParameters[4] / var_chaste_interface__K__K_i); // mV + const double var_reversal_potentials__ENa = CHASTE_CONST(26.712338705498265) * CHASTE_MATH::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 + CHASTE_MATH::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 + CHASTE_MATH::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 >= -CHASTE_CONST(9.9999999999999995e-8)) && (var_INab__phi <= CHASTE_CONST(9.9999999999999995e-8))) ? (96485 * (1 - CHASTE_CONST(0.5) * var_INab__phi) * (-mParameters[5] + var_chaste_interface__Na__Na_i * CHASTE_MATH::Exp(var_INab__phi)) * mParameters[9]) : (96485 * (-mParameters[5] + var_chaste_interface__Na__Na_i * CHASTE_MATH::Exp(var_INab__phi)) * mParameters[9] * var_INab__phi / (-1 + CHASTE_MATH::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 + CHASTE_CONST(0.59999999999999998) / (1 + CHASTE_CONST(6.4818210260626455e-7) * CHASTE_MATH::Pow((1 / var_chaste_interface__Ca__Ca_i), CHASTE_CONST(1.3999999999999999)))) * (-CHASTE_CONST(26.712338705498265) * CHASTE_MATH::Log((CHASTE_CONST(0.018329999999999999) * mParameters[5] + mParameters[4]) / (CHASTE_CONST(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] + CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::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]) + CHASTE_CONST(0.4389381125701739) * CHASTE_MATH::Sqrt(mParameters[4]) * (-var_reversal_potentials__EK + var_chaste_interface__membrane__Vm) * mParameters[12] / ((1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane__Vm - CHASTE_CONST(0.23849999999999999) * var_reversal_potentials__EK)) * (CHASTE_CONST(1.02) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane__Vm - CHASTE_CONST(0.23849999999999999) * var_reversal_potentials__EK)) + (CHASTE_CONST(0.49124000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__membrane__Vm - CHASTE_CONST(0.080320000000000003) * var_reversal_potentials__EK) + CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__membrane__Vm - CHASTE_CONST(0.061749999999999999) * var_reversal_potentials__EK)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(0.51429999999999998) * var_reversal_potentials__EK - CHASTE_CONST(0.51429999999999998) * var_chaste_interface__membrane__Vm)))) + CHASTE_MATH::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) * CHASTE_CAP(); // uA_per_cm2 const double i_ionic = var_chaste_interface__i_ionic; EXCEPT_IF_NOT(!std::isnan(i_ionic)); @@ -974,7 +976,7 @@ std::shared_ptr Celldeck 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]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -1044,32 +1046,32 @@ std::shared_ptr Celldeck //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_Ca__Idiff_ss = CHASTE_CONST(0.5) * var_chaste_interface__Ca__Ca_ss_sr - CHASTE_CONST(0.5) * var_chaste_interface__Ca__Ca_ss_CaL; // mM_per_ms + const double var_CaMK_active__CaMK_active = CHASTE_CONST(0.050000000000000003) * (1 - var_chaste_interface__CaMK_active__CaMK_trap) / (1 + CHASTE_CONST(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 d_dt_chaste_interface_var_CaMK_active__CaMK_trap = -CHASTE_CONST(0.00068000000000000005) * var_chaste_interface__CaMK_active__CaMK_trap + CHASTE_CONST(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_ICaL__delta = 3 / (1 + CHASTE_CONST(8.1000000000000005e-11) / CHASTE_MATH::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_Ileak__Ileak = CHASTE_CONST(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] / (CHASTE_CONST(0.00050000000000000001) + var_chaste_interface__Ca__Ca_i); // uA_per_uF + const double var_Irel__beta_tau = CHASTE_CONST(4.75) + CHASTE_CONST(4.75) / (1 + CHASTE_CONST(2.9619676669542428e-6) * CHASTE_MATH::Pow((1 / var_CaMK_active__CaMK_active), 10)); // ms + const double var_Itr__Itr = CHASTE_CONST(0.040000000000000001) * var_chaste_interface__Ca__Ca_NSR - CHASTE_CONST(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 / CHASTE_MATH::Pow((CHASTE_CONST(0.80000000000000004) + var_chaste_interface__Ca__Ca_JSR), 2)); // mM / ms + const double var_Iup__Iup = (1 + CHASTE_CONST(0.75) * var_CaMK_active__CaMK_active / (CHASTE_CONST(0.14999999999999999) + var_CaMK_active__CaMK_active)) * var_chaste_interface__Ca__Ca_i * mParameters[2] / (CHASTE_CONST(0.00092000000000000003) - CHASTE_CONST(0.00017000000000000001) * var_CaMK_active__CaMK_active / (CHASTE_CONST(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 var_cell_geometry__vcell = CHASTE_CONST(1.2100000000000001e-5) * CHASTE_CONST(CHASTE_MATH::Pi); // uL + const double var_cell_geometry__Vjsr = CHASTE_CONST(0.0047999999999999996) * var_cell_geometry__vcell; // uL + const double var_cell_geometry__Vmyo = CHASTE_CONST(0.67800000000000005) * var_cell_geometry__vcell; // uL + const double var_cell_geometry__Vnsr = CHASTE_CONST(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_cell_geometry__Vss_sr = CHASTE_CONST(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__IV_tau_star = 1 / (_lt_0_row[17] + 1 / ((_lt_0_row[16]) * (25 - CHASTE_CONST(17.5) / (1 + CHASTE_CONST(8.1000000000000005e-11) / CHASTE_MATH::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 @@ -1080,15 +1082,15 @@ std::shared_ptr Celldeck 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_ICaL__delta_I = CHASTE_CONST(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 = CHASTE_CONST(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 = (-CHASTE_CONST(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 = CHASTE_CONST(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 = CHASTE_STIM(var_chaste_interface__environment__time) / CHASTE_CAP(); // uA_per_uF + const double var_cell_geometry__AF = CHASTE_CONST(5.0619267243613002e-10) * CHASTE_CONST(CHASTE_MATH::Pi); // uF_mole_per_C + const double var_ICaL__ICaL = (var_chaste_interface__ICaL__O + var_chaste_interface__ICaL__O_star) * (((CHASTE_CONST(0.074871767015605231) * var_chaste_interface__membrane__Vm >= -CHASTE_CONST(9.9999999999999995e-8)) && (CHASTE_CONST(0.074871767015605231) * var_chaste_interface__membrane__Vm <= CHASTE_CONST(9.9999999999999995e-8))) ? (192970 * (1 - CHASTE_CONST(0.037435883507802616) * var_chaste_interface__membrane__Vm) * (-CHASTE_CONST(0.34100000000000003) * mParameters[3] + var_chaste_interface__Ca__Ca_ss_CaL * _lt_0_row[4]) * mParameters[6]) : (CHASTE_CONST(14448.004881001343) * (-CHASTE_CONST(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 + CHASTE_CONST(0.0097788000000000007) / CHASTE_MATH::Pow((CHASTE_CONST(0.0086999999999999994) + var_chaste_interface__Ca__Ca_ss_CaL), 2) + CHASTE_CONST(4.0890000000000003e-5) / CHASTE_MATH::Pow((CHASTE_CONST(0.00087000000000000001) + var_chaste_interface__Ca__Ca_ss_CaL), 2)); // mM / ms + const double var_ICab__ICab = (((CHASTE_CONST(0.074871767015605231) * var_chaste_interface__membrane__Vm >= -CHASTE_CONST(9.9999999999999995e-8)) && (CHASTE_CONST(0.074871767015605231) * var_chaste_interface__membrane__Vm <= CHASTE_CONST(9.9999999999999995e-8))) ? (192970 * (1 - CHASTE_CONST(0.037435883507802616) * var_chaste_interface__membrane__Vm) * (-CHASTE_CONST(0.34100000000000003) * mParameters[3] + var_chaste_interface__Ca__Ca_i * _lt_0_row[4]) * mParameters[7]) : (CHASTE_CONST(14448.004881001343) * (-CHASTE_CONST(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 @@ -1100,7 +1102,7 @@ std::shared_ptr Celldeck 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__C15 = (-CHASTE_CONST(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 @@ -1109,33 +1111,33 @@ std::shared_ptr Celldeck 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_IKs__O1 = CHASTE_CONST(0.089538306411019994) * var_chaste_interface__IKs__C15 + (-var_IKs__eta + _lt_0_row[38]) * var_chaste_interface__IKs__O1 + CHASTE_CONST(0.79405459958640001) * var_IKs__O2 * _lt_0_row[39]; // 1 / ms + const double var_INaCa__INaCa_ss_sr = CHASTE_CONST(0.20000000000000001) * (CHASTE_MATH::Pow(var_chaste_interface__Na__Na_ss_sr, 3) * mParameters[3] * _lt_0_row[0] - CHASTE_MATH::Pow(mParameters[5], 3) * var_chaste_interface__Ca__Ca_ss_sr * _lt_0_row[1]) * mParameters[17] / ((_lt_0_row[2]) * (1 + CHASTE_CONST(1.5624999999999999e-8) / CHASTE_MATH::Pow(var_chaste_interface__Ca__Ca_ss_sr, 2)) * (CHASTE_CONST(669921.875) * var_chaste_interface__Ca__Ca_ss_sr + CHASTE_CONST(1.3) * CHASTE_MATH::Pow(var_chaste_interface__Na__Na_ss_sr, 3) + CHASTE_MATH::Pow(var_chaste_interface__Na__Na_ss_sr, 3) * mParameters[3] + CHASTE_MATH::Pow(mParameters[5], 3) * var_chaste_interface__Ca__Ca_ss_sr + CHASTE_CONST(0.0035999999999999999) * CHASTE_MATH::Pow(mParameters[5], 3) * (1 + CHASTE_CONST(0.00053738391835633597) * CHASTE_MATH::Pow(var_chaste_interface__Na__Na_ss_sr, 3)) + CHASTE_CONST(1860.8670000000004) * (1 + CHASTE_CONST(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 + CHASTE_CONST(0.0097788000000000007) / CHASTE_MATH::Pow((CHASTE_CONST(0.0086999999999999994) + var_chaste_interface__Ca__Ca_ss_sr), 2) + CHASTE_CONST(4.0890000000000003e-5) / CHASTE_MATH::Pow((CHASTE_CONST(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 var_INaCa__INaCa = CHASTE_CONST(0.80000000000000004) * (CHASTE_MATH::Pow(var_chaste_interface__Na__Na_i, 3) * mParameters[3] * _lt_0_row[0] - CHASTE_MATH::Pow(mParameters[5], 3) * var_chaste_interface__Ca__Ca_i * _lt_0_row[1]) * mParameters[17] / ((_lt_0_row[2]) * (1 + CHASTE_CONST(1.5624999999999999e-8) / CHASTE_MATH::Pow(var_chaste_interface__Ca__Ca_i, 2)) * (CHASTE_CONST(669921.875) * var_chaste_interface__Ca__Ca_i + CHASTE_CONST(1.3) * CHASTE_MATH::Pow(var_chaste_interface__Na__Na_i, 3) + CHASTE_MATH::Pow(var_chaste_interface__Na__Na_i, 3) * mParameters[3] + CHASTE_MATH::Pow(mParameters[5], 3) * var_chaste_interface__Ca__Ca_i + CHASTE_CONST(0.0035999999999999999) * CHASTE_MATH::Pow(mParameters[5], 3) * (1 + CHASTE_CONST(0.00053738391835633597) * CHASTE_MATH::Pow(var_chaste_interface__Na__Na_i, 3)) + CHASTE_CONST(1860.8670000000004) * (1 + CHASTE_CONST(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 + CHASTE_CONST(0.5) * (-var_ICab__ICab - var_IpCa__IpCa + 2 * var_INaCa__INaCa) * var_cell_geometry__AF / var_cell_geometry__Vmyo) / (1 + CHASTE_CONST(0.00011900000000000002) / CHASTE_MATH::Pow((CHASTE_CONST(0.0023800000000000002) + var_chaste_interface__Ca__Ca_i), 2) + CHASTE_CONST(3.5000000000000004e-5) / CHASTE_MATH::Pow((CHASTE_CONST(0.00050000000000000001) + var_chaste_interface__Ca__Ca_i), 2)); // mM / ms + const double var_INaK__INaK = CHASTE_CONST(0.056895766954938545) * CHASTE_MATH::Pow(var_chaste_interface__Na__Na_i, 3) * mParameters[18] * mParameters[4] / (CHASTE_MATH::Pow((1 + CHASTE_CONST(0.38461538461538458) * var_chaste_interface__Na__Na_i), 3) * (_lt_0_row[3]) * (CHASTE_CONST(1.5) + mParameters[4])); // uA_per_uF + const double var_INab__phi = CHASTE_CONST(0.037435883507802616) * var_chaste_interface__membrane__Vm; // dimensionless + const double var_INab__INab = (((var_INab__phi >= -CHASTE_CONST(9.9999999999999995e-8)) && (var_INab__phi <= CHASTE_CONST(9.9999999999999995e-8))) ? (96485 * (1 - CHASTE_CONST(0.5) * var_INab__phi) * (-mParameters[5] + var_chaste_interface__Na__Na_i * CHASTE_MATH::Exp(var_INab__phi)) * mParameters[9]) : (96485 * (-mParameters[5] + var_chaste_interface__Na__Na_i * CHASTE_MATH::Exp(var_INab__phi)) * mParameters[9] * var_INab__phi / (-1 + CHASTE_MATH::Exp(var_INab__phi)))); // uA_per_uF + const double d_dt_chaste_interface_var_Irel__Irel = (1 + CHASTE_CONST(0.0123) / var_chaste_interface__Ca__Ca_JSR) * (-var_chaste_interface__Irel__Irel - var_ICaL__ICaL * var_Irel__beta_tau * mParameters[1] / (1 + CHASTE_MATH::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 + CHASTE_CONST(6.2499999999999991) * CHASTE_MATH::Pow(var_chaste_interface__Irel__Irel, 2))) * (((CHASTE_CONST(0.037435883507802616) * var_chaste_interface__membrane__Vm >= -CHASTE_CONST(9.9999999999999995e-8)) && (CHASTE_CONST(0.037435883507802616) * var_chaste_interface__membrane__Vm <= CHASTE_CONST(9.9999999999999995e-8))) ? (-96485 * (1 - CHASTE_CONST(0.018717941753901308) * var_chaste_interface__membrane__Vm) * (_lt_0_row[6] + var_chaste_interface__Cl__Cl_i) * mParameters[19]) : (-CHASTE_CONST(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_reversal_potentials__ECl = -CHASTE_CONST(26.712338705498265) * CHASTE_MATH::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_reversal_potentials__EK = CHASTE_CONST(26.712338705498265) * CHASTE_MATH::Log(mParameters[4] / var_chaste_interface__K__K_i); // mV + const double var_CT_K_Cl__CT_K_Cl = CHASTE_CONST(1.77e-5) * (-var_reversal_potentials__ECl + var_reversal_potentials__EK) / (CHASTE_CONST(87.825100000000006) - var_reversal_potentials__ECl + var_reversal_potentials__EK); // mM_per_ms + const double var_IK1__IK1 = CHASTE_CONST(0.4389381125701739) * CHASTE_MATH::Sqrt(mParameters[4]) * (-var_reversal_potentials__EK + var_chaste_interface__membrane__Vm) * mParameters[12] / ((1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane__Vm - CHASTE_CONST(0.23849999999999999) * var_reversal_potentials__EK)) * (CHASTE_CONST(1.02) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane__Vm - CHASTE_CONST(0.23849999999999999) * var_reversal_potentials__EK)) + (CHASTE_CONST(0.49124000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__membrane__Vm - CHASTE_CONST(0.080320000000000003) * var_reversal_potentials__EK) + CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__membrane__Vm - CHASTE_CONST(0.061749999999999999) * var_reversal_potentials__EK)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(0.51429999999999998) * var_reversal_potentials__EK - CHASTE_CONST(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 var_IKr__IKr = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::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 = CHASTE_MATH::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 = CHASTE_CONST(26.712338705498265) * CHASTE_MATH::Log(mParameters[5] / var_chaste_interface__Na__Na_i); // mV + const double var_CT_Na_Cl__CT_Na_Cl = CHASTE_CONST(2.4610800000000002e-5) * CHASTE_MATH::Pow((-var_reversal_potentials__ECl + var_reversal_potentials__ENa), 4) / (CHASTE_CONST(59494197.640692554) + CHASTE_MATH::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 var_INa__INa = CHASTE_MATH::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 = CHASTE_MATH::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 var_IKs__IKs = (1 + CHASTE_CONST(0.59999999999999998) / (1 + CHASTE_CONST(6.4818210260626455e-7) * CHASTE_MATH::Pow((1 / var_chaste_interface__Ca__Ca_i), CHASTE_CONST(1.3999999999999999)))) * (-CHASTE_CONST(26.712338705498265) * CHASTE_MATH::Log((CHASTE_CONST(0.018329999999999999) * mParameters[5] + mParameters[4]) / (CHASTE_CONST(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; @@ -1178,7 +1180,7 @@ std::shared_ptr Celldeck 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]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -1244,111 +1246,111 @@ std::shared_ptr Celldeck 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_x1 = 1 + CHASTE_CONST(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_x3 = CHASTE_CONST(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_x8 = CHASTE_MATH::Pow(var_chaste_interface__Ca__Ca_ss_sr, (-2)); + const double var_x9 = CHASTE_MATH::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_x11 = CHASTE_CONST(0.80000000000000004) + var_chaste_interface__Ca__Ca_JSR; + const double var_x12 = CHASTE_MATH::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_x14 = CHASTE_CONST(0.040000000000000001) * var_x13; + const double var_x15 = CHASTE_CONST(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_x18 = var_x5 / CHASTE_MATH::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_x21 = CHASTE_CONST(0.00092000000000000003) - CHASTE_CONST(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_x25 = var_x24 * (CHASTE_CONST(0.75) * var_x17 + CHASTE_CONST(0.75) * var_x19); + const double var_x26 = CHASTE_MATH::Pow(var_x21, (-2)); + const double var_x27 = 1 + CHASTE_CONST(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_x29 = var_x28 * (CHASTE_CONST(0.00017000000000000001) * var_x17 + CHASTE_CONST(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_x31 = var_x24 * (-CHASTE_CONST(5.6250000000000005e-5) * var_x30 + CHASTE_CONST(5.6250000000000005e-5) * var_x0 * var_x16 * var_x8 * var_x9); + const double var_x32 = var_x28 * (-CHASTE_CONST(1.2750000000000002e-8) * var_x30 + CHASTE_CONST(1.2750000000000002e-8) * var_x0 * var_x16 * var_x8 * var_x9); + const double var_x33 = CHASTE_CONST(0.0023800000000000002) + var_chaste_interface__Ca__Ca_i; + const double var_x34 = CHASTE_CONST(0.00050000000000000001) + var_chaste_interface__Ca__Ca_i; + const double var_x35 = CHASTE_MATH::Pow(var_x34, (-2)); + const double var_x36 = 1 + CHASTE_CONST(0.00011900000000000002) / CHASTE_MATH::Pow(var_x33, 2) + CHASTE_CONST(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_x39 = CHASTE_CONST(0.0054277286135693209) * mParameters[0]; + const double var_x40 = 192970 - CHASTE_CONST(7224.0024405006716) * var_chaste_interface__membrane__Vm; + const double var_x41 = CHASTE_CONST(0.074871767015605231) * var_chaste_interface__membrane__Vm; + const double var_x42 = CHASTE_MATH::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_x44 = (var_x41 >= -CHASTE_CONST(9.9999999999999995e-8)) && (var_x41 <= CHASTE_CONST(9.9999999999999995e-8)); + const double var_x45 = CHASTE_CONST(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_x47 = CHASTE_CONST(3.0851110000007915e-5) * mParameters[10] / var_x34; + const double var_x48 = CHASTE_CONST(0.081415929203539822) * var_x23 * var_x27; + const double var_x49 = 1 + CHASTE_CONST(1.5624999999999999e-8) / CHASTE_MATH::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_x51 = CHASTE_MATH::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_x53 = CHASTE_MATH::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_x55 = var_x53 * (1 + CHASTE_CONST(0.00053738391835633597) * var_x51); + const double var_x56 = (1 + CHASTE_CONST(277.77777777777777) * var_chaste_interface__Ca__Ca_i) * mParameters[3]; + const double var_x57 = 1 / (var_x52 + var_x54 + CHASTE_CONST(669921.875) * var_chaste_interface__Ca__Ca_i + CHASTE_CONST(0.0035999999999999999) * var_x55 + CHASTE_CONST(1.3) * var_x51 + CHASTE_CONST(1860.8670000000004) * var_x56); + const double var_x58 = CHASTE_CONST(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_x60 = 1 / (1 + CHASTE_CONST(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_x63 = CHASTE_MATH::Pow((CHASTE_CONST(1.9405247813411081e-6) * var_x51 + CHASTE_CONST(1.4927113702623908e-6) * var_x52 + CHASTE_CONST(1.4927113702623908e-6) * var_x54 + CHASTE_CONST(0.0027777373294460648) * var_x56 + CHASTE_CONST(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_x66 = -CHASTE_CONST(669921.875) - var_x53 - CHASTE_CONST(516907.50000000012) * mParameters[3]; + const double var_x67 = CHASTE_MATH::Pow(var_x49, (-2)); + const double var_x68 = CHASTE_MATH::Pow(var_chaste_interface__Ca__Ca_i, (-3)); + const double var_x69 = -CHASTE_CONST(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_x71 = CHASTE_CONST(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_x73 = CHASTE_MATH::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_x76 = var_x53 * (1 + CHASTE_CONST(0.00053738391835633597) * var_x73); + const double var_x77 = (1 + CHASTE_CONST(277.77777777777777) * var_chaste_interface__Ca__Ca_ss_sr) * mParameters[3]; + const double var_x78 = 1 / (var_x74 + var_x75 + CHASTE_CONST(669921.875) * var_chaste_interface__Ca__Ca_ss_sr + CHASTE_CONST(0.0035999999999999999) * var_x76 + CHASTE_CONST(1.3) * var_x73 + CHASTE_CONST(1860.8670000000004) * var_x77); + const double var_x79 = 1 + CHASTE_CONST(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_x86 = CHASTE_MATH::Pow((CHASTE_CONST(1.9405247813411081e-6) * var_x73 + CHASTE_CONST(1.4927113702623908e-6) * var_x74 + CHASTE_CONST(1.4927113702623908e-6) * var_x75 + CHASTE_CONST(0.0027777373294460648) * var_x77 + CHASTE_CONST(5.3737609329446059e-9) * var_x76 + var_chaste_interface__Ca__Ca_ss_sr), (-2)); + const double var_x87 = CHASTE_MATH::Pow(var_x79, (-2)); + const double var_x88 = CHASTE_MATH::Pow(var_chaste_interface__Ca__Ca_ss_sr, (-3)); + const double var_x89 = CHASTE_MATH::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_x91 = CHASTE_CONST(5.8037463182484285e-6) * var_x53; + const double var_x92 = -CHASTE_CONST(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_x98 = CHASTE_MATH::Pow(var_chaste_interface__Na__Na_ss_sr, 2); + const double var_x99 = -CHASTE_CONST(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_x103 = CHASTE_CONST(0.0086999999999999994) + var_chaste_interface__Ca__Ca_ss_CaL; + const double var_x104 = CHASTE_CONST(0.00087000000000000001) + var_chaste_interface__Ca__Ca_ss_CaL; + const double var_x105 = 1 + CHASTE_CONST(0.0097788000000000007) / CHASTE_MATH::Pow(var_x103, 2) + CHASTE_CONST(4.0890000000000003e-5) / CHASTE_MATH::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]; @@ -1358,77 +1360,77 @@ std::shared_ptr Celldeck 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_x115 = -CHASTE_CONST(0.010458526290002684) * var_x106 * var_x114; + const double var_x116 = CHASTE_CONST(0.0086999999999999994) + var_chaste_interface__Ca__Ca_ss_sr; + const double var_x117 = CHASTE_CONST(0.00087000000000000001) + var_chaste_interface__Ca__Ca_ss_sr; + const double var_x118 = 1 + CHASTE_CONST(0.0097788000000000007) / CHASTE_MATH::Pow(var_x116, 2) + CHASTE_CONST(4.0890000000000003e-5) / CHASTE_MATH::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_x121 = CHASTE_CONST(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_x124 = CHASTE_MATH::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_x126 = CHASTE_MATH::Log(var_x125 * mParameters[4]); + const double var_x127 = CHASTE_CONST(26.712338705498265) * var_x126; + const double var_x128 = var_x127 + CHASTE_CONST(26.712338705498265) * var_x124; + const double var_x129 = CHASTE_CONST(0.00047280839508731927) / (CHASTE_CONST(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_x131 = CHASTE_MATH::Pow((1 + CHASTE_CONST(0.30415380916729118) * var_x124 + CHASTE_CONST(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_x133 = var_x124 + CHASTE_MATH::Log(var_x132 * mParameters[5]); + const double var_x134 = CHASTE_MATH::Pow(var_x133, 4); + const double var_x135 = CHASTE_CONST(50.122574928945262) * CHASTE_MATH::Pow(var_x133, 3) / (CHASTE_CONST(59494197.640692554) + CHASTE_CONST(509152.231225166) * var_x134); + const double var_x136 = CHASTE_MATH::Pow((1 + CHASTE_CONST(0.0085580149227345564) * var_x134), (-2)); + const double var_x137 = CHASTE_MATH::Pow(var_x133, 7); + const double var_x138 = var_x123 * var_x135 - CHASTE_CONST(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_x140 = CHASTE_CONST(6.1298221377044294e-8) * var_x128 * var_x131; + const double var_x141 = var_x132 * var_x135 - CHASTE_CONST(7.2099425022651882e-9) * var_x132 * var_x136 * var_x137; + const double var_x142 = CHASTE_MATH::Pow(var_chaste_interface__Irel__Irel, 2); + const double var_x143 = 1 / (1 + CHASTE_CONST(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_x145 = var_x144 * (1 - CHASTE_CONST(0.018717941753901308) * var_chaste_interface__membrane__Vm); + const double var_x146 = (var_x71 >= -CHASTE_CONST(9.9999999999999995e-8)) && (var_x71 <= CHASTE_CONST(9.9999999999999995e-8)); + const double var_x147 = CHASTE_MATH::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_x149 = CHASTE_CONST(3612.0012202503358) * var_x148; + const double var_x150 = (-100 * var_x147 + var_chaste_interface__Cl__Cl_i) * var_chaste_interface__Irel__Irel / CHASTE_MATH::Pow((CHASTE_CONST(0.16000000000000003) + var_x142), 2); + const double var_x151 = 1 + CHASTE_CONST(8.1000000000000005e-11) / CHASTE_MATH::Pow(var_chaste_interface__Ca__Ca_ss_CaL, 4); + const double var_x152 = 1 / (CHASTE_MATH::Pow(var_x151, 2) * CHASTE_MATH::Pow(var_chaste_interface__Ca__Ca_ss_CaL, 5)); + const double var_x153 = CHASTE_CONST(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_x159 = CHASTE_CONST(0.80000000000000004) * var_x158; + const double var_x160 = CHASTE_CONST(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_x163 = var_x161 + CHASTE_CONST(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_x168 = CHASTE_CONST(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_x171 = CHASTE_CONST(0.99990000999900008) * var_x158; + const double var_x172 = CHASTE_CONST(0.99990000999900008) - var_x171; + const double var_x173 = CHASTE_CONST(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_x175 = CHASTE_CONST(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_x177 = CHASTE_CONST(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_x179 = CHASTE_CONST(9.0720000000000001e-12) * var_x152 * var_x162 / CHASTE_MATH::Pow((1 - CHASTE_CONST(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_x183 = var_x161 + var_x162 / (25 - CHASTE_CONST(17.5) * var_x165); const double var_x184 = var_x173 * var_x183; - const double var_x185 = 9.9999999999999995e-7 + var_x170; + const double var_x185 = CHASTE_CONST(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; @@ -1436,46 +1438,46 @@ std::shared_ptr Celldeck 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_x193 = CHASTE_CONST(0.059458391923439997) * var_x192; const double var_x194 = _lt_0_row[42]; - const double var_x195 = 0.083986312199829993 * var_x194; + const double var_x195 = CHASTE_CONST(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_x197 = CHASTE_CONST(0.0062346537747999999) * var_x196; + const double var_x198 = CHASTE_CONST(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_x200 = CHASTE_CONST(0.01460066118316) * var_x199; + const double var_x201 = CHASTE_CONST(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_x203 = CHASTE_CONST(0.16797262439965999) * var_x194; + const double var_x204 = CHASTE_CONST(0.009351980662199999) * var_x196; + const double var_x205 = CHASTE_CONST(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_x207 = CHASTE_CONST(0.043801983549479999) * var_x199; + const double var_x208 = CHASTE_CONST(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_x210 = CHASTE_CONST(0.04459379394258) * var_x192; + const double var_x211 = CHASTE_CONST(0.0031173268874) * var_x196; + const double var_x212 = CHASTE_CONST(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_x214 = CHASTE_CONST(0.33594524879931997) * var_x194; + const double var_x215 = CHASTE_CONST(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_x219 = CHASTE_MATH::Pow(var_x218, 10); + const double var_x220 = 1 + CHASTE_CONST(2.9619676669542428e-6) * var_x219; + const double var_x221 = var_x218 * var_x219 / CHASTE_MATH::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_x224 = 1 + CHASTE_CONST(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_x226 = CHASTE_CONST(4.75) + CHASTE_CONST(4.75) * var_x225; + const double var_x227 = CHASTE_MATH::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_x232 = var_x224 * var_x231 / CHASTE_MATH::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; @@ -1483,50 +1485,50 @@ std::shared_ptr Celldeck 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_x240 = CHASTE_MATH::Pow(var_x239, CHASTE_CONST(1.3999999999999999)); + const double var_x241 = 1 + CHASTE_CONST(6.4818210260626455e-7) * var_x240; + const double var_x242 = 1 / (CHASTE_CONST(0.018329999999999999) * var_chaste_interface__Na__Na_i + var_chaste_interface__K__K_i); + const double var_x243 = -CHASTE_CONST(26.712338705498265) * CHASTE_MATH::Log(var_x242 * (CHASTE_CONST(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_x245 = -CHASTE_CONST(6.1702220000015831e-5) - CHASTE_CONST(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_x248 = CHASTE_CONST(0.0016482105995215921) * var_x125; + const double var_x249 = CHASTE_MATH::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_x251 = CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane__Vm - CHASTE_CONST(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_x254 = CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(13.738155796237757) * var_x126 - CHASTE_CONST(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_x257 = CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__membrane__Vm - CHASTE_CONST(2.1455350448256207) * var_x126); + const double var_x258 = CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__membrane__Vm - CHASTE_CONST(1.6494869150645177) * var_x126); + const double var_x259 = var_x258 + CHASTE_CONST(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_x261 = 1 / (var_x260 + CHASTE_CONST(1.02) * var_x253); const double var_x262 = var_x253 * mParameters[12]; - const double var_x263 = pow(var_x252, (-2)); + const double var_x263 = CHASTE_MATH::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_x265 = 1 + CHASTE_CONST(0.38461538461538458) * var_chaste_interface__Na__Na_i; + const double var_x266 = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.444101282717841) - var_x71)); + const double var_x267 = 1 / (CHASTE_CONST(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_x269 = var_x268 * var_x89 / CHASTE_MATH::Pow(var_x265, 3); + const double var_x270 = CHASTE_MATH::Pow(var_x265, (-4)); + const double var_x271 = CHASTE_CONST(3.299618375272375e-16) * var_x93; + const double var_x272 = CHASTE_CONST(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; + const double var_x274 = CHASTE_CONST(0.0016482105995215921) * var_x132; + const double var_x275 = CHASTE_CONST(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][0] = 1.0 - (mDt * (-CHASTE_CONST(0.00068000000000000005) - CHASTE_CONST(0.0025000000000000005) * var_x2 * var_x5 + CHASTE_CONST(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][5] = -(mDt * (CHASTE_CONST(3.7500000000000005e-6) * var_x10 * var_x5 + CHASTE_CONST(1.8750000000000003e-7) * var_x8 * CHASTE_MATH::Pow(var_x0, 2) / CHASTE_MATH::Pow(var_x1, 3))); rJacobian[0][6] = 0.0; rJacobian[0][7] = 0.0; rJacobian[0][8] = 0.0; @@ -1557,7 +1559,7 @@ std::shared_ptr Celldeck 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][1] = 1.0 - (mDt * (-var_x14 + CHASTE_CONST(0.25) * (-var_chaste_interface__Irel__Irel + CHASTE_CONST(0.040000000000000001) * var_chaste_interface__Ca__Ca_NSR - CHASTE_CONST(0.040000000000000001) * var_chaste_interface__Ca__Ca_JSR) / (CHASTE_MATH::Pow(var_x11, 3) * CHASTE_MATH::Pow((CHASTE_CONST(0.125) + var_x12), 2)))); rJacobian[1][2] = -(mDt * (var_x14)); rJacobian[1][3] = 0.0; rJacobian[1][4] = 0.0; @@ -1592,8 +1594,8 @@ std::shared_ptr Celldeck 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][1] = -(mDt * (CHASTE_CONST(0.0034782608695652171))); + rJacobian[2][2] = 1.0 - (mDt * (-CHASTE_CONST(0.0034782608695652171) - CHASTE_CONST(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)); @@ -1626,12 +1628,12 @@ std::shared_ptr Celldeck 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][0] = -(mDt * (var_x38 * (-CHASTE_CONST(0.081415929203539822) * var_x25 - CHASTE_CONST(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][3] = 1.0 - (mDt * (var_x38 * (-CHASTE_CONST(0.14749262536873156) - var_x47 - var_x48 - CHASTE_CONST(3.0851110000007915e-5) * ((var_x44) ? (var_x40 * var_x43 * mParameters[7]) : (var_x46 * mParameters[7])) - var_x50 * var_x58 * var_x62 + CHASTE_CONST(3.0851110000007915e-5) * var_x35 * var_chaste_interface__Ca__Ca_i * mParameters[10] + CHASTE_CONST(0.081415929203539822) * var_x26 * var_x27 * var_chaste_interface__Ca__Ca_i * mParameters[2] + CHASTE_CONST(1.0998727917574584e-16) * var_x50 * var_x60 * var_x63 * var_x65 * var_x66 * mParameters[17] + CHASTE_CONST(1.5425555000003961e-12) * var_x57 * var_x60 * var_x65 * var_x67 * var_x68 * mParameters[17]) + (CHASTE_CONST(0.00023800000000000004) / CHASTE_MATH::Pow(var_x33, 3) + CHASTE_CONST(7.0000000000000007e-5) / CHASTE_MATH::Pow(var_x34, 3)) * (CHASTE_CONST(0.14749262536873156) * var_chaste_interface__Ca__Ca_ss_sr + CHASTE_CONST(1.2340444000003168e-5) * var_x83 - CHASTE_CONST(0.14749262536873156) * var_chaste_interface__Ca__Ca_i - CHASTE_CONST(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) / CHASTE_MATH::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][5] = -(mDt * (var_x38 * (CHASTE_CONST(0.14749262536873156) - CHASTE_CONST(1.2340444000003168e-5) * var_x85 - CHASTE_CONST(0.081415929203539822) * var_x31 - CHASTE_CONST(0.081415929203539822) * var_x32 + CHASTE_CONST(2.7496819793936459e-17) * var_x60 * var_x66 * var_x80 * var_x81 * var_x86 * mParameters[17] + CHASTE_CONST(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; @@ -1659,13 +1661,13 @@ std::shared_ptr Celldeck 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[3][33] = -(mDt * (var_x38 * (CHASTE_CONST(1.0998727917574584e-16) * var_x92 * var_x93 + CHASTE_CONST(0.00014808532800003802) * var_x95 * var_x97))); + rJacobian[3][34] = -(mDt * (var_x38 * (CHASTE_CONST(3.7021332000009505e-5) * var_x102 + CHASTE_CONST(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][4] = 1.0 - (mDt * (-var_x106 * (5 + CHASTE_CONST(0.010458526290002684) * var_x109) - (CHASTE_CONST(0.019557600000000001) / CHASTE_MATH::Pow(var_x103, 3) + CHASTE_CONST(8.1780000000000006e-5) / CHASTE_MATH::Pow(var_x104, 3)) * (5 * var_chaste_interface__Ca__Ca_ss_CaL + CHASTE_CONST(0.010458526290002684) * var_x113 - 5 * var_chaste_interface__Ca__Ca_ss_sr) / CHASTE_MATH::Pow(var_x105, 2))); rJacobian[4][5] = -(mDt * (5 * var_x106)); rJacobian[4][6] = 0.0; rJacobian[4][7] = 0.0; @@ -1700,8 +1702,8 @@ std::shared_ptr Celldeck 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][4] = -(mDt * (CHASTE_CONST(0.5) * var_x119)); + rJacobian[5][5] = 1.0 - (mDt * (-var_x122 * (CHASTE_CONST(5.5) + CHASTE_CONST(0.0004183410516001074) * var_x85 - CHASTE_CONST(1.3073157862503357e-11) * var_x120 - var_x121 * var_x66) - (CHASTE_CONST(0.019557600000000001) / CHASTE_MATH::Pow(var_x116, 3) + CHASTE_CONST(8.1780000000000006e-5) / CHASTE_MATH::Pow(var_x117, 3)) * (CHASTE_CONST(5.5) * var_chaste_interface__Ca__Ca_ss_sr - CHASTE_CONST(0.5) * var_chaste_interface__Ca__Ca_ss_CaL - CHASTE_CONST(0.23999999999999996) * var_chaste_interface__Irel__Irel - 5 * var_chaste_interface__Ca__Ca_i - CHASTE_CONST(0.0004183410516001074) * var_x83) / CHASTE_MATH::Pow(var_x118, 2))); rJacobian[5][6] = 0.0; rJacobian[5][7] = 0.0; rJacobian[5][8] = 0.0; @@ -1727,18 +1729,18 @@ std::shared_ptr Celldeck 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][31] = -(mDt * (CHASTE_CONST(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[5][34] = -(mDt * (-var_x122 * (-CHASTE_CONST(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][6] = 1.0 - (mDt * (-CHASTE_CONST(0.14749262536873156) - var_x130 - var_x138 - CHASTE_CONST(0.0016482105995215921) * var_x123 * mParameters[8] + CHASTE_CONST(6.1298221377044294e-8) * var_x123 * var_x128 * var_x131)); + rJacobian[6][7] = -(mDt * (CHASTE_CONST(0.14749262536873156))); rJacobian[6][8] = 0.0; rJacobian[6][9] = 0.0; rJacobian[6][10] = 0.0; @@ -1772,7 +1774,7 @@ std::shared_ptr Celldeck 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][6] = -(mDt * (5 + CHASTE_CONST(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; @@ -1797,7 +1799,7 @@ std::shared_ptr Celldeck 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][31] = -(mDt * (CHASTE_CONST(0.0020917052580005369) * ((var_x146) ? (-CHASTE_CONST(30875.200000000004) * var_x145 * var_x150) : (-CHASTE_CONST(1155.8403904801075) * var_x144 * var_x148 * var_x150)))); rJacobian[7][32] = 0.0; rJacobian[7][33] = 0.0; rJacobian[7][34] = 0.0; @@ -1846,7 +1848,7 @@ std::shared_ptr Celldeck 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][10] = -(mDt * (CHASTE_CONST(9.9999999999999995e-7))); rJacobian[9][11] = 0.0; rJacobian[9][12] = 0.0; rJacobian[9][13] = -(mDt * (var_x170)); @@ -1984,13 +1986,13 @@ std::shared_ptr Celldeck 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][8] = -(mDt * (-CHASTE_CONST(9.9999999999999995e-7))); + rJacobian[13][9] = -(mDt * (-CHASTE_CONST(9.9999999999999995e-7) - var_x190)); + rJacobian[13][10] = -(mDt * (-CHASTE_CONST(9.9999999999999995e-7))); + rJacobian[13][11] = -(mDt * (-CHASTE_CONST(9.9999999999999995e-7))); + rJacobian[13][12] = -(mDt * (-CHASTE_CONST(9.9999999999999995e-7) + var_x164)); rJacobian[13][13] = 1.0 - (mDt * (-var_x178 - var_x185)); - rJacobian[13][14] = -(mDt * (-9.9999999999999995e-7)); + rJacobian[13][14] = -(mDt * (-CHASTE_CONST(9.9999999999999995e-7))); rJacobian[13][15] = 0.0; rJacobian[13][16] = 0.0; rJacobian[13][17] = 0.0; @@ -2277,7 +2279,7 @@ std::shared_ptr Celldeck 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][21] = 1.0 - (mDt * (-CHASTE_CONST(0.089538306411019994) - var_x208)); rJacobian[21][22] = 0.0; rJacobian[21][23] = 0.0; rJacobian[21][24] = 0.0; @@ -2592,7 +2594,7 @@ std::shared_ptr Celldeck 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][21] = -(mDt * (CHASTE_CONST(0.089538306411019994) - var_x216)); rJacobian[30][22] = -(mDt * (var_x217)); rJacobian[30][23] = -(mDt * (var_x217)); rJacobian[30][24] = -(mDt * (var_x217)); @@ -2606,12 +2608,12 @@ std::shared_ptr Celldeck 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][0] = -(mDt * (CHASTE_CONST(6.2357214041141957e-6) * var_x222 * var_x232 + CHASTE_CONST(0.00014069346418032653) * var_x222 * var_x235)); + rJacobian[31][1] = -(mDt * (-CHASTE_CONST(0.0123) * var_x231 * var_x233 / CHASTE_MATH::Pow(var_chaste_interface__Ca__Ca_JSR, 2) - 8 * var_x113 * var_x223 * var_x224 * var_x227 * mParameters[1] / CHASTE_MATH::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][5] = -(mDt * (-CHASTE_CONST(4.6767910530856466e-10) * var_x232 * var_x237 - CHASTE_CONST(1.0552009813524491e-8) * var_x235 * var_x237)); rJacobian[31][6] = 0.0; rJacobian[31][7] = 0.0; rJacobian[31][8] = 0.0; @@ -2644,7 +2646,7 @@ std::shared_ptr Celldeck 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][3] = -(mDt * (-CHASTE_CONST(3.3595190743871034e-11) * var_x239 * var_x240 * var_x243 * var_x244 * mParameters[16] / CHASTE_MATH::Pow(var_x241, 2))); rJacobian[32][4] = 0.0; rJacobian[32][5] = 0.0; rJacobian[32][6] = -(mDt * (-var_x130 + var_x123 * var_x140)); @@ -2673,15 +2675,15 @@ std::shared_ptr Celldeck 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][32] = 1.0 - (mDt * (-var_x139 - var_x248 * mParameters[14] / (_lt_0_row[8]) + CHASTE_CONST(6.1298221377044294e-8) * var_x125 * var_x128 * var_x131 - CHASTE_CONST(0.00072346244967216237) * var_x250 * var_x261 * var_x262 + CHASTE_CONST(26.712338705498265) * var_x242 * var_x244 * var_x245 * mParameters[16] - CHASTE_CONST(0.00070927691144329649) * var_x250 * mParameters[15] * var_chaste_interface__IKr_xr_gate__xr / (_lt_0_row[9]) - CHASTE_CONST(2.6031772383887529e-5) * var_x249 * var_x262 * var_x264 * (-var_x256 * (CHASTE_CONST(1.053972635420138) * var_x125 * var_x257 + CHASTE_CONST(1.6494869150645177) * var_x125 * var_x258) + CHASTE_CONST(6.4983106368865622) * var_x125 * var_x251 * var_x263 - CHASTE_CONST(13.738155796237757) * var_x125 * var_x254 * var_x259 / CHASTE_MATH::Pow(var_x255, 2)) / CHASTE_MATH::Pow((var_x253 + CHASTE_CONST(0.98039215686274506) * var_x260), 2) - var_x248 * CHASTE_MATH::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] + CHASTE_CONST(0.00017254579424681073) * var_x125 * var_x249 * var_x251 * var_x261 * var_x263 * var_x264 * mParameters[12])); + rJacobian[32][33] = -(mDt * (CHASTE_CONST(2.1063570778339494e-5) * var_x269 + CHASTE_CONST(0.48963716847178318) * var_x242 * var_x244 * var_x246 - CHASTE_CONST(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][3] = -(mDt * (-var_x271 * var_x66 - CHASTE_CONST(4.6276665000011881e-12) * var_x65 * var_x67 * var_x68 * var_x94 + CHASTE_CONST(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][5] = -(mDt * (-CHASTE_CONST(1.156916625000297e-12) * var_x120 - var_x272 * var_x66 + CHASTE_CONST(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; @@ -2709,14 +2711,14 @@ std::shared_ptr Celldeck 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[33][33] = 1.0 - (mDt * (-CHASTE_CONST(0.14749262536873156) - var_x141 - CHASTE_CONST(3.1595356167509241e-5) * var_x269 - CHASTE_CONST(6.1702220000015831e-5) * ((var_x146) ? (var_x273 * (96485 - CHASTE_CONST(1806.0006101251679) * var_chaste_interface__membrane__Vm)) : (var_x149 * var_x273)) - var_x271 * var_x92 - CHASTE_CONST(0.00044425598400011404) * var_x95 * var_x97 - var_x274 * CHASTE_MATH::Pow(var_chaste_interface__INaL_mL_gate__mL, 3) * mParameters[13] * var_chaste_interface__INaL_hL_gate__hL - var_x274 * CHASTE_MATH::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 + CHASTE_CONST(1.2152060064426631e-5) * var_x266 * var_x267 * var_x270 * var_x51 * mParameters[18] * mParameters[4])); + rJacobian[33][34] = -(mDt * (CHASTE_CONST(0.14749262536873156) - CHASTE_CONST(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][5] = -(mDt * (-CHASTE_CONST(3.9219473587510072e-11) * var_x120 - var_x275 * var_x66 + CHASTE_CONST(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; @@ -2745,14 +2747,14 @@ std::shared_ptr Celldeck 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)); + rJacobian[34][34] = 1.0 - (mDt * (-5 - CHASTE_CONST(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]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -2836,27 +2838,27 @@ std::shared_ptr Celldeck 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_IpCa__IpCa = var_chaste_interface__Ca__Ca_i * mParameters[10] / (CHASTE_CONST(0.00050000000000000001) + var_chaste_interface__Ca__Ca_i); // uA_per_uF + const double var_membrane__i_Stim = CHASTE_STIM(var_chaste_interface__environment__time) / CHASTE_CAP(); // uA_per_uF + const double var_ICaL__ICaL = (var_chaste_interface__ICaL__O + var_chaste_interface__ICaL__O_star) * (((CHASTE_CONST(0.074871767015605231) * var_chaste_interface__membrane__Vm >= -CHASTE_CONST(9.9999999999999995e-8)) && (CHASTE_CONST(0.074871767015605231) * var_chaste_interface__membrane__Vm <= CHASTE_CONST(9.9999999999999995e-8))) ? (192970 * (1 - CHASTE_CONST(0.037435883507802616) * var_chaste_interface__membrane__Vm) * (-CHASTE_CONST(0.34100000000000003) * mParameters[3] + var_chaste_interface__Ca__Ca_ss_CaL * _lt_0_row[4]) * mParameters[6]) : (CHASTE_CONST(14448.004881001343) * (-CHASTE_CONST(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 = (((CHASTE_CONST(0.074871767015605231) * var_chaste_interface__membrane__Vm >= -CHASTE_CONST(9.9999999999999995e-8)) && (CHASTE_CONST(0.074871767015605231) * var_chaste_interface__membrane__Vm <= CHASTE_CONST(9.9999999999999995e-8))) ? (192970 * (1 - CHASTE_CONST(0.037435883507802616) * var_chaste_interface__membrane__Vm) * (-CHASTE_CONST(0.34100000000000003) * mParameters[3] + var_chaste_interface__Ca__Ca_i * _lt_0_row[4]) * mParameters[7]) : (CHASTE_CONST(14448.004881001343) * (-CHASTE_CONST(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 = CHASTE_CONST(0.20000000000000001) * (CHASTE_MATH::Pow(var_chaste_interface__Na__Na_ss_sr, 3) * mParameters[3] * _lt_0_row[0] - CHASTE_MATH::Pow(mParameters[5], 3) * var_chaste_interface__Ca__Ca_ss_sr * _lt_0_row[1]) * mParameters[17] / ((_lt_0_row[2]) * (1 + CHASTE_CONST(1.5624999999999999e-8) / CHASTE_MATH::Pow(var_chaste_interface__Ca__Ca_ss_sr, 2)) * (CHASTE_CONST(669921.875) * var_chaste_interface__Ca__Ca_ss_sr + CHASTE_CONST(1.3) * CHASTE_MATH::Pow(var_chaste_interface__Na__Na_ss_sr, 3) + CHASTE_MATH::Pow(var_chaste_interface__Na__Na_ss_sr, 3) * mParameters[3] + CHASTE_MATH::Pow(mParameters[5], 3) * var_chaste_interface__Ca__Ca_ss_sr + CHASTE_CONST(0.0035999999999999999) * CHASTE_MATH::Pow(mParameters[5], 3) * (1 + CHASTE_CONST(0.00053738391835633597) * CHASTE_MATH::Pow(var_chaste_interface__Na__Na_ss_sr, 3)) + CHASTE_CONST(1860.8670000000004) * (1 + CHASTE_CONST(277.77777777777777) * var_chaste_interface__Ca__Ca_ss_sr) * mParameters[3])); // uA_per_uF + const double var_INaCa__INaCa = CHASTE_CONST(0.80000000000000004) * (CHASTE_MATH::Pow(var_chaste_interface__Na__Na_i, 3) * mParameters[3] * _lt_0_row[0] - CHASTE_MATH::Pow(mParameters[5], 3) * var_chaste_interface__Ca__Ca_i * _lt_0_row[1]) * mParameters[17] / ((_lt_0_row[2]) * (1 + CHASTE_CONST(1.5624999999999999e-8) / CHASTE_MATH::Pow(var_chaste_interface__Ca__Ca_i, 2)) * (CHASTE_CONST(669921.875) * var_chaste_interface__Ca__Ca_i + CHASTE_CONST(1.3) * CHASTE_MATH::Pow(var_chaste_interface__Na__Na_i, 3) + CHASTE_MATH::Pow(var_chaste_interface__Na__Na_i, 3) * mParameters[3] + CHASTE_MATH::Pow(mParameters[5], 3) * var_chaste_interface__Ca__Ca_i + CHASTE_CONST(0.0035999999999999999) * CHASTE_MATH::Pow(mParameters[5], 3) * (1 + CHASTE_CONST(0.00053738391835633597) * CHASTE_MATH::Pow(var_chaste_interface__Na__Na_i, 3)) + CHASTE_CONST(1860.8670000000004) * (1 + CHASTE_CONST(277.77777777777777) * var_chaste_interface__Ca__Ca_i) * mParameters[3])) + var_INaCa__INaCa_ss_sr; // uA_per_uF + const double var_INaK__INaK = CHASTE_CONST(0.056895766954938545) * CHASTE_MATH::Pow(var_chaste_interface__Na__Na_i, 3) * mParameters[18] * mParameters[4] / (CHASTE_MATH::Pow((1 + CHASTE_CONST(0.38461538461538458) * var_chaste_interface__Na__Na_i), 3) * (_lt_0_row[3]) * (CHASTE_CONST(1.5) + mParameters[4])); // uA_per_uF + const double var_INab__phi = CHASTE_CONST(0.037435883507802616) * var_chaste_interface__membrane__Vm; // dimensionless + const double var_INab__INab = (((var_INab__phi >= -CHASTE_CONST(9.9999999999999995e-8)) && (var_INab__phi <= CHASTE_CONST(9.9999999999999995e-8))) ? (96485 * (1 - CHASTE_CONST(0.5) * var_INab__phi) * (-mParameters[5] + var_chaste_interface__Na__Na_i * CHASTE_MATH::Exp(var_INab__phi)) * mParameters[9]) : (96485 * (-mParameters[5] + var_chaste_interface__Na__Na_i * CHASTE_MATH::Exp(var_INab__phi)) * mParameters[9] * var_INab__phi / (-1 + CHASTE_MATH::Exp(var_INab__phi)))); // uA_per_uF + const double var_Ito2__Ito2 = (1 - 1 / (1 + CHASTE_CONST(6.2499999999999991) * CHASTE_MATH::Pow(var_chaste_interface__Irel__Irel, 2))) * (((CHASTE_CONST(0.037435883507802616) * var_chaste_interface__membrane__Vm >= -CHASTE_CONST(9.9999999999999995e-8)) && (CHASTE_CONST(0.037435883507802616) * var_chaste_interface__membrane__Vm <= CHASTE_CONST(9.9999999999999995e-8))) ? (-96485 * (1 - CHASTE_CONST(0.018717941753901308) * var_chaste_interface__membrane__Vm) * (_lt_0_row[6] + var_chaste_interface__Cl__Cl_i) * mParameters[19]) : (-CHASTE_CONST(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 = -CHASTE_CONST(26.712338705498265) * CHASTE_MATH::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_reversal_potentials__EK = CHASTE_CONST(26.712338705498265) * CHASTE_MATH::Log(mParameters[4] / var_chaste_interface__K__K_i); // mV + const double var_IK1__IK1 = CHASTE_CONST(0.4389381125701739) * CHASTE_MATH::Sqrt(mParameters[4]) * (-var_reversal_potentials__EK + var_chaste_interface__membrane__Vm) * mParameters[12] / ((1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane__Vm - CHASTE_CONST(0.23849999999999999) * var_reversal_potentials__EK)) * (CHASTE_CONST(1.02) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane__Vm - CHASTE_CONST(0.23849999999999999) * var_reversal_potentials__EK)) + (CHASTE_CONST(0.49124000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__membrane__Vm - CHASTE_CONST(0.080320000000000003) * var_reversal_potentials__EK) + CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__membrane__Vm - CHASTE_CONST(0.061749999999999999) * var_reversal_potentials__EK)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(0.51429999999999998) * var_reversal_potentials__EK - CHASTE_CONST(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 var_IKr__IKr = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::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 = CHASTE_MATH::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 = CHASTE_CONST(26.712338705498265) * CHASTE_MATH::Log(mParameters[5] / var_chaste_interface__Na__Na_i); // mV + const double var_INa__INa = CHASTE_MATH::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 = CHASTE_MATH::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 + CHASTE_CONST(0.59999999999999998) / (1 + CHASTE_CONST(6.4818210260626455e-7) * CHASTE_MATH::Pow((1 / var_chaste_interface__Ca__Ca_i), CHASTE_CONST(1.3999999999999999)))) * (-CHASTE_CONST(26.712338705498265) * CHASTE_MATH::Log((CHASTE_CONST(0.018329999999999999) * mParameters[5] + mParameters[4]) / (CHASTE_CONST(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; @@ -2866,7 +2868,7 @@ std::shared_ptr Celldeck { // Time units: millisecond std::vector& rY = rGetStateVariables(); - double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -2897,47 +2899,47 @@ std::shared_ptr Celldeck // 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_IKr_xr_gate__B_1 = -CHASTE_CONST(0.13600000000000001); + const double var_IKr_xr_gate__A_1 = -CHASTE_CONST(0.00059999999999999995) / var_IKr_xr_gate__B_1; + const double var_IKr_xr_gate__B_2 = CHASTE_CONST(0.1522); + const double var_IKr_xr_gate__A_2 = CHASTE_CONST(0.00029999999999999997) / var_IKr_xr_gate__B_2; + const double var_IKr_xr_gate__v0_1 = CHASTE_CONST(1.7383999999999999); + const double var_IKr_xr_gate__v0_2 = -CHASTE_CONST(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_INaL_mL_gate__B = -CHASTE_CONST(0.10000000000000001); + const double var_INaL_mL_gate__A = -CHASTE_CONST(0.32000000000000001) / var_INaL_mL_gate__B; + const double var_INaL_mL_gate__v0 = -CHASTE_CONST(47.130000000000003); + const double var_INa_m_gate__B = -CHASTE_CONST(0.10000000000000001); + const double var_INa_m_gate__A = -CHASTE_CONST(0.32000000000000001) / var_INa_m_gate__B; + const double var_INa_m_gate__v0 = -CHASTE_CONST(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__temp_part_1 = (((var_IKr_xr_gate__U_1 >= -CHASTE_CONST(9.9999999999999995e-8)) && (var_IKr_xr_gate__U_1 <= CHASTE_CONST(9.9999999999999995e-8))) ? ((1 - CHASTE_CONST(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 + CHASTE_MATH::Exp(var_IKr_xr_gate__U_1)))); + const double var_IKr_xr_gate__temp_part_2 = (((var_IKr_xr_gate__U_2 >= -CHASTE_CONST(9.9999999999999995e-8)) && (var_IKr_xr_gate__U_2 <= CHASTE_CONST(9.9999999999999995e-8))) ? ((1 - CHASTE_CONST(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 + CHASTE_MATH::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_hL_gate__hL_infinity = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(14.918032786885247) + CHASTE_CONST(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_INaL_mL_gate__amL = (((var_INaL_mL_gate__U >= -CHASTE_CONST(9.9999999999999995e-8)) && (var_INaL_mL_gate__U <= CHASTE_CONST(9.9999999999999995e-8))) ? ((1 - CHASTE_CONST(0.5) * var_INaL_mL_gate__U) * var_INaL_mL_gate__A) : (var_INaL_mL_gate__A * var_INaL_mL_gate__U / (-1 + CHASTE_MATH::Exp(var_INaL_mL_gate__U)))); + const double var_INaL_mL_gate__bmL = CHASTE_CONST(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_INa_m_gate__am = (((var_INa_m_gate__U >= -CHASTE_CONST(9.9999999999999995e-8)) && (var_INa_m_gate__U <= CHASTE_CONST(9.9999999999999995e-8))) ? ((1 - CHASTE_CONST(0.5) * var_INa_m_gate__U) * var_INa_m_gate__A) : (var_INa_m_gate__A * var_INa_m_gate__U / (-1 + CHASTE_MATH::Exp(var_INa_m_gate__U)))); + const double var_INa_m_gate__bm = CHASTE_CONST(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__alpha_a = CHASTE_CONST(0.82719827942757873) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(0.62658348478969694) - CHASTE_CONST(0.034035137876343539) * var_chaste_interface__membrane__Vm)); + const double var_Ito1_a_gate__beta_a = CHASTE_CONST(3.5) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(3.403513787634354) + CHASTE_CONST(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_Ito1_i1f_gate__alpha_i1f = CHASTE_CONST(0.025000000000000001) / (_lt_0_row[29]); + const double var_Ito1_i1f_gate__beta_i1f = CHASTE_CONST(0.10208977775055385) / (_lt_0_row[30]); + const double var_Ito1_i1s_gate__alpha_i1s = CHASTE_CONST(0.0040000000000000001) / (_lt_0_row[31]); + const double var_Ito1_i1s_gate__beta_i1s = CHASTE_CONST(0.10208977775055385) / (_lt_0_row[30]); + const double var_Ito2_i2f_gate__alpha_i2f = CHASTE_CONST(0.025000000000000001) / (_lt_0_row[29]); + const double var_Ito2_i2f_gate__beta_i2f = CHASTE_CONST(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); @@ -2996,7 +2998,7 @@ std::shared_ptr Celldeck { // Inputs: // Time units: millisecond - double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -3084,125 +3086,125 @@ std::shared_ptr Celldeck 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_0 = CHASTE_CONST(0.050000000000000003); // dimensionless + const double var_CaMK_active__Km = CHASTE_CONST(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__gamma_Cao = CHASTE_CONST(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__gamma_Ca_o = CHASTE_CONST(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_IKs__gKs = (1 + CHASTE_CONST(0.59999999999999998) / (1 + CHASTE_CONST(6.4818210260626455e-7) * CHASTE_MATH::Pow((1 / var_chaste_interface__Ca__Ca_i), CHASTE_CONST(1.3999999999999999)))) * mParameters[16]; // mS_per_uF + const double var_INaCa__KmCa_act = CHASTE_CONST(0.000125); // mM + const double var_INaCa__KmCai = CHASTE_CONST(0.0035999999999999999); // mM + const double var_INaCa__KmCao = CHASTE_CONST(1.3); // mM + const double var_INaCa__KmNai = CHASTE_CONST(12.300000000000001); // mM + const double var_INaCa__KmNao = CHASTE_CONST(87.5); // mM + const double var_INaCa__denom_1 = 1 + CHASTE_MATH::Pow(var_INaCa__KmCa_act, 2) / CHASTE_MATH::Pow(var_chaste_interface__Ca__Ca_i, 2); // dimensionless + const double var_INaCa__denom_ss_1 = 1 + CHASTE_MATH::Pow(var_INaCa__KmCa_act, 2) / CHASTE_MATH::Pow(var_chaste_interface__Ca__Ca_ss_sr, 2); // dimensionless + const double var_INaCa__eta = CHASTE_CONST(0.27000000000000002); // dimensionless + const double var_INaCa__ksat = CHASTE_CONST(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__kmko = CHASTE_CONST(1.5); // mM + const double var_INaK__kmnai = CHASTE_CONST(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__KmpCa = CHASTE_CONST(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_IpCa__IpCa_converted = CHASTE_CAP() * 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__kCa_ito2 = CHASTE_CONST(0.40000000000000002); // mM_per_ms + const double var_Ito2__KCa_ito2 = 1 - 1 / (1 + CHASTE_MATH::Pow(var_chaste_interface__Irel__Irel, 2) / CHASTE_MATH::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_bar = CHASTE_CONST(0.75); // dimensionless + const double var_Iup__delta_kmPLB_bar = CHASTE_CONST(0.00017000000000000001); // mM + const double var_Iup__kmCaMK = CHASTE_CONST(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__kmup = CHASTE_CONST(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_INaK__PNa = CHASTE_MATH::Pow(var_chaste_interface__Na__Na_i, 3) / CHASTE_MATH::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_membrane__i_Stim_converted = CHASTE_STIM(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_INaCa__denom_3 = CHASTE_MATH::Pow(var_INaCa__KmNao, 3) * var_chaste_interface__Ca__Ca_i + CHASTE_MATH::Pow(var_chaste_interface__Na__Na_i, 3) * var_INaCa__KmCao + CHASTE_MATH::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 = CHASTE_MATH::Pow(var_INaCa__KmNao, 3) * var_chaste_interface__Ca__Ca_ss_sr + CHASTE_MATH::Pow(var_chaste_interface__Na__Na_ss_sr, 3) * var_INaCa__KmCao + CHASTE_MATH::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_IK1__gK1 = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::Sqrt(mParameters[4]) * mParameters[12]; // mS_per_uF + const double var_IKr__gKr = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::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_INaCa__denom_4 = CHASTE_MATH::Pow(var_chaste_interface__Na__Na_i, 3) * mParameters[3] + CHASTE_MATH::Pow(mParameters[5], 3) * var_chaste_interface__Ca__Ca_i + CHASTE_MATH::Pow(mParameters[5], 3) * (1 + CHASTE_MATH::Pow(var_chaste_interface__Na__Na_i, 3) / CHASTE_MATH::Pow(var_INaCa__KmNai, 3)) * var_INaCa__KmCai; // mM4 + const double var_INaCa__denom_ss_4 = CHASTE_MATH::Pow(var_chaste_interface__Na__Na_ss_sr, 3) * mParameters[3] + CHASTE_MATH::Pow(mParameters[5], 3) * var_chaste_interface__Ca__Ca_ss_sr + CHASTE_MATH::Pow(mParameters[5], 3) * (1 + CHASTE_MATH::Pow(var_chaste_interface__Na__Na_ss_sr, 3) / CHASTE_MATH::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__A = 4 * CHASTE_MATH::Pow(var_model_parameters__F, 2) * (-var_ICaL__gamma_Cao * mParameters[3] + var_chaste_interface__Ca__Ca_ss_CaL * var_ICaL__gamma_Cai * CHASTE_MATH::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_max = (((var_ICaL__U >= -CHASTE_CONST(9.9999999999999995e-8)) && (var_ICaL__U <= CHASTE_CONST(9.9999999999999995e-8))) ? ((1 - CHASTE_CONST(0.5) * var_ICaL__U) * var_ICaL__A) : (var_ICaL__A * var_ICaL__U / (-1 + CHASTE_MATH::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_ICaL__ICaL_converted = CHASTE_CAP() * 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__A = 4 * CHASTE_MATH::Pow(var_model_parameters__F, 2) * (-var_ICab__gamma_Ca_o * mParameters[3] + var_chaste_interface__Ca__Ca_i * var_ICab__gamma_Ca_i * CHASTE_MATH::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_ICab__ICab = (((var_ICab__U >= -CHASTE_CONST(9.9999999999999995e-8)) && (var_ICab__U <= CHASTE_CONST(9.9999999999999995e-8))) ? ((1 - CHASTE_CONST(0.5) * var_ICab__U) * var_ICab__A) : (var_ICab__A * var_ICab__U / (-1 + CHASTE_MATH::Exp(var_ICab__U)))); // uA_per_uF + const double var_ICab__ICab_converted = CHASTE_CAP() * var_ICab__ICab; // uA_per_cm2 + const double var_INaCa__denom_2 = 1 + var_INaCa__ksat * CHASTE_MATH::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 * CHASTE_MATH::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 = CHASTE_CONST(0.20000000000000001) * (CHASTE_MATH::Pow(var_chaste_interface__Na__Na_ss_sr, 3) * mParameters[3] * CHASTE_MATH::Exp(var_INaCa__eta * var_chaste_interface__membrane__Vm * var_model_parameters__F / (var_model_parameters__R * var_model_parameters__T)) - CHASTE_MATH::Pow(mParameters[5], 3) * var_chaste_interface__Ca__Ca_ss_sr * CHASTE_MATH::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_ss_sr_converted = CHASTE_CAP() * var_INaCa__INaCa_ss_sr; // uA_per_cm2 + const double var_INaCa__numerator = CHASTE_CONST(0.80000000000000004) * (CHASTE_MATH::Pow(var_chaste_interface__Na__Na_i, 3) * mParameters[3] * CHASTE_MATH::Exp(var_INaCa__eta * var_chaste_interface__membrane__Vm * var_model_parameters__F / (var_model_parameters__R * var_model_parameters__T)) - CHASTE_MATH::Pow(mParameters[5], 3) * var_chaste_interface__Ca__Ca_i * CHASTE_MATH::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_INaCa__INaCa_converted = CHASTE_CAP() * 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__fv = 1 / (1 + CHASTE_MATH::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_INaK__INaK_converted = CHASTE_CAP() * 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__A = (-mParameters[5] + var_chaste_interface__Na__Na_i * CHASTE_MATH::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_INab__INab = (((var_INab__U >= -CHASTE_CONST(9.9999999999999995e-8)) && (var_INab__U <= CHASTE_CONST(9.9999999999999995e-8))) ? ((1 - CHASTE_CONST(0.5) * var_INab__U) * var_INab__A) : (var_INab__A * var_INab__U / (-1 + CHASTE_MATH::Exp(var_INab__U)))); // uA_per_uF + const double var_INab__INab_converted = CHASTE_CAP() * 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__A = -CHASTE_MATH::Pow(var_Ito2__zCl, 2) * CHASTE_MATH::Pow(var_model_parameters__F, 2) * (-var_model_parameters__Cl_o * CHASTE_MATH::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_max = (((var_Ito2__U >= -CHASTE_CONST(9.9999999999999995e-8)) && (var_Ito2__U <= CHASTE_CONST(9.9999999999999995e-8))) ? ((1 - CHASTE_CONST(0.5) * var_Ito2__U) * var_Ito2__A) : (var_Ito2__A * var_Ito2__U / (-1 + CHASTE_MATH::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_Ito2__Ito2_converted = CHASTE_CAP() * var_Ito2__Ito2; // uA_per_cm2 + const double var_reversal_potentials__ECl = -var_model_parameters__R * var_model_parameters__T * CHASTE_MATH::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_IClb__IClb_converted = CHASTE_CAP() * var_IClb__IClb; // uA_per_cm2 + const double var_reversal_potentials__EK = var_model_parameters__R * var_model_parameters__T * CHASTE_MATH::Log(mParameters[4] / var_chaste_interface__K__K_i) / var_model_parameters__F; // mV + const double var_IK1_K1_gate__alpha_k1 = CHASTE_CONST(1.02) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane__Vm - CHASTE_CONST(0.23849999999999999) * var_reversal_potentials__EK)); // dimensionless + const double var_IK1_K1_gate__beta_k1 = (CHASTE_CONST(0.49124000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__membrane__Vm - CHASTE_CONST(0.080320000000000003) * var_reversal_potentials__EK) + CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__membrane__Vm - CHASTE_CONST(0.061749999999999999) * var_reversal_potentials__EK)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(0.51429999999999998) * var_reversal_potentials__EK - CHASTE_CONST(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_IK1__IK1_converted = CHASTE_CAP() * 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_IKp__IKp_converted = CHASTE_CAP() * 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_IKr__IKr_converted = CHASTE_CAP() * var_IKr__IKr; // uA_per_cm2 + const double var_Ito1__Ito1 = CHASTE_MATH::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 = CHASTE_CAP() * var_Ito1__Ito1; // uA_per_cm2 + const double var_reversal_potentials__ENa = var_model_parameters__R * var_model_parameters__T * CHASTE_MATH::Log(mParameters[5] / var_chaste_interface__Na__Na_i) / var_model_parameters__F; // mV + const double var_INa__INa = CHASTE_MATH::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 = CHASTE_CAP() * var_INa__INa; // uA_per_cm2 + const double var_INaL__INaL = CHASTE_MATH::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 = CHASTE_CAP() * var_INaL__INaL; // uA_per_cm2 + const double var_reversal_potentials__prnak = CHASTE_CONST(0.018329999999999999); // dimensionless + const double var_reversal_potentials__EKs = var_model_parameters__R * var_model_parameters__T * CHASTE_MATH::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 + const double var_IKs__IKs_converted = CHASTE_CAP() * var_IKs__IKs; // uA_per_cm2 std::vector dqs(20); dqs[0] = var_Ileak__Ileak; diff --git a/chaste_codegen/data/tests/chaste_reference_models/BEopt/decker_2009.hpp b/chaste_codegen/data/tests/chaste_reference_models/BEopt/decker_2009.hpp index 7e6a4c755..5d624657a 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/BEopt/decker_2009.hpp +++ b/chaste_codegen/data/tests/chaste_reference_models/BEopt/decker_2009.hpp @@ -16,8 +16,13 @@ #include "ChasteSerialization.hpp" #include #include "AbstractStimulusFunction.hpp" +#if USING_DEVICE_COMPILER +#include "StimulusEvaluatorCuda.hpp" +#endif #include "AbstractBackwardEulerCardiacCell.hpp" + + class Celldecker_2009FromCellMLBackwardEulerOpt : public AbstractBackwardEulerCardiacCell<35> { friend class boost::serialization::access; @@ -38,19 +43,25 @@ const bool is_concentration[46] = {false, true, false, false, false, false, fals 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(boost::shared_ptr /* unused */, 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: + 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]); + +#if USING_DEVICE_COMPILER + +#endif +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); -}; + std::vector ComputeDerivedQuantities(double var_chaste_interface__environment__time, const std::vector & rY);}; // Needs to be included last #include "SerializationExportWrapper.hpp" @@ -85,4 +96,5 @@ namespace boost } -#endif // CELLDECKER_2009FROMCELLMLBACKWARDEULEROPT_HPP_ \ No newline at end of file +#endif // CELLDECKER_2009FROMCELLMLBACKWARDEULEROPT_HPP_ + diff --git a/chaste_codegen/data/tests/chaste_reference_models/BEopt/dynamic_courtemanche_ramirez_nattel_1998.cpp b/chaste_codegen/data/tests/chaste_reference_models/BEopt/dynamic_courtemanche_ramirez_nattel_1998.cpp index 6837116ae..a492ffc8f 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/BEopt/dynamic_courtemanche_ramirez_nattel_1998.cpp +++ b/chaste_codegen/data/tests/chaste_reference_models/BEopt/dynamic_courtemanche_ramirez_nattel_1998.cpp @@ -22,6 +22,8 @@ #include "HeartConfig.hpp" #include "IsNan.hpp" #include "MathsCustomFunctions.hpp" +#include "ChasteMathDeviceNamespaces.hpp" +#include "ChasteCpuMacros.hpp" #include "ModelFactory.hpp" @@ -150,7 +152,7 @@ class Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt_LookupTa for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(0.013102317305629283 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(CHASTE_CONST(0.013102317305629283) * 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); @@ -161,7 +163,7 @@ class Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt_LookupTa for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(-0.024332874996168673 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(-CHASTE_CONST(0.024332874996168673) * 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); @@ -172,7 +174,7 @@ class Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt_LookupTa for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 + 0.10000000000000001 * exp(-0.024332874996168673 * var_chaste_interface__membrane__V); + return 1 + CHASTE_CONST(0.10000000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(0.024332874996168673) * 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); @@ -183,7 +185,7 @@ class Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt_LookupTa for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(-0.037435192301797954 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(-CHASTE_CONST(0.037435192301797954) * 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); @@ -194,7 +196,7 @@ class Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt_LookupTa for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 0.1245 * exp(-0.0037435192301797956 * var_chaste_interface__membrane__V); + return CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(0.0037435192301797956) * 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); @@ -205,7 +207,7 @@ class Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt_LookupTa for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 + exp(0.66964285714285721 + 0.044642857142857144 * var_chaste_interface__membrane__V); + return 1 + CHASTE_MATH::Exp(CHASTE_CONST(0.66964285714285721) + CHASTE_CONST(0.044642857142857144) * 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); @@ -216,7 +218,7 @@ class Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt_LookupTa for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 + exp(5.6000000000000005 + 0.070000000000000007 * var_chaste_interface__membrane__V); + return 1 + CHASTE_MATH::Exp(CHASTE_CONST(5.6000000000000005) + CHASTE_CONST(0.070000000000000007) * 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); @@ -227,7 +229,7 @@ class Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt_LookupTa for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 0.0050000000000000001 + 0.050000000000000003 / (1 + exp(1.1538461538461537 - 0.076923076923076927 * var_chaste_interface__membrane__V)); + return CHASTE_CONST(0.0050000000000000001) + CHASTE_CONST(0.050000000000000003) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.1538461538461537) - CHASTE_CONST(0.076923076923076927) * 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); @@ -238,7 +240,7 @@ class Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt_LookupTa for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return -1 / (1 + exp(2.3529411764705883 - 0.058823529411764705 * var_chaste_interface__membrane__V)); + return -1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(2.3529411764705883) - CHASTE_CONST(0.058823529411764705) * 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); @@ -249,7 +251,7 @@ class Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt_LookupTa for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return ((fabs(-7.9000000000000004 + var_chaste_interface__membrane__V) < 1.0e-10) ? (1.0833333333333333) : (0.16666666666666666 * (1 + 0.29999999999999999 * exp(1.5800000000000001 - 0.20000000000000001 * var_chaste_interface__membrane__V)) * (-7.9000000000000004 + var_chaste_interface__membrane__V) / (1 - exp(1.5800000000000001 - 0.20000000000000001 * var_chaste_interface__membrane__V)))); + return ((CHASTE_MATH::Abs(-CHASTE_CONST(7.9000000000000004) + var_chaste_interface__membrane__V) < CHASTE_CONST(1.0e-10)) ? (CHASTE_CONST(1.0833333333333333)) : (CHASTE_CONST(0.16666666666666666) * (1 + CHASTE_CONST(0.29999999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(1.5800000000000001) - CHASTE_CONST(0.20000000000000001) * var_chaste_interface__membrane__V)) * (-CHASTE_CONST(7.9000000000000004) + var_chaste_interface__membrane__V) / (1 - CHASTE_MATH::Exp(CHASTE_CONST(1.5800000000000001) - CHASTE_CONST(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); @@ -271,7 +273,7 @@ class Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt_LookupTa for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 + exp(-1.25 - 0.125 * var_chaste_interface__membrane__V); + return 1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.25) - CHASTE_CONST(0.125) * 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); @@ -282,7 +284,7 @@ class Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt_LookupTa for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return ((fabs(10 + var_chaste_interface__membrane__V) < 1.0e-10) ? (0.21838829438742086 + 0.21838829438742086 * exp(-1.6025641025641024 - 0.16025641025641024 * var_chaste_interface__membrane__V)) : (0.035000000000000003 * (1 + exp(-1.6025641025641024 - 0.16025641025641024 * var_chaste_interface__membrane__V)) * (10 + var_chaste_interface__membrane__V) / (1 - exp(-1.6025641025641024 - 0.16025641025641024 * var_chaste_interface__membrane__V)))); + return ((CHASTE_MATH::Abs(10 + var_chaste_interface__membrane__V) < CHASTE_CONST(1.0e-10)) ? (CHASTE_CONST(0.21838829438742086) + CHASTE_CONST(0.21838829438742086) * CHASTE_MATH::Exp(-CHASTE_CONST(1.6025641025641024) - CHASTE_CONST(0.16025641025641024) * var_chaste_interface__membrane__V)) : (CHASTE_CONST(0.035000000000000003) * (1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.6025641025641024) - CHASTE_CONST(0.16025641025641024) * var_chaste_interface__membrane__V)) * (10 + var_chaste_interface__membrane__V) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(1.6025641025641024) - CHASTE_CONST(0.16025641025641024) * 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); @@ -304,7 +306,7 @@ class Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt_LookupTa for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(-4.057971014492753 - 0.14492753623188406 * var_chaste_interface__membrane__V) / (1 + exp(-4.057971014492753 - 0.14492753623188406 * var_chaste_interface__membrane__V)); + return CHASTE_MATH::Exp(-CHASTE_CONST(4.057971014492753) - CHASTE_CONST(0.14492753623188406) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(4.057971014492753) - CHASTE_CONST(0.14492753623188406) * 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); @@ -315,7 +317,7 @@ class Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt_LookupTa for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 0.0022222222222222222 + 0.0021888888888888887 * exp(-0.113569 * pow((1 + 0.10000000000000001 * var_chaste_interface__membrane__V), 2)); + return CHASTE_CONST(0.0022222222222222222) + CHASTE_CONST(0.0021888888888888887) * CHASTE_MATH::Exp(-CHASTE_CONST(0.113569) * CHASTE_MATH::Pow((1 + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V), 2)); }; const double var_chaste_interface__membrane__V = mTableMins[0] + i*mTableSteps[0]; double val = f(var_chaste_interface__membrane__V); @@ -326,7 +328,7 @@ class Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt_LookupTa for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return ((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)))); + return ((var_chaste_interface__membrane__V == (-CHASTE_CONST(47.130000000000003))) ? (CHASTE_CONST(3.2000000000000002)) : (CHASTE_CONST(0.32000000000000001) * (CHASTE_CONST(47.130000000000003) + var_chaste_interface__membrane__V) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(4.7130000000000001) - CHASTE_CONST(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); @@ -348,7 +350,7 @@ class Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt_LookupTa for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 0.080000000000000002 * exp(-0.090909090909090912 * var_chaste_interface__membrane__V); + return CHASTE_CONST(0.080000000000000002) * CHASTE_MATH::Exp(-CHASTE_CONST(0.090909090909090912) * 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); @@ -359,7 +361,7 @@ class Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt_LookupTa for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 + exp(-2.1692307692307691 - 0.15384615384615385 * var_chaste_interface__membrane__V); + return 1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.1692307692307691) - CHASTE_CONST(0.15384615384615385) * 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); @@ -370,7 +372,7 @@ class Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt_LookupTa for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return ((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)))) + ((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)))); + return ((CHASTE_MATH::Abs(CHASTE_CONST(14.1) + var_chaste_interface__membrane__V) < CHASTE_CONST(1.0e-10)) ? (CHASTE_CONST(0.0015)) : (CHASTE_CONST(0.00029999999999999997) * (CHASTE_CONST(14.1) + var_chaste_interface__membrane__V) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(2.8199999999999998) - CHASTE_CONST(0.20000000000000001) * var_chaste_interface__membrane__V)))) + ((CHASTE_MATH::Abs(-CHASTE_CONST(3.3328000000000002) + var_chaste_interface__membrane__V) < CHASTE_CONST(1.0e-10)) ? (CHASTE_CONST(0.00037836118)) : (CHASTE_CONST(7.3898000000000003e-5) * (-CHASTE_CONST(3.3328000000000002) + var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.65046743564221166) + CHASTE_CONST(0.19517145812596365) * 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); @@ -381,7 +383,7 @@ class Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt_LookupTa for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return pow((1 + exp(1.5669291338582676 - 0.07874015748031496 * var_chaste_interface__membrane__V)), (-0.5)); + return CHASTE_MATH::Pow((1 + CHASTE_MATH::Exp(CHASTE_CONST(1.5669291338582676) - CHASTE_CONST(0.07874015748031496) * var_chaste_interface__membrane__V)), (-CHASTE_CONST(0.5))); }; const double var_chaste_interface__membrane__V = mTableMins[0] + i*mTableSteps[0]; double val = f(var_chaste_interface__membrane__V); @@ -392,7 +394,7 @@ class Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt_LookupTa for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 2 * ((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)))) + 2 * ((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)))); + return 2 * ((CHASTE_MATH::Abs(-CHASTE_CONST(19.899999999999999) + var_chaste_interface__membrane__V) < CHASTE_CONST(1.0e-10)) ? (CHASTE_CONST(0.00068000000000000005)) : (CHASTE_CONST(4.0000000000000003e-5) * (-CHASTE_CONST(19.899999999999999) + var_chaste_interface__membrane__V) / (1 - CHASTE_MATH::Exp(CHASTE_CONST(1.1705882352941175) - CHASTE_CONST(0.058823529411764705) * var_chaste_interface__membrane__V)))) + 2 * ((CHASTE_MATH::Abs(-CHASTE_CONST(19.899999999999999) + var_chaste_interface__membrane__V) < CHASTE_CONST(1.0e-10)) ? (CHASTE_CONST(0.00031500000000000001)) : (CHASTE_CONST(3.4999999999999997e-5) * (-CHASTE_CONST(19.899999999999999) + var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.2111111111111108) + CHASTE_CONST(0.1111111111111111) * 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); @@ -403,7 +405,7 @@ class Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt_LookupTa for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 + exp(-1.1670467502850628 - 0.057012542759407071 * var_chaste_interface__membrane__V); + return 1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.1670467502850628) - CHASTE_CONST(0.057012542759407071) * 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); @@ -414,7 +416,7 @@ class Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt_LookupTa for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1.9500000000000002 / (2.5 + exp(4.8235294117647056 + 0.058823529411764705 * var_chaste_interface__membrane__V)) + 1.9500000000000002 / (exp(0.50847457627118642 - 0.016949152542372881 * var_chaste_interface__membrane__V) + exp(-1.1764705882352942 - 0.11764705882352941 * var_chaste_interface__membrane__V)); + return CHASTE_CONST(1.9500000000000002) / (CHASTE_CONST(2.5) + CHASTE_MATH::Exp(CHASTE_CONST(4.8235294117647056) + CHASTE_CONST(0.058823529411764705) * var_chaste_interface__membrane__V)) + CHASTE_CONST(1.9500000000000002) / (CHASTE_MATH::Exp(CHASTE_CONST(0.50847457627118642) - CHASTE_CONST(0.016949152542372881) * var_chaste_interface__membrane__V) + CHASTE_MATH::Exp(-CHASTE_CONST(1.1764705882352942) - CHASTE_CONST(0.11764705882352941) * 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); @@ -425,7 +427,7 @@ class Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt_LookupTa for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 + exp(8.1320754716981138 + 0.18867924528301888 * var_chaste_interface__membrane__V); + return 1 + CHASTE_MATH::Exp(CHASTE_CONST(8.1320754716981138) + CHASTE_CONST(0.18867924528301888) * 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); @@ -436,7 +438,7 @@ class Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt_LookupTa for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 3 / (35.560000000000002 + exp(-0.16935483870967738 - 0.13440860215053763 * var_chaste_interface__membrane__V)) + 3 / (18.530000000000001 + exp(10.383561643835618 + 0.091324200913242018 * var_chaste_interface__membrane__V)); + return 3 / (CHASTE_CONST(35.560000000000002) + CHASTE_MATH::Exp(-CHASTE_CONST(0.16935483870967738) - CHASTE_CONST(0.13440860215053763) * var_chaste_interface__membrane__V)) + 3 / (CHASTE_CONST(18.530000000000001) + CHASTE_MATH::Exp(CHASTE_CONST(10.383561643835618) + CHASTE_CONST(0.091324200913242018) * 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); @@ -447,7 +449,7 @@ class Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt_LookupTa for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 + exp(-3.15625 - 0.10416666666666667 * var_chaste_interface__membrane__V); + return 1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.15625) - CHASTE_CONST(0.10416666666666667) * 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); @@ -458,7 +460,7 @@ class Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt_LookupTa for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 + exp(-3.6189956331877728 + 0.036390101892285295 * var_chaste_interface__membrane__V); + return 1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.6189956331877728) + CHASTE_CONST(0.036390101892285295) * 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); @@ -469,7 +471,7 @@ class Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt_LookupTa for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 3 / (21 + exp(6.6071428571428568 - 0.035714285714285712 * var_chaste_interface__membrane__V)) + 3 / exp(9.875 - 0.0625 * var_chaste_interface__membrane__V); + return 3 / (21 + CHASTE_MATH::Exp(CHASTE_CONST(6.6071428571428568) - CHASTE_CONST(0.035714285714285712) * var_chaste_interface__membrane__V)) + 3 / CHASTE_MATH::Exp(CHASTE_CONST(9.875) - CHASTE_CONST(0.0625) * 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); @@ -502,7 +504,7 @@ std::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_amplitude_converted = -2000 * CHASTE_CAP() / 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 @@ -535,22 +537,22 @@ std::shared_ptrmParameters[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[2] = CHASTE_CONST(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[4] = CHASTE_CONST(1.8); // (var_standard_ionic_concentrations__Ca_o) [millimolar] + this->mParameters[5] = CHASTE_CONST(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[7] = CHASTE_CONST(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[10] = CHASTE_CONST(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[13] = CHASTE_CONST(0.089999999999999997); // (var_time_independent_potassium_current__g_K1) [nanoS_per_picoF] + this->mParameters[14] = CHASTE_CONST(0.029411764999999999); // (var_rapid_delayed_rectifier_K_current__g_Kr) [nanoS_per_picoF] + this->mParameters[15] = CHASTE_CONST(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] + this->mParameters[17] = CHASTE_CONST(0.16520000000000001); // (var_transient_outward_K_current__g_to) [nanoS_per_picoF] } Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt::~Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt() @@ -601,7 +603,7 @@ std::shared_ptr& rY = *pStateVariables; - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -642,22 +644,22 @@ std::shared_ptrIndexTable0(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 var_membrane__Cm_converted = CHASTE_CONST(9.9999999999999995e-7) * mParameters[9]; // uF + const double var_L_type_Ca_channel__i_Ca_L_converted = CHASTE_CONST(9.9999999999999995e-7) * (-65 + var_chaste_interface__membrane__V) * CHASTE_CAP() * 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 = CHASTE_CONST(0.27500000000000002) * var_chaste_interface__intracellular_ion_concentrations__Ca_i * mParameters[9] / (CHASTE_CONST(0.00050000000000000001) + var_chaste_interface__intracellular_ion_concentrations__Ca_i); // picoA + const double var_background_currents__i_B_Ca = CHASTE_CONST(0.0011310000000000001) * (-CHASTE_CONST(13.356415961992688) * CHASTE_MATH::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 = CHASTE_CONST(9.9999999999999995e-7) * (CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mParameters[4] * _lt_0_row[0] - CHASTE_MATH::Pow(mParameters[6], 3) * var_chaste_interface__intracellular_ion_concentrations__Ca_i * _lt_0_row[1]) * CHASTE_CAP() * mParameters[16] * mParameters[9] / ((_lt_0_row[2]) * (CHASTE_CONST(669921.875) + CHASTE_MATH::Pow(mParameters[6], 3)) * (CHASTE_CONST(1.3799999999999999) + mParameters[4]) * var_membrane__Cm_converted); // uA_per_cm2 + const double var_fast_sodium_current__E_Na = CHASTE_CONST(26.712831923985377) * CHASTE_MATH::Log(mParameters[6] / var_chaste_interface__intracellular_ion_concentrations__Na_i); // millivolt + const double var_background_currents__i_B_Na = CHASTE_CONST(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 = CHASTE_CONST(9.9999999999999995e-7) * CHASTE_MATH::Pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3) * (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * CHASTE_CAP() * 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 = CHASTE_CONST(0.59933873999999998) * mParameters[9] * mParameters[5] / ((1 + CHASTE_CONST(31.622776601683793) * CHASTE_MATH::Pow((1 / var_chaste_interface__intracellular_ion_concentrations__Na_i), CHASTE_CONST(1.5))) * (CHASTE_CONST(1.5) + mParameters[5]) * (1 + _lt_0_row[4] + CHASTE_CONST(0.036499999999999998) * (-CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(0.01485884101040119) * mParameters[6])) * _lt_0_row[3])); // picoA + const double var_time_independent_potassium_current__E_K = CHASTE_CONST(26.712831923985377) * CHASTE_MATH::Log(mParameters[5] / var_chaste_interface__intracellular_ion_concentrations__K_i); // millivolt + const double var_rapid_delayed_rectifier_K_current__i_Kr_converted = CHASTE_CONST(9.9999999999999995e-7) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * CHASTE_CAP() * 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 = CHASTE_CONST(9.9999999999999995e-7) * CHASTE_MATH::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) * CHASTE_CAP() * mParameters[9] * mParameters[15] / var_membrane__Cm_converted; // uA_per_cm2 + const double var_time_independent_potassium_current__i_K1_converted = CHASTE_CONST(9.9999999999999995e-7) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * CHASTE_CAP() * 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 = CHASTE_CONST(9.9999999999999995e-7) * CHASTE_MATH::Pow(var_chaste_interface__transient_outward_K_current_oa_gate__oa, 3) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * CHASTE_CAP() * 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 = CHASTE_MATH::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 + CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * var_background_currents__i_B_Ca + CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * var_background_currents__i_B_Na + CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * var_sarcolemmal_calcium_pump_current__i_CaP + CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * var_sodium_potassium_pump__i_NaK + CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * 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)); @@ -667,7 +669,7 @@ std::shared_ptr& rY = rGetStateVariables(); - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -713,33 +715,33 @@ std::shared_ptrIndexTable0(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_Ca_uptake_current_by_the_NSR__i_up = mParameters[2] / (1 + CHASTE_CONST(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 + CHASTE_CONST(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 = CHASTE_MATH::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 = CHASTE_CONST(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_sarcolemmal_calcium_pump_current__i_CaP = CHASTE_CONST(0.27500000000000002) * var_chaste_interface__intracellular_ion_concentrations__Ca_i * mParameters[9] / (CHASTE_CONST(0.00050000000000000001) + var_chaste_interface__intracellular_ion_concentrations__Ca_i); // picoA + const double var_background_currents__i_B_Ca = CHASTE_CONST(0.0011310000000000001) * (-CHASTE_CONST(13.356415961992688) * CHASTE_MATH::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 = (CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mParameters[4] * _lt_0_row[0] - CHASTE_MATH::Pow(mParameters[6], 3) * var_chaste_interface__intracellular_ion_concentrations__Ca_i * _lt_0_row[1]) * mParameters[16] * mParameters[9] / ((_lt_0_row[2]) * (CHASTE_CONST(669921.875) + CHASTE_MATH::Pow(mParameters[6], 3)) * (CHASTE_CONST(1.3799999999999999) + mParameters[4])); // picoA + const double var_Ca_release_current_from_JSR__Fn = CHASTE_CONST(9.6479999999999999e-11) * var_Ca_release_current_from_JSR__i_rel + CHASTE_CONST(1.0364122723649997e-15) * var_Na_Ca_exchanger_current__i_NaCa - CHASTE_CONST(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 = CHASTE_CONST(0.125) / (1 + CHASTE_MATH::Exp(250 - CHASTE_CONST(731528895391368.0) * var_Ca_release_current_from_JSR__Fn)) - CHASTE_CONST(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 + CHASTE_MATH::Exp(50 - CHASTE_CONST(731528895391368.0) * var_Ca_release_current_from_JSR__Fn)) - var_chaste_interface__Ca_release_current_from_JSR_v_gate__v) / (CHASTE_CONST(1.9099999999999999) + CHASTE_CONST(2.0899999999999999) / (1 + CHASTE_MATH::Exp(250 - CHASTE_CONST(731528895391368.0) * var_Ca_release_current_from_JSR__Fn))); // 1 / millisecond + const double var_fast_sodium_current__E_Na = CHASTE_CONST(26.712831923985377) * CHASTE_MATH::Log(mParameters[6] / var_chaste_interface__intracellular_ion_concentrations__Na_i); // millivolt + const double var_background_currents__i_B_Na = CHASTE_CONST(0.00067443750000000002) * (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * mParameters[9]; // picoA + const double var_fast_sodium_current__i_Na = CHASTE_MATH::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 = (CHASTE_CONST(0.081176470588235281) * var_Ca_leak_current_by_the_NSR__i_up_leak + CHASTE_CONST(0.0070588235294117632) * var_Ca_release_current_from_JSR__i_rel + CHASTE_CONST(7.5827646500219453e-7) * var_Na_Ca_exchanger_current__i_NaCa - CHASTE_CONST(0.081176470588235281) * var_Ca_uptake_current_by_the_NSR__i_up - CHASTE_CONST(3.7913823250109726e-7) * var_L_type_Ca_channel__i_Ca_L - CHASTE_CONST(3.7913823250109726e-7) * var_background_currents__i_B_Ca - CHASTE_CONST(3.7913823250109726e-7) * var_sarcolemmal_calcium_pump_current__i_CaP) / (1 + CHASTE_CONST(0.00011900000000000002) / CHASTE_MATH::Pow((CHASTE_CONST(0.0023800000000000002) + var_chaste_interface__intracellular_ion_concentrations__Ca_i), 2) + CHASTE_CONST(3.5000000000000004e-5) / CHASTE_MATH::Pow((CHASTE_CONST(0.00050000000000000001) + var_chaste_interface__intracellular_ion_concentrations__Ca_i), 2)); // millimolar / millisecond + const double var_sodium_potassium_pump__i_NaK = CHASTE_CONST(0.59933873999999998) * mParameters[9] * mParameters[5] / ((1 + CHASTE_CONST(31.622776601683793) * CHASTE_MATH::Pow((1 / var_chaste_interface__intracellular_ion_concentrations__Na_i), CHASTE_CONST(1.5))) * (CHASTE_CONST(1.5) + mParameters[5]) * (1 + _lt_0_row[4] + CHASTE_CONST(0.036499999999999998) * (-CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(0.01485884101040119) * mParameters[6])) * _lt_0_row[3])); // picoA + const double d_dt_chaste_interface_var_intracellular_ion_concentrations__Na_i = CHASTE_CONST(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 = CHASTE_CONST(26.712831923985377) * CHASTE_MATH::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_slow_delayed_rectifier_K_current__i_Ks = CHASTE_MATH::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 + const double var_transfer_current_from_NSR_to_JSR__i_tr = CHASTE_CONST(0.0055555555555555558) * var_chaste_interface__intracellular_ion_concentrations__Ca_up - CHASTE_CONST(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 / CHASTE_MATH::Pow((CHASTE_CONST(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 - CHASTE_CONST(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 = CHASTE_MATH::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 = CHASTE_MATH::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 = CHASTE_CONST(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; @@ -754,7 +756,7 @@ std::shared_ptr& rY = rGetStateVariables(); - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -799,117 +801,117 @@ std::shared_ptr& rY = rGetStateVariables(); - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -976,20 +978,20 @@ std::shared_ptrIndexTable0(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_sarcolemmal_calcium_pump_current__i_CaP = CHASTE_CONST(0.27500000000000002) * var_chaste_interface__intracellular_ion_concentrations__Ca_i * mParameters[9] / (CHASTE_CONST(0.00050000000000000001) + var_chaste_interface__intracellular_ion_concentrations__Ca_i); // picoA + const double var_background_currents__i_B_Ca = CHASTE_CONST(0.0011310000000000001) * (-CHASTE_CONST(13.356415961992688) * CHASTE_MATH::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 = (CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mParameters[4] * _lt_0_row[0] - CHASTE_MATH::Pow(mParameters[6], 3) * var_chaste_interface__intracellular_ion_concentrations__Ca_i * _lt_0_row[1]) * mParameters[16] * mParameters[9] / ((_lt_0_row[2]) * (CHASTE_CONST(669921.875) + CHASTE_MATH::Pow(mParameters[6], 3)) * (CHASTE_CONST(1.3799999999999999) + mParameters[4])); // picoA + const double var_fast_sodium_current__E_Na = CHASTE_CONST(26.712831923985377) * CHASTE_MATH::Log(mParameters[6] / var_chaste_interface__intracellular_ion_concentrations__Na_i); // millivolt + const double var_background_currents__i_B_Na = CHASTE_CONST(0.00067443750000000002) * (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * mParameters[9]; // picoA + const double var_fast_sodium_current__i_Na = CHASTE_MATH::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 = CHASTE_CONST(0.59933873999999998) * mParameters[9] * mParameters[5] / ((1 + CHASTE_CONST(31.622776601683793) * CHASTE_MATH::Pow((1 / var_chaste_interface__intracellular_ion_concentrations__Na_i), CHASTE_CONST(1.5))) * (CHASTE_CONST(1.5) + mParameters[5]) * (1 + _lt_0_row[4] + CHASTE_CONST(0.036499999999999998) * (-CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(0.01485884101040119) * mParameters[6])) * _lt_0_row[3])); // picoA + const double var_time_independent_potassium_current__E_K = CHASTE_CONST(26.712831923985377) * CHASTE_MATH::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_slow_delayed_rectifier_K_current__i_Ks = CHASTE_MATH::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 + const double var_transient_outward_K_current__i_to = CHASTE_MATH::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 = CHASTE_MATH::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 * CHASTE_STIM(var_chaste_interface__environment__time) * mParameters[9] / CHASTE_CAP()) / mParameters[9]; // millivolt / millisecond rY[0] += mDt*d_dt_chaste_interface_var_membrane__V; } @@ -998,7 +1000,7 @@ std::shared_ptr& rY = rGetStateVariables(); - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -1033,47 +1035,47 @@ std::shared_ptrIndexTable0(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__tau_w = ((CHASTE_MATH::Abs(-CHASTE_CONST(7.9000000000000004) + var_chaste_interface__membrane__V) < CHASTE_CONST(1.0e-10)) ? (CHASTE_CONST(0.92307692307692313)) : (6 * (1 - CHASTE_MATH::Exp(CHASTE_CONST(1.5800000000000001) - CHASTE_CONST(0.20000000000000001) * var_chaste_interface__membrane__V)) / ((1 + CHASTE_CONST(0.29999999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(1.5800000000000001) - CHASTE_CONST(0.20000000000000001) * var_chaste_interface__membrane__V)) * (-CHASTE_CONST(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_d_gate__tau_d = ((CHASTE_MATH::Abs(10 + var_chaste_interface__membrane__V) < CHASTE_CONST(1.0e-10)) ? (CHASTE_CONST(4.5789999999999997) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.6025641025641024) - CHASTE_CONST(0.16025641025641024) * var_chaste_interface__membrane__V))) : (CHASTE_CONST(28.571428571428569) * (1 - CHASTE_MATH::Exp(-CHASTE_CONST(1.6025641025641024) - CHASTE_CONST(0.16025641025641024) * var_chaste_interface__membrane__V)) / ((1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.6025641025641024) - CHASTE_CONST(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_L_type_Ca_channel_f_gate__tau_f = 9 / (CHASTE_CONST(0.02) + CHASTE_CONST(0.019699999999999999) * CHASTE_MATH::Exp(-CHASTE_CONST(0.113569) * CHASTE_MATH::Pow((1 + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V), 2))); + const double var_fast_sodium_current_h_gate__alpha_h = ((var_chaste_interface__membrane__V < -40) ? (CHASTE_CONST(0.13500000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(11.764705882352942) + CHASTE_CONST(0.14705882352941177) * mParameters[12] - CHASTE_CONST(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 * CHASTE_MATH::Exp(CHASTE_CONST(0.34999999999999998) * var_chaste_interface__membrane__V - CHASTE_CONST(0.34999999999999998) * mParameters[12]) + CHASTE_CONST(3.5600000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.079000000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.079000000000000001) * mParameters[12])) : (CHASTE_CONST(7.6923076923076916) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.96036036036036043) + CHASTE_CONST(0.0900900900900901) * mParameters[12] - CHASTE_CONST(0.0900900900900901) * var_chaste_interface__membrane__V)))); + const double var_fast_sodium_current_h_gate__h_inf = CHASTE_CONST(0.01) * mParameters[11] + (1 - CHASTE_CONST(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__alpha_j = ((var_chaste_interface__membrane__V < -40) ? ((CHASTE_CONST(37.780000000000001) + var_chaste_interface__membrane__V) * (-127140 * CHASTE_MATH::Exp(CHASTE_CONST(0.24440000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.24440000000000001) * mParameters[12]) - CHASTE_CONST(3.4740000000000003e-5) * CHASTE_MATH::Exp(CHASTE_CONST(0.043909999999999998) * mParameters[12] - CHASTE_CONST(0.043909999999999998) * var_chaste_interface__membrane__V)) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(24.640530000000002) + CHASTE_CONST(0.311) * var_chaste_interface__membrane__V - CHASTE_CONST(0.311) * mParameters[12]))) : (0)); + const double var_fast_sodium_current_j_gate__beta_j = ((var_chaste_interface__membrane__V < -40) ? (CHASTE_CONST(0.1212) * CHASTE_MATH::Exp(CHASTE_CONST(0.01052) * mParameters[12] - CHASTE_CONST(0.01052) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(5.5312920000000005) + CHASTE_CONST(0.13780000000000001) * mParameters[12] - CHASTE_CONST(0.13780000000000001) * var_chaste_interface__membrane__V))) : (CHASTE_CONST(0.29999999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(2.5349999999999999e-7) * mParameters[12] - CHASTE_CONST(2.5349999999999999e-7) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.2000000000000002) + CHASTE_CONST(0.10000000000000001) * mParameters[12] - CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V)))); + const double var_fast_sodium_current_j_gate__j_inf = CHASTE_CONST(0.01) * mParameters[11] + (1 - CHASTE_CONST(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__alpha_xr = ((CHASTE_MATH::Abs(CHASTE_CONST(14.1) + var_chaste_interface__membrane__V) < CHASTE_CONST(1.0e-10)) ? (CHASTE_CONST(0.0015)) : (CHASTE_CONST(0.00029999999999999997) * (CHASTE_CONST(14.1) + var_chaste_interface__membrane__V) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(2.8199999999999998) - CHASTE_CONST(0.20000000000000001) * var_chaste_interface__membrane__V)))); + const double var_rapid_delayed_rectifier_K_current_xr_gate__beta_xr = ((CHASTE_MATH::Abs(-CHASTE_CONST(3.3328000000000002) + var_chaste_interface__membrane__V) < CHASTE_CONST(1.0e-10)) ? (CHASTE_CONST(0.00037836118)) : (CHASTE_CONST(7.3898000000000003e-5) * (-CHASTE_CONST(3.3328000000000002) + var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.65046743564221166) + CHASTE_CONST(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__alpha_xs = ((CHASTE_MATH::Abs(-CHASTE_CONST(19.899999999999999) + var_chaste_interface__membrane__V) < CHASTE_CONST(1.0e-10)) ? (CHASTE_CONST(0.00068000000000000005)) : (CHASTE_CONST(4.0000000000000003e-5) * (-CHASTE_CONST(19.899999999999999) + var_chaste_interface__membrane__V) / (1 - CHASTE_MATH::Exp(CHASTE_CONST(1.1705882352941175) - CHASTE_CONST(0.058823529411764705) * var_chaste_interface__membrane__V)))); + const double var_slow_delayed_rectifier_K_current_xs_gate__beta_xs = ((CHASTE_MATH::Abs(-CHASTE_CONST(19.899999999999999) + var_chaste_interface__membrane__V) < CHASTE_CONST(1.0e-10)) ? (CHASTE_CONST(0.00031500000000000001)) : (CHASTE_CONST(3.4999999999999997e-5) * (-CHASTE_CONST(19.899999999999999) + var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.2111111111111108) + CHASTE_CONST(0.1111111111111111) * var_chaste_interface__membrane__V)))); + const double var_slow_delayed_rectifier_K_current_xs_gate__tau_xs = CHASTE_CONST(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__alpha_oa = CHASTE_CONST(0.65000000000000002) / (CHASTE_MATH::Exp(CHASTE_CONST(0.50847457627118642) - CHASTE_CONST(0.016949152542372881) * var_chaste_interface__membrane__V) + CHASTE_MATH::Exp(-CHASTE_CONST(1.1764705882352942) - CHASTE_CONST(0.11764705882352941) * var_chaste_interface__membrane__V)); + const double var_transient_outward_K_current_oa_gate__beta_oa = CHASTE_CONST(0.65000000000000002) / (CHASTE_CONST(2.5) + CHASTE_MATH::Exp(CHASTE_CONST(4.8235294117647056) + CHASTE_CONST(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__alpha_oi = 1 / (CHASTE_CONST(18.530000000000001) + CHASTE_MATH::Exp(CHASTE_CONST(10.383561643835618) + CHASTE_CONST(0.091324200913242018) * var_chaste_interface__membrane__V)); + const double var_transient_outward_K_current_oi_gate__beta_oi = 1 / (CHASTE_CONST(35.560000000000002) + CHASTE_MATH::Exp(-CHASTE_CONST(0.16935483870967738) - CHASTE_CONST(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__alpha_ua = CHASTE_CONST(0.65000000000000002) / (CHASTE_MATH::Exp(CHASTE_CONST(0.50847457627118642) - CHASTE_CONST(0.016949152542372881) * var_chaste_interface__membrane__V) + CHASTE_MATH::Exp(-CHASTE_CONST(1.1764705882352942) - CHASTE_CONST(0.11764705882352941) * var_chaste_interface__membrane__V)); + const double var_ultrarapid_delayed_rectifier_K_current_ua_gate__beta_ua = CHASTE_CONST(0.65000000000000002) / (CHASTE_CONST(2.5) + CHASTE_MATH::Exp(CHASTE_CONST(4.8235294117647056) + CHASTE_CONST(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__alpha_ui = 1 / (21 + CHASTE_MATH::Exp(CHASTE_CONST(6.6071428571428568) - CHASTE_CONST(0.035714285714285712) * var_chaste_interface__membrane__V)); + const double var_ultrarapid_delayed_rectifier_K_current_ui_gate__beta_ui = 1 / CHASTE_MATH::Exp(CHASTE_CONST(9.875) - CHASTE_CONST(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]); @@ -1108,7 +1110,7 @@ std::shared_ptrmFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -1154,39 +1156,39 @@ std::shared_ptrIndexTable0(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_Na_Ca_exchanger_current__K_mCa = CHASTE_CONST(1.3799999999999999); // millimolar + const double var_Na_Ca_exchanger_current__K_mNa = CHASTE_CONST(87.5); // millimolar + const double var_Na_Ca_exchanger_current__K_sat = CHASTE_CONST(0.10000000000000001); // dimensionless + const double var_Na_Ca_exchanger_current__gamma = CHASTE_CONST(0.34999999999999998); // dimensionless + const double var_Ca_release_current_from_JSR__i_rel = CHASTE_MATH::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 = CHASTE_CONST(9.9999999999999995e-7) * mParameters[9]; // uF + const double var_membrane__F = CHASTE_CONST(96.486699999999999); // coulomb_per_millimole + const double var_membrane__R = CHASTE_CONST(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_L_type_Ca_channel__i_Ca_L_converted = CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * 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 / (CHASTE_CONST(0.02) + CHASTE_CONST(0.019699999999999999) * CHASTE_MATH::Exp(-CHASTE_CONST(0.113569) * CHASTE_MATH::Pow((1 + CHASTE_CONST(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) ? (CHASTE_CONST(0.13500000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(11.764705882352942) + CHASTE_CONST(0.14705882352941177) * mParameters[12] - CHASTE_CONST(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 * CHASTE_MATH::Exp(CHASTE_CONST(0.34999999999999998) * var_chaste_interface__membrane__V - CHASTE_CONST(0.34999999999999998) * mParameters[12]) + CHASTE_CONST(3.5600000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.079000000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.079000000000000001) * mParameters[12])) : (CHASTE_CONST(7.6923076923076916) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.96036036036036043) + CHASTE_CONST(0.0900900900900901) * mParameters[12] - CHASTE_CONST(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__alpha_j = ((var_chaste_interface__membrane__V < -40) ? ((CHASTE_CONST(37.780000000000001) + var_chaste_interface__membrane__V) * (-127140 * CHASTE_MATH::Exp(CHASTE_CONST(0.24440000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.24440000000000001) * mParameters[12]) - CHASTE_CONST(3.4740000000000003e-5) * CHASTE_MATH::Exp(CHASTE_CONST(0.043909999999999998) * mParameters[12] - CHASTE_CONST(0.043909999999999998) * var_chaste_interface__membrane__V)) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(24.640530000000002) + CHASTE_CONST(0.311) * var_chaste_interface__membrane__V - CHASTE_CONST(0.311) * mParameters[12]))) : (0)); // per_millisecond + const double var_fast_sodium_current_j_gate__beta_j = ((var_chaste_interface__membrane__V < -40) ? (CHASTE_CONST(0.1212) * CHASTE_MATH::Exp(CHASTE_CONST(0.01052) * mParameters[12] - CHASTE_CONST(0.01052) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(5.5312920000000005) + CHASTE_CONST(0.13780000000000001) * mParameters[12] - CHASTE_CONST(0.13780000000000001) * var_chaste_interface__membrane__V))) : (CHASTE_CONST(0.29999999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(2.5349999999999999e-7) * mParameters[12] - CHASTE_CONST(2.5349999999999999e-7) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.2000000000000002) + CHASTE_CONST(0.10000000000000001) * mParameters[12] - CHASTE_CONST(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_membrane__i_st_converted = CHASTE_STIM(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_Na_Ca_exchanger_current__i_NaCa = (CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mParameters[4] * CHASTE_MATH::Exp(var_Na_Ca_exchanger_current__gamma * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - CHASTE_MATH::Pow(mParameters[6], 3) * var_chaste_interface__intracellular_ion_concentrations__Ca_i * CHASTE_MATH::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 * CHASTE_MATH::Exp((-1 + var_Na_Ca_exchanger_current__gamma) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (CHASTE_MATH::Pow(var_Na_Ca_exchanger_current__K_mNa, 3) + CHASTE_MATH::Pow(mParameters[6], 3)) * (var_Na_Ca_exchanger_current__K_mCa + mParameters[4])); // picoA + const double var_Na_Ca_exchanger_current__i_NaCa_converted = CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * 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 * CHASTE_MATH::Log(mParameters[6] / var_chaste_interface__intracellular_ion_concentrations__Na_i) / var_membrane__F; // millivolt + const double var_fast_sodium_current__i_Na = CHASTE_MATH::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 = CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * 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 * CHASTE_MATH::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_rapid_delayed_rectifier_K_current__i_Kr_converted = CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * 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 = CHASTE_MATH::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 = CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * 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 + const double var_time_independent_potassium_current__i_K1_converted = CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * var_time_independent_potassium_current__i_K1 / var_membrane__Cm_converted; // uA_per_cm2 + const double var_transient_outward_K_current__i_to = CHASTE_MATH::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 = CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * 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; diff --git a/chaste_codegen/data/tests/chaste_reference_models/BEopt/dynamic_courtemanche_ramirez_nattel_1998.hpp b/chaste_codegen/data/tests/chaste_reference_models/BEopt/dynamic_courtemanche_ramirez_nattel_1998.hpp index 53dafd2bf..f6677e087 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/BEopt/dynamic_courtemanche_ramirez_nattel_1998.hpp +++ b/chaste_codegen/data/tests/chaste_reference_models/BEopt/dynamic_courtemanche_ramirez_nattel_1998.hpp @@ -17,8 +17,13 @@ #include #include "AbstractDynamicallyLoadableEntity.hpp" #include "AbstractStimulusFunction.hpp" +#if USING_DEVICE_COMPILER +#include "StimulusEvaluatorCuda.hpp" +#endif #include "AbstractBackwardEulerCardiacCell.hpp" + + class Dynamiccourtemanche_ramirez_nattel_1998FromCellMLBackwardEulerOpt : public AbstractBackwardEulerCardiacCell<8>, public AbstractDynamicallyLoadableEntity { friend class boost::serialization::access; @@ -41,19 +46,25 @@ const bool is_concentration[21] = {false, true, false, false, false, false, fals 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(boost::shared_ptr /* unused */, 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: + 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]); + +#if USING_DEVICE_COMPILER + +#endif +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); -}; + std::vector ComputeDerivedQuantities(double var_chaste_interface__environment__time, const std::vector & rY);}; // Needs to be included last #include "SerializationExportWrapper.hpp" @@ -88,4 +99,5 @@ namespace boost } -#endif // DYNAMICCOURTEMANCHE_RAMIREZ_NATTEL_1998FROMCELLMLBACKWARDEULEROPT_HPP_ \ No newline at end of file +#endif // DYNAMICCOURTEMANCHE_RAMIREZ_NATTEL_1998FROMCELLMLBACKWARDEULEROPT_HPP_ + diff --git a/chaste_codegen/data/tests/chaste_reference_models/CVODE_DATA_CLAMP/Shannon2004_with_modifiers.cpp b/chaste_codegen/data/tests/chaste_reference_models/CVODE_DATA_CLAMP/Shannon2004_with_modifiers.cpp index 21637c579..04a9f040f 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/CVODE_DATA_CLAMP/Shannon2004_with_modifiers.cpp +++ b/chaste_codegen/data/tests/chaste_reference_models/CVODE_DATA_CLAMP/Shannon2004_with_modifiers.cpp @@ -22,6 +22,8 @@ #include "HeartConfig.hpp" #include "IsNan.hpp" #include "MathsCustomFunctions.hpp" +#include "ChasteMathDeviceNamespaces.hpp" +#include "ChasteCpuMacros.hpp" #if CHASTE_SUNDIALS_VERSION >= 60000 #include "CvodeContextManager.hpp" @@ -40,7 +42,7 @@ bool Cellshannon_wang_puglisi_weber_bers_2004FromCellMLCvodeDataClamp::registere 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_amplitude_converted = -CHASTE_CONST(9.5) * CHASTE_CAP(); // 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 @@ -191,29 +193,29 @@ bool Cellshannon_wang_puglisi_weber_bers_2004FromCellMLCvodeDataClamp::registere 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, 0) = CHASTE_CONST(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, 2) = CHASTE_CONST(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, 6) = CHASTE_CONST(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, 8) = CHASTE_CONST(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, 10) = CHASTE_CONST(96486.699999999997); // (var_model_parameters__F) [coulomb_per_mole] + NV_Ith_S(this->mParameters, 11) = CHASTE_CONST(8314.2999999999993); // (var_model_parameters__R) [joule_per_kilomole_kelvin] + NV_Ith_S(this->mParameters, 12) = CHASTE_CONST(0.00054000000000000001); // (var_ICaL__PCa) [litre_per_farad_millisecond] + NV_Ith_S(this->mParameters, 13) = CHASTE_CONST(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, 18) = CHASTE_CONST(0.02); // (var_Itof__G_tof) [milliS_per_microF] + NV_Ith_S(this->mParameters, 19) = CHASTE_CONST(0.90000000000000002); // (var_IK1__G_K1_max) [milliS_per_microF] + NV_Ith_S(this->mParameters, 20) = CHASTE_CONST(0.029999999999999999); // (var_IKr__G_IKr_const) [milliS_per_microF] + NV_Ith_S(this->mParameters, 21) = CHASTE_CONST(0.070000000000000007); // (var_IKs__G_Ks_max) [milliS_per_microF] + NV_Ith_S(this->mParameters, 22) = CHASTE_CONST(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] } @@ -271,7 +273,7 @@ bool Cellshannon_wang_puglisi_weber_bers_2004FromCellMLCvodeDataClamp::registere made_new_cvode_vector = true; rY = MakeNVector(*pStateVariables); } - double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -312,135 +314,135 @@ bool Cellshannon_wang_puglisi_weber_bers_2004FromCellMLCvodeDataClamp::registere 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__Fx_ICaL_SL = CHASTE_CONST(0.10000000000000001); // dimensionless + const double var_ICaL__Fx_ICaL_jct = CHASTE_CONST(0.90000000000000002); // dimensionless + const double var_ICaL__PK = CHASTE_CONST(2.7000000000000001e-7); // litre_per_farad_millisecond + const double var_ICaL__PNa = CHASTE_CONST(1.4999999999999999e-8); // litre_per_farad_millisecond + const double var_ICaL__Q10_CaL = CHASTE_CONST(1.8); // dimensionless + const double var_ICaL__gamma_Cai = CHASTE_CONST(0.34100000000000003); // dimensionless + const double var_ICaL__gamma_Cao = CHASTE_CONST(0.34100000000000003); // dimensionless + const double var_ICaL__gamma_Ki = CHASTE_CONST(0.75); // dimensionless + const double var_ICaL__gamma_Ko = CHASTE_CONST(0.75); // dimensionless + const double var_ICaL__gamma_Nai = CHASTE_CONST(0.75); // dimensionless + const double var_ICaL__gamma_Nao = CHASTE_CONST(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_ICab__Fx_CaBk_SL = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_ICab__Fx_CaBk_jct = CHASTE_CONST(0.11); // dimensionless + const double var_ICab__G_CaBk = CHASTE_CONST(0.00025129999999999998); // milliS_per_microF + const double var_ICap__Fx_SLCaP_SL = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_ICap__Fx_SLCaP_jct = CHASTE_CONST(0.11); // dimensionless + const double var_ICap__H = CHASTE_CONST(1.6000000000000001); // dimensionless + const double var_ICap__Km = CHASTE_CONST(0.00050000000000000001); // millimolar + const double var_ICap__Q10_SLCaP = CHASTE_CONST(2.3500000000000001); // dimensionless + const double var_ICap__V_maxAF = CHASTE_CONST(0.067299999999999999); // microA_per_microF + const double var_ICl_Ca__Fx_Cl_SL = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_ICl_Ca__Fx_Cl_jct = CHASTE_CONST(0.11); // dimensionless + const double var_ICl_Ca__G_Cl = CHASTE_CONST(0.109625); // milliS_per_microF + const double var_ICl_Ca__Kd_ClCa = CHASTE_CONST(0.10000000000000001); // millimolar + const double var_IKs__Fx_Ks_SL = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_IKs__Fx_Ks_jct = CHASTE_CONST(0.11); // dimensionless + const double var_IKs__pCa_SL = 3 - CHASTE_MATH::Log10(var_chaste_interface__Ca_buffer__Ca_SL); // dimensionless + const double var_IKs__G_Ks_SL = (CHASTE_CONST(0.057000000000000002) + CHASTE_CONST(0.19) / (1 + CHASTE_MATH::Exp(-12 + CHASTE_CONST(1.6666666666666667) * var_IKs__pCa_SL))) * NV_Ith_S(mParameters, 21); // milliS_per_microF + const double var_IKs__pCa_jct = 3 - CHASTE_MATH::Log10(var_chaste_interface__Ca_buffer__Ca_jct); // dimensionless + const double var_IKs__G_Ks_jct = (CHASTE_CONST(0.057000000000000002) + CHASTE_CONST(0.19) / (1 + CHASTE_MATH::Exp(-12 + CHASTE_CONST(1.6666666666666667) * var_IKs__pCa_jct))) * NV_Ith_S(mParameters, 21); // milliS_per_microF + const double var_IKs__pKNa = CHASTE_CONST(0.018329999999999999); // dimensionless + const double var_INa__Fx_Na_SL = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_INa__Fx_Na_jct = CHASTE_CONST(0.11); // dimensionless + const double var_INaCa__Fx_NCX_SL = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_INaCa__Fx_NCX_jct = CHASTE_CONST(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_INaCa__K_mCai = CHASTE_CONST(0.0035899999999999999); // millimolar + const double var_INaCa__K_mCao = CHASTE_CONST(1.3); // millimolar + const double var_INaCa__K_mNai = CHASTE_CONST(12.289999999999999); // millimolar + const double var_INaCa__K_mNao = CHASTE_CONST(87.5); // millimolar + const double var_INaCa__Kd_act = CHASTE_CONST(0.00025599999999999999); // millimolar + const double var_INaCa__Ka_SL = 1 / (1 + CHASTE_MATH::Pow(var_INaCa__Kd_act, 3) / CHASTE_MATH::Pow(var_chaste_interface__Ca_buffer__Ca_SL, 3)); // dimensionless + const double var_INaCa__Ka_jct = 1 / (1 + CHASTE_MATH::Pow(var_INaCa__Kd_act, 3) / CHASTE_MATH::Pow(var_chaste_interface__Ca_buffer__Ca_jct, 3)); // dimensionless + const double var_INaCa__Q10_NCX = CHASTE_CONST(1.5700000000000001); // dimensionless + const double var_INaCa__eta = CHASTE_CONST(0.34999999999999998); // dimensionless + const double var_INaCa__ksat = CHASTE_CONST(0.27000000000000002); // dimensionless + const double var_INaK__Fx_NaK_SL = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_INaK__Fx_NaK_jct = CHASTE_CONST(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__I_NaK_max = CHASTE_CONST(1.9099999999999999); // microA_per_microF + const double var_INaK__Km_Ko = CHASTE_CONST(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_INaK__Q10_Km_Nai = CHASTE_CONST(1.49); // dimensionless + const double var_INaK__Q10_NaK = CHASTE_CONST(1.6299999999999999); // dimensionless + const double var_INa__openProb = CHASTE_MATH::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 = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_INab__Fx_NaBk_jct = CHASTE_CONST(0.11); // dimensionless + const double var_INab__G_NaBk = CHASTE_CONST(0.00029700000000000001); // milliS_per_microF + const double var_IKr_Rr_gate__Rr = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.4732142857142858) + CHASTE_CONST(0.044642857142857144) * var_chaste_interface__cell__V)); // dimensionless + const double var_IK1__G_K1 = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::Sqrt(NV_Ith_S(mParameters, 8)) * NV_Ith_S(mParameters, 19); // milliS_per_microF + const double var_IKr__G_IKr = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::Sqrt(NV_Ith_S(mParameters, 8)) * NV_Ith_S(mParameters, 20); // milliS_per_microF + const double var_INaK__sigma = -CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(0.01485884101040119) * NV_Ith_S(mParameters, 9)); // dimensionless + const double var_ICaL__Q_CaL = CHASTE_MATH::Pow(var_ICaL__Q10_CaL, (-31 + CHASTE_CONST(0.10000000000000001) * NV_Ith_S(mParameters, 24))); // dimensionless + const double var_ICaL__temp = CHASTE_CONST(0.45000000000000001) * CHASTE_MATH::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 * CHASTE_MATH::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 + CHASTE_MATH::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 * CHASTE_MATH::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 + CHASTE_MATH::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) * CHASTE_MATH::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 + CHASTE_MATH::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 * CHASTE_MATH::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 + CHASTE_MATH::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 * CHASTE_MATH::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 + CHASTE_MATH::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_ICaL__i_CaL_converted = CHASTE_CAP() * var_ICaL__i_CaL; // uA_per_cm2 + const double var_ICap__Q_SLCaP = CHASTE_MATH::Pow(var_ICap__Q10_SLCaP, (-31 + CHASTE_CONST(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 + CHASTE_MATH::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 + CHASTE_MATH::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_ICap__i_Cap_converted = CHASTE_CAP() * var_ICap__i_Cap; // uA_per_cm2 + const double var_IKs__E_Ks = NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24) * CHASTE_MATH::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 = CHASTE_MATH::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 = CHASTE_MATH::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_IKs__i_Ks_converted = CHASTE_CAP() * var_IKs__i_Ks; // uA_per_cm2 + const double var_INaCa__Q_NCX = CHASTE_MATH::Pow(var_INaCa__Q10_NCX, (-31 + CHASTE_CONST(0.10000000000000001) * NV_Ith_S(mParameters, 24))); // dimensionless + const double var_INaCa__temp_SL = (CHASTE_MATH::Pow(var_chaste_interface__Na_buffer__Na_SL, var_INaCa__HNa) * NV_Ith_S(mParameters, 6) * CHASTE_MATH::Exp(var_INaCa__eta * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24))) - CHASTE_MATH::Pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * var_chaste_interface__Ca_buffer__Ca_SL * CHASTE_MATH::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 * CHASTE_MATH::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 / (CHASTE_MATH::Pow(var_chaste_interface__Na_buffer__Na_SL, var_INaCa__HNa) * var_INaCa__K_mCao + CHASTE_MATH::Pow(var_chaste_interface__Na_buffer__Na_SL, var_INaCa__HNa) * NV_Ith_S(mParameters, 6) + CHASTE_MATH::Pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * var_chaste_interface__Ca_buffer__Ca_SL + CHASTE_MATH::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 + CHASTE_MATH::Pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * (1 + CHASTE_MATH::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 = (CHASTE_MATH::Pow(var_chaste_interface__Na_buffer__Na_jct, var_INaCa__HNa) * NV_Ith_S(mParameters, 6) * CHASTE_MATH::Exp(var_INaCa__eta * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24))) - CHASTE_MATH::Pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * var_chaste_interface__Ca_buffer__Ca_jct * CHASTE_MATH::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 * CHASTE_MATH::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 / (CHASTE_MATH::Pow(var_chaste_interface__Na_buffer__Na_jct, var_INaCa__HNa) * var_INaCa__K_mCao + CHASTE_MATH::Pow(var_chaste_interface__Na_buffer__Na_jct, var_INaCa__HNa) * NV_Ith_S(mParameters, 6) + CHASTE_MATH::Pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * var_chaste_interface__Ca_buffer__Ca_jct + CHASTE_MATH::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 + CHASTE_MATH::Pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * (1 + CHASTE_MATH::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_INaCa__i_NaCa_converted = CHASTE_CAP() * var_INaCa__i_NaCa; // uA_per_cm2 + const double var_INaK__Q_Km_Nai = CHASTE_MATH::Pow(var_INaK__Q10_Km_Nai, (-31 + CHASTE_CONST(0.10000000000000001) * NV_Ith_S(mParameters, 24))); // dimensionless + const double var_INaK__Q_NaK = CHASTE_MATH::Pow(var_INaK__Q10_NaK, (-31 + CHASTE_CONST(0.10000000000000001) * NV_Ith_S(mParameters, 24))); // dimensionless + const double var_INaK__f_NaK = 1 / (1 + CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(0.10000000000000001) * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24))) + CHASTE_CONST(0.036499999999999998) * var_INaK__sigma * CHASTE_MATH::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 + CHASTE_MATH::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 + CHASTE_MATH::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_reversal_potentials__E_Ca_SL = CHASTE_CONST(0.5) * NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24) * CHASTE_MATH::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_reversal_potentials__E_Ca_jct = CHASTE_CONST(0.5) * NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24) * CHASTE_MATH::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_ICab__i_Cab_converted = CHASTE_CAP() * var_ICab__i_Cab; // uA_per_cm2 + const double var_reversal_potentials__E_Cl = -NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24) * CHASTE_MATH::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_IClb__i_Clb_converted = CHASTE_CAP() * var_IClb__i_Clb; // uA_per_cm2 + const double var_reversal_potentials__E_K = NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24) * CHASTE_MATH::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 = CHASTE_CONST(1.02) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__cell__V - CHASTE_CONST(0.23849999999999999) * var_reversal_potentials__E_K)); // per_millisecond + const double var_IK1_K1_gate__beta_K1 = (CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__cell__V - CHASTE_CONST(0.061749999999999999) * var_reversal_potentials__E_K) + CHASTE_CONST(0.49124000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__cell__V - CHASTE_CONST(0.080320000000000003) * var_reversal_potentials__E_K)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(0.51429999999999998) * var_reversal_potentials__E_K - CHASTE_CONST(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_IK1__i_K1_converted = CHASTE_CAP() * 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_IKr__i_Kr_converted = CHASTE_CAP() * 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_Itof__i_tof_converted = CHASTE_CAP() * var_Itof__i_tof; // uA_per_cm2 + const double var_Itos__i_tos = (-var_reversal_potentials__E_K + var_chaste_interface__cell__V) * (CHASTE_CONST(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 = CHASTE_CAP() * 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) * CHASTE_MATH::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_reversal_potentials__E_Na_jct = NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24) * CHASTE_MATH::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_INa__i_Na_converted = CHASTE_CAP() * 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 var_INab__i_Nab_converted = CHASTE_CAP() * var_INab__i_Nab; // uA_per_cm2 + const double var_chaste_interface__i_ionic = CHASTE_CAP() * var_ICl_Ca__i_Cl_Ca + CHASTE_CAP() * 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) @@ -455,7 +457,7 @@ bool Cellshannon_wang_puglisi_weber_bers_2004FromCellMLCvodeDataClamp::registere { // 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)); + double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -548,217 +550,217 @@ bool Cellshannon_wang_puglisi_weber_bers_2004FromCellMLCvodeDataClamp::registere // 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__Bmax_Calsequestrin = CHASTE_CONST(0.14000000000000001); // millimolar + const double var_Ca_buffer__Bmax_SLB_SL = CHASTE_CONST(0.037400000000000003); // millimolar + const double var_Ca_buffer__Bmax_SLB_jct = CHASTE_CONST(0.0045999999999999999); // millimolar + const double var_Ca_buffer__Bmax_SLHigh_SL = CHASTE_CONST(0.0134); // millimolar + const double var_Ca_buffer__Bmax_SLHigh_jct = CHASTE_CONST(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__koff_SLB = CHASTE_CONST(1.3); // per_millisecond + const double var_Ca_buffer__koff_SLHigh = CHASTE_CONST(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__Fx_ICaL_SL = CHASTE_CONST(0.10000000000000001); // dimensionless + const double var_ICaL__Fx_ICaL_jct = CHASTE_CONST(0.90000000000000002); // dimensionless + const double var_ICaL__PNa = CHASTE_CONST(1.4999999999999999e-8); // litre_per_farad_millisecond + const double var_ICaL__Q10_CaL = CHASTE_CONST(1.8); // dimensionless + const double var_ICaL__gamma_Cai = CHASTE_CONST(0.34100000000000003); // dimensionless + const double var_ICaL__gamma_Cao = CHASTE_CONST(0.34100000000000003); // dimensionless + const double var_ICaL__gamma_Nai = CHASTE_CONST(0.75); // dimensionless + const double var_ICaL__gamma_Nao = CHASTE_CONST(0.75); // dimensionless + const double d_dt_chaste_interface_var_ICaL_fCa_gate__fCaB_SL = -CHASTE_CONST(0.011900000000000001) * var_chaste_interface__ICaL_fCa_gate__fCaB_SL + CHASTE_CONST(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 = -CHASTE_CONST(0.011900000000000001) * var_chaste_interface__ICaL_fCa_gate__fCaB_jct + CHASTE_CONST(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_ICab__Fx_CaBk_SL = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_ICab__Fx_CaBk_jct = CHASTE_CONST(0.11); // dimensionless + const double var_ICab__G_CaBk = CHASTE_CONST(0.00025129999999999998); // milliS_per_microF + const double var_ICap__Fx_SLCaP_SL = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_ICap__Fx_SLCaP_jct = CHASTE_CONST(0.11); // dimensionless + const double var_ICap__H = CHASTE_CONST(1.6000000000000001); // dimensionless + const double var_ICap__Km = CHASTE_CONST(0.00050000000000000001); // millimolar + const double var_ICap__Q10_SLCaP = CHASTE_CONST(2.3500000000000001); // dimensionless + const double var_ICap__V_maxAF = CHASTE_CONST(0.067299999999999999); // microA_per_microF + const double var_INa__Fx_Na_SL = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_INa__Fx_Na_jct = CHASTE_CONST(0.11); // dimensionless + const double var_INaCa__Fx_NCX_SL = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_INaCa__Fx_NCX_jct = CHASTE_CONST(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_INaCa__K_mCai = CHASTE_CONST(0.0035899999999999999); // millimolar + const double var_INaCa__K_mCao = CHASTE_CONST(1.3); // millimolar + const double var_INaCa__K_mNai = CHASTE_CONST(12.289999999999999); // millimolar + const double var_INaCa__K_mNao = CHASTE_CONST(87.5); // millimolar + const double var_INaCa__Kd_act = CHASTE_CONST(0.00025599999999999999); // millimolar + const double var_INaCa__Ka_SL = 1 / (1 + CHASTE_MATH::Pow(var_INaCa__Kd_act, 3) / CHASTE_MATH::Pow(var_chaste_interface__Ca_buffer__Ca_SL, 3)); // dimensionless + const double var_INaCa__Ka_jct = 1 / (1 + CHASTE_MATH::Pow(var_INaCa__Kd_act, 3) / CHASTE_MATH::Pow(var_chaste_interface__Ca_buffer__Ca_jct, 3)); // dimensionless + const double var_INaCa__Q10_NCX = CHASTE_CONST(1.5700000000000001); // dimensionless + const double var_INaCa__eta = CHASTE_CONST(0.34999999999999998); // dimensionless + const double var_INaCa__ksat = CHASTE_CONST(0.27000000000000002); // dimensionless + const double var_INaK__Fx_NaK_SL = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_INaK__Fx_NaK_jct = CHASTE_CONST(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__I_NaK_max = CHASTE_CONST(1.9099999999999999); // microA_per_microF + const double var_INaK__Km_Ko = CHASTE_CONST(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_INaK__Q10_Km_Nai = CHASTE_CONST(1.49); // dimensionless + const double var_INaK__Q10_NaK = CHASTE_CONST(1.6299999999999999); // dimensionless + const double var_INa__openProb = CHASTE_MATH::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 = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_INab__Fx_NaBk_jct = CHASTE_CONST(0.11); // dimensionless + const double var_INab__G_NaBk = CHASTE_CONST(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_Jpump_SR__H = CHASTE_CONST(1.7869999999999999); // dimensionless + const double var_Jpump_SR__Kmf = CHASTE_CONST(0.00024600000000000002); // millimolar + const double var_Jpump_SR__Kmr = CHASTE_CONST(1.7); // millimolar + const double var_Jpump_SR__Q10_SRCaP = CHASTE_CONST(2.6000000000000001); // dimensionless + const double var_Jrel_SR__EC50_SR = CHASTE_CONST(0.45000000000000001); // millimolar + const double var_Jrel_SR__HSR = CHASTE_CONST(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__kCaSR = -(-var_Jrel_SR__Min_SR + var_Jrel_SR__Max_SR) / (1 + CHASTE_MATH::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 = CHASTE_CONST(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__kim = CHASTE_CONST(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__kom = CHASTE_CONST(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 + CHASTE_MATH::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 + CHASTE_MATH::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 - CHASTE_MATH::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__Bmax_SL = CHASTE_CONST(1.6499999999999999); // millimolar + const double var_Na_buffer__Bmax_jct = CHASTE_CONST(7.5609999999999999); // millimolar + const double var_Na_buffer__koff = CHASTE_CONST(0.001); // per_millisecond + const double var_Na_buffer__kon = CHASTE_CONST(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 var_ICaL_d_gate__d_infinity = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4166666666666665) - CHASTE_CONST(0.16666666666666666) * var_chaste_interface__cell__V)); // dimensionless + const double var_ICaL_d_gate__tau_d = CHASTE_CONST(28.571428571428569) * (1 - CHASTE_MATH::Exp(-CHASTE_CONST(2.4166666666666665) - CHASTE_CONST(0.16666666666666666) * var_chaste_interface__cell__V)) * var_ICaL_d_gate__d_infinity / (CHASTE_CONST(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 var_ICaL_f_gate__f_infinity = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(9.7388888888888889) + CHASTE_CONST(0.27777777777777779) * var_chaste_interface__cell__V)) + CHASTE_CONST(0.59999999999999998) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(2.5) - CHASTE_CONST(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 / (CHASTE_CONST(0.02) + CHASTE_CONST(0.019699999999999999) * CHASTE_MATH::Exp(-CHASTE_CONST(0.23877882250000002) * CHASTE_MATH::Pow((1 + CHASTE_CONST(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 var_IKr_Xr_gate__Xr_infinity = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(6.666666666666667) - CHASTE_CONST(0.13333333333333333) * var_chaste_interface__cell__V)); // dimensionless + const double var_IKr_Xr_gate__tau_Xr = 1 / (CHASTE_CONST(0.00060999999999999997) * (10 + var_chaste_interface__cell__V) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(1.45) + CHASTE_CONST(0.14499999999999999) * var_chaste_interface__cell__V)) + CHASTE_CONST(0.0013799999999999999) * (7 + var_chaste_interface__cell__V) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(0.86099999999999999) - CHASTE_CONST(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 var_IKs_Xs_gate__Xs_infinity = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(0.089820359281437126) - CHASTE_CONST(0.059880239520958084) * var_chaste_interface__cell__V)); // dimensionless + const double var_IKs_Xs_gate__tau_Xs = 1 / (CHASTE_CONST(0.00013100000000000001) * (30 + var_chaste_interface__cell__V) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(2.0609999999999999) + CHASTE_CONST(0.068699999999999997) * var_chaste_interface__cell__V)) + CHASTE_CONST(7.1899999999999999e-5) * (30 + var_chaste_interface__cell__V) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(4.4399999999999995) - CHASTE_CONST(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__alpha_h = ((var_chaste_interface__cell__V < -40) ? (CHASTE_CONST(0.13500000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(11.764705882352942) + CHASTE_CONST(0.14705882352941177) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 17), var_chaste_interface__environment__time) - CHASTE_CONST(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 * CHASTE_MATH::Exp(CHASTE_CONST(0.34999999999999998) * var_chaste_interface__cell__V - CHASTE_CONST(0.34999999999999998) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 17), var_chaste_interface__environment__time)) + CHASTE_CONST(3.5600000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.079000000000000001) * var_chaste_interface__cell__V - CHASTE_CONST(0.079000000000000001) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 17), var_chaste_interface__environment__time))) : (CHASTE_CONST(7.6923076923076916) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.96036036036036043) + CHASTE_CONST(0.0900900900900901) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 17), var_chaste_interface__environment__time) - CHASTE_CONST(0.0900900900900901) * var_chaste_interface__cell__V)))); // per_millisecond + const double var_INa_h_gate__h_infinity = CHASTE_CONST(0.01) * mp_membrane_fast_sodium_current_reduced_inactivation_modifier->Calc(NV_Ith_S(mParameters, 16), var_chaste_interface__environment__time) + (1 - CHASTE_CONST(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__alpha_j = ((var_chaste_interface__cell__V < -40) ? ((CHASTE_CONST(37.780000000000001) + var_chaste_interface__cell__V) * (-127140 * CHASTE_MATH::Exp(CHASTE_CONST(0.24440000000000001) * var_chaste_interface__cell__V - CHASTE_CONST(0.24440000000000001) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 17), var_chaste_interface__environment__time)) - CHASTE_CONST(3.4740000000000003e-5) * CHASTE_MATH::Exp(CHASTE_CONST(0.043909999999999998) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 17), var_chaste_interface__environment__time) - CHASTE_CONST(0.043909999999999998) * var_chaste_interface__cell__V)) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(24.640530000000002) + CHASTE_CONST(0.311) * var_chaste_interface__cell__V - CHASTE_CONST(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) ? (CHASTE_CONST(0.1212) * CHASTE_MATH::Exp(CHASTE_CONST(0.01052) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 17), var_chaste_interface__environment__time) - CHASTE_CONST(0.01052) * var_chaste_interface__cell__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(5.5312920000000005) + CHASTE_CONST(0.13780000000000001) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 17), var_chaste_interface__environment__time) - CHASTE_CONST(0.13780000000000001) * var_chaste_interface__cell__V))) : (CHASTE_CONST(0.29999999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(2.5349999999999999e-7) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 17), var_chaste_interface__environment__time) - CHASTE_CONST(2.5349999999999999e-7) * var_chaste_interface__cell__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.2000000000000002) + CHASTE_CONST(0.10000000000000001) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 17), var_chaste_interface__environment__time) - CHASTE_CONST(0.10000000000000001) * var_chaste_interface__cell__V)))); // per_millisecond + const double var_INa_j_gate__j_infinity = CHASTE_CONST(0.01) * mp_membrane_fast_sodium_current_reduced_inactivation_modifier->Calc(NV_Ith_S(mParameters, 16), var_chaste_interface__environment__time) + (1 - CHASTE_CONST(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__alpha_m = CHASTE_CONST(0.32000000000000001) * (CHASTE_CONST(47.130000000000003) + var_chaste_interface__cell__V) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(4.7130000000000001) - CHASTE_CONST(0.10000000000000001) * var_chaste_interface__cell__V)); // per_millisecond + const double var_INa_m_gate__beta_m = CHASTE_CONST(0.080000000000000002) * CHASTE_MATH::Exp(-CHASTE_CONST(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 var_Itof_X_gate__X_tof_infinity = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.20000000000000001) - CHASTE_CONST(0.066666666666666666) * var_chaste_interface__cell__V)); // dimensionless + const double var_Itof_X_gate__tau_X_tof = CHASTE_CONST(1.5) + CHASTE_CONST(3.5) * CHASTE_MATH::Exp(-CHASTE_CONST(0.0011111111111111111) * CHASTE_MATH::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 var_Itof_Y_gate__Y_tof_infinity = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(3.3500000000000001) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__cell__V)); // dimensionless + const double var_Itof_Y_gate__tau_Y_tof = 20 + 20 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(3.3500000000000001) + CHASTE_CONST(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 var_Itos_R_gate__R_tos_infinity = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(3.3500000000000001) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__cell__V)); // dimensionless + const double var_Itos_R_gate__tau_R_tos = 220 + 2800 / (1 + CHASTE_MATH::Exp(6 + CHASTE_CONST(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 var_Itos_X_gate__X_tos_infinity = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.20000000000000001) - CHASTE_CONST(0.066666666666666666) * var_chaste_interface__cell__V)); // dimensionless + const double var_Itos_X_gate__tau_X_tos = CHASTE_CONST(0.5) + 9 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(0.20000000000000001) + CHASTE_CONST(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 var_Itos_Y_gate__Y_tos_infinity = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(3.3500000000000001) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__cell__V)); // dimensionless + const double var_Itos_Y_gate__tau_Y_tos = 30 + 3000 / (1 + CHASTE_MATH::Exp(6 + CHASTE_CONST(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__Bmax_Calmodulin = CHASTE_CONST(0.024); // millimolar + const double var_cytosolic_Ca_buffer__Bmax_Myosin_Ca = CHASTE_CONST(0.14000000000000001); // millimolar + const double var_cytosolic_Ca_buffer__Bmax_Myosin_Mg = CHASTE_CONST(0.14000000000000001); // millimolar + const double var_cytosolic_Ca_buffer__Bmax_SRB = CHASTE_CONST(0.017100000000000001); // millimolar + const double var_cytosolic_Ca_buffer__Bmax_TroponinC = CHASTE_CONST(0.070000000000000007); // millimolar + const double var_cytosolic_Ca_buffer__Bmax_TroponinC_Ca_Mg_Ca = CHASTE_CONST(0.14000000000000001); // millimolar + const double var_cytosolic_Ca_buffer__Bmax_TroponinC_Ca_Mg_Mg = CHASTE_CONST(0.14000000000000001); // millimolar + const double var_cytosolic_Ca_buffer__koff_Calmodulin = CHASTE_CONST(0.23799999999999999); // per_millisecond + const double var_cytosolic_Ca_buffer__koff_Myosin_Ca = CHASTE_CONST(0.00046000000000000001); // per_millisecond + const double var_cytosolic_Ca_buffer__koff_Myosin_Mg = CHASTE_CONST(5.7000000000000003e-5); // per_millisecond + const double var_cytosolic_Ca_buffer__koff_SRB = CHASTE_CONST(0.059999999999999998); // per_millisecond + const double var_cytosolic_Ca_buffer__koff_TroponinC = CHASTE_CONST(0.019599999999999999); // per_millisecond + const double var_cytosolic_Ca_buffer__koff_TroponinC_Ca_Mg_Ca = CHASTE_CONST(3.1999999999999999e-5); // per_millisecond + const double var_cytosolic_Ca_buffer__koff_TroponinC_Ca_Mg_Mg = CHASTE_CONST(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__kon_Myosin_Ca = CHASTE_CONST(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_Myosin_Mg = CHASTE_CONST(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__kon_TroponinC = CHASTE_CONST(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__kon_TroponinC_Ca_Mg_Ca = CHASTE_CONST(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_cytosolic_Ca_buffer__kon_TroponinC_Ca_Mg_Mg = CHASTE_CONST(0.0030000000000000001); // per_millimolar_per_millisecond + const double var_indo_fluo_Ca_buffer_not_connected__Bmax_Fluo3_Cytosol = CHASTE_CONST(0.025000000000000001); // millimolar + const double var_indo_fluo_Ca_buffer_not_connected__Bmax_Fluo3_SL = CHASTE_CONST(0.00076999999999999996); // millimolar + const double var_indo_fluo_Ca_buffer_not_connected__Bmax_Fluo3_jct = CHASTE_CONST(2.0000000000000002e-5); // millimolar + const double var_indo_fluo_Ca_buffer_not_connected__Bmax_Indo1_Cytosol = CHASTE_CONST(0.025000000000000001); // millimolar + const double var_indo_fluo_Ca_buffer_not_connected__Bmax_Indo1_SL = CHASTE_CONST(0.00076999999999999996); // millimolar + const double var_indo_fluo_Ca_buffer_not_connected__Bmax_Indo1_jct = CHASTE_CONST(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__koff_Fluo3 = CHASTE_CONST(0.11); // per_millisecond + const double var_indo_fluo_Ca_buffer_not_connected__koff_Indo1 = CHASTE_CONST(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_ion_diffusion__J_Ca_SL_cytosol = CHASTE_CONST(3.7243000000000002e-12) * var_chaste_interface__Ca_buffer__Ca_SL - CHASTE_CONST(3.7243000000000002e-12) * var_chaste_interface__Ca_buffer__Cai; // millimole_per_millisecond + const double var_ion_diffusion__J_Ca_jct_SL = CHASTE_CONST(8.2413000000000004e-13) * var_chaste_interface__Ca_buffer__Ca_jct - CHASTE_CONST(8.2413000000000004e-13) * var_chaste_interface__Ca_buffer__Ca_SL; // millimole_per_millisecond + const double var_ion_diffusion__J_Na_SL_cytosol = CHASTE_CONST(1.6385999999999999e-12) * var_chaste_interface__Na_buffer__Na_SL - CHASTE_CONST(1.6385999999999999e-12) * var_chaste_interface__Na_buffer__Nai; // millimole_per_millisecond + const double var_ion_diffusion__J_Na_jct_SL = CHASTE_CONST(1.8312999999999999e-14) * var_chaste_interface__Na_buffer__Na_jct - CHASTE_CONST(1.8312999999999999e-14) * var_chaste_interface__Na_buffer__Na_SL; // millimole_per_millisecond + const double var_model_parameters__Cm_per_area = CHASTE_CONST(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_INaK__sigma = -CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(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 = CHASTE_MATH::Pow(var_ICaL__Q10_CaL, (-31 + CHASTE_CONST(0.10000000000000001) * mp_temperature_modifier->Calc(NV_Ith_S(mParameters, 24), var_chaste_interface__environment__time))); // dimensionless + const double var_ICaL__temp = CHASTE_CONST(0.45000000000000001) * CHASTE_MATH::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 * CHASTE_MATH::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 + CHASTE_MATH::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 * CHASTE_MATH::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 + CHASTE_MATH::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 * CHASTE_MATH::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 + CHASTE_MATH::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 * CHASTE_MATH::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 + CHASTE_MATH::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 = CHASTE_MATH::Pow(var_ICap__Q10_SLCaP, (-31 + CHASTE_CONST(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 + CHASTE_MATH::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 + CHASTE_MATH::Pow((var_ICap__Km / var_chaste_interface__Ca_buffer__Ca_jct), var_ICap__H)); // microA_per_microF + const double var_INaCa__Q_NCX = CHASTE_MATH::Pow(var_INaCa__Q10_NCX, (-31 + CHASTE_CONST(0.10000000000000001) * mp_temperature_modifier->Calc(NV_Ith_S(mParameters, 24), var_chaste_interface__environment__time))); // dimensionless + const double var_INaCa__temp_SL = (CHASTE_MATH::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) * CHASTE_MATH::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))) - CHASTE_MATH::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 * CHASTE_MATH::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 * CHASTE_MATH::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 / (CHASTE_MATH::Pow(var_chaste_interface__Na_buffer__Na_SL, var_INaCa__HNa) * var_INaCa__K_mCao + CHASTE_MATH::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) + CHASTE_MATH::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 + CHASTE_MATH::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 + CHASTE_MATH::Pow(mp_extracellular_sodium_concentration_modifier->Calc(NV_Ith_S(mParameters, 9), var_chaste_interface__environment__time), var_INaCa__HNa) * (1 + CHASTE_MATH::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 = (CHASTE_MATH::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) * CHASTE_MATH::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))) - CHASTE_MATH::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 * CHASTE_MATH::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 * CHASTE_MATH::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 / (CHASTE_MATH::Pow(var_chaste_interface__Na_buffer__Na_jct, var_INaCa__HNa) * var_INaCa__K_mCao + CHASTE_MATH::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) + CHASTE_MATH::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 + CHASTE_MATH::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 + CHASTE_MATH::Pow(mp_extracellular_sodium_concentration_modifier->Calc(NV_Ith_S(mParameters, 9), var_chaste_interface__environment__time), var_INaCa__HNa) * (1 + CHASTE_MATH::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 = CHASTE_MATH::Pow(var_INaK__Q10_Km_Nai, (-31 + CHASTE_CONST(0.10000000000000001) * mp_temperature_modifier->Calc(NV_Ith_S(mParameters, 24), var_chaste_interface__environment__time))); // dimensionless + const double var_INaK__Q_NaK = CHASTE_MATH::Pow(var_INaK__Q10_NaK, (-31 + CHASTE_CONST(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 + CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(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))) + CHASTE_CONST(0.036499999999999998) * var_INaK__sigma * CHASTE_MATH::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 + CHASTE_MATH::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 + CHASTE_MATH::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 = CHASTE_MATH::Pow(var_Jpump_SR__Q10_SRCaP, (-31 + CHASTE_CONST(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_model_parameters__cell_radius = CHASTE_CONST(10.25); // micrometre + const double var_model_parameters__Cm = CHASTE_CONST(2.0e-8) * CHASTE_CONST(CHASTE_MATH::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 = CHASTE_CONST(3.1415926540000002e-15) * CHASTE_MATH::Pow(var_model_parameters__cell_radius, 2) * var_model_parameters__cell_length; // liter + const double var_model_parameters__Vol_SL = CHASTE_CONST(0.02) * var_model_parameters__Vol_Cell; // liter + const double var_model_parameters__Vol_SR = CHASTE_CONST(0.035000000000000003) * var_model_parameters__Vol_Cell; // liter + const double var_model_parameters__Vol_cytosol = CHASTE_CONST(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 @@ -767,12 +769,12 @@ bool Cellshannon_wang_puglisi_weber_bers_2004FromCellMLCvodeDataClamp::registere 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 var_Jpump_SR__j_pump_SR = (CHASTE_MATH::Pow((var_chaste_interface__Ca_buffer__Cai / var_Jpump_SR__Kmf), var_Jpump_SR__H) - CHASTE_MATH::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 + CHASTE_MATH::Pow((var_chaste_interface__Ca_buffer__Cai / var_Jpump_SR__Kmf), var_Jpump_SR__H) + CHASTE_MATH::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_model_parameters__Vol_jct = CHASTE_CONST(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 + CHASTE_CONST(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 + CHASTE_CONST(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 @@ -790,19 +792,19 @@ bool Cellshannon_wang_puglisi_weber_bers_2004FromCellMLCvodeDataClamp::registere 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_reversal_potentials__E_Ca_SL = CHASTE_CONST(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) * CHASTE_MATH::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 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 - CHASTE_CONST(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 = CHASTE_CONST(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) * CHASTE_MATH::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 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 - CHASTE_CONST(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) * CHASTE_MATH::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_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) * CHASTE_MATH::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 @@ -813,46 +815,46 @@ bool Cellshannon_wang_puglisi_weber_bers_2004FromCellMLCvodeDataClamp::registere } 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__PK = CHASTE_CONST(2.7000000000000001e-7); // litre_per_farad_millisecond + const double var_ICaL__gamma_Ki = CHASTE_CONST(0.75); // dimensionless + const double var_ICaL__gamma_Ko = CHASTE_CONST(0.75); // dimensionless + const double var_ICl_Ca__Fx_Cl_SL = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_ICl_Ca__Fx_Cl_jct = CHASTE_CONST(0.11); // dimensionless + const double var_ICl_Ca__G_Cl = CHASTE_CONST(0.109625); // milliS_per_microF + const double var_ICl_Ca__Kd_ClCa = CHASTE_CONST(0.10000000000000001); // millimolar + const double var_IKs__Fx_Ks_SL = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_IKs__Fx_Ks_jct = CHASTE_CONST(0.11); // dimensionless + const double var_IKs__pCa_SL = 3 - CHASTE_MATH::Log10(var_chaste_interface__Ca_buffer__Ca_SL); // dimensionless + const double var_IKs__G_Ks_SL = (CHASTE_CONST(0.057000000000000002) + CHASTE_CONST(0.19) / (1 + CHASTE_MATH::Exp(-12 + CHASTE_CONST(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 - CHASTE_MATH::Log10(var_chaste_interface__Ca_buffer__Ca_jct); // dimensionless + const double var_IKs__G_Ks_jct = (CHASTE_CONST(0.057000000000000002) + CHASTE_CONST(0.19) / (1 + CHASTE_MATH::Exp(-12 + CHASTE_CONST(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 = CHASTE_CONST(0.018329999999999999); // dimensionless + const double var_IKr_Rr_gate__Rr = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.4732142857142858) + CHASTE_CONST(0.044642857142857144) * var_chaste_interface__cell__V)); // dimensionless + const double var_cell__i_Stim_converted = CHASTE_STIM(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_cell__i_Stim = var_cell__i_Stim_converted / CHASTE_CAP(); // microA_per_microF + const double var_IK1__G_K1 = mp_membrane_inward_rectifier_potassium_current_conductance_modifier->Calc(CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::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 = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::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) * CHASTE_MATH::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 + CHASTE_MATH::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__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) * CHASTE_MATH::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 = CHASTE_MATH::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 = CHASTE_MATH::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_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) * CHASTE_MATH::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_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) * CHASTE_MATH::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 = CHASTE_CONST(1.02) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__cell__V - CHASTE_CONST(0.23849999999999999) * var_reversal_potentials__E_K)); // per_millisecond + const double var_IK1_K1_gate__beta_K1 = (CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__cell__V - CHASTE_CONST(0.061749999999999999) * var_reversal_potentials__E_K) + CHASTE_CONST(0.49124000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__cell__V - CHASTE_CONST(0.080320000000000003) * var_reversal_potentials__E_K)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(0.51429999999999998) * var_reversal_potentials__E_K - CHASTE_CONST(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_Itos__i_tos = mp_Itos__i_tos_modifier->Calc((-var_reversal_potentials__E_K + var_chaste_interface__cell__V) * (CHASTE_CONST(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 @@ -860,7 +862,7 @@ bool Cellshannon_wang_puglisi_weber_bers_2004FromCellMLCvodeDataClamp::registere 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 + var_chaste_interface__membrane_data_clamp_current = (-CHASTE_EXP_VOLT(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 } @@ -916,7 +918,7 @@ bool Cellshannon_wang_puglisi_weber_bers_2004FromCellMLCvodeDataClamp::registere { // 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)); + double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -962,135 +964,135 @@ bool Cellshannon_wang_puglisi_weber_bers_2004FromCellMLCvodeDataClamp::registere // 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__Fx_ICaL_SL = CHASTE_CONST(0.10000000000000001); // dimensionless + const double var_ICaL__Fx_ICaL_jct = CHASTE_CONST(0.90000000000000002); // dimensionless + const double var_ICaL__PK = CHASTE_CONST(2.7000000000000001e-7); // litre_per_farad_millisecond + const double var_ICaL__PNa = CHASTE_CONST(1.4999999999999999e-8); // litre_per_farad_millisecond + const double var_ICaL__Q10_CaL = CHASTE_CONST(1.8); // dimensionless + const double var_ICaL__gamma_Cai = CHASTE_CONST(0.34100000000000003); // dimensionless + const double var_ICaL__gamma_Cao = CHASTE_CONST(0.34100000000000003); // dimensionless + const double var_ICaL__gamma_Ki = CHASTE_CONST(0.75); // dimensionless + const double var_ICaL__gamma_Ko = CHASTE_CONST(0.75); // dimensionless + const double var_ICaL__gamma_Nai = CHASTE_CONST(0.75); // dimensionless + const double var_ICaL__gamma_Nao = CHASTE_CONST(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_ICab__Fx_CaBk_SL = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_ICab__Fx_CaBk_jct = CHASTE_CONST(0.11); // dimensionless + const double var_ICab__G_CaBk = CHASTE_CONST(0.00025129999999999998); // milliS_per_microF + const double var_ICap__Fx_SLCaP_SL = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_ICap__Fx_SLCaP_jct = CHASTE_CONST(0.11); // dimensionless + const double var_ICap__H = CHASTE_CONST(1.6000000000000001); // dimensionless + const double var_ICap__Km = CHASTE_CONST(0.00050000000000000001); // millimolar + const double var_ICap__Q10_SLCaP = CHASTE_CONST(2.3500000000000001); // dimensionless + const double var_ICap__V_maxAF = CHASTE_CONST(0.067299999999999999); // microA_per_microF + const double var_IKs__Fx_Ks_SL = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_IKs__Fx_Ks_jct = CHASTE_CONST(0.11); // dimensionless + const double var_IKs__pCa_SL = 3 - CHASTE_MATH::Log10(var_chaste_interface__Ca_buffer__Ca_SL); // dimensionless + const double var_IKs__G_Ks_SL = (CHASTE_CONST(0.057000000000000002) + CHASTE_CONST(0.19) / (1 + CHASTE_MATH::Exp(-12 + CHASTE_CONST(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 - CHASTE_MATH::Log10(var_chaste_interface__Ca_buffer__Ca_jct); // dimensionless + const double var_IKs__G_Ks_jct = (CHASTE_CONST(0.057000000000000002) + CHASTE_CONST(0.19) / (1 + CHASTE_MATH::Exp(-12 + CHASTE_CONST(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 = CHASTE_CONST(0.018329999999999999); // dimensionless + const double var_INa__Fx_Na_SL = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_INa__Fx_Na_jct = CHASTE_CONST(0.11); // dimensionless + const double var_INaCa__Fx_NCX_SL = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_INaCa__Fx_NCX_jct = CHASTE_CONST(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_INaCa__K_mCai = CHASTE_CONST(0.0035899999999999999); // millimolar + const double var_INaCa__K_mCao = CHASTE_CONST(1.3); // millimolar + const double var_INaCa__K_mNai = CHASTE_CONST(12.289999999999999); // millimolar + const double var_INaCa__K_mNao = CHASTE_CONST(87.5); // millimolar + const double var_INaCa__Kd_act = CHASTE_CONST(0.00025599999999999999); // millimolar + const double var_INaCa__Ka_SL = 1 / (1 + CHASTE_MATH::Pow(var_INaCa__Kd_act, 3) / CHASTE_MATH::Pow(var_chaste_interface__Ca_buffer__Ca_SL, 3)); // dimensionless + const double var_INaCa__Ka_jct = 1 / (1 + CHASTE_MATH::Pow(var_INaCa__Kd_act, 3) / CHASTE_MATH::Pow(var_chaste_interface__Ca_buffer__Ca_jct, 3)); // dimensionless + const double var_INaCa__Q10_NCX = CHASTE_CONST(1.5700000000000001); // dimensionless + const double var_INaCa__eta = CHASTE_CONST(0.34999999999999998); // dimensionless + const double var_INaCa__ksat = CHASTE_CONST(0.27000000000000002); // dimensionless + const double var_INa__openProb = CHASTE_MATH::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 = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_INab__Fx_NaBk_jct = CHASTE_CONST(0.11); // dimensionless + const double var_INab__G_NaBk = CHASTE_CONST(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_ICaL_f_gate__tau_f = mp_membrane_L_type_calcium_current_f_gate_tau_modifier->Calc(1 / (CHASTE_CONST(0.02) + CHASTE_CONST(0.019699999999999999) * CHASTE_MATH::Exp(-CHASTE_CONST(0.23877882250000002) * CHASTE_MATH::Pow((1 + CHASTE_CONST(0.068965517241379309) * var_chaste_interface__cell__V), 2))), var_chaste_interface__environment__time); // millisecond + const double var_IKr_Rr_gate__Rr = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.4732142857142858) + CHASTE_CONST(0.044642857142857144) * var_chaste_interface__cell__V)); // dimensionless + const double var_INa_h_gate__alpha_h = ((var_chaste_interface__cell__V < -40) ? (CHASTE_CONST(0.13500000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(11.764705882352942) + CHASTE_CONST(0.14705882352941177) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 17), var_chaste_interface__environment__time) - CHASTE_CONST(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 * CHASTE_MATH::Exp(CHASTE_CONST(0.34999999999999998) * var_chaste_interface__cell__V - CHASTE_CONST(0.34999999999999998) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 17), var_chaste_interface__environment__time)) + CHASTE_CONST(3.5600000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.079000000000000001) * var_chaste_interface__cell__V - CHASTE_CONST(0.079000000000000001) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 17), var_chaste_interface__environment__time))) : (CHASTE_CONST(7.6923076923076916) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.96036036036036043) + CHASTE_CONST(0.0900900900900901) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 17), var_chaste_interface__environment__time) - CHASTE_CONST(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__alpha_j = ((var_chaste_interface__cell__V < -40) ? ((CHASTE_CONST(37.780000000000001) + var_chaste_interface__cell__V) * (-127140 * CHASTE_MATH::Exp(CHASTE_CONST(0.24440000000000001) * var_chaste_interface__cell__V - CHASTE_CONST(0.24440000000000001) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 17), var_chaste_interface__environment__time)) - CHASTE_CONST(3.4740000000000003e-5) * CHASTE_MATH::Exp(CHASTE_CONST(0.043909999999999998) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 17), var_chaste_interface__environment__time) - CHASTE_CONST(0.043909999999999998) * var_chaste_interface__cell__V)) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(24.640530000000002) + CHASTE_CONST(0.311) * var_chaste_interface__cell__V - CHASTE_CONST(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) ? (CHASTE_CONST(0.1212) * CHASTE_MATH::Exp(CHASTE_CONST(0.01052) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 17), var_chaste_interface__environment__time) - CHASTE_CONST(0.01052) * var_chaste_interface__cell__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(5.5312920000000005) + CHASTE_CONST(0.13780000000000001) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 17), var_chaste_interface__environment__time) - CHASTE_CONST(0.13780000000000001) * var_chaste_interface__cell__V))) : (CHASTE_CONST(0.29999999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(2.5349999999999999e-7) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 17), var_chaste_interface__environment__time) - CHASTE_CONST(2.5349999999999999e-7) * var_chaste_interface__cell__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.2000000000000002) + CHASTE_CONST(0.10000000000000001) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 17), var_chaste_interface__environment__time) - CHASTE_CONST(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 + const double var_cell__i_Stim_converted = CHASTE_STIM(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 + var_chaste_interface__membrane_data_clamp_current = (-CHASTE_EXP_VOLT(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_model_parameters__Cm_per_area = CHASTE_CONST(1.9999999999999999e-6); // farad_per_cm2 + const double var_IK1__G_K1 = mp_membrane_inward_rectifier_potassium_current_conductance_modifier->Calc(CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::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 = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::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 = CHASTE_MATH::Pow(var_ICaL__Q10_CaL, (-31 + CHASTE_CONST(0.10000000000000001) * mp_temperature_modifier->Calc(NV_Ith_S(mParameters, 24), var_chaste_interface__environment__time))); // dimensionless + const double var_ICaL__temp = CHASTE_CONST(0.45000000000000001) * CHASTE_MATH::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 * CHASTE_MATH::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 + CHASTE_MATH::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 * CHASTE_MATH::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 + CHASTE_MATH::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) * CHASTE_MATH::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 + CHASTE_MATH::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 * CHASTE_MATH::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 + CHASTE_MATH::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 * CHASTE_MATH::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 + CHASTE_MATH::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_ICaL__i_CaL_converted = CHASTE_CAP() * var_ICaL__i_CaL; // uA_per_cm2 + const double var_ICap__Q_SLCaP = CHASTE_MATH::Pow(var_ICap__Q10_SLCaP, (-31 + CHASTE_CONST(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 + CHASTE_MATH::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 + CHASTE_MATH::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_ICap__i_Cap_converted = CHASTE_CAP() * 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) * CHASTE_MATH::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 = CHASTE_MATH::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 = CHASTE_MATH::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_IKs__i_Ks_converted = CHASTE_CAP() * var_IKs__i_Ks; // uA_per_cm2 + const double var_INaCa__Q_NCX = CHASTE_MATH::Pow(var_INaCa__Q10_NCX, (-31 + CHASTE_CONST(0.10000000000000001) * mp_temperature_modifier->Calc(NV_Ith_S(mParameters, 24), var_chaste_interface__environment__time))); // dimensionless + const double var_INaCa__temp_SL = (CHASTE_MATH::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) * CHASTE_MATH::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))) - CHASTE_MATH::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 * CHASTE_MATH::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 * CHASTE_MATH::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 / (CHASTE_MATH::Pow(var_chaste_interface__Na_buffer__Na_SL, var_INaCa__HNa) * var_INaCa__K_mCao + CHASTE_MATH::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) + CHASTE_MATH::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 + CHASTE_MATH::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 + CHASTE_MATH::Pow(mp_extracellular_sodium_concentration_modifier->Calc(NV_Ith_S(mParameters, 9), var_chaste_interface__environment__time), var_INaCa__HNa) * (1 + CHASTE_MATH::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 = (CHASTE_MATH::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) * CHASTE_MATH::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))) - CHASTE_MATH::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 * CHASTE_MATH::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 * CHASTE_MATH::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 / (CHASTE_MATH::Pow(var_chaste_interface__Na_buffer__Na_jct, var_INaCa__HNa) * var_INaCa__K_mCao + CHASTE_MATH::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) + CHASTE_MATH::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 + CHASTE_MATH::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 + CHASTE_MATH::Pow(mp_extracellular_sodium_concentration_modifier->Calc(NV_Ith_S(mParameters, 9), var_chaste_interface__environment__time), var_INaCa__HNa) * (1 + CHASTE_MATH::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_INaCa__i_NaCa_converted = CHASTE_CAP() * 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__cell_radius = CHASTE_CONST(10.25); // micrometre + const double var_model_parameters__Cm = CHASTE_CONST(2.0e-8) * CHASTE_CONST(CHASTE_MATH::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_reversal_potentials__E_Ca_SL = CHASTE_CONST(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) * CHASTE_MATH::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_reversal_potentials__E_Ca_jct = CHASTE_CONST(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) * CHASTE_MATH::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_ICab__i_Cab_converted = CHASTE_CAP() * 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) * CHASTE_MATH::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_IClb__i_Clb_converted = CHASTE_CAP() * 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) * CHASTE_MATH::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 = CHASTE_CONST(1.02) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__cell__V - CHASTE_CONST(0.23849999999999999) * var_reversal_potentials__E_K)); // per_millisecond + const double var_IK1_K1_gate__beta_K1 = (CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__cell__V - CHASTE_CONST(0.061749999999999999) * var_reversal_potentials__E_K) + CHASTE_CONST(0.49124000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__cell__V - CHASTE_CONST(0.080320000000000003) * var_reversal_potentials__E_K)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(0.51429999999999998) * var_reversal_potentials__E_K - CHASTE_CONST(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_IK1__i_K1_converted = CHASTE_CAP() * 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_IKr__i_Kr_converted = CHASTE_CAP() * 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_Itof__i_tof_converted = CHASTE_CAP() * 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) * (CHASTE_CONST(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 = CHASTE_CAP() * 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) * CHASTE_MATH::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_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) * CHASTE_MATH::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_INa__i_Na_converted = CHASTE_CAP() * 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 + const double var_INab__i_Nab_converted = CHASTE_CAP() * var_INab__i_Nab; // uA_per_cm2 #if CHASTE_SUNDIALS_VERSION >= 60000 N_Vector dqs = N_VNew_Serial(24, CvodeContextManager::Instance()->GetSundialsContext()); @@ -1559,4 +1561,5 @@ void OdeSystemInformation { @@ -102,6 +106,10 @@ class Cellshannon_wang_puglisi_weber_bers_2004FromCellMLCvodeDataClamp : public 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: + static constexpr unsigned TOTAL_SIZE = 45u; + static constexpr unsigned NNZ = 0u; + static inline const int sparse_rowptr[] = { }; + static inline const int sparse_colind[] = { }; boost::shared_ptr UseCellMLDefaultStimulus(); double GetIntracellularCalciumConcentration(); @@ -110,7 +118,19 @@ const bool is_probability[45] = {false, false, true, true, true, false, false, f 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); +#if USING_DEVICE_COMPILER + template + DEVICE + static void EvaluateYDerivativesDevice(ValueType var_chaste_interface__environment__time, const ValueType* rY, ValueType* rDY, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType* mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim); + template + DEVICE + static void EvaluateAnalyticJacobianDevice(ValueType var_chaste_interface__environment__time, const ValueType *rY, ValueType *rDY, ValueType *rJacobian, ValueType *rTmp1, ValueType *rTmp2, ValueType *rTmp3, const unsigned nvars, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType *mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim); + template + DEVICE + static void EvaluateSparseAnalyticJacobianDevice(ValueType var_chaste_interface__environment__time, const ValueType *rY, ValueType *rDY, ValueType *rJacobian, ValueType *rTmp1, ValueType *rTmp2, ValueType *rTmp3, const unsigned nvars, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType *mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim); +#endif }; // Needs to be included last @@ -147,4 +167,10 @@ namespace boost } #endif // CELLSHANNON_WANG_PUGLISI_WEBER_BERS_2004FROMCELLMLCVODEDATACLAMP_HPP_ + + + +#if USING_DEVICE_COMPILER + #include "Shannon2004_with_modifiersKernels.hpp" +#endif #endif // CHASTE_CVODE \ No newline at end of file diff --git a/chaste_codegen/data/tests/chaste_reference_models/CVODE_DATA_CLAMP/dokos_model_1996.cpp b/chaste_codegen/data/tests/chaste_reference_models/CVODE_DATA_CLAMP/dokos_model_1996.cpp index 12f9e6995..4b7a3f996 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/CVODE_DATA_CLAMP/dokos_model_1996.cpp +++ b/chaste_codegen/data/tests/chaste_reference_models/CVODE_DATA_CLAMP/dokos_model_1996.cpp @@ -22,6 +22,8 @@ #include "HeartConfig.hpp" #include "IsNan.hpp" #include "MathsCustomFunctions.hpp" +#include "ChasteMathDeviceNamespaces.hpp" +#include "ChasteCpuMacros.hpp" #if CHASTE_SUNDIALS_VERSION >= 60000 #include "CvodeContextManager.hpp" @@ -49,13 +51,13 @@ 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, 0) = CHASTE_CONST(0.40000000000000002); // (var_L_type_calcium_current__g_CaL) [nanoS] + NV_Ith_S(this->mParameters, 1) = CHASTE_CONST(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] + NV_Ith_S(this->mParameters, 3) = CHASTE_CONST(0.00025999999999999998); // (var_delayed_rectifying_potassium_current__Kk) [picoA_per_millimolar] + NV_Ith_S(this->mParameters, 4) = CHASTE_CONST(0.25); // (var_fast_sodium_current__g_Na) [nanoS] + NV_Ith_S(this->mParameters, 5) = CHASTE_CONST(0.0135); // (var_hyperpolarising_activated_current__g_fK) [nanoS] + NV_Ith_S(this->mParameters, 6) = CHASTE_CONST(0.0080999999999999996); // (var_hyperpolarising_activated_current__g_fNa) [nanoS] } Celldokos_model_1996FromCellMLCvodeDataClamp::~Celldokos_model_1996FromCellMLCvodeDataClamp() @@ -111,7 +113,7 @@ made_new_cvode_vector = true; rY = MakeNVector(*pStateVariables); } - double var_chaste_interface__membrane__E = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + double var_chaste_interface__membrane__E = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -144,50 +146,50 @@ 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_T_type_calcium_current__g_CaT = CHASTE_CONST(0.085000000000000006); // nanoS + const double var_background_potassium_current__KbK = CHASTE_CONST(6.9999999999999994e-5); // picoA_per_millimolar + const double var_background_sodium_current__g_Nab = CHASTE_CONST(0.00024000000000000001); // nanoS + const double var_constants__F = CHASTE_CONST(96485.341499999995); // coulomb_per_mole + const double var_constants__R = CHASTE_CONST(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__P_KNa = CHASTE_CONST(0.035000000000000003); // dimensionless + const double var_hyperpolarising_activated_current__Kmf = CHASTE_CONST(10.300000000000001); // millimolar + const double var_membrane__C_converted = CHASTE_CONST(0.001) * NV_Ith_S(mParameters, 1); // uF + const double var_background_potassium_current__i_bK = CHASTE_MATH::Pow(var_chaste_interface__ion_concentrations__Ko, CHASTE_CONST(0.40999999999999998)) * (-var_chaste_interface__ion_concentrations__Ko * CHASTE_MATH::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 = CHASTE_MATH::Pow(var_chaste_interface__ion_concentrations__Ko, CHASTE_CONST(0.58999999999999997)) * (-var_chaste_interface__ion_concentrations__Ko * CHASTE_MATH::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 = CHASTE_MATH::Pow(var_chaste_interface__ion_concentrations__Ko, CHASTE_CONST(0.58999999999999997)) * (-var_chaste_interface__ion_concentrations__Nao * CHASTE_MATH::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_reversal_potentials__E_Ca = CHASTE_CONST(0.5) * var_constants__R * var_constants__T * CHASTE_MATH::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_reversal_potentials__E_K = var_constants__R * var_constants__T * CHASTE_MATH::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 = CHASTE_MATH::Pow(var_chaste_interface__ion_concentrations__Ko, CHASTE_CONST(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 / (CHASTE_MATH::Pow(var_hyperpolarising_activated_current__Kmf, CHASTE_CONST(1.8300000000000001)) + CHASTE_MATH::Pow(var_chaste_interface__ion_concentrations__Ko, CHASTE_CONST(1.8300000000000001))); // picoA + const double var_reversal_potentials__E_Na = var_constants__R * var_constants__T * CHASTE_MATH::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_fast_sodium_current__i_Na = CHASTE_MATH::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 = CHASTE_MATH::Pow(var_chaste_interface__ion_concentrations__Ko, CHASTE_CONST(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 / (CHASTE_MATH::Pow(var_hyperpolarising_activated_current__Kmf, CHASTE_CONST(1.8300000000000001)) + CHASTE_MATH::Pow(var_chaste_interface__ion_concentrations__Ko, CHASTE_CONST(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__K1ni = CHASTE_CONST(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__K2ni = CHASTE_CONST(2.2890000000000001); // millimolar + const double var_sodium_calcium_exchange_current__K2no = CHASTE_CONST(561.39999999999998); // millimolar + const double var_sodium_calcium_exchange_current__K3ni = CHASTE_CONST(26.440000000000001); // millimolar + const double var_sodium_calcium_exchange_current__K3no = CHASTE_CONST(4.6630000000000003); // millimolar + const double var_sodium_calcium_exchange_current__Kci = CHASTE_CONST(0.0207); // millimolar + const double var_sodium_calcium_exchange_current__Kcni = CHASTE_CONST(26.440000000000001); // millimolar + const double var_sodium_calcium_exchange_current__Kco = CHASTE_CONST(3.6629999999999998); // millimolar + const double var_sodium_calcium_exchange_current__Qci = CHASTE_CONST(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__Qn = CHASTE_CONST(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 + CHASTE_MATH::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 * CHASTE_MATH::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 + CHASTE_MATH::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 + CHASTE_MATH::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 * CHASTE_MATH::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 + CHASTE_MATH::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 * CHASTE_MATH::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 = (CHASTE_MATH::Pow(var_chaste_interface__ion_concentrations__Nai, 2) / (var_sodium_calcium_exchange_current__K1ni * var_sodium_calcium_exchange_current__K2ni) + CHASTE_MATH::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)) * CHASTE_MATH::Exp(CHASTE_CONST(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 * CHASTE_MATH::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 = (CHASTE_MATH::Pow(var_chaste_interface__ion_concentrations__Nao, 2) / (var_sodium_calcium_exchange_current__K1no * var_sodium_calcium_exchange_current__K2no) + CHASTE_MATH::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)) * CHASTE_MATH::Exp(-CHASTE_CONST(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 = CHASTE_MATH::Exp(CHASTE_CONST(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__k41 = CHASTE_MATH::Exp(-CHASTE_CONST(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 @@ -197,10 +199,10 @@ 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_sodium_potassium_pump__i_pmax = CHASTE_CONST(0.22600000000000001); // picoA + const double var_sodium_potassium_pump__i_p = (1 - CHASTE_CONST(0.035938096628557313) * CHASTE_MATH::Pow((-1 + CHASTE_CONST(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 var_chaste_interface__i_ionic = CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * 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) @@ -215,7 +217,7 @@ { // Inputs: // Time units: millisecond - double var_chaste_interface__membrane__E = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + double var_chaste_interface__membrane__E = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -254,103 +256,103 @@ // 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_d_gate__tau_dL = CHASTE_CONST(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_T_type_calcium_current__g_CaT = CHASTE_CONST(0.085000000000000006); // nanoS + const double var_background_potassium_current__KbK = CHASTE_CONST(6.9999999999999994e-5); // picoA_per_millimolar + const double var_background_sodium_current__g_Nab = CHASTE_CONST(0.00024000000000000001); // nanoS + const double var_constants__F = CHASTE_CONST(96485.341499999995); // coulomb_per_mole + const double var_constants__R = CHASTE_CONST(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_delayed_rectifying_potassium_current__P_KNa = CHASTE_CONST(0.035000000000000003); // dimensionless + const double var_hyperpolarising_activated_current__Kmf = CHASTE_CONST(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 d_dt_chaste_interface_var_L_type_calcium_current_f2_gate__fL2 = CHASTE_CONST(0.001) * var_L_type_calcium_current_f2_gate__fL2_orig_deriv; // 1 / millisecond + const double var_ion_concentrations__Kb = CHASTE_CONST(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_ion_concentrations__V_i = CHASTE_CONST(2.5000000000000002e-6); // microlitre + const double var_ion_concentrations__V_e = CHASTE_CONST(0.20000000000000001) * var_ion_concentrations__V_i; // microlitre + const double var_ion_concentrations__tau_b = CHASTE_CONST(0.10000000000000001); // second + const double var_L_type_calcium_current_d_gate__dL_infinity = 1 / (1 + CHASTE_MATH::Exp(-1 - CHASTE_CONST(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 d_dt_chaste_interface_var_L_type_calcium_current_d_gate__dL = CHASTE_CONST(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 + CHASTE_MATH::Exp(CHASTE_CONST(4.166666666666667) + CHASTE_CONST(0.16666666666666666) * var_chaste_interface__membrane__E)); // dimensionless + const double var_L_type_calcium_current_f_gate__tau_fL = CHASTE_CONST(0.031) + 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(4.6419753086419755) + CHASTE_CONST(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 d_dt_chaste_interface_var_L_type_calcium_current_f_gate__fL = CHASTE_CONST(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 + CHASTE_MATH::Exp(-CHASTE_CONST(3.7704918032786887) - CHASTE_CONST(0.16393442622950821) * var_chaste_interface__membrane__E)); // dimensionless + const double var_T_type_calcium_current_d_gate__tau_dT = CHASTE_CONST(0.00059999999999999995) + CHASTE_CONST(0.0054000000000000003) / (1 + CHASTE_MATH::Exp(3 + CHASTE_CONST(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 d_dt_chaste_interface_var_T_type_calcium_current_d_gate__dT = CHASTE_CONST(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 + CHASTE_MATH::Exp(CHASTE_CONST(11.363636363636365) + CHASTE_CONST(0.15151515151515152) * var_chaste_interface__membrane__E)); // dimensionless + const double var_T_type_calcium_current_f_gate__tau_fT = CHASTE_CONST(0.001) + CHASTE_CONST(0.040000000000000001) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(5.2000000000000002) + CHASTE_CONST(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 d_dt_chaste_interface_var_T_type_calcium_current_f_gate__fT = CHASTE_CONST(0.001) * var_T_type_calcium_current_f_gate__fT_orig_deriv; // 1 / millisecond + const double var_background_potassium_current__i_bK = CHASTE_MATH::Pow(var_chaste_interface__ion_concentrations__Ko, CHASTE_CONST(0.40999999999999998)) * (-var_chaste_interface__ion_concentrations__Ko * CHASTE_MATH::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 = CHASTE_MATH::Pow(var_chaste_interface__ion_concentrations__Ko, CHASTE_CONST(0.58999999999999997)) * (-var_chaste_interface__ion_concentrations__Ko * CHASTE_MATH::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 = CHASTE_MATH::Pow(var_chaste_interface__ion_concentrations__Ko, CHASTE_CONST(0.58999999999999997)) * (-var_chaste_interface__ion_concentrations__Nao * CHASTE_MATH::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 * CHASTE_MATH::Exp(CHASTE_CONST(0.039800000000000002) * var_chaste_interface__membrane__E) + CHASTE_CONST(0.21099999999999999) * CHASTE_MATH::Exp(-CHASTE_CONST(0.050999999999999997) * var_chaste_interface__membrane__E)); // second + const double var_delayed_rectifying_potassium_current_x_gate__x_infinity = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.3918918918918921) - CHASTE_CONST(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 d_dt_chaste_interface_var_delayed_rectifying_potassium_current_x_gate__x = CHASTE_CONST(0.001) * var_delayed_rectifying_potassium_current_x_gate__x_orig_deriv; // 1 / millisecond + const double var_fast_sodium_current_h_gate__alpha_h = CHASTE_CONST(32.399999999999999) * CHASTE_MATH::Exp(-CHASTE_CONST(13.076000000000002) - CHASTE_CONST(0.14000000000000001) * var_chaste_interface__membrane__E); // per_second + const double var_fast_sodium_current_h_gate__beta_h = 709 / (1 + CHASTE_CONST(4.2000000000000002) * CHASTE_MATH::Exp(-CHASTE_CONST(2.7239999999999998) - CHASTE_CONST(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 d_dt_chaste_interface_var_fast_sodium_current_h_gate__h = CHASTE_CONST(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 >= -CHASTE_CONST(34.300001111111108)) && (var_chaste_interface__membrane__E <= -CHASTE_CONST(34.299998888888886))) ? (-CHASTE_CONST(0.00022222222222367805) / (1 - CHASTE_MATH::Exp(CHASTE_CONST(1.0000000000065512e-7))) + CHASTE_CONST(449999.99999705196) * (CHASTE_CONST(34.300001111111108) + var_chaste_interface__membrane__E) * (CHASTE_CONST(0.00022222222222367805) / (1 - CHASTE_MATH::Exp(CHASTE_CONST(1.0000000000065512e-7))) + CHASTE_CONST(0.00022222222222367805) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(1.0000000000065512e-7))))) : (200 * (CHASTE_CONST(34.299999999999997) + var_chaste_interface__membrane__E) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(3.0869999999999997) - CHASTE_CONST(0.089999999999999997) * var_chaste_interface__membrane__E)))); // per_second + const double var_fast_sodium_current_m_gate__beta_m = 8000 * CHASTE_MATH::Exp(-CHASTE_CONST(8.4299999999999997) - CHASTE_CONST(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 d_dt_chaste_interface_var_fast_sodium_current_m_gate__m = CHASTE_CONST(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 >= -CHASTE_CONST(137.80000151515154)) && (var_chaste_interface__membrane__E <= -CHASTE_CONST(137.79999848484849))) ? (-CHASTE_CONST(5.4545454545085189e-7) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999322859e-8))) + CHASTE_CONST(330000.00000223459) * (CHASTE_CONST(137.80000151515154) + var_chaste_interface__membrane__E) * (CHASTE_CONST(5.4545454545085189e-7) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999322859e-8))) + CHASTE_CONST(5.4545454545085189e-7) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999322859e-8))))) : (CHASTE_CONST(0.35999999999999999) * (CHASTE_CONST(137.80000000000001) + var_chaste_interface__membrane__E) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.0948000000000011) + CHASTE_CONST(0.066000000000000003) * var_chaste_interface__membrane__E)))); // per_second + const double var_hyperpolarising_activated_current_y_gate__beta_y = (((var_chaste_interface__membrane__E >= -CHASTE_CONST(76.300000476190476)) && (var_chaste_interface__membrane__E <= -CHASTE_CONST(76.299999523809518))) ? (-CHASTE_CONST(4.7619047616187521e-8) / (1 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999993993777e-8))) + CHASTE_CONST(1049999.9999406631) * (CHASTE_CONST(76.300000476190476) + var_chaste_interface__membrane__E) * (CHASTE_CONST(4.7619047627289747e-8) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(1.0000000001730847e-7))) + CHASTE_CONST(4.7619047616187521e-8) / (1 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999993993777e-8))))) : (CHASTE_CONST(0.10000000000000001) * (CHASTE_CONST(76.299999999999997) + var_chaste_interface__membrane__E) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(16.023) - CHASTE_CONST(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 d_dt_chaste_interface_var_hyperpolarising_activated_current_y_gate__y = CHASTE_CONST(0.001) * var_hyperpolarising_activated_current_y_gate__y_orig_deriv; // 1 / millisecond + const double var_reversal_potentials__E_Ca = CHASTE_CONST(0.5) * var_constants__R * var_constants__T * CHASTE_MATH::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_reversal_potentials__E_K = var_constants__R * var_constants__T * CHASTE_MATH::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 = CHASTE_MATH::Pow(var_chaste_interface__ion_concentrations__Ko, CHASTE_CONST(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 / (CHASTE_MATH::Pow(var_hyperpolarising_activated_current__Kmf, CHASTE_CONST(1.8300000000000001)) + CHASTE_MATH::Pow(var_chaste_interface__ion_concentrations__Ko, CHASTE_CONST(1.8300000000000001))); // picoA + const double var_reversal_potentials__E_Na = var_constants__R * var_constants__T * CHASTE_MATH::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_fast_sodium_current__i_Na = CHASTE_MATH::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 = CHASTE_MATH::Pow(var_chaste_interface__ion_concentrations__Ko, CHASTE_CONST(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 / (CHASTE_MATH::Pow(var_hyperpolarising_activated_current__Kmf, CHASTE_CONST(1.8300000000000001)) + CHASTE_MATH::Pow(var_chaste_interface__ion_concentrations__Ko, CHASTE_CONST(1.8300000000000001))); // picoA + const double var_sarcoplasmic_reticulum_kinetics__KmCarel = CHASTE_CONST(0.001); // millimolar + const double var_sarcoplasmic_reticulum_kinetics__KmCaup = CHASTE_CONST(0.00050000000000000001); // millimolar + const double var_sarcoplasmic_reticulum_kinetics__V_rel = CHASTE_CONST(0.0060000000000000001) * var_ion_concentrations__V_i; // microlitre + const double var_sarcoplasmic_reticulum_kinetics__V_up = CHASTE_CONST(0.014) * var_ion_concentrations__V_i; // microlitre + const double var_sarcoplasmic_reticulum_kinetics__i_up_max = CHASTE_CONST(0.0212); // picoA + const double var_sarcoplasmic_reticulum_kinetics__i_up = CHASTE_MATH::Pow(var_chaste_interface__ion_concentrations__Cai, 2) * var_sarcoplasmic_reticulum_kinetics__i_up_max / (CHASTE_MATH::Pow(var_chaste_interface__ion_concentrations__Cai, 2) + CHASTE_MATH::Pow(var_sarcoplasmic_reticulum_kinetics__KmCaup, 2)); // picoA + const double var_sarcoplasmic_reticulum_kinetics__tau_rel = CHASTE_CONST(0.0050000000000000001); // second + const double var_sarcoplasmic_reticulum_kinetics__i_rel = 2 * CHASTE_MATH::Pow(var_chaste_interface__ion_concentrations__Cai, 2) * var_constants__F * var_chaste_interface__ion_concentrations__Carel * var_sarcoplasmic_reticulum_kinetics__V_rel / ((CHASTE_MATH::Pow(var_chaste_interface__ion_concentrations__Cai, 2) + CHASTE_MATH::Pow(var_sarcoplasmic_reticulum_kinetics__KmCarel, 2)) * var_sarcoplasmic_reticulum_kinetics__tau_rel); // picoA + const double var_sarcoplasmic_reticulum_kinetics__tau_tr = CHASTE_CONST(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_ion_concentrations__Carel_orig_deriv = CHASTE_CONST(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 = CHASTE_CONST(0.001) * var_ion_concentrations__Carel_orig_deriv; // millimolar / millisecond + const double var_ion_concentrations__Caup_orig_deriv = CHASTE_CONST(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 = CHASTE_CONST(0.001) * var_ion_concentrations__Caup_orig_deriv; // millimolar / millisecond + const double var_sodium_calcium_exchange_current__K1ni = CHASTE_CONST(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__K2ni = CHASTE_CONST(2.2890000000000001); // millimolar + const double var_sodium_calcium_exchange_current__K2no = CHASTE_CONST(561.39999999999998); // millimolar + const double var_sodium_calcium_exchange_current__K3ni = CHASTE_CONST(26.440000000000001); // millimolar + const double var_sodium_calcium_exchange_current__K3no = CHASTE_CONST(4.6630000000000003); // millimolar + const double var_sodium_calcium_exchange_current__Kci = CHASTE_CONST(0.0207); // millimolar + const double var_sodium_calcium_exchange_current__Kcni = CHASTE_CONST(26.440000000000001); // millimolar + const double var_sodium_calcium_exchange_current__Kco = CHASTE_CONST(3.6629999999999998); // millimolar + const double var_sodium_calcium_exchange_current__Qci = CHASTE_CONST(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__Qn = CHASTE_CONST(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 + CHASTE_MATH::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 * CHASTE_MATH::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 + CHASTE_MATH::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 + CHASTE_MATH::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 * CHASTE_MATH::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 + CHASTE_MATH::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 * CHASTE_MATH::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 = (CHASTE_MATH::Pow(var_chaste_interface__ion_concentrations__Nai, 2) / (var_sodium_calcium_exchange_current__K1ni * var_sodium_calcium_exchange_current__K2ni) + CHASTE_MATH::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)) * CHASTE_MATH::Exp(CHASTE_CONST(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 * CHASTE_MATH::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 = (CHASTE_MATH::Pow(var_chaste_interface__ion_concentrations__Nao, 2) / (var_sodium_calcium_exchange_current__K1no * var_sodium_calcium_exchange_current__K2no) + CHASTE_MATH::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)) * CHASTE_MATH::Exp(-CHASTE_CONST(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 = CHASTE_MATH::Exp(CHASTE_CONST(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__k41 = CHASTE_MATH::Exp(-CHASTE_CONST(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 @@ -358,22 +360,22 @@ 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_ion_concentrations__Cai_orig_deriv = -CHASTE_CONST(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 = CHASTE_CONST(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 + CHASTE_CONST(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 = CHASTE_CONST(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_sodium_potassium_pump__i_pmax = CHASTE_CONST(0.22600000000000001); // picoA + const double var_sodium_potassium_pump__i_p = (1 - CHASTE_CONST(0.035938096628557313) * CHASTE_MATH::Pow((-1 + CHASTE_CONST(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 d_dt_chaste_interface_var_ion_concentrations__Ki = CHASTE_CONST(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 d_dt_chaste_interface_var_ion_concentrations__Ko = CHASTE_CONST(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 d_dt_chaste_interface_var_ion_concentrations__Nai = CHASTE_CONST(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 + const double d_dt_chaste_interface_var_ion_concentrations__Nao = CHASTE_CONST(0.001) * var_ion_concentrations__Nao_orig_deriv; // millimolar / millisecond if (mSetVoltageDerivativeToZero) { @@ -389,10 +391,10 @@ 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 + var_chaste_interface__membrane_data_clamp_current = (-CHASTE_EXP_VOLT(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 + d_dt_chaste_interface_var_membrane__E = CHASTE_CONST(0.001) * var_membrane__E_orig_deriv; // millivolt / millisecond } NV_Ith_S(rDY,0) = d_dt_chaste_interface_var_membrane__E; @@ -419,7 +421,7 @@ { // Inputs: // Time units: millisecond - double var_chaste_interface__membrane__E = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + double var_chaste_interface__membrane__E = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -449,34 +451,34 @@ // 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__F = CHASTE_CONST(96485.341499999995); // coulomb_per_mole + const double var_constants__R = CHASTE_CONST(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__P_KNa = CHASTE_CONST(0.035000000000000003); // dimensionless + const double var_hyperpolarising_activated_current__Kmf = CHASTE_CONST(10.300000000000001); // millimolar + const double var_membrane__C_converted = CHASTE_CONST(0.001) * NV_Ith_S(mParameters, 1); // uF + const double var_delayed_rectifying_potassium_current__i_KK = CHASTE_MATH::Pow(var_chaste_interface__ion_concentrations__Ko, CHASTE_CONST(0.58999999999999997)) * (-var_chaste_interface__ion_concentrations__Ko * CHASTE_MATH::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 = CHASTE_MATH::Pow(var_chaste_interface__ion_concentrations__Ko, CHASTE_CONST(0.58999999999999997)) * (-var_chaste_interface__ion_concentrations__Nao * CHASTE_MATH::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 + const double var_delayed_rectifying_potassium_current__i_K_converted = CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * 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 + var_chaste_interface__membrane_data_clamp_current = (-CHASTE_EXP_VOLT(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_reversal_potentials__E_Ca = CHASTE_CONST(0.5) * var_constants__R * var_constants__T * CHASTE_MATH::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_L_type_calcium_current__i_CaL_converted = CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * 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 * CHASTE_MATH::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 = CHASTE_MATH::Pow(var_chaste_interface__ion_concentrations__Ko, CHASTE_CONST(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 / (CHASTE_MATH::Pow(var_hyperpolarising_activated_current__Kmf, CHASTE_CONST(1.8300000000000001)) + CHASTE_MATH::Pow(var_chaste_interface__ion_concentrations__Ko, CHASTE_CONST(1.8300000000000001))); // picoA + const double var_reversal_potentials__E_Na = var_constants__R * var_constants__T * CHASTE_MATH::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 = CHASTE_MATH::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 = CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * var_fast_sodium_current__i_Na / var_membrane__C_converted; // uA_per_cm2 + const double var_hyperpolarising_activated_current__i_fNa = CHASTE_MATH::Pow(var_chaste_interface__ion_concentrations__Ko, CHASTE_CONST(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 / (CHASTE_MATH::Pow(var_hyperpolarising_activated_current__Kmf, CHASTE_CONST(1.8300000000000001)) + CHASTE_MATH::Pow(var_chaste_interface__ion_concentrations__Ko, CHASTE_CONST(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 + const double var_hyperpolarising_activated_current__i_f_converted = CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * 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()); @@ -663,4 +665,5 @@ void OdeSystemInformation::Initial #include "SerializationExportWrapperForCpp.hpp" CHASTE_CLASS_EXPORT(Celldokos_model_1996FromCellMLCvodeDataClamp) + #endif // CHASTE_CVODE diff --git a/chaste_codegen/data/tests/chaste_reference_models/CVODE_DATA_CLAMP/dokos_model_1996.hpp b/chaste_codegen/data/tests/chaste_reference_models/CVODE_DATA_CLAMP/dokos_model_1996.hpp index fd909a60d..83275c5ab 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/CVODE_DATA_CLAMP/dokos_model_1996.hpp +++ b/chaste_codegen/data/tests/chaste_reference_models/CVODE_DATA_CLAMP/dokos_model_1996.hpp @@ -17,7 +17,11 @@ #include "ChasteSerialization.hpp" #include #include "AbstractStimulusFunction.hpp" +#if USING_DEVICE_COMPILER +#include "StimulusEvaluatorCuda.hpp" +#endif #include "AbstractCvodeCellWithDataClamp.hpp" +#include "HostDeviceMacros.hpp" class Celldokos_model_1996FromCellMLCvodeDataClamp : public AbstractCvodeCellWithDataClamp { @@ -38,6 +42,10 @@ class Celldokos_model_1996FromCellMLCvodeDataClamp : public AbstractCvodeCellWit 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: + static constexpr unsigned TOTAL_SIZE = 18u; + static constexpr unsigned NNZ = 0u; + static inline const int sparse_rowptr[] = { }; + static inline const int sparse_colind[] = { }; double GetIntracellularCalciumConcentration(); Celldokos_model_1996FromCellMLCvodeDataClamp(boost::shared_ptr pOdeSolver /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus); @@ -45,7 +53,19 @@ const bool is_probability[18] = {false, false, false, false, false, false, false 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); +#if USING_DEVICE_COMPILER + template + DEVICE + static void EvaluateYDerivativesDevice(ValueType var_chaste_interface__environment__time_converted, const ValueType* rY, ValueType* rDY, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType* mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim); + template + DEVICE + static void EvaluateAnalyticJacobianDevice(ValueType var_chaste_interface__environment__time_converted, const ValueType *rY, ValueType *rDY, ValueType *rJacobian, ValueType *rTmp1, ValueType *rTmp2, ValueType *rTmp3, const unsigned nvars, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType *mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim); + template + DEVICE + static void EvaluateSparseAnalyticJacobianDevice(ValueType var_chaste_interface__environment__time_converted, const ValueType *rY, ValueType *rDY, ValueType *rJacobian, ValueType *rTmp1, ValueType *rTmp2, ValueType *rTmp3, const unsigned nvars, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType *mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim); +#endif }; // Needs to be included last @@ -82,4 +102,10 @@ namespace boost } #endif // CELLDOKOS_MODEL_1996FROMCELLMLCVODEDATACLAMP_HPP_ + + + +#if USING_DEVICE_COMPILER + #include "dokos_model_1996Kernels.hpp" +#endif #endif // CHASTE_CVODE \ No newline at end of file diff --git a/chaste_codegen/data/tests/chaste_reference_models/CVODE_DATA_CLAMP/dynamic_Shannon2004.cpp b/chaste_codegen/data/tests/chaste_reference_models/CVODE_DATA_CLAMP/dynamic_Shannon2004.cpp index 617227af5..a8087da3a 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/CVODE_DATA_CLAMP/dynamic_Shannon2004.cpp +++ b/chaste_codegen/data/tests/chaste_reference_models/CVODE_DATA_CLAMP/dynamic_Shannon2004.cpp @@ -22,6 +22,8 @@ #include "HeartConfig.hpp" #include "IsNan.hpp" #include "MathsCustomFunctions.hpp" +#include "ChasteMathDeviceNamespaces.hpp" +#include "ChasteCpuMacros.hpp" #if CHASTE_SUNDIALS_VERSION >= 60000 #include "CvodeContextManager.hpp" @@ -34,7 +36,7 @@ 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_amplitude_converted = -CHASTE_CONST(9.5) * CHASTE_CAP(); // 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 @@ -68,29 +70,29 @@ // 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, 0) = CHASTE_CONST(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, 2) = CHASTE_CONST(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, 6) = CHASTE_CONST(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, 8) = CHASTE_CONST(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, 10) = CHASTE_CONST(96486.699999999997); // (var_model_parameters__F) [coulomb_per_mole] + NV_Ith_S(this->mParameters, 11) = CHASTE_CONST(8314.2999999999993); // (var_model_parameters__R) [joule_per_kilomole_kelvin] + NV_Ith_S(this->mParameters, 12) = CHASTE_CONST(0.00054000000000000001); // (var_ICaL__PCa) [litre_per_farad_millisecond] + NV_Ith_S(this->mParameters, 13) = CHASTE_CONST(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, 18) = CHASTE_CONST(0.02); // (var_Itof__G_tof) [milliS_per_microF] + NV_Ith_S(this->mParameters, 19) = CHASTE_CONST(0.90000000000000002); // (var_IK1__G_K1_max) [milliS_per_microF] + NV_Ith_S(this->mParameters, 20) = CHASTE_CONST(0.029999999999999999); // (var_IKr__G_IKr_const) [milliS_per_microF] + NV_Ith_S(this->mParameters, 21) = CHASTE_CONST(0.070000000000000007); // (var_IKs__G_Ks_max) [milliS_per_microF] + NV_Ith_S(this->mParameters, 22) = CHASTE_CONST(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] } @@ -148,7 +150,7 @@ made_new_cvode_vector = true; rY = MakeNVector(*pStateVariables); } - double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -189,135 +191,135 @@ 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__Fx_ICaL_SL = CHASTE_CONST(0.10000000000000001); // dimensionless + const double var_ICaL__Fx_ICaL_jct = CHASTE_CONST(0.90000000000000002); // dimensionless + const double var_ICaL__PK = CHASTE_CONST(2.7000000000000001e-7); // litre_per_farad_millisecond + const double var_ICaL__PNa = CHASTE_CONST(1.4999999999999999e-8); // litre_per_farad_millisecond + const double var_ICaL__Q10_CaL = CHASTE_CONST(1.8); // dimensionless + const double var_ICaL__gamma_Cai = CHASTE_CONST(0.34100000000000003); // dimensionless + const double var_ICaL__gamma_Cao = CHASTE_CONST(0.34100000000000003); // dimensionless + const double var_ICaL__gamma_Ki = CHASTE_CONST(0.75); // dimensionless + const double var_ICaL__gamma_Ko = CHASTE_CONST(0.75); // dimensionless + const double var_ICaL__gamma_Nai = CHASTE_CONST(0.75); // dimensionless + const double var_ICaL__gamma_Nao = CHASTE_CONST(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_ICab__Fx_CaBk_SL = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_ICab__Fx_CaBk_jct = CHASTE_CONST(0.11); // dimensionless + const double var_ICab__G_CaBk = CHASTE_CONST(0.00025129999999999998); // milliS_per_microF + const double var_ICap__Fx_SLCaP_SL = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_ICap__Fx_SLCaP_jct = CHASTE_CONST(0.11); // dimensionless + const double var_ICap__H = CHASTE_CONST(1.6000000000000001); // dimensionless + const double var_ICap__Km = CHASTE_CONST(0.00050000000000000001); // millimolar + const double var_ICap__Q10_SLCaP = CHASTE_CONST(2.3500000000000001); // dimensionless + const double var_ICap__V_maxAF = CHASTE_CONST(0.067299999999999999); // microA_per_microF + const double var_ICl_Ca__Fx_Cl_SL = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_ICl_Ca__Fx_Cl_jct = CHASTE_CONST(0.11); // dimensionless + const double var_ICl_Ca__G_Cl = CHASTE_CONST(0.109625); // milliS_per_microF + const double var_ICl_Ca__Kd_ClCa = CHASTE_CONST(0.10000000000000001); // millimolar + const double var_IKs__Fx_Ks_SL = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_IKs__Fx_Ks_jct = CHASTE_CONST(0.11); // dimensionless + const double var_IKs__pCa_SL = 3 - CHASTE_MATH::Log10(var_chaste_interface__Ca_buffer__Ca_SL); // dimensionless + const double var_IKs__G_Ks_SL = (CHASTE_CONST(0.057000000000000002) + CHASTE_CONST(0.19) / (1 + CHASTE_MATH::Exp(-12 + CHASTE_CONST(1.6666666666666667) * var_IKs__pCa_SL))) * NV_Ith_S(mParameters, 21); // milliS_per_microF + const double var_IKs__pCa_jct = 3 - CHASTE_MATH::Log10(var_chaste_interface__Ca_buffer__Ca_jct); // dimensionless + const double var_IKs__G_Ks_jct = (CHASTE_CONST(0.057000000000000002) + CHASTE_CONST(0.19) / (1 + CHASTE_MATH::Exp(-12 + CHASTE_CONST(1.6666666666666667) * var_IKs__pCa_jct))) * NV_Ith_S(mParameters, 21); // milliS_per_microF + const double var_IKs__pKNa = CHASTE_CONST(0.018329999999999999); // dimensionless + const double var_INa__Fx_Na_SL = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_INa__Fx_Na_jct = CHASTE_CONST(0.11); // dimensionless + const double var_INaCa__Fx_NCX_SL = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_INaCa__Fx_NCX_jct = CHASTE_CONST(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_INaCa__K_mCai = CHASTE_CONST(0.0035899999999999999); // millimolar + const double var_INaCa__K_mCao = CHASTE_CONST(1.3); // millimolar + const double var_INaCa__K_mNai = CHASTE_CONST(12.289999999999999); // millimolar + const double var_INaCa__K_mNao = CHASTE_CONST(87.5); // millimolar + const double var_INaCa__Kd_act = CHASTE_CONST(0.00025599999999999999); // millimolar + const double var_INaCa__Ka_SL = 1 / (1 + CHASTE_MATH::Pow(var_INaCa__Kd_act, 3) / CHASTE_MATH::Pow(var_chaste_interface__Ca_buffer__Ca_SL, 3)); // dimensionless + const double var_INaCa__Ka_jct = 1 / (1 + CHASTE_MATH::Pow(var_INaCa__Kd_act, 3) / CHASTE_MATH::Pow(var_chaste_interface__Ca_buffer__Ca_jct, 3)); // dimensionless + const double var_INaCa__Q10_NCX = CHASTE_CONST(1.5700000000000001); // dimensionless + const double var_INaCa__eta = CHASTE_CONST(0.34999999999999998); // dimensionless + const double var_INaCa__ksat = CHASTE_CONST(0.27000000000000002); // dimensionless + const double var_INaK__Fx_NaK_SL = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_INaK__Fx_NaK_jct = CHASTE_CONST(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__I_NaK_max = CHASTE_CONST(1.9099999999999999); // microA_per_microF + const double var_INaK__Km_Ko = CHASTE_CONST(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_INaK__Q10_Km_Nai = CHASTE_CONST(1.49); // dimensionless + const double var_INaK__Q10_NaK = CHASTE_CONST(1.6299999999999999); // dimensionless + const double var_INa__openProb = CHASTE_MATH::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 = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_INab__Fx_NaBk_jct = CHASTE_CONST(0.11); // dimensionless + const double var_INab__G_NaBk = CHASTE_CONST(0.00029700000000000001); // milliS_per_microF + const double var_IKr_Rr_gate__Rr = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.4732142857142858) + CHASTE_CONST(0.044642857142857144) * var_chaste_interface__cell__V)); // dimensionless + const double var_IK1__G_K1 = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::Sqrt(NV_Ith_S(mParameters, 8)) * NV_Ith_S(mParameters, 19); // milliS_per_microF + const double var_IKr__G_IKr = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::Sqrt(NV_Ith_S(mParameters, 8)) * NV_Ith_S(mParameters, 20); // milliS_per_microF + const double var_INaK__sigma = -CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(0.01485884101040119) * NV_Ith_S(mParameters, 9)); // dimensionless + const double var_ICaL__Q_CaL = CHASTE_MATH::Pow(var_ICaL__Q10_CaL, (-31 + CHASTE_CONST(0.10000000000000001) * NV_Ith_S(mParameters, 24))); // dimensionless + const double var_ICaL__temp = CHASTE_CONST(0.45000000000000001) * CHASTE_MATH::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 * CHASTE_MATH::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 + CHASTE_MATH::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 * CHASTE_MATH::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 + CHASTE_MATH::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) * CHASTE_MATH::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 + CHASTE_MATH::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 * CHASTE_MATH::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 + CHASTE_MATH::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 * CHASTE_MATH::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 + CHASTE_MATH::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_ICaL__i_CaL_converted = CHASTE_CAP() * var_ICaL__i_CaL; // uA_per_cm2 + const double var_ICap__Q_SLCaP = CHASTE_MATH::Pow(var_ICap__Q10_SLCaP, (-31 + CHASTE_CONST(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 + CHASTE_MATH::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 + CHASTE_MATH::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_ICap__i_Cap_converted = CHASTE_CAP() * var_ICap__i_Cap; // uA_per_cm2 + const double var_IKs__E_Ks = NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24) * CHASTE_MATH::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 = CHASTE_MATH::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 = CHASTE_MATH::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_IKs__i_Ks_converted = CHASTE_CAP() * var_IKs__i_Ks; // uA_per_cm2 + const double var_INaCa__Q_NCX = CHASTE_MATH::Pow(var_INaCa__Q10_NCX, (-31 + CHASTE_CONST(0.10000000000000001) * NV_Ith_S(mParameters, 24))); // dimensionless + const double var_INaCa__temp_SL = (CHASTE_MATH::Pow(var_chaste_interface__Na_buffer__Na_SL, var_INaCa__HNa) * NV_Ith_S(mParameters, 6) * CHASTE_MATH::Exp(var_INaCa__eta * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24))) - CHASTE_MATH::Pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * var_chaste_interface__Ca_buffer__Ca_SL * CHASTE_MATH::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 * CHASTE_MATH::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 / (CHASTE_MATH::Pow(var_chaste_interface__Na_buffer__Na_SL, var_INaCa__HNa) * var_INaCa__K_mCao + CHASTE_MATH::Pow(var_chaste_interface__Na_buffer__Na_SL, var_INaCa__HNa) * NV_Ith_S(mParameters, 6) + CHASTE_MATH::Pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * var_chaste_interface__Ca_buffer__Ca_SL + CHASTE_MATH::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 + CHASTE_MATH::Pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * (1 + CHASTE_MATH::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 = (CHASTE_MATH::Pow(var_chaste_interface__Na_buffer__Na_jct, var_INaCa__HNa) * NV_Ith_S(mParameters, 6) * CHASTE_MATH::Exp(var_INaCa__eta * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24))) - CHASTE_MATH::Pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * var_chaste_interface__Ca_buffer__Ca_jct * CHASTE_MATH::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 * CHASTE_MATH::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 / (CHASTE_MATH::Pow(var_chaste_interface__Na_buffer__Na_jct, var_INaCa__HNa) * var_INaCa__K_mCao + CHASTE_MATH::Pow(var_chaste_interface__Na_buffer__Na_jct, var_INaCa__HNa) * NV_Ith_S(mParameters, 6) + CHASTE_MATH::Pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * var_chaste_interface__Ca_buffer__Ca_jct + CHASTE_MATH::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 + CHASTE_MATH::Pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * (1 + CHASTE_MATH::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_INaCa__i_NaCa_converted = CHASTE_CAP() * var_INaCa__i_NaCa; // uA_per_cm2 + const double var_INaK__Q_Km_Nai = CHASTE_MATH::Pow(var_INaK__Q10_Km_Nai, (-31 + CHASTE_CONST(0.10000000000000001) * NV_Ith_S(mParameters, 24))); // dimensionless + const double var_INaK__Q_NaK = CHASTE_MATH::Pow(var_INaK__Q10_NaK, (-31 + CHASTE_CONST(0.10000000000000001) * NV_Ith_S(mParameters, 24))); // dimensionless + const double var_INaK__f_NaK = 1 / (1 + CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(0.10000000000000001) * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24))) + CHASTE_CONST(0.036499999999999998) * var_INaK__sigma * CHASTE_MATH::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 + CHASTE_MATH::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 + CHASTE_MATH::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_reversal_potentials__E_Ca_SL = CHASTE_CONST(0.5) * NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24) * CHASTE_MATH::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_reversal_potentials__E_Ca_jct = CHASTE_CONST(0.5) * NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24) * CHASTE_MATH::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_ICab__i_Cab_converted = CHASTE_CAP() * var_ICab__i_Cab; // uA_per_cm2 + const double var_reversal_potentials__E_Cl = -NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24) * CHASTE_MATH::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_IClb__i_Clb_converted = CHASTE_CAP() * var_IClb__i_Clb; // uA_per_cm2 + const double var_reversal_potentials__E_K = NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24) * CHASTE_MATH::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 = CHASTE_CONST(1.02) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__cell__V - CHASTE_CONST(0.23849999999999999) * var_reversal_potentials__E_K)); // per_millisecond + const double var_IK1_K1_gate__beta_K1 = (CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__cell__V - CHASTE_CONST(0.061749999999999999) * var_reversal_potentials__E_K) + CHASTE_CONST(0.49124000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__cell__V - CHASTE_CONST(0.080320000000000003) * var_reversal_potentials__E_K)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(0.51429999999999998) * var_reversal_potentials__E_K - CHASTE_CONST(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_IK1__i_K1_converted = CHASTE_CAP() * 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_IKr__i_Kr_converted = CHASTE_CAP() * 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_Itof__i_tof_converted = CHASTE_CAP() * var_Itof__i_tof; // uA_per_cm2 + const double var_Itos__i_tos = (-var_reversal_potentials__E_K + var_chaste_interface__cell__V) * (CHASTE_CONST(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 = CHASTE_CAP() * 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) * CHASTE_MATH::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_reversal_potentials__E_Na_jct = NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24) * CHASTE_MATH::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_INa__i_Na_converted = CHASTE_CAP() * 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 var_INab__i_Nab_converted = CHASTE_CAP() * var_INab__i_Nab; // uA_per_cm2 + const double var_chaste_interface__i_ionic = CHASTE_CAP() * var_ICl_Ca__i_Cl_Ca + CHASTE_CAP() * 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) @@ -332,7 +334,7 @@ { // Inputs: // Time units: millisecond - double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -425,217 +427,217 @@ // 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__Bmax_Calsequestrin = CHASTE_CONST(0.14000000000000001); // millimolar + const double var_Ca_buffer__Bmax_SLB_SL = CHASTE_CONST(0.037400000000000003); // millimolar + const double var_Ca_buffer__Bmax_SLB_jct = CHASTE_CONST(0.0045999999999999999); // millimolar + const double var_Ca_buffer__Bmax_SLHigh_SL = CHASTE_CONST(0.0134); // millimolar + const double var_Ca_buffer__Bmax_SLHigh_jct = CHASTE_CONST(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__koff_SLB = CHASTE_CONST(1.3); // per_millisecond + const double var_Ca_buffer__koff_SLHigh = CHASTE_CONST(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__Fx_ICaL_SL = CHASTE_CONST(0.10000000000000001); // dimensionless + const double var_ICaL__Fx_ICaL_jct = CHASTE_CONST(0.90000000000000002); // dimensionless + const double var_ICaL__PNa = CHASTE_CONST(1.4999999999999999e-8); // litre_per_farad_millisecond + const double var_ICaL__Q10_CaL = CHASTE_CONST(1.8); // dimensionless + const double var_ICaL__gamma_Cai = CHASTE_CONST(0.34100000000000003); // dimensionless + const double var_ICaL__gamma_Cao = CHASTE_CONST(0.34100000000000003); // dimensionless + const double var_ICaL__gamma_Nai = CHASTE_CONST(0.75); // dimensionless + const double var_ICaL__gamma_Nao = CHASTE_CONST(0.75); // dimensionless + const double d_dt_chaste_interface_var_ICaL_fCa_gate__fCaB_SL = -CHASTE_CONST(0.011900000000000001) * var_chaste_interface__ICaL_fCa_gate__fCaB_SL + CHASTE_CONST(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 = -CHASTE_CONST(0.011900000000000001) * var_chaste_interface__ICaL_fCa_gate__fCaB_jct + CHASTE_CONST(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_ICab__Fx_CaBk_SL = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_ICab__Fx_CaBk_jct = CHASTE_CONST(0.11); // dimensionless + const double var_ICab__G_CaBk = CHASTE_CONST(0.00025129999999999998); // milliS_per_microF + const double var_ICap__Fx_SLCaP_SL = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_ICap__Fx_SLCaP_jct = CHASTE_CONST(0.11); // dimensionless + const double var_ICap__H = CHASTE_CONST(1.6000000000000001); // dimensionless + const double var_ICap__Km = CHASTE_CONST(0.00050000000000000001); // millimolar + const double var_ICap__Q10_SLCaP = CHASTE_CONST(2.3500000000000001); // dimensionless + const double var_ICap__V_maxAF = CHASTE_CONST(0.067299999999999999); // microA_per_microF + const double var_INa__Fx_Na_SL = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_INa__Fx_Na_jct = CHASTE_CONST(0.11); // dimensionless + const double var_INaCa__Fx_NCX_SL = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_INaCa__Fx_NCX_jct = CHASTE_CONST(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_INaCa__K_mCai = CHASTE_CONST(0.0035899999999999999); // millimolar + const double var_INaCa__K_mCao = CHASTE_CONST(1.3); // millimolar + const double var_INaCa__K_mNai = CHASTE_CONST(12.289999999999999); // millimolar + const double var_INaCa__K_mNao = CHASTE_CONST(87.5); // millimolar + const double var_INaCa__Kd_act = CHASTE_CONST(0.00025599999999999999); // millimolar + const double var_INaCa__Ka_SL = 1 / (1 + CHASTE_MATH::Pow(var_INaCa__Kd_act, 3) / CHASTE_MATH::Pow(var_chaste_interface__Ca_buffer__Ca_SL, 3)); // dimensionless + const double var_INaCa__Ka_jct = 1 / (1 + CHASTE_MATH::Pow(var_INaCa__Kd_act, 3) / CHASTE_MATH::Pow(var_chaste_interface__Ca_buffer__Ca_jct, 3)); // dimensionless + const double var_INaCa__Q10_NCX = CHASTE_CONST(1.5700000000000001); // dimensionless + const double var_INaCa__eta = CHASTE_CONST(0.34999999999999998); // dimensionless + const double var_INaCa__ksat = CHASTE_CONST(0.27000000000000002); // dimensionless + const double var_INaK__Fx_NaK_SL = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_INaK__Fx_NaK_jct = CHASTE_CONST(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__I_NaK_max = CHASTE_CONST(1.9099999999999999); // microA_per_microF + const double var_INaK__Km_Ko = CHASTE_CONST(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_INaK__Q10_Km_Nai = CHASTE_CONST(1.49); // dimensionless + const double var_INaK__Q10_NaK = CHASTE_CONST(1.6299999999999999); // dimensionless + const double var_INa__openProb = CHASTE_MATH::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 = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_INab__Fx_NaBk_jct = CHASTE_CONST(0.11); // dimensionless + const double var_INab__G_NaBk = CHASTE_CONST(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_Jpump_SR__H = CHASTE_CONST(1.7869999999999999); // dimensionless + const double var_Jpump_SR__Kmf = CHASTE_CONST(0.00024600000000000002); // millimolar + const double var_Jpump_SR__Kmr = CHASTE_CONST(1.7); // millimolar + const double var_Jpump_SR__Q10_SRCaP = CHASTE_CONST(2.6000000000000001); // dimensionless + const double var_Jrel_SR__EC50_SR = CHASTE_CONST(0.45000000000000001); // millimolar + const double var_Jrel_SR__HSR = CHASTE_CONST(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__kCaSR = -(-var_Jrel_SR__Min_SR + var_Jrel_SR__Max_SR) / (1 + CHASTE_MATH::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 = CHASTE_CONST(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__kim = CHASTE_CONST(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__kom = CHASTE_CONST(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 + CHASTE_MATH::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 + CHASTE_MATH::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 - CHASTE_MATH::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__Bmax_SL = CHASTE_CONST(1.6499999999999999); // millimolar + const double var_Na_buffer__Bmax_jct = CHASTE_CONST(7.5609999999999999); // millimolar + const double var_Na_buffer__koff = CHASTE_CONST(0.001); // per_millisecond + const double var_Na_buffer__kon = CHASTE_CONST(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 var_ICaL_d_gate__d_infinity = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4166666666666665) - CHASTE_CONST(0.16666666666666666) * var_chaste_interface__cell__V)); // dimensionless + const double var_ICaL_d_gate__tau_d = CHASTE_CONST(28.571428571428569) * (1 - CHASTE_MATH::Exp(-CHASTE_CONST(2.4166666666666665) - CHASTE_CONST(0.16666666666666666) * var_chaste_interface__cell__V)) * var_ICaL_d_gate__d_infinity / (CHASTE_CONST(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 var_ICaL_f_gate__f_infinity = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(9.7388888888888889) + CHASTE_CONST(0.27777777777777779) * var_chaste_interface__cell__V)) + CHASTE_CONST(0.59999999999999998) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(2.5) - CHASTE_CONST(0.050000000000000003) * var_chaste_interface__cell__V)); // dimensionless + const double var_ICaL_f_gate__tau_f = 1 / (CHASTE_CONST(0.02) + CHASTE_CONST(0.019699999999999999) * CHASTE_MATH::Exp(-CHASTE_CONST(0.23877882250000002) * CHASTE_MATH::Pow((1 + CHASTE_CONST(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 var_IKr_Xr_gate__Xr_infinity = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(6.666666666666667) - CHASTE_CONST(0.13333333333333333) * var_chaste_interface__cell__V)); // dimensionless + const double var_IKr_Xr_gate__tau_Xr = 1 / (CHASTE_CONST(0.00060999999999999997) * (10 + var_chaste_interface__cell__V) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(1.45) + CHASTE_CONST(0.14499999999999999) * var_chaste_interface__cell__V)) + CHASTE_CONST(0.0013799999999999999) * (7 + var_chaste_interface__cell__V) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(0.86099999999999999) - CHASTE_CONST(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 var_IKs_Xs_gate__Xs_infinity = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(0.089820359281437126) - CHASTE_CONST(0.059880239520958084) * var_chaste_interface__cell__V)); // dimensionless + const double var_IKs_Xs_gate__tau_Xs = 1 / (CHASTE_CONST(0.00013100000000000001) * (30 + var_chaste_interface__cell__V) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(2.0609999999999999) + CHASTE_CONST(0.068699999999999997) * var_chaste_interface__cell__V)) + CHASTE_CONST(7.1899999999999999e-5) * (30 + var_chaste_interface__cell__V) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(4.4399999999999995) - CHASTE_CONST(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__alpha_h = ((var_chaste_interface__cell__V < -40) ? (CHASTE_CONST(0.13500000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(11.764705882352942) + CHASTE_CONST(0.14705882352941177) * NV_Ith_S(mParameters, 17) - CHASTE_CONST(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 * CHASTE_MATH::Exp(CHASTE_CONST(0.34999999999999998) * var_chaste_interface__cell__V - CHASTE_CONST(0.34999999999999998) * NV_Ith_S(mParameters, 17)) + CHASTE_CONST(3.5600000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.079000000000000001) * var_chaste_interface__cell__V - CHASTE_CONST(0.079000000000000001) * NV_Ith_S(mParameters, 17))) : (CHASTE_CONST(7.6923076923076916) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.96036036036036043) + CHASTE_CONST(0.0900900900900901) * NV_Ith_S(mParameters, 17) - CHASTE_CONST(0.0900900900900901) * var_chaste_interface__cell__V)))); // per_millisecond + const double var_INa_h_gate__h_infinity = CHASTE_CONST(0.01) * NV_Ith_S(mParameters, 16) + (1 - CHASTE_CONST(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__alpha_j = ((var_chaste_interface__cell__V < -40) ? ((CHASTE_CONST(37.780000000000001) + var_chaste_interface__cell__V) * (-127140 * CHASTE_MATH::Exp(CHASTE_CONST(0.24440000000000001) * var_chaste_interface__cell__V - CHASTE_CONST(0.24440000000000001) * NV_Ith_S(mParameters, 17)) - CHASTE_CONST(3.4740000000000003e-5) * CHASTE_MATH::Exp(CHASTE_CONST(0.043909999999999998) * NV_Ith_S(mParameters, 17) - CHASTE_CONST(0.043909999999999998) * var_chaste_interface__cell__V)) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(24.640530000000002) + CHASTE_CONST(0.311) * var_chaste_interface__cell__V - CHASTE_CONST(0.311) * NV_Ith_S(mParameters, 17)))) : (0)); // per_millisecond + const double var_INa_j_gate__beta_j = ((var_chaste_interface__cell__V < -40) ? (CHASTE_CONST(0.1212) * CHASTE_MATH::Exp(CHASTE_CONST(0.01052) * NV_Ith_S(mParameters, 17) - CHASTE_CONST(0.01052) * var_chaste_interface__cell__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(5.5312920000000005) + CHASTE_CONST(0.13780000000000001) * NV_Ith_S(mParameters, 17) - CHASTE_CONST(0.13780000000000001) * var_chaste_interface__cell__V))) : (CHASTE_CONST(0.29999999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(2.5349999999999999e-7) * NV_Ith_S(mParameters, 17) - CHASTE_CONST(2.5349999999999999e-7) * var_chaste_interface__cell__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.2000000000000002) + CHASTE_CONST(0.10000000000000001) * NV_Ith_S(mParameters, 17) - CHASTE_CONST(0.10000000000000001) * var_chaste_interface__cell__V)))); // per_millisecond + const double var_INa_j_gate__j_infinity = CHASTE_CONST(0.01) * NV_Ith_S(mParameters, 16) + (1 - CHASTE_CONST(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__alpha_m = CHASTE_CONST(0.32000000000000001) * (CHASTE_CONST(47.130000000000003) + var_chaste_interface__cell__V) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(4.7130000000000001) - CHASTE_CONST(0.10000000000000001) * var_chaste_interface__cell__V)); // per_millisecond + const double var_INa_m_gate__beta_m = CHASTE_CONST(0.080000000000000002) * CHASTE_MATH::Exp(-CHASTE_CONST(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 var_Itof_X_gate__X_tof_infinity = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.20000000000000001) - CHASTE_CONST(0.066666666666666666) * var_chaste_interface__cell__V)); // dimensionless + const double var_Itof_X_gate__tau_X_tof = CHASTE_CONST(1.5) + CHASTE_CONST(3.5) * CHASTE_MATH::Exp(-CHASTE_CONST(0.0011111111111111111) * CHASTE_MATH::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 var_Itof_Y_gate__Y_tof_infinity = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(3.3500000000000001) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__cell__V)); // dimensionless + const double var_Itof_Y_gate__tau_Y_tof = 20 + 20 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(3.3500000000000001) + CHASTE_CONST(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 var_Itos_R_gate__R_tos_infinity = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(3.3500000000000001) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__cell__V)); // dimensionless + const double var_Itos_R_gate__tau_R_tos = 220 + 2800 / (1 + CHASTE_MATH::Exp(6 + CHASTE_CONST(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 var_Itos_X_gate__X_tos_infinity = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.20000000000000001) - CHASTE_CONST(0.066666666666666666) * var_chaste_interface__cell__V)); // dimensionless + const double var_Itos_X_gate__tau_X_tos = CHASTE_CONST(0.5) + 9 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(0.20000000000000001) + CHASTE_CONST(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 var_Itos_Y_gate__Y_tos_infinity = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(3.3500000000000001) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__cell__V)); // dimensionless + const double var_Itos_Y_gate__tau_Y_tos = 30 + 3000 / (1 + CHASTE_MATH::Exp(6 + CHASTE_CONST(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__Bmax_Calmodulin = CHASTE_CONST(0.024); // millimolar + const double var_cytosolic_Ca_buffer__Bmax_Myosin_Ca = CHASTE_CONST(0.14000000000000001); // millimolar + const double var_cytosolic_Ca_buffer__Bmax_Myosin_Mg = CHASTE_CONST(0.14000000000000001); // millimolar + const double var_cytosolic_Ca_buffer__Bmax_SRB = CHASTE_CONST(0.017100000000000001); // millimolar + const double var_cytosolic_Ca_buffer__Bmax_TroponinC = CHASTE_CONST(0.070000000000000007); // millimolar + const double var_cytosolic_Ca_buffer__Bmax_TroponinC_Ca_Mg_Ca = CHASTE_CONST(0.14000000000000001); // millimolar + const double var_cytosolic_Ca_buffer__Bmax_TroponinC_Ca_Mg_Mg = CHASTE_CONST(0.14000000000000001); // millimolar + const double var_cytosolic_Ca_buffer__koff_Calmodulin = CHASTE_CONST(0.23799999999999999); // per_millisecond + const double var_cytosolic_Ca_buffer__koff_Myosin_Ca = CHASTE_CONST(0.00046000000000000001); // per_millisecond + const double var_cytosolic_Ca_buffer__koff_Myosin_Mg = CHASTE_CONST(5.7000000000000003e-5); // per_millisecond + const double var_cytosolic_Ca_buffer__koff_SRB = CHASTE_CONST(0.059999999999999998); // per_millisecond + const double var_cytosolic_Ca_buffer__koff_TroponinC = CHASTE_CONST(0.019599999999999999); // per_millisecond + const double var_cytosolic_Ca_buffer__koff_TroponinC_Ca_Mg_Ca = CHASTE_CONST(3.1999999999999999e-5); // per_millisecond + const double var_cytosolic_Ca_buffer__koff_TroponinC_Ca_Mg_Mg = CHASTE_CONST(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__kon_Myosin_Ca = CHASTE_CONST(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_Myosin_Mg = CHASTE_CONST(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__kon_TroponinC = CHASTE_CONST(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__kon_TroponinC_Ca_Mg_Ca = CHASTE_CONST(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_cytosolic_Ca_buffer__kon_TroponinC_Ca_Mg_Mg = CHASTE_CONST(0.0030000000000000001); // per_millimolar_per_millisecond + const double var_indo_fluo_Ca_buffer_not_connected__Bmax_Fluo3_Cytosol = CHASTE_CONST(0.025000000000000001); // millimolar + const double var_indo_fluo_Ca_buffer_not_connected__Bmax_Fluo3_SL = CHASTE_CONST(0.00076999999999999996); // millimolar + const double var_indo_fluo_Ca_buffer_not_connected__Bmax_Fluo3_jct = CHASTE_CONST(2.0000000000000002e-5); // millimolar + const double var_indo_fluo_Ca_buffer_not_connected__Bmax_Indo1_Cytosol = CHASTE_CONST(0.025000000000000001); // millimolar + const double var_indo_fluo_Ca_buffer_not_connected__Bmax_Indo1_SL = CHASTE_CONST(0.00076999999999999996); // millimolar + const double var_indo_fluo_Ca_buffer_not_connected__Bmax_Indo1_jct = CHASTE_CONST(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__koff_Fluo3 = CHASTE_CONST(0.11); // per_millisecond + const double var_indo_fluo_Ca_buffer_not_connected__koff_Indo1 = CHASTE_CONST(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_ion_diffusion__J_Ca_SL_cytosol = CHASTE_CONST(3.7243000000000002e-12) * var_chaste_interface__Ca_buffer__Ca_SL - CHASTE_CONST(3.7243000000000002e-12) * var_chaste_interface__Ca_buffer__Cai; // millimole_per_millisecond + const double var_ion_diffusion__J_Ca_jct_SL = CHASTE_CONST(8.2413000000000004e-13) * var_chaste_interface__Ca_buffer__Ca_jct - CHASTE_CONST(8.2413000000000004e-13) * var_chaste_interface__Ca_buffer__Ca_SL; // millimole_per_millisecond + const double var_ion_diffusion__J_Na_SL_cytosol = CHASTE_CONST(1.6385999999999999e-12) * var_chaste_interface__Na_buffer__Na_SL - CHASTE_CONST(1.6385999999999999e-12) * var_chaste_interface__Na_buffer__Nai; // millimole_per_millisecond + const double var_ion_diffusion__J_Na_jct_SL = CHASTE_CONST(1.8312999999999999e-14) * var_chaste_interface__Na_buffer__Na_jct - CHASTE_CONST(1.8312999999999999e-14) * var_chaste_interface__Na_buffer__Na_SL; // millimole_per_millisecond + const double var_model_parameters__Cm_per_area = CHASTE_CONST(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_INaK__sigma = -CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(0.01485884101040119) * NV_Ith_S(mParameters, 9)); // dimensionless + const double var_ICaL__Q_CaL = CHASTE_MATH::Pow(var_ICaL__Q10_CaL, (-31 + CHASTE_CONST(0.10000000000000001) * NV_Ith_S(mParameters, 24))); // dimensionless + const double var_ICaL__temp = CHASTE_CONST(0.45000000000000001) * CHASTE_MATH::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 * CHASTE_MATH::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 + CHASTE_MATH::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 * CHASTE_MATH::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 + CHASTE_MATH::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 * CHASTE_MATH::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 + CHASTE_MATH::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 * CHASTE_MATH::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 + CHASTE_MATH::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 = CHASTE_MATH::Pow(var_ICap__Q10_SLCaP, (-31 + CHASTE_CONST(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 + CHASTE_MATH::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 + CHASTE_MATH::Pow((var_ICap__Km / var_chaste_interface__Ca_buffer__Ca_jct), var_ICap__H)); // microA_per_microF + const double var_INaCa__Q_NCX = CHASTE_MATH::Pow(var_INaCa__Q10_NCX, (-31 + CHASTE_CONST(0.10000000000000001) * NV_Ith_S(mParameters, 24))); // dimensionless + const double var_INaCa__temp_SL = (CHASTE_MATH::Pow(var_chaste_interface__Na_buffer__Na_SL, var_INaCa__HNa) * NV_Ith_S(mParameters, 6) * CHASTE_MATH::Exp(var_INaCa__eta * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24))) - CHASTE_MATH::Pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * var_chaste_interface__Ca_buffer__Ca_SL * CHASTE_MATH::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 * CHASTE_MATH::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 / (CHASTE_MATH::Pow(var_chaste_interface__Na_buffer__Na_SL, var_INaCa__HNa) * var_INaCa__K_mCao + CHASTE_MATH::Pow(var_chaste_interface__Na_buffer__Na_SL, var_INaCa__HNa) * NV_Ith_S(mParameters, 6) + CHASTE_MATH::Pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * var_chaste_interface__Ca_buffer__Ca_SL + CHASTE_MATH::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 + CHASTE_MATH::Pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * (1 + CHASTE_MATH::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 = (CHASTE_MATH::Pow(var_chaste_interface__Na_buffer__Na_jct, var_INaCa__HNa) * NV_Ith_S(mParameters, 6) * CHASTE_MATH::Exp(var_INaCa__eta * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24))) - CHASTE_MATH::Pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * var_chaste_interface__Ca_buffer__Ca_jct * CHASTE_MATH::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 * CHASTE_MATH::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 / (CHASTE_MATH::Pow(var_chaste_interface__Na_buffer__Na_jct, var_INaCa__HNa) * var_INaCa__K_mCao + CHASTE_MATH::Pow(var_chaste_interface__Na_buffer__Na_jct, var_INaCa__HNa) * NV_Ith_S(mParameters, 6) + CHASTE_MATH::Pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * var_chaste_interface__Ca_buffer__Ca_jct + CHASTE_MATH::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 + CHASTE_MATH::Pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * (1 + CHASTE_MATH::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 = CHASTE_MATH::Pow(var_INaK__Q10_Km_Nai, (-31 + CHASTE_CONST(0.10000000000000001) * NV_Ith_S(mParameters, 24))); // dimensionless + const double var_INaK__Q_NaK = CHASTE_MATH::Pow(var_INaK__Q10_NaK, (-31 + CHASTE_CONST(0.10000000000000001) * NV_Ith_S(mParameters, 24))); // dimensionless + const double var_INaK__f_NaK = 1 / (1 + CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(0.10000000000000001) * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24))) + CHASTE_CONST(0.036499999999999998) * var_INaK__sigma * CHASTE_MATH::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 + CHASTE_MATH::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 + CHASTE_MATH::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 = CHASTE_MATH::Pow(var_Jpump_SR__Q10_SRCaP, (-31 + CHASTE_CONST(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_model_parameters__cell_radius = CHASTE_CONST(10.25); // micrometre + const double var_model_parameters__Cm = CHASTE_CONST(2.0e-8) * CHASTE_CONST(CHASTE_MATH::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 = CHASTE_CONST(3.1415926540000002e-15) * CHASTE_MATH::Pow(var_model_parameters__cell_radius, 2) * var_model_parameters__cell_length; // liter + const double var_model_parameters__Vol_SL = CHASTE_CONST(0.02) * var_model_parameters__Vol_Cell; // liter + const double var_model_parameters__Vol_SR = CHASTE_CONST(0.035000000000000003) * var_model_parameters__Vol_Cell; // liter + const double var_model_parameters__Vol_cytosol = CHASTE_CONST(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 @@ -644,12 +646,12 @@ 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 var_Jpump_SR__j_pump_SR = (CHASTE_MATH::Pow((var_chaste_interface__Ca_buffer__Cai / var_Jpump_SR__Kmf), var_Jpump_SR__H) - CHASTE_MATH::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 + CHASTE_MATH::Pow((var_chaste_interface__Ca_buffer__Cai / var_Jpump_SR__Kmf), var_Jpump_SR__H) + CHASTE_MATH::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_model_parameters__Vol_jct = CHASTE_CONST(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 + CHASTE_CONST(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 + CHASTE_CONST(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 @@ -667,19 +669,19 @@ 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_reversal_potentials__E_Ca_SL = CHASTE_CONST(0.5) * NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24) * CHASTE_MATH::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 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 - CHASTE_CONST(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 = CHASTE_CONST(0.5) * NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24) * CHASTE_MATH::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 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 - CHASTE_CONST(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) * CHASTE_MATH::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_reversal_potentials__E_Na_jct = NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24) * CHASTE_MATH::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 @@ -690,46 +692,46 @@ } 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__PK = CHASTE_CONST(2.7000000000000001e-7); // litre_per_farad_millisecond + const double var_ICaL__gamma_Ki = CHASTE_CONST(0.75); // dimensionless + const double var_ICaL__gamma_Ko = CHASTE_CONST(0.75); // dimensionless + const double var_ICl_Ca__Fx_Cl_SL = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_ICl_Ca__Fx_Cl_jct = CHASTE_CONST(0.11); // dimensionless + const double var_ICl_Ca__G_Cl = CHASTE_CONST(0.109625); // milliS_per_microF + const double var_ICl_Ca__Kd_ClCa = CHASTE_CONST(0.10000000000000001); // millimolar + const double var_IKs__Fx_Ks_SL = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_IKs__Fx_Ks_jct = CHASTE_CONST(0.11); // dimensionless + const double var_IKs__pCa_SL = 3 - CHASTE_MATH::Log10(var_chaste_interface__Ca_buffer__Ca_SL); // dimensionless + const double var_IKs__G_Ks_SL = (CHASTE_CONST(0.057000000000000002) + CHASTE_CONST(0.19) / (1 + CHASTE_MATH::Exp(-12 + CHASTE_CONST(1.6666666666666667) * var_IKs__pCa_SL))) * NV_Ith_S(mParameters, 21); // milliS_per_microF + const double var_IKs__pCa_jct = 3 - CHASTE_MATH::Log10(var_chaste_interface__Ca_buffer__Ca_jct); // dimensionless + const double var_IKs__G_Ks_jct = (CHASTE_CONST(0.057000000000000002) + CHASTE_CONST(0.19) / (1 + CHASTE_MATH::Exp(-12 + CHASTE_CONST(1.6666666666666667) * var_IKs__pCa_jct))) * NV_Ith_S(mParameters, 21); // milliS_per_microF + const double var_IKs__pKNa = CHASTE_CONST(0.018329999999999999); // dimensionless + const double var_IKr_Rr_gate__Rr = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.4732142857142858) + CHASTE_CONST(0.044642857142857144) * var_chaste_interface__cell__V)); // dimensionless + const double var_cell__i_Stim_converted = CHASTE_STIM(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_cell__i_Stim = var_cell__i_Stim_converted / CHASTE_CAP(); // microA_per_microF + const double var_IK1__G_K1 = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::Sqrt(NV_Ith_S(mParameters, 8)) * NV_Ith_S(mParameters, 19); // milliS_per_microF + const double var_IKr__G_IKr = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::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) * CHASTE_MATH::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 + CHASTE_MATH::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__E_Ks = NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24) * CHASTE_MATH::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 = CHASTE_MATH::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 = CHASTE_MATH::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_reversal_potentials__E_Cl = -NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24) * CHASTE_MATH::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_reversal_potentials__E_K = NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24) * CHASTE_MATH::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 = CHASTE_CONST(1.02) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__cell__V - CHASTE_CONST(0.23849999999999999) * var_reversal_potentials__E_K)); // per_millisecond + const double var_IK1_K1_gate__beta_K1 = (CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__cell__V - CHASTE_CONST(0.061749999999999999) * var_reversal_potentials__E_K) + CHASTE_CONST(0.49124000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__cell__V - CHASTE_CONST(0.080320000000000003) * var_reversal_potentials__E_K)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(0.51429999999999998) * var_reversal_potentials__E_K - CHASTE_CONST(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_Itos__i_tos = (-var_reversal_potentials__E_K + var_chaste_interface__cell__V) * (CHASTE_CONST(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 @@ -737,7 +739,7 @@ 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 + var_chaste_interface__membrane_data_clamp_current = (-CHASTE_EXP_VOLT(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 } @@ -793,7 +795,7 @@ { // Inputs: // Time units: millisecond - double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -839,135 +841,135 @@ // 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__Fx_ICaL_SL = CHASTE_CONST(0.10000000000000001); // dimensionless + const double var_ICaL__Fx_ICaL_jct = CHASTE_CONST(0.90000000000000002); // dimensionless + const double var_ICaL__PK = CHASTE_CONST(2.7000000000000001e-7); // litre_per_farad_millisecond + const double var_ICaL__PNa = CHASTE_CONST(1.4999999999999999e-8); // litre_per_farad_millisecond + const double var_ICaL__Q10_CaL = CHASTE_CONST(1.8); // dimensionless + const double var_ICaL__gamma_Cai = CHASTE_CONST(0.34100000000000003); // dimensionless + const double var_ICaL__gamma_Cao = CHASTE_CONST(0.34100000000000003); // dimensionless + const double var_ICaL__gamma_Ki = CHASTE_CONST(0.75); // dimensionless + const double var_ICaL__gamma_Ko = CHASTE_CONST(0.75); // dimensionless + const double var_ICaL__gamma_Nai = CHASTE_CONST(0.75); // dimensionless + const double var_ICaL__gamma_Nao = CHASTE_CONST(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_ICab__Fx_CaBk_SL = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_ICab__Fx_CaBk_jct = CHASTE_CONST(0.11); // dimensionless + const double var_ICab__G_CaBk = CHASTE_CONST(0.00025129999999999998); // milliS_per_microF + const double var_ICap__Fx_SLCaP_SL = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_ICap__Fx_SLCaP_jct = CHASTE_CONST(0.11); // dimensionless + const double var_ICap__H = CHASTE_CONST(1.6000000000000001); // dimensionless + const double var_ICap__Km = CHASTE_CONST(0.00050000000000000001); // millimolar + const double var_ICap__Q10_SLCaP = CHASTE_CONST(2.3500000000000001); // dimensionless + const double var_ICap__V_maxAF = CHASTE_CONST(0.067299999999999999); // microA_per_microF + const double var_IKs__Fx_Ks_SL = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_IKs__Fx_Ks_jct = CHASTE_CONST(0.11); // dimensionless + const double var_IKs__pCa_SL = 3 - CHASTE_MATH::Log10(var_chaste_interface__Ca_buffer__Ca_SL); // dimensionless + const double var_IKs__G_Ks_SL = (CHASTE_CONST(0.057000000000000002) + CHASTE_CONST(0.19) / (1 + CHASTE_MATH::Exp(-12 + CHASTE_CONST(1.6666666666666667) * var_IKs__pCa_SL))) * NV_Ith_S(mParameters, 21); // milliS_per_microF + const double var_IKs__pCa_jct = 3 - CHASTE_MATH::Log10(var_chaste_interface__Ca_buffer__Ca_jct); // dimensionless + const double var_IKs__G_Ks_jct = (CHASTE_CONST(0.057000000000000002) + CHASTE_CONST(0.19) / (1 + CHASTE_MATH::Exp(-12 + CHASTE_CONST(1.6666666666666667) * var_IKs__pCa_jct))) * NV_Ith_S(mParameters, 21); // milliS_per_microF + const double var_IKs__pKNa = CHASTE_CONST(0.018329999999999999); // dimensionless + const double var_INa__Fx_Na_SL = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_INa__Fx_Na_jct = CHASTE_CONST(0.11); // dimensionless + const double var_INaCa__Fx_NCX_SL = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_INaCa__Fx_NCX_jct = CHASTE_CONST(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_INaCa__K_mCai = CHASTE_CONST(0.0035899999999999999); // millimolar + const double var_INaCa__K_mCao = CHASTE_CONST(1.3); // millimolar + const double var_INaCa__K_mNai = CHASTE_CONST(12.289999999999999); // millimolar + const double var_INaCa__K_mNao = CHASTE_CONST(87.5); // millimolar + const double var_INaCa__Kd_act = CHASTE_CONST(0.00025599999999999999); // millimolar + const double var_INaCa__Ka_SL = 1 / (1 + CHASTE_MATH::Pow(var_INaCa__Kd_act, 3) / CHASTE_MATH::Pow(var_chaste_interface__Ca_buffer__Ca_SL, 3)); // dimensionless + const double var_INaCa__Ka_jct = 1 / (1 + CHASTE_MATH::Pow(var_INaCa__Kd_act, 3) / CHASTE_MATH::Pow(var_chaste_interface__Ca_buffer__Ca_jct, 3)); // dimensionless + const double var_INaCa__Q10_NCX = CHASTE_CONST(1.5700000000000001); // dimensionless + const double var_INaCa__eta = CHASTE_CONST(0.34999999999999998); // dimensionless + const double var_INaCa__ksat = CHASTE_CONST(0.27000000000000002); // dimensionless + const double var_INa__openProb = CHASTE_MATH::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 = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_INab__Fx_NaBk_jct = CHASTE_CONST(0.11); // dimensionless + const double var_INab__G_NaBk = CHASTE_CONST(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_ICaL_f_gate__tau_f = 1 / (CHASTE_CONST(0.02) + CHASTE_CONST(0.019699999999999999) * CHASTE_MATH::Exp(-CHASTE_CONST(0.23877882250000002) * CHASTE_MATH::Pow((1 + CHASTE_CONST(0.068965517241379309) * var_chaste_interface__cell__V), 2))); // millisecond + const double var_IKr_Rr_gate__Rr = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.4732142857142858) + CHASTE_CONST(0.044642857142857144) * var_chaste_interface__cell__V)); // dimensionless + const double var_INa_h_gate__alpha_h = ((var_chaste_interface__cell__V < -40) ? (CHASTE_CONST(0.13500000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(11.764705882352942) + CHASTE_CONST(0.14705882352941177) * NV_Ith_S(mParameters, 17) - CHASTE_CONST(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 * CHASTE_MATH::Exp(CHASTE_CONST(0.34999999999999998) * var_chaste_interface__cell__V - CHASTE_CONST(0.34999999999999998) * NV_Ith_S(mParameters, 17)) + CHASTE_CONST(3.5600000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.079000000000000001) * var_chaste_interface__cell__V - CHASTE_CONST(0.079000000000000001) * NV_Ith_S(mParameters, 17))) : (CHASTE_CONST(7.6923076923076916) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.96036036036036043) + CHASTE_CONST(0.0900900900900901) * NV_Ith_S(mParameters, 17) - CHASTE_CONST(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__alpha_j = ((var_chaste_interface__cell__V < -40) ? ((CHASTE_CONST(37.780000000000001) + var_chaste_interface__cell__V) * (-127140 * CHASTE_MATH::Exp(CHASTE_CONST(0.24440000000000001) * var_chaste_interface__cell__V - CHASTE_CONST(0.24440000000000001) * NV_Ith_S(mParameters, 17)) - CHASTE_CONST(3.4740000000000003e-5) * CHASTE_MATH::Exp(CHASTE_CONST(0.043909999999999998) * NV_Ith_S(mParameters, 17) - CHASTE_CONST(0.043909999999999998) * var_chaste_interface__cell__V)) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(24.640530000000002) + CHASTE_CONST(0.311) * var_chaste_interface__cell__V - CHASTE_CONST(0.311) * NV_Ith_S(mParameters, 17)))) : (0)); // per_millisecond + const double var_INa_j_gate__beta_j = ((var_chaste_interface__cell__V < -40) ? (CHASTE_CONST(0.1212) * CHASTE_MATH::Exp(CHASTE_CONST(0.01052) * NV_Ith_S(mParameters, 17) - CHASTE_CONST(0.01052) * var_chaste_interface__cell__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(5.5312920000000005) + CHASTE_CONST(0.13780000000000001) * NV_Ith_S(mParameters, 17) - CHASTE_CONST(0.13780000000000001) * var_chaste_interface__cell__V))) : (CHASTE_CONST(0.29999999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(2.5349999999999999e-7) * NV_Ith_S(mParameters, 17) - CHASTE_CONST(2.5349999999999999e-7) * var_chaste_interface__cell__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.2000000000000002) + CHASTE_CONST(0.10000000000000001) * NV_Ith_S(mParameters, 17) - CHASTE_CONST(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_cell__i_Stim_converted = CHASTE_STIM(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 + var_chaste_interface__membrane_data_clamp_current = (-CHASTE_EXP_VOLT(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_model_parameters__Cm_per_area = CHASTE_CONST(1.9999999999999999e-6); // farad_per_cm2 + const double var_IK1__G_K1 = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::Sqrt(NV_Ith_S(mParameters, 8)) * NV_Ith_S(mParameters, 19); // milliS_per_microF + const double var_IKr__G_IKr = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::Sqrt(NV_Ith_S(mParameters, 8)) * NV_Ith_S(mParameters, 20); // milliS_per_microF + const double var_ICaL__Q_CaL = CHASTE_MATH::Pow(var_ICaL__Q10_CaL, (-31 + CHASTE_CONST(0.10000000000000001) * NV_Ith_S(mParameters, 24))); // dimensionless + const double var_ICaL__temp = CHASTE_CONST(0.45000000000000001) * CHASTE_MATH::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 * CHASTE_MATH::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 + CHASTE_MATH::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 * CHASTE_MATH::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 + CHASTE_MATH::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) * CHASTE_MATH::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 + CHASTE_MATH::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 * CHASTE_MATH::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 + CHASTE_MATH::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 * CHASTE_MATH::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 + CHASTE_MATH::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_ICaL__i_CaL_converted = CHASTE_CAP() * var_ICaL__i_CaL; // uA_per_cm2 + const double var_ICap__Q_SLCaP = CHASTE_MATH::Pow(var_ICap__Q10_SLCaP, (-31 + CHASTE_CONST(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 + CHASTE_MATH::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 + CHASTE_MATH::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_ICap__i_Cap_converted = CHASTE_CAP() * var_ICap__i_Cap; // uA_per_cm2 + const double var_IKs__E_Ks = NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24) * CHASTE_MATH::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 = CHASTE_MATH::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 = CHASTE_MATH::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_IKs__i_Ks_converted = CHASTE_CAP() * var_IKs__i_Ks; // uA_per_cm2 + const double var_INaCa__Q_NCX = CHASTE_MATH::Pow(var_INaCa__Q10_NCX, (-31 + CHASTE_CONST(0.10000000000000001) * NV_Ith_S(mParameters, 24))); // dimensionless + const double var_INaCa__temp_SL = (CHASTE_MATH::Pow(var_chaste_interface__Na_buffer__Na_SL, var_INaCa__HNa) * NV_Ith_S(mParameters, 6) * CHASTE_MATH::Exp(var_INaCa__eta * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24))) - CHASTE_MATH::Pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * var_chaste_interface__Ca_buffer__Ca_SL * CHASTE_MATH::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 * CHASTE_MATH::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 / (CHASTE_MATH::Pow(var_chaste_interface__Na_buffer__Na_SL, var_INaCa__HNa) * var_INaCa__K_mCao + CHASTE_MATH::Pow(var_chaste_interface__Na_buffer__Na_SL, var_INaCa__HNa) * NV_Ith_S(mParameters, 6) + CHASTE_MATH::Pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * var_chaste_interface__Ca_buffer__Ca_SL + CHASTE_MATH::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 + CHASTE_MATH::Pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * (1 + CHASTE_MATH::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 = (CHASTE_MATH::Pow(var_chaste_interface__Na_buffer__Na_jct, var_INaCa__HNa) * NV_Ith_S(mParameters, 6) * CHASTE_MATH::Exp(var_INaCa__eta * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24))) - CHASTE_MATH::Pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * var_chaste_interface__Ca_buffer__Ca_jct * CHASTE_MATH::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 * CHASTE_MATH::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 / (CHASTE_MATH::Pow(var_chaste_interface__Na_buffer__Na_jct, var_INaCa__HNa) * var_INaCa__K_mCao + CHASTE_MATH::Pow(var_chaste_interface__Na_buffer__Na_jct, var_INaCa__HNa) * NV_Ith_S(mParameters, 6) + CHASTE_MATH::Pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * var_chaste_interface__Ca_buffer__Ca_jct + CHASTE_MATH::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 + CHASTE_MATH::Pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * (1 + CHASTE_MATH::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_INaCa__i_NaCa_converted = CHASTE_CAP() * 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__cell_radius = CHASTE_CONST(10.25); // micrometre + const double var_model_parameters__Cm = CHASTE_CONST(2.0e-8) * CHASTE_CONST(CHASTE_MATH::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_reversal_potentials__E_Ca_SL = CHASTE_CONST(0.5) * NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24) * CHASTE_MATH::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_reversal_potentials__E_Ca_jct = CHASTE_CONST(0.5) * NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24) * CHASTE_MATH::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_ICab__i_Cab_converted = CHASTE_CAP() * var_ICab__i_Cab; // uA_per_cm2 + const double var_reversal_potentials__E_Cl = -NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24) * CHASTE_MATH::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_IClb__i_Clb_converted = CHASTE_CAP() * var_IClb__i_Clb; // uA_per_cm2 + const double var_reversal_potentials__E_K = NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24) * CHASTE_MATH::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 = CHASTE_CONST(1.02) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__cell__V - CHASTE_CONST(0.23849999999999999) * var_reversal_potentials__E_K)); // per_millisecond + const double var_IK1_K1_gate__beta_K1 = (CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__cell__V - CHASTE_CONST(0.061749999999999999) * var_reversal_potentials__E_K) + CHASTE_CONST(0.49124000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__cell__V - CHASTE_CONST(0.080320000000000003) * var_reversal_potentials__E_K)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(0.51429999999999998) * var_reversal_potentials__E_K - CHASTE_CONST(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_IK1__i_K1_converted = CHASTE_CAP() * 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_IKr__i_Kr_converted = CHASTE_CAP() * 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_Itof__i_tof_converted = CHASTE_CAP() * var_Itof__i_tof; // uA_per_cm2 + const double var_Itos__i_tos = (-var_reversal_potentials__E_K + var_chaste_interface__cell__V) * (CHASTE_CONST(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 = CHASTE_CAP() * 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) * CHASTE_MATH::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_reversal_potentials__E_Na_jct = NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 24) * CHASTE_MATH::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_INa__i_Na_converted = CHASTE_CAP() * 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_INab__i_Nab_converted = CHASTE_CAP() * var_INab__i_Nab; // uA_per_cm2 #if CHASTE_SUNDIALS_VERSION >= 60000 N_Vector dqs = N_VNew_Serial(24, CvodeContextManager::Instance()->GetSundialsContext()); @@ -1445,4 +1447,5 @@ extern "C" } } + #endif // CHASTE_CVODE diff --git a/chaste_codegen/data/tests/chaste_reference_models/CVODE_DATA_CLAMP/dynamic_Shannon2004.hpp b/chaste_codegen/data/tests/chaste_reference_models/CVODE_DATA_CLAMP/dynamic_Shannon2004.hpp index 4071989a7..8da4f0ef5 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/CVODE_DATA_CLAMP/dynamic_Shannon2004.hpp +++ b/chaste_codegen/data/tests/chaste_reference_models/CVODE_DATA_CLAMP/dynamic_Shannon2004.hpp @@ -18,7 +18,11 @@ #include #include "AbstractDynamicallyLoadableEntity.hpp" #include "AbstractStimulusFunction.hpp" +#if USING_DEVICE_COMPILER +#include "StimulusEvaluatorCuda.hpp" +#endif #include "AbstractCvodeCellWithDataClamp.hpp" +#include "HostDeviceMacros.hpp" class Dynamicshannon_wang_puglisi_weber_bers_2004FromCellMLCvodeDataClamp : public AbstractCvodeCellWithDataClamp, public AbstractDynamicallyLoadableEntity { @@ -39,6 +43,10 @@ class Dynamicshannon_wang_puglisi_weber_bers_2004FromCellMLCvodeDataClamp : publ 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: + static constexpr unsigned TOTAL_SIZE = 45u; + static constexpr unsigned NNZ = 0u; + static inline const int sparse_rowptr[] = { }; + static inline const int sparse_colind[] = { }; boost::shared_ptr UseCellMLDefaultStimulus(); double GetIntracellularCalciumConcentration(); @@ -47,7 +55,19 @@ const bool is_probability[45] = {false, false, true, true, true, false, false, f 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); +#if USING_DEVICE_COMPILER + template + DEVICE + static void EvaluateYDerivativesDevice(ValueType var_chaste_interface__environment__time, const ValueType* rY, ValueType* rDY, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType* mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim); + template + DEVICE + static void EvaluateAnalyticJacobianDevice(ValueType var_chaste_interface__environment__time, const ValueType *rY, ValueType *rDY, ValueType *rJacobian, ValueType *rTmp1, ValueType *rTmp2, ValueType *rTmp3, const unsigned nvars, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType *mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim); + template + DEVICE + static void EvaluateSparseAnalyticJacobianDevice(ValueType var_chaste_interface__environment__time, const ValueType *rY, ValueType *rDY, ValueType *rJacobian, ValueType *rTmp1, ValueType *rTmp2, ValueType *rTmp3, const unsigned nvars, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType *mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim); +#endif }; // Needs to be included last @@ -84,4 +104,10 @@ namespace boost } #endif // DYNAMICSHANNON_WANG_PUGLISI_WEBER_BERS_2004FROMCELLMLCVODEDATACLAMP_HPP_ + + + +#if USING_DEVICE_COMPILER + #include "dynamic_Shannon2004Kernels.hpp" +#endif #endif // CHASTE_CVODE \ No newline at end of file diff --git a/chaste_codegen/data/tests/chaste_reference_models/CVODE_DATA_CLAMP/grandi_pasqualini_bers_2010_ssCvodeDataClamp.cpp b/chaste_codegen/data/tests/chaste_reference_models/CVODE_DATA_CLAMP/grandi_pasqualini_bers_2010_ssCvodeDataClamp.cpp index 2168088f9..d1eccb83c 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/CVODE_DATA_CLAMP/grandi_pasqualini_bers_2010_ssCvodeDataClamp.cpp +++ b/chaste_codegen/data/tests/chaste_reference_models/CVODE_DATA_CLAMP/grandi_pasqualini_bers_2010_ssCvodeDataClamp.cpp @@ -22,6 +22,8 @@ #include "HeartConfig.hpp" #include "IsNan.hpp" #include "MathsCustomFunctions.hpp" +#include "ChasteMathDeviceNamespaces.hpp" +#include "ChasteCpuMacros.hpp" #if CHASTE_SUNDIALS_VERSION >= 60000 #include "CvodeContextManager.hpp" @@ -40,7 +42,7 @@ bool Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClamp::registered = Mo 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_amplitude_converted = -CHASTE_CONST(9.5) * CHASTE_CAP(); // 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 @@ -74,30 +76,30 @@ bool Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClamp::registered = Mo // 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, 0) = CHASTE_CONST(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, 2) = CHASTE_CONST(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, 5) = CHASTE_CONST(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, 7) = CHASTE_CONST(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, 11) = CHASTE_CONST(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, 17) = CHASTE_CONST(0.34999999999999998); // (var_I_Ki__g_ki_factor) [mS_per_uF] + NV_Ith_S(this->mParameters, 18) = CHASTE_CONST(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, 21) = CHASTE_CONST(4.5); // (var_parameters__IbarNCX) [uA_per_uF] + NV_Ith_S(this->mParameters, 22) = CHASTE_CONST(1.8); // (var_parameters__IbarNaK) [uA_per_uF] + NV_Ith_S(this->mParameters, 23) = CHASTE_CONST(1.3809999999999999e-10); // (var_parameters__Cmem) [farad] NV_Ith_S(this->mParameters, 24) = 310; // (var_parameters__Temp) [kelvin] } @@ -154,7 +156,7 @@ bool Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClamp::registered = Mo made_new_cvode_vector = true; rY = MakeNVector(*pStateVariables); } - double var_chaste_interface__membrane_potential__V_m = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + double var_chaste_interface__membrane_potential__V_m = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -197,112 +199,112 @@ bool Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClamp::registered = Mo 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_I_Ks__gks_junc = CHASTE_CONST(0.0035000000000000001); // mS_per_uF + const double var_I_Ks__gks_sl = CHASTE_CONST(0.0035000000000000001); // mS_per_uF + const double var_I_Kp__kp_kp = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(7.4880000000000004) - CHASTE_CONST(0.16722408026755853) * var_chaste_interface__membrane_potential__V_m)); // dimensionless + const double var_I_Kr__rkr = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(3.0833333333333335) + CHASTE_CONST(0.041666666666666664) * var_chaste_interface__membrane_potential__V_m)); // dimensionless + const double var_parameters__Fjunc = CHASTE_CONST(0.11); // dimensionless + const double var_parameters__Fjunc_CaL = CHASTE_CONST(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__GCaB = CHASTE_CONST(0.00055130000000000001); // mS_per_uF + const double var_parameters__GClB = CHASTE_CONST(0.0089999999999999993); // mS_per_uF + const double var_parameters__GClCa = CHASTE_CONST(0.0548125); // mS_per_uF + const double var_parameters__GNaB = CHASTE_CONST(0.00059699999999999998); // mS_per_uF + const double var_parameters__IbarSLCaP = CHASTE_CONST(0.067299999999999999); // uA_per_uF + const double var_parameters__KdClCa = CHASTE_CONST(0.10000000000000001); // mM + const double var_parameters__Kdact = CHASTE_CONST(0.00014999999999999999); // mM + const double var_I_NCX__Ka_junc = 1 / (1 + CHASTE_MATH::Pow(var_parameters__Kdact, 2) / CHASTE_MATH::Pow(var_chaste_interface__Ca_Concentrations__Ca_j, 2)); // dimensionless + const double var_I_NCX__Ka_sl = 1 / (1 + CHASTE_MATH::Pow(var_parameters__Kdact, 2) / CHASTE_MATH::Pow(var_chaste_interface__Ca_Concentrations__Ca_sl, 2)); // dimensionless + const double var_parameters__KmCai = CHASTE_CONST(0.0035899999999999999); // mM + const double var_parameters__KmCao = CHASTE_CONST(1.3); // mM + const double var_parameters__KmKo = CHASTE_CONST(1.5); // mM + const double var_parameters__KmNai = CHASTE_CONST(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__KmNao = CHASTE_CONST(87.5); // mM + const double var_parameters__KmPCa = CHASTE_CONST(0.00050000000000000001); // mM + const double var_I_Ki__g_K1 = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::Sqrt(NV_Ith_S(mParameters, 7)) * NV_Ith_S(mParameters, 17); // mS_per_uF + const double var_I_Kr__gkr = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::Sqrt(NV_Ith_S(mParameters, 7)) * NV_Ith_S(mParameters, 18); // mS_per_uF + const double var_I_NCX__s3_junc = CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_j, 3) * NV_Ith_S(mParameters, 5) + CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_j, 3) * var_parameters__KmCao + CHASTE_MATH::Pow(NV_Ith_S(mParameters, 8), 3) * var_chaste_interface__Ca_Concentrations__Ca_j + CHASTE_MATH::Pow(var_parameters__KmNao, 3) * (1 + var_chaste_interface__Ca_Concentrations__Ca_j / var_parameters__KmCai) * var_chaste_interface__Ca_Concentrations__Ca_j + CHASTE_MATH::Pow(NV_Ith_S(mParameters, 8), 3) * (1 + CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_j, 3) / CHASTE_MATH::Pow(var_parameters__KmNai, 3)) * var_parameters__KmCai; // mM4 + const double var_I_NCX__s3_sl = CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) * NV_Ith_S(mParameters, 5) + CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) * var_parameters__KmCao + CHASTE_MATH::Pow(NV_Ith_S(mParameters, 8), 3) * var_chaste_interface__Ca_Concentrations__Ca_sl + CHASTE_MATH::Pow(var_parameters__KmNao, 3) * (1 + var_chaste_interface__Ca_Concentrations__Ca_sl / var_parameters__KmCai) * var_chaste_interface__Ca_Concentrations__Ca_sl + CHASTE_MATH::Pow(NV_Ith_S(mParameters, 8), 3) * (1 + CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) / CHASTE_MATH::Pow(var_parameters__KmNai, 3)) * var_parameters__KmCai; // mM4 + const double var_I_NaK__sigma = -CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(0.01485884101040119) * NV_Ith_S(mParameters, 8)); // dimensionless + const double var_parameters__Q10CaL = CHASTE_CONST(1.8); // dimensionless + const double var_parameters__Q10NCX = CHASTE_CONST(1.5700000000000001); // dimensionless + const double var_parameters__Q10SLCaP = CHASTE_CONST(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__fnak = 1 / (1 + CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT) + CHASTE_CONST(0.036499999999999998) * var_I_NaK__sigma * CHASTE_MATH::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 + CHASTE_MATH::Pow(var_parameters__KmNaip, 4) / CHASTE_MATH::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 + CHASTE_MATH::Pow(var_parameters__KmNaip, 4) / CHASTE_MATH::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_parameters__Qpow = -31 + CHASTE_CONST(0.10000000000000001) * NV_Ith_S(mParameters, 24); // dimensionless + const double var_I_PCa__I_pca_junc = CHASTE_MATH::Pow(var_chaste_interface__Ca_Concentrations__Ca_j, CHASTE_CONST(1.6000000000000001)) * CHASTE_MATH::Pow(var_parameters__Q10SLCaP, var_parameters__Qpow) * var_parameters__Fjunc * var_parameters__IbarSLCaP / (CHASTE_MATH::Pow(var_chaste_interface__Ca_Concentrations__Ca_j, CHASTE_CONST(1.6000000000000001)) + CHASTE_MATH::Pow(var_parameters__KmPCa, CHASTE_CONST(1.6000000000000001))); // uA_per_uF + const double var_I_PCa__I_pca_sl = CHASTE_MATH::Pow(var_chaste_interface__Ca_Concentrations__Ca_sl, CHASTE_CONST(1.6000000000000001)) * CHASTE_MATH::Pow(var_parameters__Q10SLCaP, var_parameters__Qpow) * var_parameters__Fsl * var_parameters__IbarSLCaP / (CHASTE_MATH::Pow(var_chaste_interface__Ca_Concentrations__Ca_sl, CHASTE_CONST(1.6000000000000001)) + CHASTE_MATH::Pow(var_parameters__KmPCa, CHASTE_CONST(1.6000000000000001))); // uA_per_uF + const double var_parameters__eca_junc = CHASTE_CONST(0.5) * CHASTE_MATH::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_parameters__eca_sl = CHASTE_CONST(0.5) * CHASTE_MATH::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_parameters__ecl = CHASTE_MATH::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_parameters__ek = CHASTE_MATH::Log(NV_Ith_S(mParameters, 7) / var_chaste_interface__K_Concentration__K_i) / var_parameters__FoRT; // mV + const double var_I_Ki__aki = CHASTE_CONST(1.02) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(0.23849999999999999) * var_parameters__ek)); // dimensionless + const double var_I_Ki__bki = (CHASTE_CONST(0.49124000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(0.080320000000000003) * var_parameters__ek) + CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(0.061749999999999999) * var_parameters__ek)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(0.51429999999999998) * var_parameters__ek - CHASTE_CONST(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_parameters__ena_junc = CHASTE_MATH::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 = CHASTE_MATH::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_parameters__ena_sl = CHASTE_MATH::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 = CHASTE_MATH::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__GtoFast = ((var_parameters__epi == 1) ? (CHASTE_CONST(0.1144) * NV_Ith_S(mParameters, 16)) : (CHASTE_CONST(0.0014039999999999999) * NV_Ith_S(mParameters, 16))); // mS_per_uF + const double var_I_to__GtoSlow = ((var_parameters__epi == 1) ? (CHASTE_CONST(0.015599999999999999) * NV_Ith_S(mParameters, 20)) : (CHASTE_CONST(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_parameters__gkp = CHASTE_CONST(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_parameters__ksat = CHASTE_CONST(0.32000000000000001); // dimensionless + const double var_parameters__nu = CHASTE_CONST(0.27000000000000002); // dimensionless + const double var_I_NCX__s1_junc = CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_j, 3) * NV_Ith_S(mParameters, 5) * CHASTE_MATH::Exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * var_parameters__nu); // mM4 + const double var_I_NCX__s1_sl = CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) * NV_Ith_S(mParameters, 5) * CHASTE_MATH::Exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * var_parameters__nu); // mM4 + const double var_I_NCX__s2_junc = CHASTE_MATH::Pow(NV_Ith_S(mParameters, 8), 3) * var_chaste_interface__Ca_Concentrations__Ca_j * CHASTE_MATH::Exp((-1 + var_parameters__nu) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT); // mM4 + const double var_I_NCX__I_ncx_junc = CHASTE_MATH::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 * CHASTE_MATH::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 = CHASTE_MATH::Pow(NV_Ith_S(mParameters, 8), 3) * var_chaste_interface__Ca_Concentrations__Ca_sl * CHASTE_MATH::Exp((-1 + var_parameters__nu) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT); // mM4 + const double var_I_NCX__I_ncx_sl = CHASTE_MATH::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 * CHASTE_MATH::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 = CHASTE_CONST(0.00054000000000000001) * NV_Ith_S(mParameters, 11); // cm_per_sec + const double var_I_Ca__ibarca_j = 4 * (-CHASTE_CONST(0.34100000000000003) * NV_Ith_S(mParameters, 5) + CHASTE_CONST(0.34100000000000003) * var_chaste_interface__Ca_Concentrations__Ca_j * CHASTE_MATH::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 + CHASTE_MATH::Exp(2 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double var_I_Ca__I_Ca_junc = CHASTE_CONST(0.45000000000000001) * CHASTE_MATH::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_I_Ca__ibarca_sl = 4 * (-CHASTE_CONST(0.34100000000000003) * NV_Ith_S(mParameters, 5) + CHASTE_CONST(0.34100000000000003) * var_chaste_interface__Ca_Concentrations__Ca_sl * CHASTE_MATH::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 + CHASTE_MATH::Exp(2 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double var_I_Ca__I_Ca_sl = CHASTE_CONST(0.45000000000000001) * CHASTE_MATH::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_parameters__pK = CHASTE_CONST(1.35e-7); // cm_per_sec + const double var_I_Ca__ibark = (-CHASTE_CONST(0.75) * NV_Ith_S(mParameters, 7) + CHASTE_CONST(0.75) * var_chaste_interface__K_Concentration__K_i * CHASTE_MATH::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 + CHASTE_MATH::Exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double var_I_Ca__I_CaK = CHASTE_CONST(0.45000000000000001) * CHASTE_MATH::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 = CHASTE_CONST(7.4999999999999993e-9); // cm_per_sec + const double var_I_Ca__ibarna_j = (-CHASTE_CONST(0.75) * NV_Ith_S(mParameters, 8) + CHASTE_CONST(0.75) * var_chaste_interface__Na_Concentrations__Na_j * CHASTE_MATH::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 + CHASTE_MATH::Exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double var_I_Ca__I_CaNa_junc = CHASTE_CONST(0.45000000000000001) * CHASTE_MATH::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 = (-CHASTE_CONST(0.75) * NV_Ith_S(mParameters, 8) + CHASTE_CONST(0.75) * var_chaste_interface__Na_Concentrations__Na_sl * CHASTE_MATH::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 + CHASTE_MATH::Exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double var_I_Ca__I_CaNa_sl = CHASTE_CONST(0.45000000000000001) * CHASTE_MATH::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_parameters__pNaK = CHASTE_CONST(0.018329999999999999); // dimensionless + const double var_I_Ks__eks = CHASTE_MATH::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 = CHASTE_MATH::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 var_chaste_interface__i_ionic = CHASTE_CAP() * var_membrane_potential__I_tot; // uA_per_cm2 const double i_ionic = var_chaste_interface__i_ionic; if (made_new_cvode_vector) @@ -317,7 +319,7 @@ bool Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClamp::registered = Mo { // Inputs: // Time units: millisecond - double var_chaste_interface__membrane_potential__V_m = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + double var_chaste_interface__membrane_potential__V_m = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -399,150 +401,150 @@ bool Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClamp::registered = Mo // 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 d_dt_chaste_interface_var_I_Ca__f_Ca_Bj = -CHASTE_CONST(0.011900000000000001) * var_chaste_interface__I_Ca__f_Ca_Bj + CHASTE_CONST(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 = -CHASTE_CONST(0.011900000000000001) * var_chaste_interface__I_Ca__f_Ca_Bsl + CHASTE_CONST(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 var_I_Ca__dss = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.83333333333333337) - CHASTE_CONST(0.16666666666666666) * var_chaste_interface__membrane_potential__V_m)); // dimensionless + const double var_I_Ca__fss = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(3.8888888888888888) + CHASTE_CONST(0.1111111111111111) * var_chaste_interface__membrane_potential__V_m)) + CHASTE_CONST(0.59999999999999998) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(2.5) - CHASTE_CONST(0.050000000000000003) * var_chaste_interface__membrane_potential__V_m)); // dimensionless + const double var_I_Ca__taud = CHASTE_CONST(28.571428571428569) * (1 - CHASTE_MATH::Exp(-CHASTE_CONST(0.83333333333333337) - CHASTE_CONST(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 var_I_Ca__tauf = 1 / (CHASTE_CONST(0.02) + CHASTE_CONST(0.019699999999999999) * CHASTE_MATH::Exp(-CHASTE_CONST(0.23877882250000002) * CHASTE_MATH::Pow((1 + CHASTE_CONST(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 var_I_Kr__tauxr = 230 / (1 + CHASTE_MATH::Exp(2 + CHASTE_CONST(0.050000000000000003) * var_chaste_interface__membrane_potential__V_m)) + 3300 / ((1 + CHASTE_MATH::Exp(CHASTE_CONST(1.2222222222222223) + CHASTE_CONST(0.1111111111111111) * var_chaste_interface__membrane_potential__V_m)) * (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4444444444444446) - CHASTE_CONST(0.1111111111111111) * var_chaste_interface__membrane_potential__V_m))); // msec + const double var_I_Kr__xrss = 1 / (1 + CHASTE_MATH::Exp(-2 - CHASTE_CONST(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 var_I_Ks__tauxs = CHASTE_CONST(990.10000000000002) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.17252124645892353) - CHASTE_CONST(0.070821529745042494) * var_chaste_interface__membrane_potential__V_m)); // msec + const double var_I_Ks__xsss = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.26666666666666666) - CHASTE_CONST(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__ah = ((var_chaste_interface__membrane_potential__V_m >= -40) ? (0) : (CHASTE_CONST(0.057000000000000002) * CHASTE_MATH::Exp(-CHASTE_CONST(11.764705882352942) + CHASTE_CONST(0.14705882352941177) * NV_Ith_S(mParameters, 15) - CHASTE_CONST(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) : ((CHASTE_CONST(37.780000000000001) + var_chaste_interface__membrane_potential__V_m) * (-25428 * CHASTE_MATH::Exp(CHASTE_CONST(0.24440000000000001) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(0.24440000000000001) * NV_Ith_S(mParameters, 15)) - CHASTE_CONST(6.9480000000000002e-6) * CHASTE_MATH::Exp(CHASTE_CONST(0.043909999999999998) * NV_Ith_S(mParameters, 15) - CHASTE_CONST(0.043909999999999998) * var_chaste_interface__membrane_potential__V_m)) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(24.640530000000002) + CHASTE_CONST(0.311) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(0.311) * NV_Ith_S(mParameters, 15))))); // dimensionless + const double var_I_Na__bh = ((var_chaste_interface__membrane_potential__V_m >= -40) ? (CHASTE_CONST(5.9230769230769234) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.96036036036036043) + CHASTE_CONST(0.0900900900900901) * NV_Ith_S(mParameters, 15) - CHASTE_CONST(0.0900900900900901) * var_chaste_interface__membrane_potential__V_m))) : (310000 * CHASTE_MATH::Exp(CHASTE_CONST(0.34849999999999998) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(0.34849999999999998) * NV_Ith_S(mParameters, 15)) + CHASTE_CONST(2.7000000000000002) * CHASTE_MATH::Exp(CHASTE_CONST(0.079000000000000001) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(0.079000000000000001) * NV_Ith_S(mParameters, 15)))); // dimensionless + const double var_I_Na__bj = ((var_chaste_interface__membrane_potential__V_m >= -40) ? (CHASTE_CONST(0.59999999999999998) * CHASTE_MATH::Exp(CHASTE_CONST(0.057000000000000002) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(0.057000000000000002) * NV_Ith_S(mParameters, 15)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.2000000000000002) + CHASTE_CONST(0.10000000000000001) * NV_Ith_S(mParameters, 15) - CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane_potential__V_m))) : (CHASTE_CONST(0.024240000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.01052) * NV_Ith_S(mParameters, 15) - CHASTE_CONST(0.01052) * var_chaste_interface__membrane_potential__V_m) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(5.5312920000000005) + CHASTE_CONST(0.13780000000000001) * NV_Ith_S(mParameters, 15) - CHASTE_CONST(0.13780000000000001) * var_chaste_interface__membrane_potential__V_m)))); // dimensionless + const double var_I_Na__hss = CHASTE_CONST(0.01) * NV_Ith_S(mParameters, 14) + (1 - CHASTE_CONST(0.01) * NV_Ith_S(mParameters, 14)) / CHASTE_MATH::Pow((1 + CHASTE_MATH::Exp(CHASTE_CONST(9.6298788694481825) + CHASTE_CONST(0.13458950201884254) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(0.13458950201884254) * NV_Ith_S(mParameters, 15))), 2); // dimensionless + const double var_I_Na__jss = CHASTE_CONST(0.01) * NV_Ith_S(mParameters, 14) + (1 - CHASTE_CONST(0.01) * NV_Ith_S(mParameters, 14)) / CHASTE_MATH::Pow((1 + CHASTE_MATH::Exp(CHASTE_CONST(9.6298788694481825) + CHASTE_CONST(0.13458950201884254) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(0.13458950201884254) * NV_Ith_S(mParameters, 15))), 2); // dimensionless + const double var_I_Na__mss = 1 / CHASTE_MATH::Pow((1 + CHASTE_MATH::Exp(-CHASTE_CONST(6.2967884828349945) - CHASTE_CONST(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 var_I_Na__taum = CHASTE_CONST(0.12920000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(8.682389366752302) * CHASTE_MATH::Pow((1 + CHASTE_CONST(0.021838829438742085) * var_chaste_interface__membrane_potential__V_m), 2)) + CHASTE_CONST(0.064869999999999997) * CHASTE_MATH::Exp(-CHASTE_CONST(0.0089012876052174655) * CHASTE_MATH::Pow((-1 + CHASTE_CONST(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 var_I_to__tauxtof = CHASTE_CONST(0.5) + CHASTE_CONST(8.5) * CHASTE_MATH::Exp(-CHASTE_CONST(0.81000000000000005) * CHASTE_MATH::Pow((1 + CHASTE_CONST(0.022222222222222223) * var_chaste_interface__membrane_potential__V_m), 2)); // msec + const double var_I_to__tauxtos = CHASTE_CONST(0.5) + 9 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(0.20000000000000001) + CHASTE_CONST(0.066666666666666666) * var_chaste_interface__membrane_potential__V_m)); // msec + const double var_I_to__tauytof = 7 + 85 * CHASTE_MATH::Exp(-CHASTE_CONST(7.2727272727272725) * CHASTE_MATH::Pow((1 + CHASTE_CONST(0.025000000000000001) * var_chaste_interface__membrane_potential__V_m), 2)); // msec + const double var_I_to__tauytos = 30 + 800 / (1 + CHASTE_MATH::Exp(6 + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane_potential__V_m)); // msec + const double var_I_to__xtoss = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.4615384615384615) - CHASTE_CONST(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 var_I_to__ytoss = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(3.8999999999999999) + CHASTE_CONST(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__Bmax_CaM = CHASTE_CONST(0.024); // mM + const double var_parameters__Bmax_Naj = CHASTE_CONST(7.5609999999999999); // mM + const double var_parameters__Bmax_Nasl = CHASTE_CONST(1.6499999999999999); // mM + const double var_parameters__Bmax_SR = CHASTE_CONST(0.017100000000000001); // mM + const double var_parameters__Bmax_TnChigh = CHASTE_CONST(0.14000000000000001); // mM + const double var_parameters__Bmax_TnClow = CHASTE_CONST(0.070000000000000007); // mM + const double var_parameters__Bmax_myosin = CHASTE_CONST(0.14000000000000001); // mM + const double var_parameters__Fjunc = CHASTE_CONST(0.11); // dimensionless + const double var_parameters__Fjunc_CaL = CHASTE_CONST(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__GCaB = CHASTE_CONST(0.00055130000000000001); // mS_per_uF + const double var_parameters__GNaB = CHASTE_CONST(0.00059699999999999998); // mS_per_uF + const double var_parameters__IbarSLCaP = CHASTE_CONST(0.067299999999999999); // uA_per_uF + const double var_parameters__J_ca_juncsl = CHASTE_CONST(8.2413000000000004e-13); // liters_per_msec + const double var_parameters__J_ca_slmyo = CHASTE_CONST(3.2742999999999999e-12); // liters_per_msec + const double var_parameters__J_na_juncsl = CHASTE_CONST(1.8312999999999999e-14); // liters_per_msec + const double var_parameters__J_na_slmyo = CHASTE_CONST(1.6385999999999999e-12); // liters_per_msec + const double var_parameters__Kdact = CHASTE_CONST(0.00014999999999999999); // mM + const double var_I_NCX__Ka_junc = 1 / (1 + CHASTE_MATH::Pow(var_parameters__Kdact, 2) / CHASTE_MATH::Pow(var_chaste_interface__Ca_Concentrations__Ca_j, 2)); // dimensionless + const double var_I_NCX__Ka_sl = 1 / (1 + CHASTE_MATH::Pow(var_parameters__Kdact, 2) / CHASTE_MATH::Pow(var_chaste_interface__Ca_Concentrations__Ca_sl, 2)); // dimensionless + const double var_parameters__KmCai = CHASTE_CONST(0.0035899999999999999); // mM + const double var_parameters__KmCao = CHASTE_CONST(1.3); // mM + const double var_parameters__KmKo = CHASTE_CONST(1.5); // mM + const double var_parameters__KmNai = CHASTE_CONST(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__KmNao = CHASTE_CONST(87.5); // mM + const double var_parameters__KmPCa = CHASTE_CONST(0.00050000000000000001); // mM + const double var_parameters__Kmf = CHASTE_CONST(0.00024600000000000002); // mM + const double var_parameters__Kmr = CHASTE_CONST(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_I_NCX__s3_junc = CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_j, 3) * NV_Ith_S(mParameters, 5) + CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_j, 3) * var_parameters__KmCao + CHASTE_MATH::Pow(NV_Ith_S(mParameters, 8), 3) * var_chaste_interface__Ca_Concentrations__Ca_j + CHASTE_MATH::Pow(var_parameters__KmNao, 3) * (1 + var_chaste_interface__Ca_Concentrations__Ca_j / var_parameters__KmCai) * var_chaste_interface__Ca_Concentrations__Ca_j + CHASTE_MATH::Pow(NV_Ith_S(mParameters, 8), 3) * (1 + CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_j, 3) / CHASTE_MATH::Pow(var_parameters__KmNai, 3)) * var_parameters__KmCai; // mM4 + const double var_I_NCX__s3_sl = CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) * NV_Ith_S(mParameters, 5) + CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) * var_parameters__KmCao + CHASTE_MATH::Pow(NV_Ith_S(mParameters, 8), 3) * var_chaste_interface__Ca_Concentrations__Ca_sl + CHASTE_MATH::Pow(var_parameters__KmNao, 3) * (1 + var_chaste_interface__Ca_Concentrations__Ca_sl / var_parameters__KmCai) * var_chaste_interface__Ca_Concentrations__Ca_sl + CHASTE_MATH::Pow(NV_Ith_S(mParameters, 8), 3) * (1 + CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) / CHASTE_MATH::Pow(var_parameters__KmNai, 3)) * var_parameters__KmCai; // mM4 + const double var_I_NaK__sigma = -CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(0.01485884101040119) * NV_Ith_S(mParameters, 8)); // dimensionless + const double var_parameters__Q10CaL = CHASTE_CONST(1.8); // dimensionless + const double var_parameters__Q10NCX = CHASTE_CONST(1.5700000000000001); // dimensionless + const double var_parameters__Q10SLCaP = CHASTE_CONST(2.3500000000000001); // dimensionless + const double var_parameters__Q10SRCaP = CHASTE_CONST(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_I_NaK__fnak = 1 / (1 + CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT) + CHASTE_CONST(0.036499999999999998) * var_I_NaK__sigma * CHASTE_MATH::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 + CHASTE_MATH::Pow(var_parameters__KmNaip, 4) / CHASTE_MATH::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 + CHASTE_MATH::Pow(var_parameters__KmNaip, 4) / CHASTE_MATH::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 + CHASTE_CONST(0.10000000000000001) * NV_Ith_S(mParameters, 24); // dimensionless + const double var_I_PCa__I_pca_junc = CHASTE_MATH::Pow(var_chaste_interface__Ca_Concentrations__Ca_j, CHASTE_CONST(1.6000000000000001)) * CHASTE_MATH::Pow(var_parameters__Q10SLCaP, var_parameters__Qpow) * var_parameters__Fjunc * var_parameters__IbarSLCaP / (CHASTE_MATH::Pow(var_chaste_interface__Ca_Concentrations__Ca_j, CHASTE_CONST(1.6000000000000001)) + CHASTE_MATH::Pow(var_parameters__KmPCa, CHASTE_CONST(1.6000000000000001))); // uA_per_uF + const double var_I_PCa__I_pca_sl = CHASTE_MATH::Pow(var_chaste_interface__Ca_Concentrations__Ca_sl, CHASTE_CONST(1.6000000000000001)) * CHASTE_MATH::Pow(var_parameters__Q10SLCaP, var_parameters__Qpow) * var_parameters__Fsl * var_parameters__IbarSLCaP / (CHASTE_MATH::Pow(var_chaste_interface__Ca_Concentrations__Ca_sl, CHASTE_CONST(1.6000000000000001)) + CHASTE_MATH::Pow(var_parameters__KmPCa, CHASTE_CONST(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 var_parameters__cellRadius = CHASTE_CONST(10.25); // um + const double var_parameters__Vcell = CHASTE_CONST(1.0000000000000001e-15) * CHASTE_CONST(CHASTE_MATH::Pi) * CHASTE_MATH::Pow(var_parameters__cellRadius, 2) * var_parameters__cellLength; // liter + const double var_parameters__Vjunc = CHASTE_CONST(0.00053900000000000009) * var_parameters__Vcell; // liter + const double var_parameters__Vmyo = CHASTE_CONST(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_parameters__Bmax_SLhighj = CHASTE_CONST(0.000165) * var_parameters__Vmyo / var_parameters__Vjunc; // mM + const double var_parameters__Bmax_SLlowj = CHASTE_CONST(0.00046000000000000001) * var_parameters__Vmyo / var_parameters__Vjunc; // mM + const double var_parameters__Vsl = CHASTE_CONST(0.02) * var_parameters__Vcell; // liter + const double var_parameters__Bmax_SLhighsl = CHASTE_CONST(0.0134) * var_parameters__Vmyo / var_parameters__Vsl; // mM + const double var_parameters__Bmax_SLlowsl = CHASTE_CONST(0.037400000000000003) * var_parameters__Vmyo / var_parameters__Vsl; // mM + const double var_parameters__Vsr = CHASTE_CONST(0.035000000000000003) * var_parameters__Vcell; // liter + const double var_parameters__Bmax_Csqn = CHASTE_CONST(0.14000000000000001) * var_parameters__Vmyo / var_parameters__Vsr; // mM + const double var_parameters__ec50SR = CHASTE_CONST(0.45000000000000001); // mM + const double var_SR_Fluxes__kCaSR = -(-var_SR_Fluxes__MinSR + var_SR_Fluxes__MaxSR) / (1 + CHASTE_MATH::Pow((var_parameters__ec50SR / var_chaste_interface__SR_Ca_Concentrations__Ca_sr), CHASTE_CONST(2.5))) + var_SR_Fluxes__MaxSR; // dimensionless + const double var_parameters__eca_junc = CHASTE_CONST(0.5) * CHASTE_MATH::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_parameters__eca_sl = CHASTE_CONST(0.5) * CHASTE_MATH::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_parameters__ena_junc = CHASTE_MATH::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 = CHASTE_MATH::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_parameters__ena_sl = CHASTE_MATH::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 = CHASTE_MATH::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_parameters__hillSRCaP = CHASTE_CONST(1.7869999999999999); // dimensionless + const double var_SR_Fluxes__J_serca = CHASTE_MATH::Pow(var_parameters__Q10SRCaP, var_parameters__Qpow) * (CHASTE_MATH::Pow((var_chaste_interface__Ca_Concentrations__Ca_i / var_parameters__Kmf), var_parameters__hillSRCaP) - CHASTE_MATH::Pow((var_chaste_interface__SR_Ca_Concentrations__Ca_sr / var_parameters__Kmr), var_parameters__hillSRCaP)) * NV_Ith_S(mParameters, 2) / (1 + CHASTE_MATH::Pow((var_chaste_interface__Ca_Concentrations__Ca_i / var_parameters__Kmf), var_parameters__hillSRCaP) + CHASTE_MATH::Pow((var_chaste_interface__SR_Ca_Concentrations__Ca_sr / var_parameters__Kmr), var_parameters__hillSRCaP)); // mM_per_msec + const double var_parameters__kiCa = CHASTE_CONST(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__kim = CHASTE_CONST(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_cam = CHASTE_CONST(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__koff_myoca = CHASTE_CONST(0.00046000000000000001); // per_msec + const double var_parameters__koff_myomg = CHASTE_CONST(5.7000000000000003e-5); // per_msec + const double var_parameters__koff_na = CHASTE_CONST(0.001); // per_msec + const double var_parameters__koff_slh = CHASTE_CONST(0.029999999999999999); // per_msec + const double var_parameters__koff_sll = CHASTE_CONST(1.3); // per_msec + const double var_parameters__koff_sr = CHASTE_CONST(0.059999999999999998); // per_msec + const double var_parameters__koff_tnchca = CHASTE_CONST(3.1999999999999999e-5); // per_msec + const double var_parameters__koff_tnchmg = CHASTE_CONST(0.0033300000000000001); // per_msec + const double var_parameters__koff_tncl = CHASTE_CONST(0.019599999999999999); // per_msec + const double var_parameters__kom = CHASTE_CONST(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 + CHASTE_MATH::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 + CHASTE_MATH::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 - CHASTE_MATH::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 var_parameters__kon_myoca = CHASTE_CONST(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 var_parameters__kon_myomg = CHASTE_CONST(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_parameters__kon_na = CHASTE_CONST(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 @@ -557,38 +559,38 @@ bool Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClamp::registered = Mo 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 var_parameters__kon_tnchca = CHASTE_CONST(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 var_parameters__kon_tnchmg = CHASTE_CONST(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_parameters__kon_tncl = CHASTE_CONST(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_parameters__ksat = CHASTE_CONST(0.32000000000000001); // dimensionless + const double var_parameters__nu = CHASTE_CONST(0.27000000000000002); // dimensionless + const double var_I_NCX__s1_junc = CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_j, 3) * NV_Ith_S(mParameters, 5) * CHASTE_MATH::Exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * var_parameters__nu); // mM4 + const double var_I_NCX__s1_sl = CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) * NV_Ith_S(mParameters, 5) * CHASTE_MATH::Exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * var_parameters__nu); // mM4 + const double var_I_NCX__s2_junc = CHASTE_MATH::Pow(NV_Ith_S(mParameters, 8), 3) * var_chaste_interface__Ca_Concentrations__Ca_j * CHASTE_MATH::Exp((-1 + var_parameters__nu) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT); // mM4 + const double var_I_NCX__I_ncx_junc = CHASTE_MATH::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 * CHASTE_MATH::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 = CHASTE_MATH::Pow(NV_Ith_S(mParameters, 8), 3) * var_chaste_interface__Ca_Concentrations__Ca_sl * CHASTE_MATH::Exp((-1 + var_parameters__nu) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT); // mM4 + const double var_I_NCX__I_ncx_sl = CHASTE_MATH::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 * CHASTE_MATH::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 = CHASTE_CONST(0.00054000000000000001) * NV_Ith_S(mParameters, 11); // cm_per_sec + const double var_I_Ca__ibarca_j = 4 * (-CHASTE_CONST(0.34100000000000003) * NV_Ith_S(mParameters, 5) + CHASTE_CONST(0.34100000000000003) * var_chaste_interface__Ca_Concentrations__Ca_j * CHASTE_MATH::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 + CHASTE_MATH::Exp(2 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double var_I_Ca__I_Ca_junc = CHASTE_CONST(0.45000000000000001) * CHASTE_MATH::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 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 - CHASTE_CONST(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 * (-CHASTE_CONST(0.34100000000000003) * NV_Ith_S(mParameters, 5) + CHASTE_CONST(0.34100000000000003) * var_chaste_interface__Ca_Concentrations__Ca_sl * CHASTE_MATH::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 + CHASTE_MATH::Exp(2 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double var_I_Ca__I_Ca_sl = CHASTE_CONST(0.45000000000000001) * CHASTE_MATH::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 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 - CHASTE_CONST(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 = CHASTE_CONST(7.4999999999999993e-9); // cm_per_sec + const double var_I_Ca__ibarna_j = (-CHASTE_CONST(0.75) * NV_Ith_S(mParameters, 8) + CHASTE_CONST(0.75) * var_chaste_interface__Na_Concentrations__Na_j * CHASTE_MATH::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 + CHASTE_MATH::Exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double var_I_Ca__I_CaNa_junc = CHASTE_CONST(0.45000000000000001) * CHASTE_MATH::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 = (-CHASTE_CONST(0.75) * NV_Ith_S(mParameters, 8) + CHASTE_CONST(0.75) * var_chaste_interface__Na_Concentrations__Na_sl * CHASTE_MATH::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 + CHASTE_MATH::Exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double var_I_Ca__I_CaNa_sl = CHASTE_CONST(0.45000000000000001) * CHASTE_MATH::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 @@ -600,49 +602,49 @@ bool Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClamp::registered = Mo } 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_junc = CHASTE_CONST(0.0035000000000000001); // mS_per_uF + const double var_I_Ks__gks_sl = CHASTE_CONST(0.0035000000000000001); // mS_per_uF + const double var_I_Kp__kp_kp = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(7.4880000000000004) - CHASTE_CONST(0.16722408026755853) * var_chaste_interface__membrane_potential__V_m)); // dimensionless + const double var_I_Kr__rkr = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(3.0833333333333335) + CHASTE_CONST(0.041666666666666664) * var_chaste_interface__membrane_potential__V_m)); // dimensionless + const double var_membrane_potential__i_Stim_converted = CHASTE_STIM(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_membrane_potential__i_Stim = var_membrane_potential__i_Stim_converted / CHASTE_CAP(); // 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_parameters__GClB = CHASTE_CONST(0.0089999999999999993); // mS_per_uF + const double var_parameters__GClCa = CHASTE_CONST(0.0548125); // mS_per_uF + const double var_parameters__KdClCa = CHASTE_CONST(0.10000000000000001); // mM + const double var_I_Ki__g_K1 = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::Sqrt(NV_Ith_S(mParameters, 7)) * NV_Ith_S(mParameters, 17); // mS_per_uF + const double var_I_Kr__gkr = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::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_parameters__ecl = CHASTE_MATH::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_parameters__ek = CHASTE_MATH::Log(NV_Ith_S(mParameters, 7) / var_chaste_interface__K_Concentration__K_i) / var_parameters__FoRT; // mV + const double var_I_Ki__aki = CHASTE_CONST(1.02) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(0.23849999999999999) * var_parameters__ek)); // dimensionless + const double var_I_Ki__bki = (CHASTE_CONST(0.49124000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(0.080320000000000003) * var_parameters__ek) + CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(0.061749999999999999) * var_parameters__ek)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(0.51429999999999998) * var_parameters__ek - CHASTE_CONST(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__GtoFast = ((var_parameters__epi == 1) ? (CHASTE_CONST(0.1144) * NV_Ith_S(mParameters, 16)) : (CHASTE_CONST(0.0014039999999999999) * NV_Ith_S(mParameters, 16))); // mS_per_uF + const double var_I_to__GtoSlow = ((var_parameters__epi == 1) ? (CHASTE_CONST(0.015599999999999999) * NV_Ith_S(mParameters, 20)) : (CHASTE_CONST(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_parameters__gkp = CHASTE_CONST(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_parameters__pK = CHASTE_CONST(1.35e-7); // cm_per_sec + const double var_I_Ca__ibark = (-CHASTE_CONST(0.75) * NV_Ith_S(mParameters, 7) + CHASTE_CONST(0.75) * var_chaste_interface__K_Concentration__K_i * CHASTE_MATH::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 + CHASTE_MATH::Exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double var_I_Ca__I_CaK = CHASTE_CONST(0.45000000000000001) * CHASTE_MATH::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_parameters__pNaK = CHASTE_CONST(0.018329999999999999); // dimensionless + const double var_I_Ks__eks = CHASTE_MATH::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 = CHASTE_MATH::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 @@ -650,7 +652,7 @@ bool Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClamp::registered = Mo 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 + var_chaste_interface__membrane_data_clamp_current = (-CHASTE_EXP_VOLT(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 } @@ -700,7 +702,7 @@ bool Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClamp::registered = Mo { // Inputs: // Time units: millisecond - double var_chaste_interface__membrane_potential__V_m = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + double var_chaste_interface__membrane_potential__V_m = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -750,15 +752,15 @@ bool Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClamp::registered = Mo // 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_I_Ks__gks_junc = CHASTE_CONST(0.0035000000000000001); // mS_per_uF + const double var_I_Ks__gks_sl = CHASTE_CONST(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_Ca__tauf = 1 / (CHASTE_CONST(0.02) + CHASTE_CONST(0.019699999999999999) * CHASTE_MATH::Exp(-CHASTE_CONST(0.23877882250000002) * CHASTE_MATH::Pow((1 + CHASTE_CONST(0.068965517241379309) * var_chaste_interface__membrane_potential__V_m), 2))); // msec + const double var_I_Kr__rkr = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(3.0833333333333335) + CHASTE_CONST(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) : (CHASTE_CONST(0.057000000000000002) * CHASTE_MATH::Exp(-CHASTE_CONST(11.764705882352942) + CHASTE_CONST(0.14705882352941177) * NV_Ith_S(mParameters, 15) - CHASTE_CONST(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) : ((CHASTE_CONST(37.780000000000001) + var_chaste_interface__membrane_potential__V_m) * (-25428 * CHASTE_MATH::Exp(CHASTE_CONST(0.24440000000000001) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(0.24440000000000001) * NV_Ith_S(mParameters, 15)) - CHASTE_CONST(6.9480000000000002e-6) * CHASTE_MATH::Exp(CHASTE_CONST(0.043909999999999998) * NV_Ith_S(mParameters, 15) - CHASTE_CONST(0.043909999999999998) * var_chaste_interface__membrane_potential__V_m)) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(24.640530000000002) + CHASTE_CONST(0.311) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(0.311) * NV_Ith_S(mParameters, 15))))); // dimensionless + const double var_I_Na__bh = ((var_chaste_interface__membrane_potential__V_m >= -40) ? (CHASTE_CONST(5.9230769230769234) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.96036036036036043) + CHASTE_CONST(0.0900900900900901) * NV_Ith_S(mParameters, 15) - CHASTE_CONST(0.0900900900900901) * var_chaste_interface__membrane_potential__V_m))) : (310000 * CHASTE_MATH::Exp(CHASTE_CONST(0.34849999999999998) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(0.34849999999999998) * NV_Ith_S(mParameters, 15)) + CHASTE_CONST(2.7000000000000002) * CHASTE_MATH::Exp(CHASTE_CONST(0.079000000000000001) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(0.079000000000000001) * NV_Ith_S(mParameters, 15)))); // dimensionless + const double var_I_Na__bj = ((var_chaste_interface__membrane_potential__V_m >= -40) ? (CHASTE_CONST(0.59999999999999998) * CHASTE_MATH::Exp(CHASTE_CONST(0.057000000000000002) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(0.057000000000000002) * NV_Ith_S(mParameters, 15)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.2000000000000002) + CHASTE_CONST(0.10000000000000001) * NV_Ith_S(mParameters, 15) - CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane_potential__V_m))) : (CHASTE_CONST(0.024240000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.01052) * NV_Ith_S(mParameters, 15) - CHASTE_CONST(0.01052) * var_chaste_interface__membrane_potential__V_m) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(5.5312920000000005) + CHASTE_CONST(0.13780000000000001) * NV_Ith_S(mParameters, 15) - CHASTE_CONST(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 @@ -766,96 +768,96 @@ bool Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClamp::registered = Mo 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 + var_chaste_interface__membrane_data_clamp_current = (-CHASTE_EXP_VOLT(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_membrane_potential__i_Stim_converted = CHASTE_STIM(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__Fjunc = CHASTE_CONST(0.11); // dimensionless + const double var_parameters__Fjunc_CaL = CHASTE_CONST(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__IbarSLCaP = CHASTE_CONST(0.067299999999999999); // uA_per_uF + const double var_parameters__Kdact = CHASTE_CONST(0.00014999999999999999); // mM + const double var_I_NCX__Ka_junc = 1 / (1 + CHASTE_MATH::Pow(var_parameters__Kdact, 2) / CHASTE_MATH::Pow(var_chaste_interface__Ca_Concentrations__Ca_j, 2)); // dimensionless + const double var_I_NCX__Ka_sl = 1 / (1 + CHASTE_MATH::Pow(var_parameters__Kdact, 2) / CHASTE_MATH::Pow(var_chaste_interface__Ca_Concentrations__Ca_sl, 2)); // dimensionless + const double var_parameters__KmCai = CHASTE_CONST(0.0035899999999999999); // mM + const double var_parameters__KmCao = CHASTE_CONST(1.3); // mM + const double var_parameters__KmKo = CHASTE_CONST(1.5); // mM + const double var_parameters__KmNai = CHASTE_CONST(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__KmNao = CHASTE_CONST(87.5); // mM + const double var_parameters__KmPCa = CHASTE_CONST(0.00050000000000000001); // mM + const double var_parameters__Kmf = CHASTE_CONST(0.00024600000000000002); // mM + const double var_parameters__Kmr = CHASTE_CONST(1.7); // mM + const double var_I_Ki__g_K1 = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::Sqrt(NV_Ith_S(mParameters, 7)) * NV_Ith_S(mParameters, 17); // mS_per_uF + const double var_I_Kr__gkr = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::Sqrt(NV_Ith_S(mParameters, 7)) * NV_Ith_S(mParameters, 18); // mS_per_uF + const double var_I_NCX__s3_junc = CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_j, 3) * NV_Ith_S(mParameters, 5) + CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_j, 3) * var_parameters__KmCao + CHASTE_MATH::Pow(NV_Ith_S(mParameters, 8), 3) * var_chaste_interface__Ca_Concentrations__Ca_j + CHASTE_MATH::Pow(var_parameters__KmNao, 3) * (1 + var_chaste_interface__Ca_Concentrations__Ca_j / var_parameters__KmCai) * var_chaste_interface__Ca_Concentrations__Ca_j + CHASTE_MATH::Pow(NV_Ith_S(mParameters, 8), 3) * (1 + CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_j, 3) / CHASTE_MATH::Pow(var_parameters__KmNai, 3)) * var_parameters__KmCai; // mM4 + const double var_I_NCX__s3_sl = CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) * NV_Ith_S(mParameters, 5) + CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) * var_parameters__KmCao + CHASTE_MATH::Pow(NV_Ith_S(mParameters, 8), 3) * var_chaste_interface__Ca_Concentrations__Ca_sl + CHASTE_MATH::Pow(var_parameters__KmNao, 3) * (1 + var_chaste_interface__Ca_Concentrations__Ca_sl / var_parameters__KmCai) * var_chaste_interface__Ca_Concentrations__Ca_sl + CHASTE_MATH::Pow(NV_Ith_S(mParameters, 8), 3) * (1 + CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) / CHASTE_MATH::Pow(var_parameters__KmNai, 3)) * var_parameters__KmCai; // mM4 + const double var_I_NaK__sigma = -CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(0.01485884101040119) * NV_Ith_S(mParameters, 8)); // dimensionless + const double var_parameters__Q10CaL = CHASTE_CONST(1.8); // dimensionless + const double var_parameters__Q10NCX = CHASTE_CONST(1.5700000000000001); // dimensionless + const double var_parameters__Q10SLCaP = CHASTE_CONST(2.3500000000000001); // dimensionless + const double var_parameters__Q10SRCaP = CHASTE_CONST(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__fnak = 1 / (1 + CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT) + CHASTE_CONST(0.036499999999999998) * var_I_NaK__sigma * CHASTE_MATH::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 + CHASTE_MATH::Pow(var_parameters__KmNaip, 4) / CHASTE_MATH::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 + CHASTE_MATH::Pow(var_parameters__KmNaip, 4) / CHASTE_MATH::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_NaK__I_nak_converted = CHASTE_CAP() * var_I_NaK__I_nak; // uA_per_cm2 + const double var_parameters__Qpow = -31 + CHASTE_CONST(0.10000000000000001) * NV_Ith_S(mParameters, 24); // dimensionless + const double var_I_PCa__I_pca_junc = CHASTE_MATH::Pow(var_chaste_interface__Ca_Concentrations__Ca_j, CHASTE_CONST(1.6000000000000001)) * CHASTE_MATH::Pow(var_parameters__Q10SLCaP, var_parameters__Qpow) * var_parameters__Fjunc * var_parameters__IbarSLCaP / (CHASTE_MATH::Pow(var_chaste_interface__Ca_Concentrations__Ca_j, CHASTE_CONST(1.6000000000000001)) + CHASTE_MATH::Pow(var_parameters__KmPCa, CHASTE_CONST(1.6000000000000001))); // uA_per_uF + const double var_I_PCa__I_pca_sl = CHASTE_MATH::Pow(var_chaste_interface__Ca_Concentrations__Ca_sl, CHASTE_CONST(1.6000000000000001)) * CHASTE_MATH::Pow(var_parameters__Q10SLCaP, var_parameters__Qpow) * var_parameters__Fsl * var_parameters__IbarSLCaP / (CHASTE_MATH::Pow(var_chaste_interface__Ca_Concentrations__Ca_sl, CHASTE_CONST(1.6000000000000001)) + CHASTE_MATH::Pow(var_parameters__KmPCa, CHASTE_CONST(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_PCa__I_pca_converted = CHASTE_CAP() * var_I_PCa__I_pca; // uA_per_cm2 + const double var_parameters__ecl = CHASTE_MATH::Log(NV_Ith_S(mParameters, 4) / NV_Ith_S(mParameters, 6)) / var_parameters__FoRT; // mV + const double var_parameters__ek = CHASTE_MATH::Log(NV_Ith_S(mParameters, 7) / var_chaste_interface__K_Concentration__K_i) / var_parameters__FoRT; // mV + const double var_I_Ki__aki = CHASTE_CONST(1.02) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(0.23849999999999999) * var_parameters__ek)); // dimensionless + const double var_I_Ki__bki = (CHASTE_CONST(0.49124000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(0.080320000000000003) * var_parameters__ek) + CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(0.061749999999999999) * var_parameters__ek)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(0.51429999999999998) * var_parameters__ek - CHASTE_CONST(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_Ki__I_ki_converted = CHASTE_CAP() * 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_Kr__I_kr_converted = CHASTE_CAP() * var_I_Kr__I_kr; // uA_per_cm2 + const double var_parameters__ena_junc = CHASTE_MATH::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 = CHASTE_MATH::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 = CHASTE_MATH::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 = CHASTE_MATH::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_I_Na__I_Na_converted = CHASTE_CAP() * 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__GtoFast = ((var_parameters__epi == 1) ? (CHASTE_CONST(0.1144) * NV_Ith_S(mParameters, 16)) : (CHASTE_CONST(0.0014039999999999999) * NV_Ith_S(mParameters, 16))); // mS_per_uF + const double var_I_to__GtoSlow = ((var_parameters__epi == 1) ? (CHASTE_CONST(0.015599999999999999) * NV_Ith_S(mParameters, 20)) : (CHASTE_CONST(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_tof_converted = CHASTE_CAP() * 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_I_to__I_to_converted = CHASTE_CAP() * var_I_to__I_to; // uA_per_cm2 + const double var_I_to__I_tos_converted = CHASTE_CAP() * var_I_to__I_tos; // uA_per_cm2 + const double var_parameters__hillSRCaP = CHASTE_CONST(1.7869999999999999); // dimensionless + const double var_SR_Fluxes__J_serca = CHASTE_MATH::Pow(var_parameters__Q10SRCaP, var_parameters__Qpow) * (CHASTE_MATH::Pow((var_chaste_interface__Ca_Concentrations__Ca_i / var_parameters__Kmf), var_parameters__hillSRCaP) - CHASTE_MATH::Pow((var_chaste_interface__SR_Ca_Concentrations__Ca_sr / var_parameters__Kmr), var_parameters__hillSRCaP)) * NV_Ith_S(mParameters, 2) / (1 + CHASTE_MATH::Pow((var_chaste_interface__Ca_Concentrations__Ca_i / var_parameters__Kmf), var_parameters__hillSRCaP) + CHASTE_MATH::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_parameters__ksat = CHASTE_CONST(0.32000000000000001); // dimensionless + const double var_parameters__nu = CHASTE_CONST(0.27000000000000002); // dimensionless + const double var_I_NCX__s1_junc = CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_j, 3) * NV_Ith_S(mParameters, 5) * CHASTE_MATH::Exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * var_parameters__nu); // mM4 + const double var_I_NCX__s1_sl = CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) * NV_Ith_S(mParameters, 5) * CHASTE_MATH::Exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * var_parameters__nu); // mM4 + const double var_I_NCX__s2_junc = CHASTE_MATH::Pow(NV_Ith_S(mParameters, 8), 3) * var_chaste_interface__Ca_Concentrations__Ca_j * CHASTE_MATH::Exp((-1 + var_parameters__nu) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT); // mM4 + const double var_I_NCX__I_ncx_junc = CHASTE_MATH::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 * CHASTE_MATH::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 = CHASTE_MATH::Pow(NV_Ith_S(mParameters, 8), 3) * var_chaste_interface__Ca_Concentrations__Ca_sl * CHASTE_MATH::Exp((-1 + var_parameters__nu) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT); // mM4 + const double var_I_NCX__I_ncx_sl = CHASTE_MATH::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 * CHASTE_MATH::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_NCX__I_ncx_converted = CHASTE_CAP() * var_I_NCX__I_ncx; // uA_per_cm2 + const double var_parameters__pCa = CHASTE_CONST(0.00054000000000000001) * NV_Ith_S(mParameters, 11); // cm_per_sec + const double var_I_Ca__ibarca_j = 4 * (-CHASTE_CONST(0.34100000000000003) * NV_Ith_S(mParameters, 5) + CHASTE_CONST(0.34100000000000003) * var_chaste_interface__Ca_Concentrations__Ca_j * CHASTE_MATH::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 + CHASTE_MATH::Exp(2 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double var_I_Ca__I_Ca_junc = CHASTE_CONST(0.45000000000000001) * CHASTE_MATH::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 * (-CHASTE_CONST(0.34100000000000003) * NV_Ith_S(mParameters, 5) + CHASTE_CONST(0.34100000000000003) * var_chaste_interface__Ca_Concentrations__Ca_sl * CHASTE_MATH::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 + CHASTE_MATH::Exp(2 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double var_I_Ca__I_Ca_sl = CHASTE_CONST(0.45000000000000001) * CHASTE_MATH::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 + const double var_I_Ca__I_Ca_converted = CHASTE_CAP() * var_I_Ca__I_Ca; // uA_per_cm2 + const double var_parameters__pNaK = CHASTE_CONST(0.018329999999999999); // dimensionless + const double var_I_Ks__eks = CHASTE_MATH::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 = CHASTE_MATH::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 = CHASTE_CAP() * var_I_Ks__I_ks; // uA_per_cm2 #if CHASTE_SUNDIALS_VERSION >= 60000 N_Vector dqs = N_VNew_Serial(27, CvodeContextManager::Instance()->GetSundialsContext()); @@ -1309,4 +1311,5 @@ void OdeSystemInformation #include "AbstractStimulusFunction.hpp" +#if USING_DEVICE_COMPILER +#include "StimulusEvaluatorCuda.hpp" +#endif #include "AbstractCvodeCellWithDataClamp.hpp" +#include "HostDeviceMacros.hpp" class Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClamp : public AbstractCvodeCellWithDataClamp { @@ -40,6 +44,10 @@ class Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClamp : public Abstra 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: + static constexpr unsigned TOTAL_SIZE = 39u; + static constexpr unsigned NNZ = 0u; + static inline const int sparse_rowptr[] = { }; + static inline const int sparse_colind[] = { }; boost::shared_ptr UseCellMLDefaultStimulus(); double GetIntracellularCalciumConcentration(); @@ -48,7 +56,19 @@ const bool is_probability[39] = {false, false, true, true, true, false, false, f 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); +#if USING_DEVICE_COMPILER + template + DEVICE + static void EvaluateYDerivativesDevice(ValueType var_chaste_interface__environment__time, const ValueType* rY, ValueType* rDY, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType* mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim); + template + DEVICE + static void EvaluateAnalyticJacobianDevice(ValueType var_chaste_interface__environment__time, const ValueType *rY, ValueType *rDY, ValueType *rJacobian, ValueType *rTmp1, ValueType *rTmp2, ValueType *rTmp3, const unsigned nvars, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType *mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim); + template + DEVICE + static void EvaluateSparseAnalyticJacobianDevice(ValueType var_chaste_interface__environment__time, const ValueType *rY, ValueType *rDY, ValueType *rJacobian, ValueType *rTmp1, ValueType *rTmp2, ValueType *rTmp3, const unsigned nvars, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType *mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim); +#endif }; // Needs to be included last @@ -85,4 +105,10 @@ namespace boost } #endif // CELLGRANDI_PASQUALINI_BERS_2010_SSFROMCELLMLCVODEDATACLAMP_HPP_ + + + +#if USING_DEVICE_COMPILER + #include "grandi_pasqualini_bers_2010_ssCvodeDataClampKernels.hpp" +#endif #endif // CHASTE_CVODE \ No newline at end of file diff --git a/chaste_codegen/data/tests/chaste_reference_models/CVODE_DATA_CLAMP/hodgkin_huxley_squid_axon_model_1952_modified.cpp b/chaste_codegen/data/tests/chaste_reference_models/CVODE_DATA_CLAMP/hodgkin_huxley_squid_axon_model_1952_modified.cpp index 518f18b55..158299e58 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/CVODE_DATA_CLAMP/hodgkin_huxley_squid_axon_model_1952_modified.cpp +++ b/chaste_codegen/data/tests/chaste_reference_models/CVODE_DATA_CLAMP/hodgkin_huxley_squid_axon_model_1952_modified.cpp @@ -22,6 +22,8 @@ #include "HeartConfig.hpp" #include "IsNan.hpp" #include "MathsCustomFunctions.hpp" +#include "ChasteMathDeviceNamespaces.hpp" +#include "ChasteCpuMacros.hpp" #if CHASTE_SUNDIALS_VERSION >= 60000 #include "CvodeContextManager.hpp" @@ -35,7 +37,7 @@ { // 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_duration = CHASTE_CONST(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( @@ -66,7 +68,7 @@ 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, 3) = CHASTE_CONST(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] } @@ -123,7 +125,7 @@ made_new_cvode_vector = true; rY = MakeNVector(*pStateVariables); } - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -133,12 +135,12 @@ // 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__E_L = CHASTE_CONST(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_potassium_channel__i_K = CHASTE_MATH::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_sodium_channel__i_Na = CHASTE_MATH::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; @@ -154,7 +156,7 @@ { // Inputs: // Time units: millisecond - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -165,22 +167,22 @@ // 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__B = -CHASTE_CONST(0.10000000000000001); // per_millivolt + const double var_potassium_channel_n_gate__A = -CHASTE_CONST(0.01) / var_potassium_channel_n_gate__B; // per_millisecond + const double var_potassium_channel_n_gate__beta_n = CHASTE_CONST(0.125) * CHASTE_MATH::Exp(CHASTE_CONST(0.9375) + CHASTE_CONST(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_potassium_channel_n_gate__alpha_n = (((var_potassium_channel_n_gate__U >= -CHASTE_CONST(9.9999999999999995e-8)) && (var_potassium_channel_n_gate__U <= CHASTE_CONST(9.9999999999999995e-8))) ? ((1 - CHASTE_CONST(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 + CHASTE_MATH::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 var_sodium_channel_h_gate__alpha_h = CHASTE_CONST(0.070000000000000007) * CHASTE_MATH::Exp(-CHASTE_CONST(3.75) - CHASTE_CONST(0.050000000000000003) * var_chaste_interface__membrane__V); // per_millisecond + const double var_sodium_channel_h_gate__beta_h = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(4.5) - CHASTE_CONST(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__B = -CHASTE_CONST(0.10000000000000001); // per_millivolt + const double var_sodium_channel_m_gate__A = -CHASTE_CONST(0.10000000000000001) / var_sodium_channel_m_gate__B; // per_millisecond + const double var_sodium_channel_m_gate__beta_m = 4 * CHASTE_MATH::Exp(-CHASTE_CONST(4.166666666666667) - CHASTE_CONST(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 var_sodium_channel_m_gate__alpha_m = (((var_sodium_channel_m_gate__U >= -CHASTE_CONST(9.9999999999999995e-8)) && (var_sodium_channel_m_gate__U <= CHASTE_CONST(9.9999999999999995e-8))) ? ((1 - CHASTE_CONST(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 + CHASTE_MATH::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) @@ -190,19 +192,19 @@ 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__E_L = CHASTE_CONST(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_membrane__i_Stim = CHASTE_STIM(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_potassium_channel__i_K = CHASTE_MATH::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_sodium_channel__i_Na = CHASTE_MATH::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 + var_chaste_interface__membrane_data_clamp_current = (-CHASTE_EXP_VOLT(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 } @@ -217,7 +219,7 @@ { // Inputs: // Time units: millisecond - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -228,20 +230,20 @@ // 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__E_L = CHASTE_CONST(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_membrane__i_Stim = CHASTE_STIM(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 + var_chaste_interface__membrane_data_clamp_current = (-CHASTE_EXP_VOLT(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_potassium_channel__i_K = CHASTE_MATH::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_sodium_channel__i_Na = CHASTE_MATH::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()); @@ -335,4 +337,5 @@ void OdeSystemInformation #include "AbstractStimulusFunction.hpp" +#if USING_DEVICE_COMPILER +#include "StimulusEvaluatorCuda.hpp" +#endif #include "AbstractCvodeCellWithDataClamp.hpp" +#include "HostDeviceMacros.hpp" class Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeDataClamp : public AbstractCvodeCellWithDataClamp { @@ -38,6 +42,10 @@ class Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeDataClamp const bool is_concentration[4] = {false, false, false, false}; const bool is_probability[4] = {false, false, false, false}; public: + static constexpr unsigned TOTAL_SIZE = 4u; + static constexpr unsigned NNZ = 0u; + static inline const int sparse_rowptr[] = { }; + static inline const int sparse_colind[] = { }; boost::shared_ptr UseCellMLDefaultStimulus(); Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeDataClamp(boost::shared_ptr pOdeSolver /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus); @@ -45,7 +53,19 @@ const bool is_probability[4] = {false, false, false, false}; 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); +#if USING_DEVICE_COMPILER + template + DEVICE + static void EvaluateYDerivativesDevice(ValueType var_chaste_interface__environment__time, const ValueType* rY, ValueType* rDY, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType* mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim); + template + DEVICE + static void EvaluateAnalyticJacobianDevice(ValueType var_chaste_interface__environment__time, const ValueType *rY, ValueType *rDY, ValueType *rJacobian, ValueType *rTmp1, ValueType *rTmp2, ValueType *rTmp3, const unsigned nvars, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType *mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim); + template + DEVICE + static void EvaluateSparseAnalyticJacobianDevice(ValueType var_chaste_interface__environment__time, const ValueType *rY, ValueType *rDY, ValueType *rJacobian, ValueType *rTmp1, ValueType *rTmp2, ValueType *rTmp3, const unsigned nvars, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType *mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim); +#endif }; // Needs to be included last @@ -82,4 +102,10 @@ namespace boost } #endif // CELLHODGKIN_HUXLEY_SQUID_AXON_MODEL_1952_MODIFIEDFROMCELLMLCVODEDATACLAMP_HPP_ + + + +#if USING_DEVICE_COMPILER + #include "hodgkin_huxley_squid_axon_model_1952_modifiedKernels.hpp" +#endif #endif // CHASTE_CVODE \ No newline at end of file diff --git a/chaste_codegen/data/tests/chaste_reference_models/CVODE_DATA_CLAMP_OPT/grandi_pasqualini_bers_2010_ssCvodeDataClampOpt.cpp b/chaste_codegen/data/tests/chaste_reference_models/CVODE_DATA_CLAMP_OPT/grandi_pasqualini_bers_2010_ssCvodeDataClampOpt.cpp index e42e23fd0..bf8422511 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/CVODE_DATA_CLAMP_OPT/grandi_pasqualini_bers_2010_ssCvodeDataClampOpt.cpp +++ b/chaste_codegen/data/tests/chaste_reference_models/CVODE_DATA_CLAMP_OPT/grandi_pasqualini_bers_2010_ssCvodeDataClampOpt.cpp @@ -22,6 +22,8 @@ #include "HeartConfig.hpp" #include "IsNan.hpp" #include "MathsCustomFunctions.hpp" +#include "ChasteMathDeviceNamespaces.hpp" +#include "ChasteCpuMacros.hpp" #if CHASTE_SUNDIALS_VERSION >= 60000 #include "CvodeContextManager.hpp" @@ -154,7 +156,7 @@ class Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClampOpt_LookupTables for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane_potential__V_m) { - return 1 / (1 + exp(7.4880000000000004 - 0.16722408026755853 * var_chaste_interface__membrane_potential__V_m)); + return 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(7.4880000000000004) - CHASTE_CONST(0.16722408026755853) * var_chaste_interface__membrane_potential__V_m)); }; const double var_chaste_interface__membrane_potential__V_m = mTableMins[0] + i*mTableSteps[0]; double val = f(var_chaste_interface__membrane_potential__V_m); @@ -165,7 +167,7 @@ class Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClampOpt_LookupTables for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane_potential__V_m) { - return 1 + exp(3.0833333333333335 + 0.041666666666666664 * var_chaste_interface__membrane_potential__V_m); + return 1 + CHASTE_MATH::Exp(CHASTE_CONST(3.0833333333333335) + CHASTE_CONST(0.041666666666666664) * var_chaste_interface__membrane_potential__V_m); }; const double var_chaste_interface__membrane_potential__V_m = mTableMins[0] + i*mTableSteps[0]; double val = f(var_chaste_interface__membrane_potential__V_m); @@ -176,7 +178,7 @@ class Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClampOpt_LookupTables for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane_potential__V_m) { - return 1 / (1 + exp(-0.83333333333333337 - 0.16666666666666666 * var_chaste_interface__membrane_potential__V_m)); + return 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.83333333333333337) - CHASTE_CONST(0.16666666666666666) * var_chaste_interface__membrane_potential__V_m)); }; const double var_chaste_interface__membrane_potential__V_m = mTableMins[0] + i*mTableSteps[0]; double val = f(var_chaste_interface__membrane_potential__V_m); @@ -187,7 +189,7 @@ class Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClampOpt_LookupTables for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane_potential__V_m) { - return 1 - exp(-0.83333333333333337 - 0.16666666666666666 * var_chaste_interface__membrane_potential__V_m); + return 1 - CHASTE_MATH::Exp(-CHASTE_CONST(0.83333333333333337) - CHASTE_CONST(0.16666666666666666) * var_chaste_interface__membrane_potential__V_m); }; const double var_chaste_interface__membrane_potential__V_m = mTableMins[0] + i*mTableSteps[0]; double val = f(var_chaste_interface__membrane_potential__V_m); @@ -198,7 +200,7 @@ class Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClampOpt_LookupTables for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane_potential__V_m) { - return 1 / (1 + exp(3.8888888888888888 + 0.1111111111111111 * var_chaste_interface__membrane_potential__V_m)); + return 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(3.8888888888888888) + CHASTE_CONST(0.1111111111111111) * var_chaste_interface__membrane_potential__V_m)); }; const double var_chaste_interface__membrane_potential__V_m = mTableMins[0] + i*mTableSteps[0]; double val = f(var_chaste_interface__membrane_potential__V_m); @@ -209,7 +211,7 @@ class Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClampOpt_LookupTables for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane_potential__V_m) { - return 0.59999999999999998 / (1 + exp(2.5 - 0.050000000000000003 * var_chaste_interface__membrane_potential__V_m)); + return CHASTE_CONST(0.59999999999999998) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(2.5) - CHASTE_CONST(0.050000000000000003) * var_chaste_interface__membrane_potential__V_m)); }; const double var_chaste_interface__membrane_potential__V_m = mTableMins[0] + i*mTableSteps[0]; double val = f(var_chaste_interface__membrane_potential__V_m); @@ -220,7 +222,7 @@ class Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClampOpt_LookupTables for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane_potential__V_m) { - return 0.02 + 0.019699999999999999 * exp(-0.23877882250000002 * pow((1 + 0.068965517241379309 * var_chaste_interface__membrane_potential__V_m), 2)); + return CHASTE_CONST(0.02) + CHASTE_CONST(0.019699999999999999) * CHASTE_MATH::Exp(-CHASTE_CONST(0.23877882250000002) * CHASTE_MATH::Pow((1 + CHASTE_CONST(0.068965517241379309) * var_chaste_interface__membrane_potential__V_m), 2)); }; const double var_chaste_interface__membrane_potential__V_m = mTableMins[0] + i*mTableSteps[0]; double val = f(var_chaste_interface__membrane_potential__V_m); @@ -231,7 +233,7 @@ class Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClampOpt_LookupTables for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane_potential__V_m) { - return 1 / (1 + exp(-2 - 0.20000000000000001 * var_chaste_interface__membrane_potential__V_m)); + return 1 / (1 + CHASTE_MATH::Exp(-2 - CHASTE_CONST(0.20000000000000001) * var_chaste_interface__membrane_potential__V_m)); }; const double var_chaste_interface__membrane_potential__V_m = mTableMins[0] + i*mTableSteps[0]; double val = f(var_chaste_interface__membrane_potential__V_m); @@ -242,7 +244,7 @@ class Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClampOpt_LookupTables for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane_potential__V_m) { - return 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))); + return 230 / (1 + CHASTE_MATH::Exp(2 + CHASTE_CONST(0.050000000000000003) * var_chaste_interface__membrane_potential__V_m)) + 3300 / ((1 + CHASTE_MATH::Exp(CHASTE_CONST(1.2222222222222223) + CHASTE_CONST(0.1111111111111111) * var_chaste_interface__membrane_potential__V_m)) * (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4444444444444446) - CHASTE_CONST(0.1111111111111111) * var_chaste_interface__membrane_potential__V_m))); }; const double var_chaste_interface__membrane_potential__V_m = mTableMins[0] + i*mTableSteps[0]; double val = f(var_chaste_interface__membrane_potential__V_m); @@ -253,7 +255,7 @@ class Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClampOpt_LookupTables for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane_potential__V_m) { - return 1 / (1 + exp(-0.26666666666666666 - 0.070175438596491224 * var_chaste_interface__membrane_potential__V_m)); + return 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.26666666666666666) - CHASTE_CONST(0.070175438596491224) * var_chaste_interface__membrane_potential__V_m)); }; const double var_chaste_interface__membrane_potential__V_m = mTableMins[0] + i*mTableSteps[0]; double val = f(var_chaste_interface__membrane_potential__V_m); @@ -264,7 +266,7 @@ class Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClampOpt_LookupTables for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane_potential__V_m) { - return 0.00100999899000101 + 0.00100999899000101 * exp(-0.17252124645892353 - 0.070821529745042494 * var_chaste_interface__membrane_potential__V_m); + return CHASTE_CONST(0.00100999899000101) + CHASTE_CONST(0.00100999899000101) * CHASTE_MATH::Exp(-CHASTE_CONST(0.17252124645892353) - CHASTE_CONST(0.070821529745042494) * var_chaste_interface__membrane_potential__V_m); }; const double var_chaste_interface__membrane_potential__V_m = mTableMins[0] + i*mTableSteps[0]; double val = f(var_chaste_interface__membrane_potential__V_m); @@ -275,7 +277,7 @@ class Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClampOpt_LookupTables for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane_potential__V_m) { - return 1 / pow((1 + exp(-6.2967884828349945 - 0.11074197120708749 * var_chaste_interface__membrane_potential__V_m)), 2); + return 1 / CHASTE_MATH::Pow((1 + CHASTE_MATH::Exp(-CHASTE_CONST(6.2967884828349945) - CHASTE_CONST(0.11074197120708749) * var_chaste_interface__membrane_potential__V_m)), 2); }; const double var_chaste_interface__membrane_potential__V_m = mTableMins[0] + i*mTableSteps[0]; double val = f(var_chaste_interface__membrane_potential__V_m); @@ -286,7 +288,7 @@ class Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClampOpt_LookupTables for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane_potential__V_m) { - return 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)); + return CHASTE_CONST(0.12920000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(8.682389366752302) * CHASTE_MATH::Pow((1 + CHASTE_CONST(0.021838829438742085) * var_chaste_interface__membrane_potential__V_m), 2)) + CHASTE_CONST(0.064869999999999997) * CHASTE_MATH::Exp(-CHASTE_CONST(0.0089012876052174655) * CHASTE_MATH::Pow((-1 + CHASTE_CONST(0.2073398299813394) * var_chaste_interface__membrane_potential__V_m), 2)); }; const double var_chaste_interface__membrane_potential__V_m = mTableMins[0] + i*mTableSteps[0]; double val = f(var_chaste_interface__membrane_potential__V_m); @@ -297,7 +299,7 @@ class Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClampOpt_LookupTables for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane_potential__V_m) { - return 1 / (1 + exp(1.4615384615384615 - 0.076923076923076927 * var_chaste_interface__membrane_potential__V_m)); + return 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.4615384615384615) - CHASTE_CONST(0.076923076923076927) * var_chaste_interface__membrane_potential__V_m)); }; const double var_chaste_interface__membrane_potential__V_m = mTableMins[0] + i*mTableSteps[0]; double val = f(var_chaste_interface__membrane_potential__V_m); @@ -308,7 +310,7 @@ class Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClampOpt_LookupTables for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane_potential__V_m) { - return 0.5 + 8.5 * exp(-0.81000000000000005 * pow((1 + 0.022222222222222223 * var_chaste_interface__membrane_potential__V_m), 2)); + return CHASTE_CONST(0.5) + CHASTE_CONST(8.5) * CHASTE_MATH::Exp(-CHASTE_CONST(0.81000000000000005) * CHASTE_MATH::Pow((1 + CHASTE_CONST(0.022222222222222223) * var_chaste_interface__membrane_potential__V_m), 2)); }; const double var_chaste_interface__membrane_potential__V_m = mTableMins[0] + i*mTableSteps[0]; double val = f(var_chaste_interface__membrane_potential__V_m); @@ -319,7 +321,7 @@ class Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClampOpt_LookupTables for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane_potential__V_m) { - return 0.5 + 9 / (1 + exp(0.20000000000000001 + 0.066666666666666666 * var_chaste_interface__membrane_potential__V_m)); + return CHASTE_CONST(0.5) + 9 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(0.20000000000000001) + CHASTE_CONST(0.066666666666666666) * var_chaste_interface__membrane_potential__V_m)); }; const double var_chaste_interface__membrane_potential__V_m = mTableMins[0] + i*mTableSteps[0]; double val = f(var_chaste_interface__membrane_potential__V_m); @@ -330,7 +332,7 @@ class Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClampOpt_LookupTables for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane_potential__V_m) { - return 1 / (1 + exp(3.8999999999999999 + 0.20000000000000001 * var_chaste_interface__membrane_potential__V_m)); + return 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(3.8999999999999999) + CHASTE_CONST(0.20000000000000001) * var_chaste_interface__membrane_potential__V_m)); }; const double var_chaste_interface__membrane_potential__V_m = mTableMins[0] + i*mTableSteps[0]; double val = f(var_chaste_interface__membrane_potential__V_m); @@ -341,7 +343,7 @@ class Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClampOpt_LookupTables for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane_potential__V_m) { - return 7 + 85 * exp(-7.2727272727272725 * pow((1 + 0.025000000000000001 * var_chaste_interface__membrane_potential__V_m), 2)); + return 7 + 85 * CHASTE_MATH::Exp(-CHASTE_CONST(7.2727272727272725) * CHASTE_MATH::Pow((1 + CHASTE_CONST(0.025000000000000001) * var_chaste_interface__membrane_potential__V_m), 2)); }; const double var_chaste_interface__membrane_potential__V_m = mTableMins[0] + i*mTableSteps[0]; double val = f(var_chaste_interface__membrane_potential__V_m); @@ -352,7 +354,7 @@ class Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClampOpt_LookupTables for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane_potential__V_m) { - return 30 + 800 / (1 + exp(6 + 0.10000000000000001 * var_chaste_interface__membrane_potential__V_m)); + return 30 + 800 / (1 + CHASTE_MATH::Exp(6 + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane_potential__V_m)); }; const double var_chaste_interface__membrane_potential__V_m = mTableMins[0] + i*mTableSteps[0]; double val = f(var_chaste_interface__membrane_potential__V_m); @@ -385,7 +387,7 @@ std::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_amplitude_converted = -CHASTE_CONST(9.5) * CHASTE_CAP(); // 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 @@ -419,30 +421,30 @@ std::shared_ptrmHasDefaultStimulusFromCellML = true; - NV_Ith_S(this->mParameters, 0) = 5.3480000000000003e-6; // (var_SR_Fluxes__SR_leak_max) [per_msec] + NV_Ith_S(this->mParameters, 0) = CHASTE_CONST(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, 2) = CHASTE_CONST(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, 5) = CHASTE_CONST(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, 7) = CHASTE_CONST(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, 11) = CHASTE_CONST(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, 17) = CHASTE_CONST(0.34999999999999998); // (var_I_Ki__g_ki_factor) [mS_per_uF] + NV_Ith_S(this->mParameters, 18) = CHASTE_CONST(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, 21) = CHASTE_CONST(4.5); // (var_parameters__IbarNCX) [uA_per_uF] + NV_Ith_S(this->mParameters, 22) = CHASTE_CONST(1.8); // (var_parameters__IbarNaK) [uA_per_uF] + NV_Ith_S(this->mParameters, 23) = CHASTE_CONST(1.3809999999999999e-10); // (var_parameters__Cmem) [farad] NV_Ith_S(this->mParameters, 24) = 310; // (var_parameters__Temp) [kelvin] } @@ -503,7 +505,7 @@ std::shared_ptrmFixedVoltage : NV_Ith_S(rY, 0)); + double var_chaste_interface__membrane_potential__V_m = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -556,19 +558,19 @@ std::shared_ptrGetCapacitance() * var_membrane_potential__I_tot; // uA_per_cm2 + const double var_I_NaK__fnak = 1 / (1 + CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT) + CHASTE_CONST(0.036499999999999998) * (-CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(0.01485884101040119) * NV_Ith_S(mParameters, 8))) * CHASTE_MATH::Exp(-var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // dimensionless + const double var_I_NaK__I_nak_junc = CHASTE_CONST(0.11) * var_I_NaK__fnak * NV_Ith_S(mParameters, 22) * NV_Ith_S(mParameters, 7) / ((1 + 14641 / CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_j, 4)) * (CHASTE_CONST(1.5) + NV_Ith_S(mParameters, 7))); // uA_per_uF + const double var_I_NaK__I_nak_sl = CHASTE_CONST(0.89000000000000001) * var_I_NaK__fnak * NV_Ith_S(mParameters, 22) * NV_Ith_S(mParameters, 7) / ((1 + 14641 / CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_sl, 4)) * (CHASTE_CONST(1.5) + NV_Ith_S(mParameters, 7))); // uA_per_uF + const double var_parameters__Qpow = -31 + CHASTE_CONST(0.10000000000000001) * NV_Ith_S(mParameters, 24); // dimensionless + const double var_parameters__ecl = CHASTE_MATH::Log(NV_Ith_S(mParameters, 4) / NV_Ith_S(mParameters, 6)) / var_parameters__FoRT; // mV + const double var_parameters__ek = CHASTE_MATH::Log(NV_Ith_S(mParameters, 7) / var_chaste_interface__K_Concentration__K_i) / var_parameters__FoRT; // mV + const double var_parameters__ena_junc = CHASTE_MATH::Log(NV_Ith_S(mParameters, 8) / var_chaste_interface__Na_Concentrations__Na_j) / var_parameters__FoRT; // mV + const double var_parameters__ena_sl = CHASTE_MATH::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 = CHASTE_CONST(0.11) * CHASTE_MATH::Pow(CHASTE_CONST(1.5700000000000001), var_parameters__Qpow) * (CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_j, 3) * NV_Ith_S(mParameters, 5) * CHASTE_MATH::Exp(CHASTE_CONST(0.27000000000000002) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT) - CHASTE_MATH::Pow(NV_Ith_S(mParameters, 8), 3) * var_chaste_interface__Ca_Concentrations__Ca_j * CHASTE_MATH::Exp(-CHASTE_CONST(0.72999999999999998) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * NV_Ith_S(mParameters, 21) / ((1 + CHASTE_CONST(0.32000000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(0.72999999999999998) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * (1 + CHASTE_CONST(2.2499999999999996e-8) / CHASTE_MATH::Pow(var_chaste_interface__Ca_Concentrations__Ca_j, 2)) * (CHASTE_CONST(1.3) * CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_j, 3) + CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_j, 3) * NV_Ith_S(mParameters, 5) + CHASTE_MATH::Pow(NV_Ith_S(mParameters, 8), 3) * var_chaste_interface__Ca_Concentrations__Ca_j + CHASTE_CONST(669921.875) * (1 + CHASTE_CONST(278.55153203342621) * var_chaste_interface__Ca_Concentrations__Ca_j) * var_chaste_interface__Ca_Concentrations__Ca_j + CHASTE_CONST(0.0035899999999999999) * CHASTE_MATH::Pow(NV_Ith_S(mParameters, 8), 3) * (1 + CHASTE_CONST(0.00053869674493876331) * CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_j, 3)))); // uA_per_uF + const double var_I_NCX__I_ncx_sl = CHASTE_CONST(0.89000000000000001) * CHASTE_MATH::Pow(CHASTE_CONST(1.5700000000000001), var_parameters__Qpow) * (CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) * NV_Ith_S(mParameters, 5) * CHASTE_MATH::Exp(CHASTE_CONST(0.27000000000000002) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT) - CHASTE_MATH::Pow(NV_Ith_S(mParameters, 8), 3) * var_chaste_interface__Ca_Concentrations__Ca_sl * CHASTE_MATH::Exp(-CHASTE_CONST(0.72999999999999998) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * NV_Ith_S(mParameters, 21) / ((1 + CHASTE_CONST(0.32000000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(0.72999999999999998) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * (1 + CHASTE_CONST(2.2499999999999996e-8) / CHASTE_MATH::Pow(var_chaste_interface__Ca_Concentrations__Ca_sl, 2)) * (CHASTE_CONST(1.3) * CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) + CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) * NV_Ith_S(mParameters, 5) + CHASTE_MATH::Pow(NV_Ith_S(mParameters, 8), 3) * var_chaste_interface__Ca_Concentrations__Ca_sl + CHASTE_CONST(669921.875) * (1 + CHASTE_CONST(278.55153203342621) * var_chaste_interface__Ca_Concentrations__Ca_sl) * var_chaste_interface__Ca_Concentrations__Ca_sl + CHASTE_CONST(0.0035899999999999999) * CHASTE_MATH::Pow(NV_Ith_S(mParameters, 8), 3) * (1 + CHASTE_CONST(0.00053869674493876331) * CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_sl, 3)))); // uA_per_uF + const double var_parameters__pCa = CHASTE_CONST(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 + CHASTE_CONST(0.010148299999999999) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(0.0089999999999999993) * var_parameters__ecl - CHASTE_CONST(6.567e-5) * var_parameters__ena_junc - CHASTE_CONST(0.00053133) * var_parameters__ena_sl + CHASTE_CONST(0.002) * (-var_parameters__ek + var_chaste_interface__membrane_potential__V_m) * var_I_Kp__kp_kp + CHASTE_CONST(0.006029375) * (-var_parameters__ecl + var_chaste_interface__membrane_potential__V_m) / (1 + CHASTE_CONST(0.10000000000000001) / var_chaste_interface__Ca_Concentrations__Ca_j) + CHASTE_CONST(0.048783124999999997) * (-var_parameters__ecl + var_chaste_interface__membrane_potential__V_m) / (1 + CHASTE_CONST(0.10000000000000001) / var_chaste_interface__Ca_Concentrations__Ca_sl) - CHASTE_CONST(3.0321500000000001e-5) * CHASTE_MATH::Log(NV_Ith_S(mParameters, 5) / var_chaste_interface__Ca_Concentrations__Ca_j) / var_parameters__FoRT - CHASTE_CONST(0.00024532850000000001) * CHASTE_MATH::Log(NV_Ith_S(mParameters, 5) / var_chaste_interface__Ca_Concentrations__Ca_sl) / var_parameters__FoRT + CHASTE_CONST(0.0035000000000000001) * CHASTE_MATH::Pow(var_chaste_interface__I_Ks__x_ks, 2) * (-CHASTE_MATH::Log((CHASTE_CONST(0.018329999999999999) * NV_Ith_S(mParameters, 8) + NV_Ith_S(mParameters, 7)) / (CHASTE_CONST(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) + CHASTE_CONST(0.0074029999999999999) * CHASTE_MATH::Pow(CHASTE_CONST(2.3500000000000001), var_parameters__Qpow) * CHASTE_MATH::Pow(var_chaste_interface__Ca_Concentrations__Ca_j, CHASTE_CONST(1.6000000000000001)) / (CHASTE_CONST(5.2281977629563632e-6) + CHASTE_MATH::Pow(var_chaste_interface__Ca_Concentrations__Ca_j, CHASTE_CONST(1.6000000000000001))) + CHASTE_CONST(0.059896999999999999) * CHASTE_MATH::Pow(CHASTE_CONST(2.3500000000000001), var_parameters__Qpow) * CHASTE_MATH::Pow(var_chaste_interface__Ca_Concentrations__Ca_sl, CHASTE_CONST(1.6000000000000001)) / (CHASTE_CONST(5.2281977629563632e-6) + CHASTE_MATH::Pow(var_chaste_interface__Ca_Concentrations__Ca_sl, CHASTE_CONST(1.6000000000000001))) + CHASTE_CONST(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 + CHASTE_CONST(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 + CHASTE_CONST(0.11) * CHASTE_MATH::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) + CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::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]) + CHASTE_CONST(0.89000000000000001) * CHASTE_MATH::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) + CHASTE_CONST(0.4389381125701739) * CHASTE_MATH::Sqrt(NV_Ith_S(mParameters, 7)) * (-var_parameters__ek + var_chaste_interface__membrane_potential__V_m) * NV_Ith_S(mParameters, 17) / ((1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(0.23849999999999999) * var_parameters__ek)) * (CHASTE_CONST(1.02) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(0.23849999999999999) * var_parameters__ek)) + (CHASTE_CONST(0.49124000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(0.080320000000000003) * var_parameters__ek) + CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(0.061749999999999999) * var_parameters__ek)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(0.51429999999999998) * var_parameters__ek - CHASTE_CONST(0.51429999999999998) * var_chaste_interface__membrane_potential__V_m)))) + CHASTE_CONST(3.3749999999999992e-10) * CHASTE_MATH::Pow(CHASTE_CONST(1.8), var_parameters__Qpow) * (-CHASTE_CONST(0.75) * NV_Ith_S(mParameters, 8) + CHASTE_CONST(0.75) * var_chaste_interface__Na_Concentrations__Na_sl * CHASTE_MATH::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 + CHASTE_MATH::Exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) + CHASTE_CONST(6.0749999999999998e-8) * CHASTE_MATH::Pow(CHASTE_CONST(1.8), var_parameters__Qpow) * (-CHASTE_CONST(0.75) * NV_Ith_S(mParameters, 7) + CHASTE_CONST(0.75) * var_chaste_interface__K_Concentration__K_i * CHASTE_MATH::Exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * (1 + CHASTE_CONST(0.099999999999999978) * var_I_Ca__fcaCaMSL + CHASTE_CONST(0.90000000000000002) * var_I_Ca__fcaCaj - CHASTE_CONST(0.099999999999999978) * var_chaste_interface__I_Ca__f_Ca_Bsl - CHASTE_CONST(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 + CHASTE_MATH::Exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) + CHASTE_CONST(3.0374999999999999e-9) * CHASTE_MATH::Pow(CHASTE_CONST(1.8), var_parameters__Qpow) * (-CHASTE_CONST(0.75) * NV_Ith_S(mParameters, 8) + CHASTE_CONST(0.75) * var_chaste_interface__Na_Concentrations__Na_j * CHASTE_MATH::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 + CHASTE_MATH::Exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) + CHASTE_CONST(0.17999999999999997) * CHASTE_MATH::Pow(CHASTE_CONST(1.8), var_parameters__Qpow) * (-CHASTE_CONST(0.34100000000000003) * NV_Ith_S(mParameters, 5) + CHASTE_CONST(0.34100000000000003) * var_chaste_interface__Ca_Concentrations__Ca_sl * CHASTE_MATH::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 + CHASTE_MATH::Exp(2 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) + CHASTE_CONST(1.6200000000000001) * CHASTE_MATH::Pow(CHASTE_CONST(1.8), var_parameters__Qpow) * (-CHASTE_CONST(0.34100000000000003) * NV_Ith_S(mParameters, 5) + CHASTE_CONST(0.34100000000000003) * var_chaste_interface__Ca_Concentrations__Ca_j * CHASTE_MATH::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 + CHASTE_MATH::Exp(2 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double var_chaste_interface__i_ionic = CHASTE_CAP() * var_membrane_potential__I_tot; // uA_per_cm2 const double i_ionic = var_chaste_interface__i_ionic; if (made_new_cvode_vector) @@ -583,7 +585,7 @@ std::shared_ptrmFixedVoltage : NV_Ith_S(rY, 0)); + double var_chaste_interface__membrane_potential__V_m = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -673,19 +675,19 @@ std::shared_ptr= -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__h = (((var_chaste_interface__membrane_potential__V_m >= -40) ? (0) : (CHASTE_CONST(0.057000000000000002) * CHASTE_MATH::Exp(-CHASTE_CONST(11.764705882352942) + CHASTE_CONST(0.14705882352941177) * NV_Ith_S(mParameters, 15) - CHASTE_CONST(0.14705882352941177) * var_chaste_interface__membrane_potential__V_m))) + ((var_chaste_interface__membrane_potential__V_m >= -40) ? (CHASTE_CONST(5.9230769230769234) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.96036036036036043) + CHASTE_CONST(0.0900900900900901) * NV_Ith_S(mParameters, 15) - CHASTE_CONST(0.0900900900900901) * var_chaste_interface__membrane_potential__V_m))) : (310000 * CHASTE_MATH::Exp(CHASTE_CONST(0.34849999999999998) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(0.34849999999999998) * NV_Ith_S(mParameters, 15)) + CHASTE_CONST(2.7000000000000002) * CHASTE_MATH::Exp(CHASTE_CONST(0.079000000000000001) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(0.079000000000000001) * NV_Ith_S(mParameters, 15))))) * (-var_chaste_interface__I_Na__h + CHASTE_CONST(0.01) * NV_Ith_S(mParameters, 14) + (1 - CHASTE_CONST(0.01) * NV_Ith_S(mParameters, 14)) / CHASTE_MATH::Pow((1 + CHASTE_MATH::Exp(CHASTE_CONST(9.6298788694481825) + CHASTE_CONST(0.13458950201884254) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(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) : ((CHASTE_CONST(37.780000000000001) + var_chaste_interface__membrane_potential__V_m) * (-25428 * CHASTE_MATH::Exp(CHASTE_CONST(0.24440000000000001) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(0.24440000000000001) * NV_Ith_S(mParameters, 15)) - CHASTE_CONST(6.9480000000000002e-6) * CHASTE_MATH::Exp(CHASTE_CONST(0.043909999999999998) * NV_Ith_S(mParameters, 15) - CHASTE_CONST(0.043909999999999998) * var_chaste_interface__membrane_potential__V_m)) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(24.640530000000002) + CHASTE_CONST(0.311) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(0.311) * NV_Ith_S(mParameters, 15))))) + ((var_chaste_interface__membrane_potential__V_m >= -40) ? (CHASTE_CONST(0.59999999999999998) * CHASTE_MATH::Exp(CHASTE_CONST(0.057000000000000002) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(0.057000000000000002) * NV_Ith_S(mParameters, 15)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.2000000000000002) + CHASTE_CONST(0.10000000000000001) * NV_Ith_S(mParameters, 15) - CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane_potential__V_m))) : (CHASTE_CONST(0.024240000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.01052) * NV_Ith_S(mParameters, 15) - CHASTE_CONST(0.01052) * var_chaste_interface__membrane_potential__V_m) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(5.5312920000000005) + CHASTE_CONST(0.13780000000000001) * NV_Ith_S(mParameters, 15) - CHASTE_CONST(0.13780000000000001) * var_chaste_interface__membrane_potential__V_m))))) * (-var_chaste_interface__I_Na__j + CHASTE_CONST(0.01) * NV_Ith_S(mParameters, 14) + (1 - CHASTE_CONST(0.01) * NV_Ith_S(mParameters, 14)) / CHASTE_MATH::Pow((1 + CHASTE_MATH::Exp(CHASTE_CONST(9.6298788694481825) + CHASTE_CONST(0.13458950201884254) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(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 @@ -694,60 +696,60 @@ std::shared_ptrGetCapacitance() - (-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 + const double var_parameters__ecl = CHASTE_MATH::Log(NV_Ith_S(mParameters, 4) / NV_Ith_S(mParameters, 6)) / var_parameters__FoRT; // mV + const double var_parameters__ek = CHASTE_MATH::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 + CHASTE_CONST(0.0089999999999999993) * var_parameters__ecl - CHASTE_CONST(0.0089999999999999993) * var_chaste_interface__membrane_potential__V_m - CHASTE_STIM(var_chaste_interface__environment__time) / CHASTE_CAP() - (-CHASTE_EXP_VOLT(var_chaste_interface__environment__time) + var_chaste_interface__membrane_potential__V_m) * NV_Ith_S(mParameters, 12) - CHASTE_CONST(0.002) * (-var_parameters__ek + var_chaste_interface__membrane_potential__V_m) * var_I_Kp__kp_kp - CHASTE_CONST(0.006029375) * (-var_parameters__ecl + var_chaste_interface__membrane_potential__V_m) / (1 + CHASTE_CONST(0.10000000000000001) / var_chaste_interface__Ca_Concentrations__Ca_j) - CHASTE_CONST(0.048783124999999997) * (-var_parameters__ecl + var_chaste_interface__membrane_potential__V_m) / (1 + CHASTE_CONST(0.10000000000000001) / var_chaste_interface__Ca_Concentrations__Ca_sl) - CHASTE_CONST(0.0035000000000000001) * CHASTE_MATH::Pow(var_chaste_interface__I_Ks__x_ks, 2) * (-CHASTE_MATH::Log((CHASTE_CONST(0.018329999999999999) * NV_Ith_S(mParameters, 8) + NV_Ith_S(mParameters, 7)) / (CHASTE_CONST(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) - CHASTE_CONST(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 - CHASTE_CONST(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 - CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::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]) - CHASTE_CONST(0.4389381125701739) * CHASTE_MATH::Sqrt(NV_Ith_S(mParameters, 7)) * (-var_parameters__ek + var_chaste_interface__membrane_potential__V_m) * NV_Ith_S(mParameters, 17) / ((1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(0.23849999999999999) * var_parameters__ek)) * (CHASTE_CONST(1.02) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(0.23849999999999999) * var_parameters__ek)) + (CHASTE_CONST(0.49124000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(0.080320000000000003) * var_parameters__ek) + CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(0.061749999999999999) * var_parameters__ek)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(0.51429999999999998) * var_parameters__ek - CHASTE_CONST(0.51429999999999998) * var_chaste_interface__membrane_potential__V_m)))) - CHASTE_CONST(6.0749999999999998e-8) * CHASTE_MATH::Pow(CHASTE_CONST(1.8), var_parameters__Qpow) * (-CHASTE_CONST(0.75) * NV_Ith_S(mParameters, 7) + CHASTE_CONST(0.75) * var_chaste_interface__K_Concentration__K_i * CHASTE_MATH::Exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)) * (1 + CHASTE_CONST(0.099999999999999978) * var_I_Ca__fcaCaMSL + CHASTE_CONST(0.90000000000000002) * var_I_Ca__fcaCaj - CHASTE_CONST(0.099999999999999978) * var_chaste_interface__I_Ca__f_Ca_Bsl - CHASTE_CONST(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 + CHASTE_MATH::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; @@ -806,7 +808,7 @@ std::shared_ptrmFixedVoltage : NV_Ith_S(rY, 0)); + double var_chaste_interface__membrane_potential__V_m = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -864,15 +866,15 @@ std::shared_ptr= -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__ah = ((var_chaste_interface__membrane_potential__V_m >= -40) ? (0) : (CHASTE_CONST(0.057000000000000002) * CHASTE_MATH::Exp(-CHASTE_CONST(11.764705882352942) + CHASTE_CONST(0.14705882352941177) * NV_Ith_S(mParameters, 15) - CHASTE_CONST(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) : ((CHASTE_CONST(37.780000000000001) + var_chaste_interface__membrane_potential__V_m) * (-25428 * CHASTE_MATH::Exp(CHASTE_CONST(0.24440000000000001) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(0.24440000000000001) * NV_Ith_S(mParameters, 15)) - CHASTE_CONST(6.9480000000000002e-6) * CHASTE_MATH::Exp(CHASTE_CONST(0.043909999999999998) * NV_Ith_S(mParameters, 15) - CHASTE_CONST(0.043909999999999998) * var_chaste_interface__membrane_potential__V_m)) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(24.640530000000002) + CHASTE_CONST(0.311) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(0.311) * NV_Ith_S(mParameters, 15))))); // dimensionless + const double var_I_Na__bh = ((var_chaste_interface__membrane_potential__V_m >= -40) ? (CHASTE_CONST(5.9230769230769234) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.96036036036036043) + CHASTE_CONST(0.0900900900900901) * NV_Ith_S(mParameters, 15) - CHASTE_CONST(0.0900900900900901) * var_chaste_interface__membrane_potential__V_m))) : (310000 * CHASTE_MATH::Exp(CHASTE_CONST(0.34849999999999998) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(0.34849999999999998) * NV_Ith_S(mParameters, 15)) + CHASTE_CONST(2.7000000000000002) * CHASTE_MATH::Exp(CHASTE_CONST(0.079000000000000001) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(0.079000000000000001) * NV_Ith_S(mParameters, 15)))); // dimensionless + const double var_I_Na__bj = ((var_chaste_interface__membrane_potential__V_m >= -40) ? (CHASTE_CONST(0.59999999999999998) * CHASTE_MATH::Exp(CHASTE_CONST(0.057000000000000002) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(0.057000000000000002) * NV_Ith_S(mParameters, 15)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.2000000000000002) + CHASTE_CONST(0.10000000000000001) * NV_Ith_S(mParameters, 15) - CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane_potential__V_m))) : (CHASTE_CONST(0.024240000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.01052) * NV_Ith_S(mParameters, 15) - CHASTE_CONST(0.01052) * var_chaste_interface__membrane_potential__V_m) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(5.5312920000000005) + CHASTE_CONST(0.13780000000000001) * NV_Ith_S(mParameters, 15) - CHASTE_CONST(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 @@ -880,96 +882,96 @@ std::shared_ptrGetCapacitance() * 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_NaK__I_nak_converted = CHASTE_CAP() * var_I_NaK__I_nak; // uA_per_cm2 + const double var_parameters__Qpow = -31 + CHASTE_CONST(0.10000000000000001) * NV_Ith_S(mParameters, 24); // dimensionless + const double var_I_PCa__I_pca_junc = CHASTE_MATH::Pow(var_chaste_interface__Ca_Concentrations__Ca_j, CHASTE_CONST(1.6000000000000001)) * CHASTE_MATH::Pow(var_parameters__Q10SLCaP, var_parameters__Qpow) * var_parameters__Fjunc * var_parameters__IbarSLCaP / (CHASTE_MATH::Pow(var_chaste_interface__Ca_Concentrations__Ca_j, CHASTE_CONST(1.6000000000000001)) + CHASTE_MATH::Pow(var_parameters__KmPCa, CHASTE_CONST(1.6000000000000001))); // uA_per_uF + const double var_I_PCa__I_pca_sl = CHASTE_MATH::Pow(var_chaste_interface__Ca_Concentrations__Ca_sl, CHASTE_CONST(1.6000000000000001)) * CHASTE_MATH::Pow(var_parameters__Q10SLCaP, var_parameters__Qpow) * var_parameters__Fsl * var_parameters__IbarSLCaP / (CHASTE_MATH::Pow(var_chaste_interface__Ca_Concentrations__Ca_sl, CHASTE_CONST(1.6000000000000001)) + CHASTE_MATH::Pow(var_parameters__KmPCa, CHASTE_CONST(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_PCa__I_pca_converted = CHASTE_CAP() * var_I_PCa__I_pca; // uA_per_cm2 + const double var_parameters__ecl = CHASTE_MATH::Log(NV_Ith_S(mParameters, 4) / NV_Ith_S(mParameters, 6)) / var_parameters__FoRT; // mV + const double var_parameters__ek = CHASTE_MATH::Log(NV_Ith_S(mParameters, 7) / var_chaste_interface__K_Concentration__K_i) / var_parameters__FoRT; // mV + const double var_I_Ki__aki = CHASTE_CONST(1.02) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(0.23849999999999999) * var_parameters__ek)); // dimensionless + const double var_I_Ki__bki = (CHASTE_CONST(0.49124000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(0.080320000000000003) * var_parameters__ek) + CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__membrane_potential__V_m - CHASTE_CONST(0.061749999999999999) * var_parameters__ek)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(0.51429999999999998) * var_parameters__ek - CHASTE_CONST(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_Ki__I_ki_converted = CHASTE_CAP() * 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_Kr__I_kr_converted = CHASTE_CAP() * var_I_Kr__I_kr; // uA_per_cm2 + const double var_parameters__ena_junc = CHASTE_MATH::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 = CHASTE_MATH::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 = CHASTE_MATH::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 = CHASTE_MATH::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_I_Na__I_Na_converted = CHASTE_CAP() * 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__GtoFast = ((var_parameters__epi == 1) ? (CHASTE_CONST(0.1144) * NV_Ith_S(mParameters, 16)) : (CHASTE_CONST(0.0014039999999999999) * NV_Ith_S(mParameters, 16))); // mS_per_uF + const double var_I_to__GtoSlow = ((var_parameters__epi == 1) ? (CHASTE_CONST(0.015599999999999999) * NV_Ith_S(mParameters, 20)) : (CHASTE_CONST(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_tof_converted = CHASTE_CAP() * 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_I_to__I_to_converted = CHASTE_CAP() * var_I_to__I_to; // uA_per_cm2 + const double var_I_to__I_tos_converted = CHASTE_CAP() * var_I_to__I_tos; // uA_per_cm2 + const double var_parameters__hillSRCaP = CHASTE_CONST(1.7869999999999999); // dimensionless + const double var_SR_Fluxes__J_serca = CHASTE_MATH::Pow(var_parameters__Q10SRCaP, var_parameters__Qpow) * (CHASTE_MATH::Pow((var_chaste_interface__Ca_Concentrations__Ca_i / var_parameters__Kmf), var_parameters__hillSRCaP) - CHASTE_MATH::Pow((var_chaste_interface__SR_Ca_Concentrations__Ca_sr / var_parameters__Kmr), var_parameters__hillSRCaP)) * NV_Ith_S(mParameters, 2) / (1 + CHASTE_MATH::Pow((var_chaste_interface__Ca_Concentrations__Ca_i / var_parameters__Kmf), var_parameters__hillSRCaP) + CHASTE_MATH::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_parameters__ksat = CHASTE_CONST(0.32000000000000001); // dimensionless + const double var_parameters__nu = CHASTE_CONST(0.27000000000000002); // dimensionless + const double var_I_NCX__s1_junc = CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_j, 3) * NV_Ith_S(mParameters, 5) * CHASTE_MATH::Exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * var_parameters__nu); // mM4 + const double var_I_NCX__s1_sl = CHASTE_MATH::Pow(var_chaste_interface__Na_Concentrations__Na_sl, 3) * NV_Ith_S(mParameters, 5) * CHASTE_MATH::Exp(var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT * var_parameters__nu); // mM4 + const double var_I_NCX__s2_junc = CHASTE_MATH::Pow(NV_Ith_S(mParameters, 8), 3) * var_chaste_interface__Ca_Concentrations__Ca_j * CHASTE_MATH::Exp((-1 + var_parameters__nu) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT); // mM4 + const double var_I_NCX__I_ncx_junc = CHASTE_MATH::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 * CHASTE_MATH::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 = CHASTE_MATH::Pow(NV_Ith_S(mParameters, 8), 3) * var_chaste_interface__Ca_Concentrations__Ca_sl * CHASTE_MATH::Exp((-1 + var_parameters__nu) * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT); // mM4 + const double var_I_NCX__I_ncx_sl = CHASTE_MATH::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 * CHASTE_MATH::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_NCX__I_ncx_converted = CHASTE_CAP() * var_I_NCX__I_ncx; // uA_per_cm2 + const double var_parameters__pCa = CHASTE_CONST(0.00054000000000000001) * NV_Ith_S(mParameters, 11); // cm_per_sec + const double var_I_Ca__ibarca_j = 4 * (-CHASTE_CONST(0.34100000000000003) * NV_Ith_S(mParameters, 5) + CHASTE_CONST(0.34100000000000003) * var_chaste_interface__Ca_Concentrations__Ca_j * CHASTE_MATH::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 + CHASTE_MATH::Exp(2 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double var_I_Ca__I_Ca_junc = CHASTE_CONST(0.45000000000000001) * CHASTE_MATH::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 * (-CHASTE_CONST(0.34100000000000003) * NV_Ith_S(mParameters, 5) + CHASTE_CONST(0.34100000000000003) * var_chaste_interface__Ca_Concentrations__Ca_sl * CHASTE_MATH::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 + CHASTE_MATH::Exp(2 * var_chaste_interface__membrane_potential__V_m * var_parameters__FoRT)); // uA_per_uF + const double var_I_Ca__I_Ca_sl = CHASTE_CONST(0.45000000000000001) * CHASTE_MATH::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 + const double var_I_Ca__I_Ca_converted = CHASTE_CAP() * var_I_Ca__I_Ca; // uA_per_cm2 + const double var_parameters__pNaK = CHASTE_CONST(0.018329999999999999); // dimensionless + const double var_I_Ks__eks = CHASTE_MATH::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 = CHASTE_MATH::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 = CHASTE_CAP() * var_I_Ks__I_ks; // uA_per_cm2 #if CHASTE_SUNDIALS_VERSION >= 60000 N_Vector dqs = N_VNew_Serial(27, CvodeContextManager::Instance()->GetSundialsContext()); @@ -1423,4 +1425,5 @@ void OdeSystemInformation #include "AbstractStimulusFunction.hpp" +#if USING_DEVICE_COMPILER +#include "StimulusEvaluatorCuda.hpp" +#endif #include "AbstractCvodeCellWithDataClamp.hpp" +#include "HostDeviceMacros.hpp" class Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClampOpt : public AbstractCvodeCellWithDataClamp { @@ -40,6 +44,10 @@ class Cellgrandi_pasqualini_bers_2010_ssFromCellMLCvodeDataClampOpt : public Abs 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: + static constexpr unsigned TOTAL_SIZE = 39u; + static constexpr unsigned NNZ = 0u; + static inline const int sparse_rowptr[] = { }; + static inline const int sparse_colind[] = { }; boost::shared_ptr UseCellMLDefaultStimulus(); double GetIntracellularCalciumConcentration(); @@ -49,7 +57,11 @@ const bool is_probability[39] = {false, false, true, true, true, false, false, f 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); +#if USING_DEVICE_COMPILER + +#endif }; // Needs to be included last @@ -86,4 +98,7 @@ namespace boost } #endif // CELLGRANDI_PASQUALINI_BERS_2010_SSFROMCELLMLCVODEDATACLAMPOPT_HPP_ + + + #endif // CHASTE_CVODE \ No newline at end of file diff --git a/chaste_codegen/data/tests/chaste_reference_models/CVODE_DATA_CLAMP_OPT/hodgkin_huxley_squid_axon_model_1952_modified.cpp b/chaste_codegen/data/tests/chaste_reference_models/CVODE_DATA_CLAMP_OPT/hodgkin_huxley_squid_axon_model_1952_modified.cpp index c1e38f90a..4e564317a 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/CVODE_DATA_CLAMP_OPT/hodgkin_huxley_squid_axon_model_1952_modified.cpp +++ b/chaste_codegen/data/tests/chaste_reference_models/CVODE_DATA_CLAMP_OPT/hodgkin_huxley_squid_axon_model_1952_modified.cpp @@ -22,6 +22,8 @@ #include "HeartConfig.hpp" #include "IsNan.hpp" #include "MathsCustomFunctions.hpp" +#include "ChasteMathDeviceNamespaces.hpp" +#include "ChasteCpuMacros.hpp" #if CHASTE_SUNDIALS_VERSION >= 60000 #include "CvodeContextManager.hpp" @@ -148,7 +150,7 @@ class Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeDataClampO for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return (((6.5 + 0.10000000000000001 * 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)))); + return (((CHASTE_CONST(6.5) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V >= -CHASTE_CONST(9.9999999999999995e-8)) && (CHASTE_CONST(6.5) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V <= CHASTE_CONST(9.9999999999999995e-8))) ? (CHASTE_CONST(0.42499999999999999) + CHASTE_CONST(0.0050000000000000001) * var_chaste_interface__membrane__V) : (-CHASTE_CONST(0.099999999999999992) * (CHASTE_CONST(6.5) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(6.5) - CHASTE_CONST(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); @@ -170,7 +172,7 @@ class Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeDataClampO for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(0.9375 + 0.012500000000000001 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(CHASTE_CONST(0.9375) + CHASTE_CONST(0.012500000000000001) * 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); @@ -181,7 +183,7 @@ class Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeDataClampO for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(-3.75 - 0.050000000000000003 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(-CHASTE_CONST(3.75) - CHASTE_CONST(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); @@ -192,7 +194,7 @@ class Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeDataClampO for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 + exp(-4.5 - 0.10000000000000001 * var_chaste_interface__membrane__V); + return 1 + CHASTE_MATH::Exp(-CHASTE_CONST(4.5) - CHASTE_CONST(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); @@ -203,7 +205,7 @@ class Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeDataClampO for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return (((5 + 0.10000000000000001 * var_chaste_interface__membrane__V >= -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)))); + return (((5 + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V >= -CHASTE_CONST(9.9999999999999995e-8)) && (5 + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V <= CHASTE_CONST(9.9999999999999995e-8))) ? (CHASTE_CONST(3.5) + CHASTE_CONST(0.050000000000000003) * var_chaste_interface__membrane__V) : (-(5 + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(-5 - CHASTE_CONST(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); @@ -225,7 +227,7 @@ class Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeDataClampO for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(-4.166666666666667 - 0.055555555555555552 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(-CHASTE_CONST(4.166666666666667) - CHASTE_CONST(0.055555555555555552) * 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); @@ -259,7 +261,7 @@ std::shared_ptr p_cellml_stim(new RegularStimulus( @@ -290,7 +292,7 @@ std::shared_ptrmParameters, 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, 3) = CHASTE_CONST(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] } @@ -351,7 +353,7 @@ std::shared_ptrmFixedVoltage : NV_Ith_S(rY, 0)); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -361,9 +363,9 @@ std::shared_ptrmFixedVoltage : NV_Ith_S(rY, 0)); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -398,8 +400,8 @@ std::shared_ptrmFixedVoltage : NV_Ith_S(rY, 0)); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -433,20 +435,20 @@ std::shared_ptr= 60000 N_Vector dqs = N_VNew_Serial(6, CvodeContextManager::Instance()->GetSundialsContext()); @@ -540,4 +542,5 @@ void OdeSystemInformation #include "AbstractStimulusFunction.hpp" +#if USING_DEVICE_COMPILER +#include "StimulusEvaluatorCuda.hpp" +#endif #include "AbstractCvodeCellWithDataClamp.hpp" +#include "HostDeviceMacros.hpp" class Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeDataClampOpt : public AbstractCvodeCellWithDataClamp { @@ -38,6 +42,10 @@ class Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeDataClampO const bool is_concentration[4] = {false, false, false, false}; const bool is_probability[4] = {false, false, false, false}; public: + static constexpr unsigned TOTAL_SIZE = 4u; + static constexpr unsigned NNZ = 0u; + static inline const int sparse_rowptr[] = { }; + static inline const int sparse_colind[] = { }; boost::shared_ptr UseCellMLDefaultStimulus(); Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeDataClampOpt(boost::shared_ptr pOdeSolver /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus); @@ -46,7 +54,11 @@ const bool is_probability[4] = {false, false, false, false}; 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); +#if USING_DEVICE_COMPILER + +#endif }; // Needs to be included last @@ -83,4 +95,7 @@ namespace boost } #endif // CELLHODGKIN_HUXLEY_SQUID_AXON_MODEL_1952_MODIFIEDFROMCELLMLCVODEDATACLAMPOPT_HPP_ + + + #endif // CHASTE_CVODE \ No newline at end of file diff --git a/chaste_codegen/data/tests/chaste_reference_models/Cvode/difrancesco_noble_model_1985.cpp b/chaste_codegen/data/tests/chaste_reference_models/Cvode/difrancesco_noble_model_1985.cpp index ec8ce516f..2d689b21f 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/Cvode/difrancesco_noble_model_1985.cpp +++ b/chaste_codegen/data/tests/chaste_reference_models/Cvode/difrancesco_noble_model_1985.cpp @@ -22,6 +22,8 @@ #include "HeartConfig.hpp" #include "IsNan.hpp" #include "MathsCustomFunctions.hpp" +#include "ChasteMathDeviceNamespaces.hpp" +#include "ChasteCpuMacros.hpp" #if CHASTE_SUNDIALS_VERSION >= 60000 #include "CvodeContextManager.hpp" @@ -34,7 +36,7 @@ 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_amplitude_converted = -CHASTE_CONST(0.5) * CHASTE_CAP() / 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 @@ -69,14 +71,14 @@ 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, 1) = CHASTE_CONST(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, 8) = CHASTE_CONST(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] @@ -84,8 +86,8 @@ 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] + NV_Ith_S(this->mParameters, 16) = CHASTE_CONST(0.02); // (var_Na_Ca_exchanger__K_NaCa) [nanoA] + NV_Ith_S(this->mParameters, 17) = CHASTE_CONST(0.28000000000000003); // (var_transient_outward_current__g_to) [microS_per_millimolar] } Celldifrancesco_noble_model_1985FromCellMLCvode::~Celldifrancesco_noble_model_1985FromCellMLCvode() @@ -141,7 +143,7 @@ made_new_cvode_vector = true; rY = MakeNVector(*pStateVariables); } - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -168,48 +170,48 @@ 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__d_NaCa = CHASTE_CONST(0.001); // dimensionless + const double var_Na_Ca_exchanger__gamma = CHASTE_CONST(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_calcium_background_current__g_Cab = CHASTE_CONST(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__F = CHASTE_CONST(96485.341499999995); // coulomb_per_mole + const double var_membrane__R = CHASTE_CONST(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__E_Ca = CHASTE_CONST(0.5) * var_membrane__RTONF * CHASTE_MATH::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 * CHASTE_MATH::Log((NV_Ith_S(mParameters, 6) + CHASTE_CONST(0.12) * var_chaste_interface__extracellular_potassium_concentration__Kc) / (var_chaste_interface__intracellular_sodium_concentration__Nai + CHASTE_CONST(0.12) * var_chaste_interface__intracellular_potassium_concentration__Ki)); // millivolt + const double var_hyperpolarising_activated_current__E_K = var_membrane__RTONF * CHASTE_MATH::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 * CHASTE_MATH::Log(NV_Ith_S(mParameters, 6) / var_chaste_interface__intracellular_sodium_concentration__Nai); // millivolt + const double var_Na_Ca_exchanger__i_NaCa = (CHASTE_MATH::Pow(var_chaste_interface__intracellular_sodium_concentration__Nai, var_Na_Ca_exchanger__n_NaCa) * NV_Ith_S(mParameters, 5) * CHASTE_MATH::Exp((-2 + var_Na_Ca_exchanger__n_NaCa) * var_Na_Ca_exchanger__gamma * var_chaste_interface__membrane__V / var_membrane__RTONF) - CHASTE_MATH::Pow(NV_Ith_S(mParameters, 6), var_Na_Ca_exchanger__n_NaCa) * var_chaste_interface__intracellular_calcium_concentration__Cai * CHASTE_MATH::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 + CHASTE_CONST(144.92753623188406) * var_chaste_interface__intracellular_calcium_concentration__Cai) * (1 + (CHASTE_MATH::Pow(NV_Ith_S(mParameters, 6), var_Na_Ca_exchanger__n_NaCa) * var_chaste_interface__intracellular_calcium_concentration__Cai + CHASTE_MATH::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 = CHASTE_CONST(0.001) * CHASTE_CAP() * 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_fast_sodium_current__i_Na = CHASTE_MATH::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 = CHASTE_CONST(0.001) * CHASTE_CAP() * 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_hyperpolarising_activated_current__i_f_converted = CHASTE_CONST(0.001) * CHASTE_CAP() * 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 >= CHASTE_CONST(49.999998664311967)) && (var_chaste_interface__membrane__V <= CHASTE_CONST(50.000001335688033))) ? (CHASTE_CONST(374338.90823576227) * (-CHASTE_CONST(49.999998664311967) + var_chaste_interface__membrane__V) * (CHASTE_CONST(1.9999999999556149e-7) * (var_chaste_interface__intracellular_calcium_concentration__Cai * CHASTE_MATH::Exp(CHASTE_CONST(3.7433890822745473)) - NV_Ith_S(mParameters, 5) * CHASTE_MATH::Exp(CHASTE_CONST(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 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999997780743e-8))) + CHASTE_CONST(1.9999999999556149e-7) * (var_chaste_interface__intracellular_calcium_concentration__Cai * CHASTE_MATH::Exp(CHASTE_CONST(3.7433890822745473)) - NV_Ith_S(mParameters, 5) * CHASTE_MATH::Exp(-CHASTE_CONST(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 - CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999997780743e-8)))) - CHASTE_CONST(1.9999999999556149e-7) * (var_chaste_interface__intracellular_calcium_concentration__Cai * CHASTE_MATH::Exp(CHASTE_CONST(3.7433890822745473)) - NV_Ith_S(mParameters, 5) * CHASTE_MATH::Exp(CHASTE_CONST(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 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999997780743e-8)))) : (CHASTE_CONST(0.14973556329098189) * (-50 + var_chaste_interface__membrane__V) * (var_chaste_interface__intracellular_calcium_concentration__Cai * CHASTE_MATH::Exp(CHASTE_CONST(3.7433890822745473)) - NV_Ith_S(mParameters, 5) * CHASTE_MATH::Exp(CHASTE_CONST(3.7433890822745473) - CHASTE_CONST(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 - CHASTE_MATH::Exp(CHASTE_CONST(3.7433890822745473) - CHASTE_CONST(0.074867781645490947) * var_chaste_interface__membrane__V)))); // nanoA + const double var_second_inward_current__i_siK = (((var_chaste_interface__membrane__V >= CHASTE_CONST(49.999997328623934)) && (var_chaste_interface__membrane__V <= CHASTE_CONST(50.000002671376066))) ? (CHASTE_CONST(187169.45411399176) * (-CHASTE_CONST(49.999997328623934) + var_chaste_interface__membrane__V) * (CHASTE_CONST(9.9999999999858744e-10) * (var_chaste_interface__intracellular_potassium_concentration__Ki * CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736)) - var_chaste_interface__extracellular_potassium_concentration__Kc * CHASTE_MATH::Exp(CHASTE_CONST(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 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999858739e-8))) + CHASTE_CONST(9.9999999999858744e-10) * (var_chaste_interface__intracellular_potassium_concentration__Ki * CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736)) - var_chaste_interface__extracellular_potassium_concentration__Kc * CHASTE_MATH::Exp(-CHASTE_CONST(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 - CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999858739e-8)))) - CHASTE_CONST(9.9999999999858744e-10) * (var_chaste_interface__intracellular_potassium_concentration__Ki * CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736)) - var_chaste_interface__extracellular_potassium_concentration__Kc * CHASTE_MATH::Exp(CHASTE_CONST(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 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999858739e-8)))) : (CHASTE_CONST(0.00037433890822745472) * (-50 + var_chaste_interface__membrane__V) * (var_chaste_interface__intracellular_potassium_concentration__Ki * CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736)) - var_chaste_interface__extracellular_potassium_concentration__Kc * CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736) - CHASTE_CONST(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 - CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736) - CHASTE_CONST(0.037433890822745473) * var_chaste_interface__membrane__V)))); // nanoA + const double var_second_inward_current__i_siNa = (((var_chaste_interface__membrane__V >= CHASTE_CONST(49.999997328623934)) && (var_chaste_interface__membrane__V <= CHASTE_CONST(50.000002671376066))) ? (CHASTE_CONST(187169.45411399176) * (-CHASTE_CONST(49.999997328623934) + var_chaste_interface__membrane__V) * (CHASTE_CONST(9.9999999999858744e-10) * (var_chaste_interface__intracellular_sodium_concentration__Nai * CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736)) - NV_Ith_S(mParameters, 6) * CHASTE_MATH::Exp(CHASTE_CONST(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 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999858739e-8))) + CHASTE_CONST(9.9999999999858744e-10) * (var_chaste_interface__intracellular_sodium_concentration__Nai * CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736)) - NV_Ith_S(mParameters, 6) * CHASTE_MATH::Exp(-CHASTE_CONST(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 - CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999858739e-8)))) - CHASTE_CONST(9.9999999999858744e-10) * (var_chaste_interface__intracellular_sodium_concentration__Nai * CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736)) - NV_Ith_S(mParameters, 6) * CHASTE_MATH::Exp(CHASTE_CONST(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 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999858739e-8)))) : (CHASTE_CONST(0.00037433890822745472) * (-50 + var_chaste_interface__membrane__V) * (var_chaste_interface__intracellular_sodium_concentration__Nai * CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736)) - NV_Ith_S(mParameters, 6) * CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736) - CHASTE_CONST(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 - CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736) - CHASTE_CONST(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_second_inward_current__i_si_converted = CHASTE_CONST(0.001) * CHASTE_CAP() * var_second_inward_current__i_si / NV_Ith_S(mParameters, 8); // uA_per_cm2 + const double var_sodium_background_current__g_Nab = CHASTE_CONST(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 = CHASTE_CONST(0.0071428571428571426) * (-var_chaste_interface__extracellular_potassium_concentration__Kc * CHASTE_MATH::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_dependent_potassium_current__i_K_converted = CHASTE_CONST(0.001) * CHASTE_CAP() * 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 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 + CHASTE_MATH::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 = CHASTE_CONST(0.001) * CHASTE_CAP() * 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 >= -CHASTE_CONST(10.000000500000001)) && (var_chaste_interface__membrane__V <= -CHASTE_CONST(9.9999994999999995))) ? (CHASTE_CONST(999999.99999899988) * (CHASTE_CONST(10.000000500000001) + var_chaste_interface__membrane__V) * (CHASTE_CONST(5.0000000000050004e-7) * (CHASTE_CONST(0.20000000000000001) + var_chaste_interface__extracellular_potassium_concentration__Kc / (10 + var_chaste_interface__extracellular_potassium_concentration__Kc)) * (var_chaste_interface__intracellular_potassium_concentration__Ki * CHASTE_MATH::Exp(-CHASTE_CONST(0.18716946347220006)) - var_chaste_interface__extracellular_potassium_concentration__Kc * CHASTE_MATH::Exp(CHASTE_CONST(0.18716946347220006))) * var_chaste_interface__intracellular_calcium_concentration__Cai * NV_Ith_S(mParameters, 17) * var_chaste_interface__transient_outward_current_s_gate__s / ((1 - CHASTE_MATH::Exp(CHASTE_CONST(1.0000000000010001e-7))) * (CHASTE_CONST(0.00050000000000000001) + var_chaste_interface__intracellular_calcium_concentration__Cai)) + CHASTE_CONST(5.0000000000050004e-7) * (CHASTE_CONST(0.20000000000000001) + var_chaste_interface__extracellular_potassium_concentration__Kc / (10 + var_chaste_interface__extracellular_potassium_concentration__Kc)) * (var_chaste_interface__intracellular_potassium_concentration__Ki * CHASTE_MATH::Exp(-CHASTE_CONST(0.18716944475525465)) - var_chaste_interface__extracellular_potassium_concentration__Kc * CHASTE_MATH::Exp(CHASTE_CONST(0.18716944475525465))) * var_chaste_interface__intracellular_calcium_concentration__Cai * NV_Ith_S(mParameters, 17) * var_chaste_interface__transient_outward_current_s_gate__s / ((1 - CHASTE_MATH::Exp(-CHASTE_CONST(1.0000000000010001e-7))) * (CHASTE_CONST(0.00050000000000000001) + var_chaste_interface__intracellular_calcium_concentration__Cai))) - CHASTE_CONST(5.0000000000050004e-7) * (CHASTE_CONST(0.20000000000000001) + var_chaste_interface__extracellular_potassium_concentration__Kc / (10 + var_chaste_interface__extracellular_potassium_concentration__Kc)) * (var_chaste_interface__intracellular_potassium_concentration__Ki * CHASTE_MATH::Exp(-CHASTE_CONST(0.18716946347220006)) - var_chaste_interface__extracellular_potassium_concentration__Kc * CHASTE_MATH::Exp(CHASTE_CONST(0.18716946347220006))) * var_chaste_interface__intracellular_calcium_concentration__Cai * NV_Ith_S(mParameters, 17) * var_chaste_interface__transient_outward_current_s_gate__s / ((1 - CHASTE_MATH::Exp(CHASTE_CONST(1.0000000000010001e-7))) * (CHASTE_CONST(0.00050000000000000001) + var_chaste_interface__intracellular_calcium_concentration__Cai))) : ((10 + var_chaste_interface__membrane__V) * (CHASTE_CONST(0.20000000000000001) + var_chaste_interface__extracellular_potassium_concentration__Kc / (10 + var_chaste_interface__extracellular_potassium_concentration__Kc)) * (var_chaste_interface__intracellular_potassium_concentration__Ki * CHASTE_MATH::Exp(CHASTE_CONST(0.018716945411372737) * var_chaste_interface__membrane__V) - var_chaste_interface__extracellular_potassium_concentration__Kc * CHASTE_MATH::Exp(-CHASTE_CONST(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 - CHASTE_MATH::Exp(-2 - CHASTE_CONST(0.20000000000000001) * var_chaste_interface__membrane__V)) * (CHASTE_CONST(0.00050000000000000001) + var_chaste_interface__intracellular_calcium_concentration__Cai)))); // nanoA + const double var_transient_outward_current__i_to_converted = CHASTE_CONST(0.001) * CHASTE_CAP() * 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) + CHASTE_CONST(0.001) * CHASTE_CAP() * var_calcium_background_current__i_Ca_b + CHASTE_CONST(0.001) * CHASTE_CAP() * var_sodium_background_current__i_Na_b + CHASTE_CONST(0.001) * CHASTE_CAP() * 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) @@ -224,7 +226,7 @@ { // Inputs: // Time units: millisecond - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -259,115 +261,115 @@ // 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__d_NaCa = CHASTE_CONST(0.001); // dimensionless + const double var_Na_Ca_exchanger__gamma = CHASTE_CONST(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_calcium_background_current__g_Cab = CHASTE_CONST(0.02); // microS + const double var_extracellular_potassium_concentration__Ve = CHASTE_CONST(0.00157); // micrometre3 + const double var_extracellular_potassium_concentration__pf = CHASTE_CONST(0.69999999999999996); // per_second + const double var_fast_sodium_current_m_gate__delta_m = CHASTE_CONST(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_hyperpolarising_activated_current_y_gate__delta_y = CHASTE_CONST(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_rel = CHASTE_CONST(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_calcium_concentration__tau_up = CHASTE_CONST(0.025000000000000001); // second + const double var_intracellular_sodium_concentration__V_e_ratio = CHASTE_CONST(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__radius = CHASTE_CONST(0.050000000000000003); // micrometre + const double var_intracellular_sodium_concentration__V_Cell = CHASTE_CONST(3.1415926540000001) * CHASTE_MATH::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__V_rel = CHASTE_CONST(0.02) * var_intracellular_sodium_concentration__Vi; // micrometre3 + const double var_intracellular_calcium_concentration__V_up = CHASTE_CONST(0.050000000000000003) * var_intracellular_sodium_concentration__Vi; // micrometre3 + const double var_membrane__F = CHASTE_CONST(96485.341499999995); // coulomb_per_mole + const double var_intracellular_calcium_concentration__i_rel = 2 * CHASTE_MATH::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 / ((CHASTE_MATH::Pow(var_chaste_interface__intracellular_calcium_concentration__Cai, var_intracellular_calcium_concentration__rCa) + CHASTE_MATH::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__Ca_rel_orig_deriv = CHASTE_CONST(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 = CHASTE_CONST(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_intracellular_calcium_concentration__Ca_up_orig_deriv = CHASTE_CONST(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 = CHASTE_CONST(0.001) * var_intracellular_calcium_concentration__Ca_up_orig_deriv; // millimolar / millisecond + const double var_membrane__R = CHASTE_CONST(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__E_Ca = CHASTE_CONST(0.5) * var_membrane__RTONF * CHASTE_MATH::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 * CHASTE_MATH::Log((NV_Ith_S(mParameters, 6) + CHASTE_CONST(0.12) * var_chaste_interface__extracellular_potassium_concentration__Kc) / (var_chaste_interface__intracellular_sodium_concentration__Nai + CHASTE_CONST(0.12) * var_chaste_interface__intracellular_potassium_concentration__Ki)); // millivolt + const double var_hyperpolarising_activated_current__E_K = var_membrane__RTONF * CHASTE_MATH::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 * CHASTE_MATH::Log(NV_Ith_S(mParameters, 6) / var_chaste_interface__intracellular_sodium_concentration__Nai); // millivolt + const double var_Na_Ca_exchanger__i_NaCa = (CHASTE_MATH::Pow(var_chaste_interface__intracellular_sodium_concentration__Nai, var_Na_Ca_exchanger__n_NaCa) * NV_Ith_S(mParameters, 5) * CHASTE_MATH::Exp((-2 + var_Na_Ca_exchanger__n_NaCa) * var_Na_Ca_exchanger__gamma * var_chaste_interface__membrane__V / var_membrane__RTONF) - CHASTE_MATH::Pow(NV_Ith_S(mParameters, 6), var_Na_Ca_exchanger__n_NaCa) * var_chaste_interface__intracellular_calcium_concentration__Cai * CHASTE_MATH::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 + CHASTE_CONST(144.92753623188406) * var_chaste_interface__intracellular_calcium_concentration__Cai) * (1 + (CHASTE_MATH::Pow(NV_Ith_S(mParameters, 6), var_Na_Ca_exchanger__n_NaCa) * var_chaste_interface__intracellular_calcium_concentration__Cai + CHASTE_MATH::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__i_Na = CHASTE_MATH::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 * CHASTE_MATH::Exp(-CHASTE_CONST(9.375) + CHASTE_CONST(0.125) * NV_Ith_S(mParameters, 12) - CHASTE_CONST(0.125) * var_chaste_interface__membrane__V); // per_second + const double var_fast_sodium_current_h_gate__beta_h = 2000 / (1 + 320 * CHASTE_MATH::Exp(-CHASTE_CONST(7.5) + CHASTE_CONST(0.10000000000000001) * NV_Ith_S(mParameters, 12) - CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V)); // per_second + const double var_fast_sodium_current_h_gate__h_inf = CHASTE_CONST(0.01) * NV_Ith_S(mParameters, 11) + (1 - CHASTE_CONST(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 d_dt_chaste_interface_var_fast_sodium_current_h_gate__h = CHASTE_CONST(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__alpha_m = ((var_fast_sodium_current_m_gate__delta_m > CHASTE_MATH::Abs(var_fast_sodium_current_m_gate__E0_m)) ? (2000) : (200 * var_fast_sodium_current_m_gate__E0_m / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(0.10000000000000001) * var_fast_sodium_current_m_gate__E0_m)))); // per_second + const double var_fast_sodium_current_m_gate__beta_m = 8000 * CHASTE_MATH::Exp(-CHASTE_CONST(3.6960000000000002) - CHASTE_CONST(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 d_dt_chaste_interface_var_fast_sodium_current_m_gate__m = CHASTE_CONST(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__alpha_y = CHASTE_CONST(0.050000000000000003) * CHASTE_MATH::Exp(-CHASTE_CONST(2.8140000000000001) - CHASTE_CONST(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 > CHASTE_MATH::Abs(var_hyperpolarising_activated_current_y_gate__E0_y)) ? (CHASTE_CONST(2.5)) : (var_hyperpolarising_activated_current_y_gate__E0_y / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(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 d_dt_chaste_interface_var_hyperpolarising_activated_current_y_gate__y = CHASTE_CONST(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 >= -CHASTE_CONST(34.000000399999998)) && (var_chaste_interface__membrane__V <= -CHASTE_CONST(33.999999600000002))) ? (-CHASTE_CONST(2.5000000000718892e-7) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.0000000000287557e-7))) + CHASTE_CONST(1249999.9999640554) * (CHASTE_CONST(34.000000399999998) + var_chaste_interface__membrane__V) * (CHASTE_CONST(2.5000000000718892e-7) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(1.0000000000287557e-7))) + CHASTE_CONST(2.5000000000718892e-7) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.0000000000287557e-7))))) : (CHASTE_CONST(0.625) * (34 + var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(8.5) + CHASTE_CONST(0.25) * var_chaste_interface__membrane__V)))); // per_second + const double var_intracellular_calcium_concentration__beta_p = 5 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(8.5) - CHASTE_CONST(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 d_dt_chaste_interface_var_intracellular_calcium_concentration__p = CHASTE_CONST(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__delta_d = CHASTE_CONST(0.0001); // millivolt + const double var_second_inward_current_d_gate__alpha_d = ((var_second_inward_current_d_gate__delta_d > CHASTE_MATH::Abs(var_second_inward_current_d_gate__E0_d)) ? (120) : (30 * var_second_inward_current_d_gate__E0_d / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(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 > CHASTE_MATH::Abs(var_second_inward_current_d_gate__E0_d)) ? (120) : (12 * var_second_inward_current_d_gate__E0_d / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(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 d_dt_chaste_interface_var_second_inward_current_d_gate__d = CHASTE_CONST(0.001) * var_second_inward_current_d_gate__d_orig_deriv; // 1 / millisecond + const double var_second_inward_current_f2_gate__K_mf2 = CHASTE_CONST(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 d_dt_chaste_interface_var_second_inward_current_f2_gate__f2 = CHASTE_CONST(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__beta_f = 50 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(8.5) - CHASTE_CONST(0.25) * var_chaste_interface__membrane__V)); // per_second + const double var_second_inward_current_f_gate__delta_f = CHASTE_CONST(0.0001); // millivolt + const double var_second_inward_current_f_gate__alpha_f = ((var_second_inward_current_f_gate__delta_f > CHASTE_MATH::Abs(var_second_inward_current_f_gate__E0_f)) ? (25) : (CHASTE_CONST(6.25) * var_second_inward_current_f_gate__E0_f / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(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 >= CHASTE_CONST(49.999998664311967)) && (var_chaste_interface__membrane__V <= CHASTE_CONST(50.000001335688033))) ? (CHASTE_CONST(374338.90823576227) * (-CHASTE_CONST(49.999998664311967) + var_chaste_interface__membrane__V) * (CHASTE_CONST(1.9999999999556149e-7) * (var_chaste_interface__intracellular_calcium_concentration__Cai * CHASTE_MATH::Exp(CHASTE_CONST(3.7433890822745473)) - NV_Ith_S(mParameters, 5) * CHASTE_MATH::Exp(CHASTE_CONST(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 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999997780743e-8))) + CHASTE_CONST(1.9999999999556149e-7) * (var_chaste_interface__intracellular_calcium_concentration__Cai * CHASTE_MATH::Exp(CHASTE_CONST(3.7433890822745473)) - NV_Ith_S(mParameters, 5) * CHASTE_MATH::Exp(-CHASTE_CONST(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 - CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999997780743e-8)))) - CHASTE_CONST(1.9999999999556149e-7) * (var_chaste_interface__intracellular_calcium_concentration__Cai * CHASTE_MATH::Exp(CHASTE_CONST(3.7433890822745473)) - NV_Ith_S(mParameters, 5) * CHASTE_MATH::Exp(CHASTE_CONST(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 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999997780743e-8)))) : (CHASTE_CONST(0.14973556329098189) * (-50 + var_chaste_interface__membrane__V) * (var_chaste_interface__intracellular_calcium_concentration__Cai * CHASTE_MATH::Exp(CHASTE_CONST(3.7433890822745473)) - NV_Ith_S(mParameters, 5) * CHASTE_MATH::Exp(CHASTE_CONST(3.7433890822745473) - CHASTE_CONST(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 - CHASTE_MATH::Exp(CHASTE_CONST(3.7433890822745473) - CHASTE_CONST(0.074867781645490947) * var_chaste_interface__membrane__V)))); // nanoA + const double var_intracellular_calcium_concentration__Cai_orig_deriv = -CHASTE_CONST(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 = CHASTE_CONST(0.001) * var_intracellular_calcium_concentration__Cai_orig_deriv; // millimolar / millisecond + const double var_second_inward_current__i_siK = (((var_chaste_interface__membrane__V >= CHASTE_CONST(49.999997328623934)) && (var_chaste_interface__membrane__V <= CHASTE_CONST(50.000002671376066))) ? (CHASTE_CONST(187169.45411399176) * (-CHASTE_CONST(49.999997328623934) + var_chaste_interface__membrane__V) * (CHASTE_CONST(9.9999999999858744e-10) * (var_chaste_interface__intracellular_potassium_concentration__Ki * CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736)) - var_chaste_interface__extracellular_potassium_concentration__Kc * CHASTE_MATH::Exp(CHASTE_CONST(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 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999858739e-8))) + CHASTE_CONST(9.9999999999858744e-10) * (var_chaste_interface__intracellular_potassium_concentration__Ki * CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736)) - var_chaste_interface__extracellular_potassium_concentration__Kc * CHASTE_MATH::Exp(-CHASTE_CONST(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 - CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999858739e-8)))) - CHASTE_CONST(9.9999999999858744e-10) * (var_chaste_interface__intracellular_potassium_concentration__Ki * CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736)) - var_chaste_interface__extracellular_potassium_concentration__Kc * CHASTE_MATH::Exp(CHASTE_CONST(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 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999858739e-8)))) : (CHASTE_CONST(0.00037433890822745472) * (-50 + var_chaste_interface__membrane__V) * (var_chaste_interface__intracellular_potassium_concentration__Ki * CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736)) - var_chaste_interface__extracellular_potassium_concentration__Kc * CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736) - CHASTE_CONST(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 - CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736) - CHASTE_CONST(0.037433890822745473) * var_chaste_interface__membrane__V)))); // nanoA + const double var_second_inward_current__i_siNa = (((var_chaste_interface__membrane__V >= CHASTE_CONST(49.999997328623934)) && (var_chaste_interface__membrane__V <= CHASTE_CONST(50.000002671376066))) ? (CHASTE_CONST(187169.45411399176) * (-CHASTE_CONST(49.999997328623934) + var_chaste_interface__membrane__V) * (CHASTE_CONST(9.9999999999858744e-10) * (var_chaste_interface__intracellular_sodium_concentration__Nai * CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736)) - NV_Ith_S(mParameters, 6) * CHASTE_MATH::Exp(CHASTE_CONST(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 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999858739e-8))) + CHASTE_CONST(9.9999999999858744e-10) * (var_chaste_interface__intracellular_sodium_concentration__Nai * CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736)) - NV_Ith_S(mParameters, 6) * CHASTE_MATH::Exp(-CHASTE_CONST(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 - CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999858739e-8)))) - CHASTE_CONST(9.9999999999858744e-10) * (var_chaste_interface__intracellular_sodium_concentration__Nai * CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736)) - NV_Ith_S(mParameters, 6) * CHASTE_MATH::Exp(CHASTE_CONST(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 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999858739e-8)))) : (CHASTE_CONST(0.00037433890822745472) * (-50 + var_chaste_interface__membrane__V) * (var_chaste_interface__intracellular_sodium_concentration__Nai * CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736)) - NV_Ith_S(mParameters, 6) * CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736) - CHASTE_CONST(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 - CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736) - CHASTE_CONST(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 d_dt_chaste_interface_var_second_inward_current_f_gate__f = CHASTE_CONST(0.001) * var_second_inward_current_f_gate__f_orig_deriv; // 1 / millisecond + const double var_sodium_background_current__g_Nab = CHASTE_CONST(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 d_dt_chaste_interface_var_intracellular_sodium_concentration__Nai = CHASTE_CONST(0.001) * var_intracellular_sodium_concentration__Nai_orig_deriv; // millimolar / millisecond + const double var_time_dependent_potassium_current__I_K = CHASTE_CONST(0.0071428571428571426) * (-var_chaste_interface__extracellular_potassium_concentration__Kc * CHASTE_MATH::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 = CHASTE_CONST(0.5) * CHASTE_MATH::Exp(CHASTE_CONST(4.1300000000000008) + CHASTE_CONST(0.082600000000000007) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(2.8500000000000001) + CHASTE_CONST(0.057000000000000002) * var_chaste_interface__membrane__V)); // per_second + const double var_time_dependent_potassium_current_x_gate__beta_x = CHASTE_CONST(1.3) * CHASTE_MATH::Exp(-CHASTE_CONST(1.2) - CHASTE_CONST(0.059999999999999998) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.80000000000000004) - CHASTE_CONST(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 d_dt_chaste_interface_var_time_dependent_potassium_current_x_gate__x = CHASTE_CONST(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_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 + CHASTE_MATH::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 = CHASTE_CONST(0.033000000000000002) * CHASTE_MATH::Exp(-CHASTE_CONST(0.058823529411764705) * var_chaste_interface__membrane__V); // per_second + const double var_transient_outward_current_s_gate__beta_s = 33 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.25) - CHASTE_CONST(0.125) * var_chaste_interface__membrane__V)); // per_second + const double var_transient_outward_current__i_to = (((var_chaste_interface__membrane__V >= -CHASTE_CONST(10.000000500000001)) && (var_chaste_interface__membrane__V <= -CHASTE_CONST(9.9999994999999995))) ? (CHASTE_CONST(999999.99999899988) * (CHASTE_CONST(10.000000500000001) + var_chaste_interface__membrane__V) * (CHASTE_CONST(5.0000000000050004e-7) * (CHASTE_CONST(0.20000000000000001) + var_chaste_interface__extracellular_potassium_concentration__Kc / (10 + var_chaste_interface__extracellular_potassium_concentration__Kc)) * (var_chaste_interface__intracellular_potassium_concentration__Ki * CHASTE_MATH::Exp(-CHASTE_CONST(0.18716946347220006)) - var_chaste_interface__extracellular_potassium_concentration__Kc * CHASTE_MATH::Exp(CHASTE_CONST(0.18716946347220006))) * var_chaste_interface__intracellular_calcium_concentration__Cai * NV_Ith_S(mParameters, 17) * var_chaste_interface__transient_outward_current_s_gate__s / ((1 - CHASTE_MATH::Exp(CHASTE_CONST(1.0000000000010001e-7))) * (CHASTE_CONST(0.00050000000000000001) + var_chaste_interface__intracellular_calcium_concentration__Cai)) + CHASTE_CONST(5.0000000000050004e-7) * (CHASTE_CONST(0.20000000000000001) + var_chaste_interface__extracellular_potassium_concentration__Kc / (10 + var_chaste_interface__extracellular_potassium_concentration__Kc)) * (var_chaste_interface__intracellular_potassium_concentration__Ki * CHASTE_MATH::Exp(-CHASTE_CONST(0.18716944475525465)) - var_chaste_interface__extracellular_potassium_concentration__Kc * CHASTE_MATH::Exp(CHASTE_CONST(0.18716944475525465))) * var_chaste_interface__intracellular_calcium_concentration__Cai * NV_Ith_S(mParameters, 17) * var_chaste_interface__transient_outward_current_s_gate__s / ((1 - CHASTE_MATH::Exp(-CHASTE_CONST(1.0000000000010001e-7))) * (CHASTE_CONST(0.00050000000000000001) + var_chaste_interface__intracellular_calcium_concentration__Cai))) - CHASTE_CONST(5.0000000000050004e-7) * (CHASTE_CONST(0.20000000000000001) + var_chaste_interface__extracellular_potassium_concentration__Kc / (10 + var_chaste_interface__extracellular_potassium_concentration__Kc)) * (var_chaste_interface__intracellular_potassium_concentration__Ki * CHASTE_MATH::Exp(-CHASTE_CONST(0.18716946347220006)) - var_chaste_interface__extracellular_potassium_concentration__Kc * CHASTE_MATH::Exp(CHASTE_CONST(0.18716946347220006))) * var_chaste_interface__intracellular_calcium_concentration__Cai * NV_Ith_S(mParameters, 17) * var_chaste_interface__transient_outward_current_s_gate__s / ((1 - CHASTE_MATH::Exp(CHASTE_CONST(1.0000000000010001e-7))) * (CHASTE_CONST(0.00050000000000000001) + var_chaste_interface__intracellular_calcium_concentration__Cai))) : ((10 + var_chaste_interface__membrane__V) * (CHASTE_CONST(0.20000000000000001) + var_chaste_interface__extracellular_potassium_concentration__Kc / (10 + var_chaste_interface__extracellular_potassium_concentration__Kc)) * (var_chaste_interface__intracellular_potassium_concentration__Ki * CHASTE_MATH::Exp(CHASTE_CONST(0.018716945411372737) * var_chaste_interface__membrane__V) - var_chaste_interface__extracellular_potassium_concentration__Kc * CHASTE_MATH::Exp(-CHASTE_CONST(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 - CHASTE_MATH::Exp(-2 - CHASTE_CONST(0.20000000000000001) * var_chaste_interface__membrane__V)) * (CHASTE_CONST(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 d_dt_chaste_interface_var_extracellular_potassium_concentration__Kc = CHASTE_CONST(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 d_dt_chaste_interface_var_intracellular_potassium_concentration__Ki = CHASTE_CONST(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 + const double d_dt_chaste_interface_var_transient_outward_current_s_gate__s = CHASTE_CONST(0.001) * var_transient_outward_current_s_gate__s_orig_deriv; // 1 / millisecond if (mSetVoltageDerivativeToZero) { @@ -377,10 +379,10 @@ { 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_stimulus__i_pulse_converted = CHASTE_STIM(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 / CHASTE_CAP(); // 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 + d_dt_chaste_interface_var_membrane__V = CHASTE_CONST(0.001) * var_membrane__V_orig_deriv; // millivolt / millisecond } NV_Ith_S(rDY,0) = d_dt_chaste_interface_var_membrane__V; @@ -405,7 +407,7 @@ { // Inputs: // Time units: millisecond - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -435,60 +437,60 @@ // 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__d_NaCa = CHASTE_CONST(0.001); // dimensionless + const double var_Na_Ca_exchanger__gamma = CHASTE_CONST(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_calcium_concentration__tau_rel = CHASTE_CONST(0.050000000000000003); // second + const double var_intracellular_sodium_concentration__V_e_ratio = CHASTE_CONST(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__radius = CHASTE_CONST(0.050000000000000003); // micrometre + const double var_intracellular_sodium_concentration__V_Cell = CHASTE_CONST(3.1415926540000001) * CHASTE_MATH::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_intracellular_calcium_concentration__V_rel = CHASTE_CONST(0.02) * var_intracellular_sodium_concentration__Vi; // micrometre3 + const double var_membrane__F = CHASTE_CONST(96485.341499999995); // coulomb_per_mole + const double var_intracellular_calcium_concentration__i_rel = 2 * CHASTE_MATH::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 / ((CHASTE_MATH::Pow(var_chaste_interface__intracellular_calcium_concentration__Cai, var_intracellular_calcium_concentration__rCa) + CHASTE_MATH::Pow(NV_Ith_S(mParameters, 1), var_intracellular_calcium_concentration__rCa)) * var_intracellular_calcium_concentration__tau_rel); // nanoA + const double var_membrane__R = CHASTE_CONST(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__E_mh = var_membrane__RTONF * CHASTE_MATH::Log((NV_Ith_S(mParameters, 6) + CHASTE_CONST(0.12) * var_chaste_interface__extracellular_potassium_concentration__Kc) / (var_chaste_interface__intracellular_sodium_concentration__Nai + CHASTE_CONST(0.12) * var_chaste_interface__intracellular_potassium_concentration__Ki)); // millivolt + const double var_hyperpolarising_activated_current__E_K = var_membrane__RTONF * CHASTE_MATH::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 * CHASTE_MATH::Log(NV_Ith_S(mParameters, 6) / var_chaste_interface__intracellular_sodium_concentration__Nai); // millivolt + const double var_Na_Ca_exchanger__i_NaCa = (CHASTE_MATH::Pow(var_chaste_interface__intracellular_sodium_concentration__Nai, var_Na_Ca_exchanger__n_NaCa) * NV_Ith_S(mParameters, 5) * CHASTE_MATH::Exp((-2 + var_Na_Ca_exchanger__n_NaCa) * var_Na_Ca_exchanger__gamma * var_chaste_interface__membrane__V / var_membrane__RTONF) - CHASTE_MATH::Pow(NV_Ith_S(mParameters, 6), var_Na_Ca_exchanger__n_NaCa) * var_chaste_interface__intracellular_calcium_concentration__Cai * CHASTE_MATH::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 + CHASTE_CONST(144.92753623188406) * var_chaste_interface__intracellular_calcium_concentration__Cai) * (1 + (CHASTE_MATH::Pow(NV_Ith_S(mParameters, 6), var_Na_Ca_exchanger__n_NaCa) * var_chaste_interface__intracellular_calcium_concentration__Cai + CHASTE_MATH::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 = CHASTE_CONST(0.001) * CHASTE_CAP() * var_Na_Ca_exchanger__i_NaCa / NV_Ith_S(mParameters, 8); // uA_per_cm2 + const double var_fast_sodium_current__i_Na = CHASTE_MATH::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 = CHASTE_CONST(0.001) * CHASTE_CAP() * 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 * CHASTE_MATH::Exp(-CHASTE_CONST(9.375) + CHASTE_CONST(0.125) * NV_Ith_S(mParameters, 12) - CHASTE_CONST(0.125) * var_chaste_interface__membrane__V); // per_second + const double var_fast_sodium_current_h_gate__beta_h = 2000 / (1 + 320 * CHASTE_MATH::Exp(-CHASTE_CONST(7.5) + CHASTE_CONST(0.10000000000000001) * NV_Ith_S(mParameters, 12) - CHASTE_CONST(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_hyperpolarising_activated_current__i_f_converted = CHASTE_CONST(0.001) * CHASTE_CAP() * var_hyperpolarising_activated_current__i_f / NV_Ith_S(mParameters, 8); // uA_per_cm2 + const double var_second_inward_current_f2_gate__K_mf2 = CHASTE_CONST(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_f_gate__beta_f = 50 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(8.5) - CHASTE_CONST(0.25) * var_chaste_interface__membrane__V)); // per_second + const double var_second_inward_current_f_gate__delta_f = CHASTE_CONST(0.0001); // millivolt + const double var_second_inward_current_f_gate__alpha_f = ((var_second_inward_current_f_gate__delta_f > CHASTE_MATH::Abs(var_second_inward_current_f_gate__E0_f)) ? (25) : (CHASTE_CONST(6.25) * var_second_inward_current_f_gate__E0_f / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(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 >= CHASTE_CONST(49.999998664311967)) && (var_chaste_interface__membrane__V <= CHASTE_CONST(50.000001335688033))) ? (CHASTE_CONST(374338.90823576227) * (-CHASTE_CONST(49.999998664311967) + var_chaste_interface__membrane__V) * (CHASTE_CONST(1.9999999999556149e-7) * (var_chaste_interface__intracellular_calcium_concentration__Cai * CHASTE_MATH::Exp(CHASTE_CONST(3.7433890822745473)) - NV_Ith_S(mParameters, 5) * CHASTE_MATH::Exp(CHASTE_CONST(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 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999997780743e-8))) + CHASTE_CONST(1.9999999999556149e-7) * (var_chaste_interface__intracellular_calcium_concentration__Cai * CHASTE_MATH::Exp(CHASTE_CONST(3.7433890822745473)) - NV_Ith_S(mParameters, 5) * CHASTE_MATH::Exp(-CHASTE_CONST(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 - CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999997780743e-8)))) - CHASTE_CONST(1.9999999999556149e-7) * (var_chaste_interface__intracellular_calcium_concentration__Cai * CHASTE_MATH::Exp(CHASTE_CONST(3.7433890822745473)) - NV_Ith_S(mParameters, 5) * CHASTE_MATH::Exp(CHASTE_CONST(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 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999997780743e-8)))) : (CHASTE_CONST(0.14973556329098189) * (-50 + var_chaste_interface__membrane__V) * (var_chaste_interface__intracellular_calcium_concentration__Cai * CHASTE_MATH::Exp(CHASTE_CONST(3.7433890822745473)) - NV_Ith_S(mParameters, 5) * CHASTE_MATH::Exp(CHASTE_CONST(3.7433890822745473) - CHASTE_CONST(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 - CHASTE_MATH::Exp(CHASTE_CONST(3.7433890822745473) - CHASTE_CONST(0.074867781645490947) * var_chaste_interface__membrane__V)))); // nanoA + const double var_second_inward_current__i_siK = (((var_chaste_interface__membrane__V >= CHASTE_CONST(49.999997328623934)) && (var_chaste_interface__membrane__V <= CHASTE_CONST(50.000002671376066))) ? (CHASTE_CONST(187169.45411399176) * (-CHASTE_CONST(49.999997328623934) + var_chaste_interface__membrane__V) * (CHASTE_CONST(9.9999999999858744e-10) * (var_chaste_interface__intracellular_potassium_concentration__Ki * CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736)) - var_chaste_interface__extracellular_potassium_concentration__Kc * CHASTE_MATH::Exp(CHASTE_CONST(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 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999858739e-8))) + CHASTE_CONST(9.9999999999858744e-10) * (var_chaste_interface__intracellular_potassium_concentration__Ki * CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736)) - var_chaste_interface__extracellular_potassium_concentration__Kc * CHASTE_MATH::Exp(-CHASTE_CONST(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 - CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999858739e-8)))) - CHASTE_CONST(9.9999999999858744e-10) * (var_chaste_interface__intracellular_potassium_concentration__Ki * CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736)) - var_chaste_interface__extracellular_potassium_concentration__Kc * CHASTE_MATH::Exp(CHASTE_CONST(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 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999858739e-8)))) : (CHASTE_CONST(0.00037433890822745472) * (-50 + var_chaste_interface__membrane__V) * (var_chaste_interface__intracellular_potassium_concentration__Ki * CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736)) - var_chaste_interface__extracellular_potassium_concentration__Kc * CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736) - CHASTE_CONST(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 - CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736) - CHASTE_CONST(0.037433890822745473) * var_chaste_interface__membrane__V)))); // nanoA + const double var_second_inward_current__i_siNa = (((var_chaste_interface__membrane__V >= CHASTE_CONST(49.999997328623934)) && (var_chaste_interface__membrane__V <= CHASTE_CONST(50.000002671376066))) ? (CHASTE_CONST(187169.45411399176) * (-CHASTE_CONST(49.999997328623934) + var_chaste_interface__membrane__V) * (CHASTE_CONST(9.9999999999858744e-10) * (var_chaste_interface__intracellular_sodium_concentration__Nai * CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736)) - NV_Ith_S(mParameters, 6) * CHASTE_MATH::Exp(CHASTE_CONST(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 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999858739e-8))) + CHASTE_CONST(9.9999999999858744e-10) * (var_chaste_interface__intracellular_sodium_concentration__Nai * CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736)) - NV_Ith_S(mParameters, 6) * CHASTE_MATH::Exp(-CHASTE_CONST(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 - CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999858739e-8)))) - CHASTE_CONST(9.9999999999858744e-10) * (var_chaste_interface__intracellular_sodium_concentration__Nai * CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736)) - NV_Ith_S(mParameters, 6) * CHASTE_MATH::Exp(CHASTE_CONST(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 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999858739e-8)))) : (CHASTE_CONST(0.00037433890822745472) * (-50 + var_chaste_interface__membrane__V) * (var_chaste_interface__intracellular_sodium_concentration__Nai * CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736)) - NV_Ith_S(mParameters, 6) * CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736) - CHASTE_CONST(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 - CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736) - CHASTE_CONST(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__i_si_converted = CHASTE_CONST(0.001) * CHASTE_CAP() * 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_stimulus__i_pulse_converted = CHASTE_STIM(var_chaste_interface__environment__time_converted); // uA_per_cm2 + const double var_time_dependent_potassium_current__I_K = CHASTE_CONST(0.0071428571428571426) * (-var_chaste_interface__extracellular_potassium_concentration__Kc * CHASTE_MATH::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_dependent_potassium_current__i_K_converted = CHASTE_CONST(0.001) * CHASTE_CAP() * 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_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 + CHASTE_MATH::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 = CHASTE_CONST(0.001) * CHASTE_CAP() * 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 >= -CHASTE_CONST(10.000000500000001)) && (var_chaste_interface__membrane__V <= -CHASTE_CONST(9.9999994999999995))) ? (CHASTE_CONST(999999.99999899988) * (CHASTE_CONST(10.000000500000001) + var_chaste_interface__membrane__V) * (CHASTE_CONST(5.0000000000050004e-7) * (CHASTE_CONST(0.20000000000000001) + var_chaste_interface__extracellular_potassium_concentration__Kc / (10 + var_chaste_interface__extracellular_potassium_concentration__Kc)) * (var_chaste_interface__intracellular_potassium_concentration__Ki * CHASTE_MATH::Exp(-CHASTE_CONST(0.18716946347220006)) - var_chaste_interface__extracellular_potassium_concentration__Kc * CHASTE_MATH::Exp(CHASTE_CONST(0.18716946347220006))) * var_chaste_interface__intracellular_calcium_concentration__Cai * NV_Ith_S(mParameters, 17) * var_chaste_interface__transient_outward_current_s_gate__s / ((1 - CHASTE_MATH::Exp(CHASTE_CONST(1.0000000000010001e-7))) * (CHASTE_CONST(0.00050000000000000001) + var_chaste_interface__intracellular_calcium_concentration__Cai)) + CHASTE_CONST(5.0000000000050004e-7) * (CHASTE_CONST(0.20000000000000001) + var_chaste_interface__extracellular_potassium_concentration__Kc / (10 + var_chaste_interface__extracellular_potassium_concentration__Kc)) * (var_chaste_interface__intracellular_potassium_concentration__Ki * CHASTE_MATH::Exp(-CHASTE_CONST(0.18716944475525465)) - var_chaste_interface__extracellular_potassium_concentration__Kc * CHASTE_MATH::Exp(CHASTE_CONST(0.18716944475525465))) * var_chaste_interface__intracellular_calcium_concentration__Cai * NV_Ith_S(mParameters, 17) * var_chaste_interface__transient_outward_current_s_gate__s / ((1 - CHASTE_MATH::Exp(-CHASTE_CONST(1.0000000000010001e-7))) * (CHASTE_CONST(0.00050000000000000001) + var_chaste_interface__intracellular_calcium_concentration__Cai))) - CHASTE_CONST(5.0000000000050004e-7) * (CHASTE_CONST(0.20000000000000001) + var_chaste_interface__extracellular_potassium_concentration__Kc / (10 + var_chaste_interface__extracellular_potassium_concentration__Kc)) * (var_chaste_interface__intracellular_potassium_concentration__Ki * CHASTE_MATH::Exp(-CHASTE_CONST(0.18716946347220006)) - var_chaste_interface__extracellular_potassium_concentration__Kc * CHASTE_MATH::Exp(CHASTE_CONST(0.18716946347220006))) * var_chaste_interface__intracellular_calcium_concentration__Cai * NV_Ith_S(mParameters, 17) * var_chaste_interface__transient_outward_current_s_gate__s / ((1 - CHASTE_MATH::Exp(CHASTE_CONST(1.0000000000010001e-7))) * (CHASTE_CONST(0.00050000000000000001) + var_chaste_interface__intracellular_calcium_concentration__Cai))) : ((10 + var_chaste_interface__membrane__V) * (CHASTE_CONST(0.20000000000000001) + var_chaste_interface__extracellular_potassium_concentration__Kc / (10 + var_chaste_interface__extracellular_potassium_concentration__Kc)) * (var_chaste_interface__intracellular_potassium_concentration__Ki * CHASTE_MATH::Exp(CHASTE_CONST(0.018716945411372737) * var_chaste_interface__membrane__V) - var_chaste_interface__extracellular_potassium_concentration__Kc * CHASTE_MATH::Exp(-CHASTE_CONST(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 - CHASTE_MATH::Exp(-2 - CHASTE_CONST(0.20000000000000001) * var_chaste_interface__membrane__V)) * (CHASTE_CONST(0.00050000000000000001) + var_chaste_interface__intracellular_calcium_concentration__Cai)))); // nanoA + const double var_transient_outward_current__i_to_converted = CHASTE_CONST(0.001) * CHASTE_CAP() * 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()); @@ -741,4 +743,5 @@ void OdeSystemInformation::Init #include "SerializationExportWrapperForCpp.hpp" CHASTE_CLASS_EXPORT(Celldifrancesco_noble_model_1985FromCellMLCvode) + #endif // CHASTE_CVODE diff --git a/chaste_codegen/data/tests/chaste_reference_models/Cvode/difrancesco_noble_model_1985.hpp b/chaste_codegen/data/tests/chaste_reference_models/Cvode/difrancesco_noble_model_1985.hpp index c9a0a09cf..36bee9fa5 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/Cvode/difrancesco_noble_model_1985.hpp +++ b/chaste_codegen/data/tests/chaste_reference_models/Cvode/difrancesco_noble_model_1985.hpp @@ -17,7 +17,11 @@ #include "ChasteSerialization.hpp" #include #include "AbstractStimulusFunction.hpp" +#if USING_DEVICE_COMPILER +#include "StimulusEvaluatorCuda.hpp" +#endif #include "AbstractCvodeCell.hpp" +#include "HostDeviceMacros.hpp" class Celldifrancesco_noble_model_1985FromCellMLCvode : public AbstractCvodeCell { @@ -38,6 +42,10 @@ class Celldifrancesco_noble_model_1985FromCellMLCvode : public AbstractCvodeCell 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: + static constexpr unsigned TOTAL_SIZE = 16u; + static constexpr unsigned NNZ = 0u; + static inline const int sparse_rowptr[] = { }; + static inline const int sparse_colind[] = { }; boost::shared_ptr UseCellMLDefaultStimulus(); double GetIntracellularCalciumConcentration(); @@ -46,7 +54,19 @@ const bool is_probability[16] = {false, false, false, false, false, true, true, 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); +#if USING_DEVICE_COMPILER + template + DEVICE + static void EvaluateYDerivativesDevice(ValueType var_chaste_interface__environment__time_converted, const ValueType* rY, ValueType* rDY, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType* mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim); + template + DEVICE + static void EvaluateAnalyticJacobianDevice(ValueType var_chaste_interface__environment__time_converted, const ValueType *rY, ValueType *rDY, ValueType *rJacobian, ValueType *rTmp1, ValueType *rTmp2, ValueType *rTmp3, const unsigned nvars, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType *mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim); + template + DEVICE + static void EvaluateSparseAnalyticJacobianDevice(ValueType var_chaste_interface__environment__time_converted, const ValueType *rY, ValueType *rDY, ValueType *rJacobian, ValueType *rTmp1, ValueType *rTmp2, ValueType *rTmp3, const unsigned nvars, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType *mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim); +#endif }; // Needs to be included last @@ -83,4 +103,10 @@ namespace boost } #endif // CELLDIFRANCESCO_NOBLE_MODEL_1985FROMCELLMLCVODE_HPP_ + + + +#if USING_DEVICE_COMPILER + #include "difrancesco_noble_model_1985Kernels.hpp" +#endif #endif // CHASTE_CVODE \ No newline at end of file diff --git a/chaste_codegen/data/tests/chaste_reference_models/Cvode/dynamic_mahajan_shiferaw_2008.cpp b/chaste_codegen/data/tests/chaste_reference_models/Cvode/dynamic_mahajan_shiferaw_2008.cpp index 1320099a2..997bccc38 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/Cvode/dynamic_mahajan_shiferaw_2008.cpp +++ b/chaste_codegen/data/tests/chaste_reference_models/Cvode/dynamic_mahajan_shiferaw_2008.cpp @@ -22,6 +22,8 @@ #include "HeartConfig.hpp" #include "IsNan.hpp" #include "MathsCustomFunctions.hpp" +#include "ChasteMathDeviceNamespaces.hpp" +#include "ChasteCpuMacros.hpp" #if CHASTE_SUNDIALS_VERSION >= 60000 #include "CvodeContextManager.hpp" @@ -34,7 +36,7 @@ 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_amplitude_converted = -CHASTE_CONST(14.999999999999998) * CHASTE_CAP(); // 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 @@ -68,26 +70,26 @@ // 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, 0) = CHASTE_CONST(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, 2) = CHASTE_CONST(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, 5) = CHASTE_CONST(1.8); // (var_Environment__Ca_o) [mM] + NV_Ith_S(this->mParameters, 6) = CHASTE_CONST(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, 8) = CHASTE_CONST(96.485341500000004); // (var_Environment__F) [coulomb_per_mmole] + NV_Ith_S(this->mParameters, 9) = CHASTE_CONST(8.3144720000000003); // (var_Environment__R) [J_per_moleK] + NV_Ith_S(this->mParameters, 10) = CHASTE_CONST(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, 14) = CHASTE_CONST(0.11); // (var_Ito__gtof) [uS_per_nF] + NV_Ith_S(this->mParameters, 15) = CHASTE_CONST(0.29999999999999999); // (var_IK1__gkix) [uS_per_nF] + NV_Ith_S(this->mParameters, 16) = CHASTE_CONST(0.012500000000000001); // (var_IKr__gkr) [uS_per_nF] + NV_Ith_S(this->mParameters, 17) = CHASTE_CONST(0.1386); // (var_IKs__gks) [uS_per_nF] + NV_Ith_S(this->mParameters, 18) = CHASTE_CONST(0.040000000000000001); // (var_Ito__gtos) [uS_per_nF] + NV_Ith_S(this->mParameters, 19) = CHASTE_CONST(0.83999999999999997); // (var_INaCa__gNaCa) [uM_per_ms] NV_Ith_S(this->mParameters, 20) = 308; // (var_Environment__T) [kelvin] } @@ -144,7 +146,7 @@ made_new_cvode_vector = true; rY = MakeNVector(*pStateVariables); } - double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -186,60 +188,60 @@ // 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_Ca__csm = CHASTE_CONST(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_IK1__gkix_total = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::Sqrt(NV_Ith_S(mParameters, 6)) * NV_Ith_S(mParameters, 15); // uS_per_nF + const double var_IKr__gkr_total = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::Sqrt(NV_Ith_S(mParameters, 6)) * NV_Ith_S(mParameters, 16); // uS_per_nF + const double var_IKs__gksx = 1 + CHASTE_CONST(0.80000000000000004) / (1 + CHASTE_CONST(0.125) / CHASTE_MATH::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_INaCa__xkdna = CHASTE_CONST(0.29999999999999999); // uM + const double var_INaCa__aloss = 1 / (1 + CHASTE_MATH::Pow(var_INaCa__xkdna, 3) / CHASTE_MATH::Pow(var_chaste_interface__Ca__Ca_submem, 3)); // dimensionless + const double var_INaCa__xmcai = CHASTE_CONST(0.0035999999999999999); // mM + const double var_INaCa__xmcao = CHASTE_CONST(1.3); // mM + const double var_INaCa__xmnai = CHASTE_CONST(12.300000000000001); // mM + const double var_INaCa__xmnao = CHASTE_CONST(87.5); // mM + const double var_INaCa__yz2 = CHASTE_MATH::Pow(var_INaCa__xmnai, 3) * (1 + var_Ca__csm / var_INaCa__xmcai) * NV_Ith_S(mParameters, 5); // mM4 + const double var_INaK__gNaK = CHASTE_CONST(1.5); // nA_per_nF + const double var_INaK__sigma = -CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(0.01485884101040119) * NV_Ith_S(mParameters, 7)); // dimensionless + const double var_INaK__xkmko = CHASTE_CONST(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__yz1 = CHASTE_MATH::Pow(var_INaCa__xmnao, 3) * var_Ca__csm + CHASTE_MATH::Pow(var_chaste_interface__Na__Na_i, 3) * var_INaCa__xmcao; // mM4 + const double var_INaCa__yz3 = CHASTE_MATH::Pow(NV_Ith_S(mParameters, 7), 3) * (1 + CHASTE_MATH::Pow(var_chaste_interface__Na__Na_i, 3) / CHASTE_MATH::Pow(var_INaCa__xmnai, 3)) * var_INaCa__xmcai; // mM4 + const double var_INaCa__yz4 = CHASTE_MATH::Pow(NV_Ith_S(mParameters, 7), 3) * var_Ca__csm + CHASTE_MATH::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__rxa = ((CHASTE_MATH::Abs(var_ICaL__za) < CHASTE_CONST(0.001)) ? (2 * (-CHASTE_CONST(0.34100000000000003) * NV_Ith_S(mParameters, 5) + var_Ca__csm * CHASTE_MATH::Exp(var_ICaL__za)) * NV_Ith_S(mParameters, 8) * NV_Ith_S(mParameters, 10)) : (4 * (-CHASTE_CONST(0.34100000000000003) * NV_Ith_S(mParameters, 5) + var_Ca__csm * CHASTE_MATH::Exp(var_ICaL__za)) * NV_Ith_S(mParameters, 8) * var_Environment__FonRT * NV_Ith_S(mParameters, 10) * var_chaste_interface__cell__V / (-1 + CHASTE_MATH::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_IKr__rg = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.4732142857142858) + CHASTE_CONST(0.044642857142857144) * var_chaste_interface__cell__V)); // dimensionless + const double var_INaCa__zw3 = CHASTE_MATH::Pow(var_chaste_interface__Na__Na_i, 3) * NV_Ith_S(mParameters, 5) * CHASTE_MATH::Exp(CHASTE_CONST(0.34999999999999998) * var_Environment__FonRT * var_chaste_interface__cell__V) - CHASTE_MATH::Pow(NV_Ith_S(mParameters, 7), 3) * var_Ca__csm * CHASTE_MATH::Exp(-CHASTE_CONST(0.65000000000000002) * var_Environment__FonRT * var_chaste_interface__cell__V); // mM4 + const double var_INaCa__zw4 = 1 + CHASTE_CONST(0.20000000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(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__fNaK = 1 / (1 + CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(0.10000000000000001) * var_Environment__FonRT * var_chaste_interface__cell__V) + CHASTE_CONST(0.036499999999999998) * var_INaK__sigma * CHASTE_MATH::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_Ito__rt2 = CHASTE_CONST(3.3500000000000001) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__cell__V; // dimensionless + const double var_Ito__rs_inf = 1 / (1 + CHASTE_MATH::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_reversal_potentials__ek = CHASTE_MATH::Log(NV_Ith_S(mParameters, 6) / NV_Ith_S(mParameters, 4)) / var_Environment__FonRT; // mV + const double var_IK1__aki = CHASTE_CONST(1.02) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__cell__V - CHASTE_CONST(0.23849999999999999) * var_reversal_potentials__ek)); // per_ms + const double var_IK1__bki = (CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__cell__V - CHASTE_CONST(0.061749999999999999) * var_reversal_potentials__ek) + CHASTE_CONST(0.49124000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__cell__V - CHASTE_CONST(0.080320000000000003) * var_reversal_potentials__ek)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(0.51429999999999998) * var_reversal_potentials__ek - CHASTE_CONST(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__xitos = (-var_reversal_potentials__ek + var_chaste_interface__cell__V) * (CHASTE_CONST(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_reversal_potentials__ena = CHASTE_MATH::Log(NV_Ith_S(mParameters, 7) / var_chaste_interface__Na__Na_i) / var_Environment__FonRT; // mV + const double var_INa__xina = CHASTE_MATH::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 = CHASTE_CONST(0.018329999999999999); // dimensionless + const double var_reversal_potentials__eks = CHASTE_MATH::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 var_chaste_interface__i_ionic = -CHASTE_CONST(0.99999999999999989) * CHASTE_CAP() * var_cell__Itotal; // uA_per_cm2 const double i_ionic = var_chaste_interface__i_ionic; if (made_new_cvode_vector) @@ -254,7 +256,7 @@ { // Inputs: // Time units: millisecond - double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -314,105 +316,105 @@ 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__csm = CHASTE_CONST(0.001) * var_chaste_interface__Ca__Ca_submem; // mM + const double var_Ca__kmem = CHASTE_CONST(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__mempxi = var_Ca__bmem * var_Ca__kmem / CHASTE_MATH::Pow((var_Ca__Ca_i + var_Ca__kmem), 2); // dimensionless + const double var_Ca__mempxs = var_Ca__bmem * var_Ca__kmem / CHASTE_MATH::Pow((var_chaste_interface__Ca__Ca_submem + var_Ca__kmem), 2); // dimensionless + const double var_Ca__sarpxi = var_Ca__bsar * var_Ca__ksar / CHASTE_MATH::Pow((var_Ca__Ca_i + var_Ca__ksar), 2); // dimensionless + const double var_Ca__sarpxs = var_Ca__bsar * var_Ca__ksar / CHASTE_MATH::Pow((var_chaste_interface__Ca__Ca_submem + var_Ca__ksar), 2); // dimensionless + const double var_Ca__srkd = CHASTE_CONST(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__spxi = var_Ca__srkd * var_Ca__srmax / CHASTE_MATH::Pow((var_Ca__Ca_i + var_Ca__srkd), 2); // dimensionless + const double var_Ca__spxs = var_Ca__srkd * var_Ca__srmax / CHASTE_MATH::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__taups = CHASTE_CONST(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__bpxi = var_Ca__bcal * var_Ca__xkcal / CHASTE_MATH::Pow((var_Ca__Ca_i + var_Ca__xkcal), 2); // dimensionless + const double var_Ca__bpxs = var_Ca__bcal * var_Ca__xkcal / CHASTE_MATH::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__xkoff = CHASTE_CONST(0.019599999999999999); // per_ms + const double var_Ca__xkon = CHASTE_CONST(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__cpt = CHASTE_CONST(6.0936500000000002); // uM + const double var_ICaL__fca = 1 / (1 + CHASTE_MATH::Pow(var_ICaL__cat, 3) / CHASTE_MATH::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__k1 = CHASTE_CONST(0.024167999999999999) * var_ICaL__fca; // per_ms + const double var_ICaL__k1t = CHASTE_CONST(0.00413); // per_ms + const double var_ICaL__k2 = CHASTE_CONST(0.000103615); // per_ms + const double var_ICaL__k2t = CHASTE_CONST(0.0022399999999999998); // per_ms + const double var_ICaL__r1 = CHASTE_CONST(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__s1 = CHASTE_CONST(0.018268800000000002) * var_ICaL__fca; // per_ms + const double var_ICaL__s1t = CHASTE_CONST(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__syr = CHASTE_CONST(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__tca = CHASTE_CONST(78.032899999999998); // ms + const double var_ICaL__tau_ca = CHASTE_CONST(0.10000000000000001) + var_ICaL__tca / (1 + CHASTE_MATH::Pow(var_chaste_interface__Ca__Ca_dyad, 4) / CHASTE_MATH::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_INaCa__xkdna = CHASTE_CONST(0.29999999999999999); // uM + const double var_INaCa__aloss = 1 / (1 + CHASTE_MATH::Pow(var_INaCa__xkdna, 3) / CHASTE_MATH::Pow(var_chaste_interface__Ca__Ca_submem, 3)); // dimensionless + const double var_INaCa__xmcai = CHASTE_CONST(0.0035999999999999999); // mM + const double var_INaCa__xmcao = CHASTE_CONST(1.3); // mM + const double var_INaCa__xmnai = CHASTE_CONST(12.300000000000001); // mM + const double var_INaCa__xmnao = CHASTE_CONST(87.5); // mM + const double var_INaCa__yz2 = CHASTE_MATH::Pow(var_INaCa__xmnai, 3) * (1 + var_Ca__csm / var_INaCa__xmcai) * NV_Ith_S(mParameters, 5); // mM4 + const double var_INaK__gNaK = CHASTE_CONST(1.5); // nA_per_nF + const double var_INaK__sigma = -CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(0.01485884101040119) * NV_Ith_S(mParameters, 7)); // dimensionless + const double var_INaK__xkmko = CHASTE_CONST(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__cup = CHASTE_CONST(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_Ileak_Iup_Ixfer__jleak = CHASTE_MATH::Pow(var_chaste_interface__Ca__Ca_NSR, 2) * (-var_Ca__Ca_i + CHASTE_CONST(16.667000000000002) * var_chaste_interface__Ca__Ca_NSR) * NV_Ith_S(mParameters, 0) / (CHASTE_MATH::Pow(var_chaste_interface__Ca__Ca_NSR, 2) + CHASTE_MATH::Pow(var_Ileak_Iup_Ixfer__kj, 2)); // uM_per_ms + const double var_Ileak_Iup_Ixfer__jup = CHASTE_MATH::Pow(var_Ca__Ca_i, 2) * NV_Ith_S(mParameters, 2) / (CHASTE_MATH::Pow(var_Ca__Ca_i, 2) + CHASTE_MATH::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 d_dt_chaste_interface_var_Ca__Ca_i_converted = CHASTE_CONST(0.001) * var_Ca__Ca_i_orig_deriv; // millimolar / ms + const double var_Irel__av = CHASTE_CONST(11.300000000000001); // per_ms + const double var_Irel__ax = CHASTE_CONST(0.35759999999999997); // per_mV + const double var_Irel__ay = CHASTE_CONST(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__gbarsr = CHASTE_CONST(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__gryr = CHASTE_CONST(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__yz1 = CHASTE_MATH::Pow(var_INaCa__xmnao, 3) * var_Ca__csm + CHASTE_MATH::Pow(var_chaste_interface__Na__Na_i, 3) * var_INaCa__xmcao; // mM4 + const double var_INaCa__yz3 = CHASTE_MATH::Pow(NV_Ith_S(mParameters, 7), 3) * (1 + CHASTE_MATH::Pow(var_chaste_interface__Na__Na_i, 3) / CHASTE_MATH::Pow(var_INaCa__xmnai, 3)) * var_INaCa__xmcai; // mM4 + const double var_INaCa__yz4 = CHASTE_MATH::Pow(NV_Ith_S(mParameters, 7), 3) * var_Ca__csm + CHASTE_MATH::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__Pr = 1 - 1 / (1 + CHASTE_MATH::Exp((-var_chaste_interface__cell__V + var_ICaL__vy) / var_ICaL__sy)); // dimensionless + const double var_ICaL__Ps = 1 / (1 + CHASTE_MATH::Exp((-var_chaste_interface__cell__V + var_ICaL__vyr) / var_ICaL__syr)); // dimensionless + const double var_ICaL__poi = 1 / (1 + CHASTE_MATH::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__poinf = 1 / (1 + CHASTE_MATH::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__recov = 10 + 4954 * CHASTE_MATH::Exp(CHASTE_CONST(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 @@ -427,67 +429,67 @@ 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__rxa = ((CHASTE_MATH::Abs(var_ICaL__za) < CHASTE_CONST(0.001)) ? (2 * (-CHASTE_CONST(0.34100000000000003) * NV_Ith_S(mParameters, 5) + var_Ca__csm * CHASTE_MATH::Exp(var_ICaL__za)) * NV_Ith_S(mParameters, 8) * NV_Ith_S(mParameters, 10)) : (4 * (-CHASTE_CONST(0.34100000000000003) * NV_Ith_S(mParameters, 5) + var_Ca__csm * CHASTE_MATH::Exp(var_ICaL__za)) * NV_Ith_S(mParameters, 8) * var_Environment__FonRT * NV_Ith_S(mParameters, 10) * var_chaste_interface__cell__V / (-1 + CHASTE_MATH::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__xkrinf = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(6.666666666666667) - CHASTE_CONST(0.13333333333333333) * var_chaste_interface__cell__V)); // dimensionless + const double var_IKr__xkrv1 = ((CHASTE_MATH::Abs(7 + var_chaste_interface__cell__V) > CHASTE_CONST(0.001)) ? (CHASTE_CONST(0.0013799999999999999) * (7 + var_chaste_interface__cell__V) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(0.86099999999999999) - CHASTE_CONST(0.123) * var_chaste_interface__cell__V))) : (CHASTE_CONST(0.011219512195121951))); // per_ms + const double var_IKr__xkrv2 = ((CHASTE_MATH::Abs(10 + var_chaste_interface__cell__V) > CHASTE_CONST(0.001)) ? (CHASTE_CONST(0.00060999999999999997) * (10 + var_chaste_interface__cell__V) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(1.45) + CHASTE_CONST(0.14499999999999999) * var_chaste_interface__cell__V))) : (CHASTE_CONST(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__tauxs1 = ((CHASTE_MATH::Abs(30 + var_chaste_interface__cell__V) < CHASTE_CONST(0.014556040756914121)) ? (CHASTE_CONST(417.94625266107982)) : (1 / (CHASTE_CONST(0.00013100000000000001) * (30 + var_chaste_interface__cell__V) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(2.0609999999999999) + CHASTE_CONST(0.068699999999999997) * var_chaste_interface__cell__V)) + CHASTE_CONST(7.1899999999999999e-5) * (30 + var_chaste_interface__cell__V) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(4.4399999999999995) - CHASTE_CONST(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 var_IKs__xs1ss = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(0.089820359281437126) - CHASTE_CONST(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 var_INa__ah = ((var_chaste_interface__cell__V < -40) ? (CHASTE_CONST(0.13500000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(11.764705882352942) + CHASTE_CONST(0.14705882352941177) * NV_Ith_S(mParameters, 13) - CHASTE_CONST(0.14705882352941177) * var_chaste_interface__cell__V)) : (0)); // per_ms + const double var_INa__aj = ((var_chaste_interface__cell__V < -40) ? ((CHASTE_CONST(37.780000000000001) + var_chaste_interface__cell__V) * (-127140 * CHASTE_MATH::Exp(CHASTE_CONST(0.24440000000000001) * var_chaste_interface__cell__V - CHASTE_CONST(0.24440000000000001) * NV_Ith_S(mParameters, 13)) - CHASTE_CONST(3.4740000000000003e-5) * CHASTE_MATH::Exp(CHASTE_CONST(0.043909999999999998) * NV_Ith_S(mParameters, 13) - CHASTE_CONST(0.043909999999999998) * var_chaste_interface__cell__V)) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(24.640530000000002) + CHASTE_CONST(0.311) * var_chaste_interface__cell__V))) : (0)); // per_ms + const double var_INa__am = ((CHASTE_MATH::Abs(CHASTE_CONST(47.130000000000003) + var_chaste_interface__cell__V) > CHASTE_CONST(0.001)) ? (CHASTE_CONST(0.32000000000000001) * (CHASTE_CONST(47.130000000000003) + var_chaste_interface__cell__V) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(4.7130000000000001) - CHASTE_CONST(0.10000000000000001) * var_chaste_interface__cell__V))) : (CHASTE_CONST(3.2000000000000002))); // per_ms + const double var_INa__bh = ((var_chaste_interface__cell__V < -40) ? (310000 * CHASTE_MATH::Exp(CHASTE_CONST(0.34999999999999998) * var_chaste_interface__cell__V - CHASTE_CONST(0.34999999999999998) * NV_Ith_S(mParameters, 13)) + CHASTE_CONST(3.5600000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.079000000000000001) * var_chaste_interface__cell__V - CHASTE_CONST(0.079000000000000001) * NV_Ith_S(mParameters, 13))) : (CHASTE_CONST(7.6923076923076916) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.96036036036036043) + CHASTE_CONST(0.0900900900900901) * NV_Ith_S(mParameters, 13) - CHASTE_CONST(0.0900900900900901) * var_chaste_interface__cell__V)))); // per_ms + const double var_INa__bj = ((var_chaste_interface__cell__V < -40) ? (CHASTE_CONST(0.1212) * CHASTE_MATH::Exp(CHASTE_CONST(0.01052) * NV_Ith_S(mParameters, 13) - CHASTE_CONST(0.01052) * var_chaste_interface__cell__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(5.5312920000000005) - CHASTE_CONST(0.13780000000000001) * var_chaste_interface__cell__V))) : (CHASTE_CONST(0.29999999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(2.5349999999999999e-7) * NV_Ith_S(mParameters, 13) - CHASTE_CONST(2.5349999999999999e-7) * var_chaste_interface__cell__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.2000000000000002) - CHASTE_CONST(0.10000000000000001) * var_chaste_interface__cell__V)))); // per_ms + const double var_INa__bm = CHASTE_CONST(0.080000000000000002) * CHASTE_MATH::Exp(-CHASTE_CONST(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__h_inf = CHASTE_CONST(0.01) * NV_Ith_S(mParameters, 12) + (1 - CHASTE_CONST(0.01) * NV_Ith_S(mParameters, 12)) * var_INa__ah / (var_INa__ah + var_INa__bh); // dimensionless + const double var_INa__j_inf = CHASTE_CONST(0.01) * NV_Ith_S(mParameters, 12) + (1 - CHASTE_CONST(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__zw3 = CHASTE_MATH::Pow(var_chaste_interface__Na__Na_i, 3) * NV_Ith_S(mParameters, 5) * CHASTE_MATH::Exp(CHASTE_CONST(0.34999999999999998) * var_Environment__FonRT * var_chaste_interface__cell__V) - CHASTE_MATH::Pow(NV_Ith_S(mParameters, 7), 3) * var_Ca__csm * CHASTE_MATH::Exp(-CHASTE_CONST(0.65000000000000002) * var_Environment__FonRT * var_chaste_interface__cell__V); // mM4 + const double var_INaCa__zw4 = 1 + CHASTE_CONST(0.20000000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(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__fNaK = 1 / (1 + CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(0.10000000000000001) * var_Environment__FonRT * var_chaste_interface__cell__V) + CHASTE_CONST(0.036499999999999998) * var_INaK__sigma * CHASTE_MATH::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 var_Irel__sparkV = CHASTE_MATH::Exp(-(30 + var_chaste_interface__cell__V) * var_Irel__ay) / (1 + CHASTE_MATH::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 * CHASTE_MATH::Abs(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__xicap = var_ICaL__po * var_Irel__gdyad * CHASTE_MATH::Abs(var_ICaL__rxa); // uM_per_ms + const double var_Irel__xirp = var_ICaL__po * var_Irel__Qr * var_Irel__gbarsr * CHASTE_MATH::Abs(var_ICaL__rxa) * CHASTE_MATH::Exp(-(30 + var_chaste_interface__cell__V) * var_Irel__ax) / (1 + CHASTE_MATH::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 var_Ito__rt1 = -CHASTE_CONST(0.20000000000000001) - CHASTE_CONST(0.066666666666666666) * var_chaste_interface__cell__V; // dimensionless + const double var_Ito__rt2 = CHASTE_CONST(3.3500000000000001) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__cell__V; // dimensionless + const double var_Ito__rt3 = 6 + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__cell__V; // dimensionless + const double var_Ito__rt4 = -CHASTE_CONST(0.0011111111111111111) * CHASTE_MATH::Pow(var_chaste_interface__cell__V, 2); // dimensionless + const double var_Ito__rt5 = CHASTE_CONST(3.3500000000000001) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__cell__V; // dimensionless + const double var_Ito__txf = CHASTE_CONST(1.5) + CHASTE_CONST(3.5) * CHASTE_MATH::Exp(var_Ito__rt4); // ms + const double var_Ito__txs = CHASTE_CONST(0.5) + 9 / (1 + CHASTE_MATH::Exp(-var_Ito__rt1)); // ms + const double var_Ito__tyf = 20 + 20 / (1 + CHASTE_MATH::Exp(var_Ito__rt5)); // ms + const double var_Ito__tys = 30 + 3000 / (1 + CHASTE_MATH::Exp(var_Ito__rt3)); // ms + const double var_Ito__xtos_inf = 1 / (1 + CHASTE_MATH::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 var_Ito__ytos_inf = 1 / (1 + CHASTE_MATH::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 + const double var_reversal_potentials__ena = CHASTE_MATH::Log(NV_Ith_S(mParameters, 7) / var_chaste_interface__Na__Na_i) / var_Environment__FonRT; // mV + const double var_INa__xina = CHASTE_MATH::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 = -CHASTE_CONST(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) { @@ -495,26 +497,26 @@ } 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_IK1__gkix_total = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::Sqrt(NV_Ith_S(mParameters, 6)) * NV_Ith_S(mParameters, 15); // uS_per_nF + const double var_IKr__gkr_total = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::Sqrt(NV_Ith_S(mParameters, 6)) * NV_Ith_S(mParameters, 16); // uS_per_nF + const double var_IKs__gksx = 1 + CHASTE_CONST(0.80000000000000004) / (1 + CHASTE_CONST(0.125) / CHASTE_MATH::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_IKr__rg = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.4732142857142858) + CHASTE_CONST(0.044642857142857144) * var_chaste_interface__cell__V)); // dimensionless + const double var_Ito__rs_inf = 1 / (1 + CHASTE_MATH::Exp(var_Ito__rt2)); // dimensionless + const double var_cell__i_Stim_converted = CHASTE_STIM(var_chaste_interface__Environment__time); // uA_per_cm2 + const double var_cell__i_Stim = CHASTE_CONST(1.0000000000000002) * var_cell__i_Stim_converted / CHASTE_CAP(); // 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_reversal_potentials__ek = CHASTE_MATH::Log(NV_Ith_S(mParameters, 6) / NV_Ith_S(mParameters, 4)) / var_Environment__FonRT; // mV + const double var_IK1__aki = CHASTE_CONST(1.02) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__cell__V - CHASTE_CONST(0.23849999999999999) * var_reversal_potentials__ek)); // per_ms + const double var_IK1__bki = (CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__cell__V - CHASTE_CONST(0.061749999999999999) * var_reversal_potentials__ek) + CHASTE_CONST(0.49124000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__cell__V - CHASTE_CONST(0.080320000000000003) * var_reversal_potentials__ek)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(0.51429999999999998) * var_reversal_potentials__ek - CHASTE_CONST(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__xitos = (-var_reversal_potentials__ek + var_chaste_interface__cell__V) * (CHASTE_CONST(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_reversal_potentials__prNaK = CHASTE_CONST(0.018329999999999999); // dimensionless + const double var_reversal_potentials__eks = CHASTE_MATH::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 @@ -552,7 +554,7 @@ { // Inputs: // Time units: millisecond - double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -602,95 +604,95 @@ 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__csm = CHASTE_CONST(0.001) * var_chaste_interface__Ca__Ca_submem; // mM + const double var_Ca__kmem = CHASTE_CONST(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__mempxi = var_Ca__bmem * var_Ca__kmem / CHASTE_MATH::Pow((var_Ca__Ca_i + var_Ca__kmem), 2); // dimensionless + const double var_Ca__mempxs = var_Ca__bmem * var_Ca__kmem / CHASTE_MATH::Pow((var_chaste_interface__Ca__Ca_submem + var_Ca__kmem), 2); // dimensionless + const double var_Ca__sarpxi = var_Ca__bsar * var_Ca__ksar / CHASTE_MATH::Pow((var_Ca__Ca_i + var_Ca__ksar), 2); // dimensionless + const double var_Ca__sarpxs = var_Ca__bsar * var_Ca__ksar / CHASTE_MATH::Pow((var_chaste_interface__Ca__Ca_submem + var_Ca__ksar), 2); // dimensionless + const double var_Ca__srkd = CHASTE_CONST(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__spxi = var_Ca__srkd * var_Ca__srmax / CHASTE_MATH::Pow((var_Ca__Ca_i + var_Ca__srkd), 2); // dimensionless + const double var_Ca__spxs = var_Ca__srkd * var_Ca__srmax / CHASTE_MATH::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__bpxi = var_Ca__bcal * var_Ca__xkcal / CHASTE_MATH::Pow((var_Ca__Ca_i + var_Ca__xkcal), 2); // dimensionless + const double var_Ca__bpxs = var_Ca__bcal * var_Ca__xkcal / CHASTE_MATH::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_IK1__gkix_total = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::Sqrt(NV_Ith_S(mParameters, 6)) * NV_Ith_S(mParameters, 15); // uS_per_nF + const double var_IKr__gkr_total = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::Sqrt(NV_Ith_S(mParameters, 6)) * NV_Ith_S(mParameters, 16); // uS_per_nF + const double var_IKs__gksx = 1 + CHASTE_CONST(0.80000000000000004) / (1 + CHASTE_CONST(0.125) / CHASTE_MATH::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_INaCa__xkdna = CHASTE_CONST(0.29999999999999999); // uM + const double var_INaCa__aloss = 1 / (1 + CHASTE_MATH::Pow(var_INaCa__xkdna, 3) / CHASTE_MATH::Pow(var_chaste_interface__Ca__Ca_submem, 3)); // dimensionless + const double var_INaCa__xmcai = CHASTE_CONST(0.0035999999999999999); // mM + const double var_INaCa__xmcao = CHASTE_CONST(1.3); // mM + const double var_INaCa__xmnai = CHASTE_CONST(12.300000000000001); // mM + const double var_INaCa__xmnao = CHASTE_CONST(87.5); // mM + const double var_INaCa__yz2 = CHASTE_MATH::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 = CHASTE_CONST(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_Ileak_Iup_Ixfer__jleak = CHASTE_MATH::Pow(var_chaste_interface__Ca__Ca_NSR, 2) * (-var_Ca__Ca_i + CHASTE_CONST(16.667000000000002) * var_chaste_interface__Ca__Ca_NSR) * NV_Ith_S(mParameters, 0) / (CHASTE_MATH::Pow(var_chaste_interface__Ca__Ca_NSR, 2) + CHASTE_MATH::Pow(var_Ileak_Iup_Ixfer__kj, 2)); // uM_per_ms + const double var_Ileak_Iup_Ixfer__jup = CHASTE_MATH::Pow(var_Ca__Ca_i, 2) * NV_Ith_S(mParameters, 2) / (CHASTE_MATH::Pow(var_Ca__Ca_i, 2) + CHASTE_MATH::Pow(var_Ileak_Iup_Ixfer__cup, 2)); // uM_per_ms + const double var_Irel__av = CHASTE_CONST(11.300000000000001); // per_ms + const double var_Irel__ax = CHASTE_CONST(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__gbarsr = CHASTE_CONST(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__yz1 = CHASTE_MATH::Pow(var_INaCa__xmnao, 3) * var_Ca__csm + CHASTE_MATH::Pow(var_chaste_interface__Na__Na_i, 3) * var_INaCa__xmcao; // mM4 + const double var_INaCa__yz3 = CHASTE_MATH::Pow(NV_Ith_S(mParameters, 7), 3) * (1 + CHASTE_MATH::Pow(var_chaste_interface__Na__Na_i, 3) / CHASTE_MATH::Pow(var_INaCa__xmnai, 3)) * var_INaCa__xmcai; // mM4 + const double var_INaCa__yz4 = CHASTE_MATH::Pow(NV_Ith_S(mParameters, 7), 3) * var_Ca__csm + CHASTE_MATH::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__rxa = ((CHASTE_MATH::Abs(var_ICaL__za) < CHASTE_CONST(0.001)) ? (2 * (-CHASTE_CONST(0.34100000000000003) * NV_Ith_S(mParameters, 5) + var_Ca__csm * CHASTE_MATH::Exp(var_ICaL__za)) * NV_Ith_S(mParameters, 8) * NV_Ith_S(mParameters, 10)) : (4 * (-CHASTE_CONST(0.34100000000000003) * NV_Ith_S(mParameters, 5) + var_Ca__csm * CHASTE_MATH::Exp(var_ICaL__za)) * NV_Ith_S(mParameters, 8) * var_Environment__FonRT * NV_Ith_S(mParameters, 10) * var_chaste_interface__cell__V / (-1 + CHASTE_MATH::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_IKr__rg = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.4732142857142858) + CHASTE_CONST(0.044642857142857144) * var_chaste_interface__cell__V)); // dimensionless + const double var_INa__ah = ((var_chaste_interface__cell__V < -40) ? (CHASTE_CONST(0.13500000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(11.764705882352942) + CHASTE_CONST(0.14705882352941177) * NV_Ith_S(mParameters, 13) - CHASTE_CONST(0.14705882352941177) * var_chaste_interface__cell__V)) : (0)); // per_ms + const double var_INa__aj = ((var_chaste_interface__cell__V < -40) ? ((CHASTE_CONST(37.780000000000001) + var_chaste_interface__cell__V) * (-127140 * CHASTE_MATH::Exp(CHASTE_CONST(0.24440000000000001) * var_chaste_interface__cell__V - CHASTE_CONST(0.24440000000000001) * NV_Ith_S(mParameters, 13)) - CHASTE_CONST(3.4740000000000003e-5) * CHASTE_MATH::Exp(CHASTE_CONST(0.043909999999999998) * NV_Ith_S(mParameters, 13) - CHASTE_CONST(0.043909999999999998) * var_chaste_interface__cell__V)) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(24.640530000000002) + CHASTE_CONST(0.311) * var_chaste_interface__cell__V))) : (0)); // per_ms + const double var_INa__bh = ((var_chaste_interface__cell__V < -40) ? (310000 * CHASTE_MATH::Exp(CHASTE_CONST(0.34999999999999998) * var_chaste_interface__cell__V - CHASTE_CONST(0.34999999999999998) * NV_Ith_S(mParameters, 13)) + CHASTE_CONST(3.5600000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.079000000000000001) * var_chaste_interface__cell__V - CHASTE_CONST(0.079000000000000001) * NV_Ith_S(mParameters, 13))) : (CHASTE_CONST(7.6923076923076916) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.96036036036036043) + CHASTE_CONST(0.0900900900900901) * NV_Ith_S(mParameters, 13) - CHASTE_CONST(0.0900900900900901) * var_chaste_interface__cell__V)))); // per_ms + const double var_INa__bj = ((var_chaste_interface__cell__V < -40) ? (CHASTE_CONST(0.1212) * CHASTE_MATH::Exp(CHASTE_CONST(0.01052) * NV_Ith_S(mParameters, 13) - CHASTE_CONST(0.01052) * var_chaste_interface__cell__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(5.5312920000000005) - CHASTE_CONST(0.13780000000000001) * var_chaste_interface__cell__V))) : (CHASTE_CONST(0.29999999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(2.5349999999999999e-7) * NV_Ith_S(mParameters, 13) - CHASTE_CONST(2.5349999999999999e-7) * var_chaste_interface__cell__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.2000000000000002) - CHASTE_CONST(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__zw3 = CHASTE_MATH::Pow(var_chaste_interface__Na__Na_i, 3) * NV_Ith_S(mParameters, 5) * CHASTE_MATH::Exp(CHASTE_CONST(0.34999999999999998) * var_Environment__FonRT * var_chaste_interface__cell__V) - CHASTE_MATH::Pow(NV_Ith_S(mParameters, 7), 3) * var_Ca__csm * CHASTE_MATH::Exp(-CHASTE_CONST(0.65000000000000002) * var_Environment__FonRT * var_chaste_interface__cell__V); // mM4 + const double var_INaCa__zw4 = 1 + CHASTE_CONST(0.20000000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(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__xicap = var_ICaL__po * var_Irel__gdyad * CHASTE_MATH::Abs(var_ICaL__rxa); // uM_per_ms + const double var_Irel__xirp = var_ICaL__po * var_Irel__Qr * var_Irel__gbarsr * CHASTE_MATH::Abs(var_ICaL__rxa) * CHASTE_MATH::Exp(-(30 + var_chaste_interface__cell__V) * var_Irel__ax) / (1 + CHASTE_MATH::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_Ito__rt2 = CHASTE_CONST(3.3500000000000001) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__cell__V; // dimensionless + const double var_Ito__rs_inf = 1 / (1 + CHASTE_MATH::Exp(var_Ito__rt2)); // dimensionless + const double var_cell__i_Stim_converted = CHASTE_STIM(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_ICaL__xica_converted = CHASTE_CONST(0.99999999999999989) * CHASTE_CAP() * 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_INaCa__xiNaCa_converted = CHASTE_CONST(0.99999999999999989) * CHASTE_CAP() * var_INaCa__xiNaCa; // uA_per_cm2 + const double var_reversal_potentials__ek = CHASTE_MATH::Log(NV_Ith_S(mParameters, 6) / NV_Ith_S(mParameters, 4)) / var_Environment__FonRT; // mV + const double var_IK1__aki = CHASTE_CONST(1.02) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__cell__V - CHASTE_CONST(0.23849999999999999) * var_reversal_potentials__ek)); // per_ms + const double var_IK1__bki = (CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__cell__V - CHASTE_CONST(0.061749999999999999) * var_reversal_potentials__ek) + CHASTE_CONST(0.49124000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__cell__V - CHASTE_CONST(0.080320000000000003) * var_reversal_potentials__ek)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(0.51429999999999998) * var_reversal_potentials__ek - CHASTE_CONST(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_IK1__xik1_converted = CHASTE_CONST(0.99999999999999989) * CHASTE_CAP() * 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_IKr__xikr_converted = CHASTE_CONST(0.99999999999999989) * CHASTE_CAP() * 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__xitos = (-var_reversal_potentials__ek + var_chaste_interface__cell__V) * (CHASTE_CONST(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_Ito__xito_converted = CHASTE_CONST(0.99999999999999989) * CHASTE_CAP() * var_Ito__xito; // uA_per_cm2 + const double var_reversal_potentials__ena = CHASTE_MATH::Log(NV_Ith_S(mParameters, 7) / var_chaste_interface__Na__Na_i) / var_Environment__FonRT; // mV + const double var_INa__xina = CHASTE_MATH::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 = CHASTE_CONST(0.99999999999999989) * CHASTE_CAP() * var_INa__xina; // uA_per_cm2 + const double var_reversal_potentials__prNaK = CHASTE_CONST(0.018329999999999999); // dimensionless + const double var_reversal_potentials__eks = CHASTE_MATH::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 + const double var_IKs__xiks_converted = CHASTE_CONST(0.99999999999999989) * CHASTE_CAP() * var_IKs__xiks; // uA_per_cm2 #if CHASTE_SUNDIALS_VERSION >= 60000 N_Vector dqs = N_VNew_Serial(22, CvodeContextManager::Instance()->GetSundialsContext()); @@ -1047,4 +1049,5 @@ extern "C" } } + #endif // CHASTE_CVODE diff --git a/chaste_codegen/data/tests/chaste_reference_models/Cvode/dynamic_mahajan_shiferaw_2008.hpp b/chaste_codegen/data/tests/chaste_reference_models/Cvode/dynamic_mahajan_shiferaw_2008.hpp index 18b61b672..687e1b6e1 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/Cvode/dynamic_mahajan_shiferaw_2008.hpp +++ b/chaste_codegen/data/tests/chaste_reference_models/Cvode/dynamic_mahajan_shiferaw_2008.hpp @@ -18,7 +18,11 @@ #include #include "AbstractDynamicallyLoadableEntity.hpp" #include "AbstractStimulusFunction.hpp" +#if USING_DEVICE_COMPILER +#include "StimulusEvaluatorCuda.hpp" +#endif #include "AbstractCvodeCell.hpp" +#include "HostDeviceMacros.hpp" class Dynamicmahajan_shiferaw_2008FromCellMLCvode : public AbstractCvodeCell, public AbstractDynamicallyLoadableEntity { @@ -39,6 +43,10 @@ class Dynamicmahajan_shiferaw_2008FromCellMLCvode : public AbstractCvodeCell, pu 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: + static constexpr unsigned TOTAL_SIZE = 26u; + static constexpr unsigned NNZ = 0u; + static inline const int sparse_rowptr[] = { }; + static inline const int sparse_colind[] = { }; boost::shared_ptr UseCellMLDefaultStimulus(); double GetIntracellularCalciumConcentration(); @@ -47,7 +55,19 @@ const bool is_probability[26] = {false, false, true, true, true, false, false, f 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); +#if USING_DEVICE_COMPILER + template + DEVICE + static void EvaluateYDerivativesDevice(ValueType var_chaste_interface__Environment__time, const ValueType* rY, ValueType* rDY, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType* mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim); + template + DEVICE + static void EvaluateAnalyticJacobianDevice(ValueType var_chaste_interface__Environment__time, const ValueType *rY, ValueType *rDY, ValueType *rJacobian, ValueType *rTmp1, ValueType *rTmp2, ValueType *rTmp3, const unsigned nvars, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType *mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim); + template + DEVICE + static void EvaluateSparseAnalyticJacobianDevice(ValueType var_chaste_interface__Environment__time, const ValueType *rY, ValueType *rDY, ValueType *rJacobian, ValueType *rTmp1, ValueType *rTmp2, ValueType *rTmp3, const unsigned nvars, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType *mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim); +#endif }; // Needs to be included last @@ -84,4 +104,10 @@ namespace boost } #endif // DYNAMICMAHAJAN_SHIFERAW_2008FROMCELLMLCVODE_HPP_ + + + +#if USING_DEVICE_COMPILER + #include "dynamic_mahajan_shiferaw_2008Kernels.hpp" +#endif #endif // CHASTE_CVODE \ No newline at end of file diff --git a/chaste_codegen/data/tests/chaste_reference_models/Cvode/faber_rudy_2000.cpp b/chaste_codegen/data/tests/chaste_reference_models/Cvode/faber_rudy_2000.cpp index 6395932d6..92729d7e4 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/Cvode/faber_rudy_2000.cpp +++ b/chaste_codegen/data/tests/chaste_reference_models/Cvode/faber_rudy_2000.cpp @@ -22,6 +22,8 @@ #include "HeartConfig.hpp" #include "IsNan.hpp" #include "MathsCustomFunctions.hpp" +#include "ChasteMathDeviceNamespaces.hpp" +#include "ChasteCpuMacros.hpp" #if CHASTE_SUNDIALS_VERSION >= 60000 #include "CvodeContextManager.hpp" @@ -34,7 +36,7 @@ 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_amplitude_converted = -CHASTE_CONST(25.5) * CHASTE_CAP(); // 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 @@ -70,21 +72,21 @@ 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, 2) = CHASTE_CONST(0.00080000000000000004); // (var_calcium_dynamics__K_mrel) [millimolar] + NV_Ith_S(this->mParameters, 3) = CHASTE_CONST(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, 5) = CHASTE_CONST(1.8); // (var_calcium_dynamics__Cao) [millimolar] + NV_Ith_S(this->mParameters, 6) = CHASTE_CONST(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, 8) = CHASTE_CONST(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] + NV_Ith_S(this->mParameters, 12) = CHASTE_CONST(0.75); // (var_time_independent_potassium_current__G_K1) [milliS_per_microF] + NV_Ith_S(this->mParameters, 13) = CHASTE_CONST(0.02614); // (var_rapid_delayed_rectifier_potassium_current__G_Kr) [milliS_per_microF] + NV_Ith_S(this->mParameters, 14) = CHASTE_CONST(0.433); // (var_slow_delayed_rectifier_potassium_current__G_Ks) [milliS_per_microF] + NV_Ith_S(this->mParameters, 15) = CHASTE_CONST(0.00025000000000000001); // (var_Na_Ca_exchanger__c1) [microA_per_microF] + NV_Ith_S(this->mParameters, 16) = CHASTE_CONST(0.5); // (var_transient_outward_current__g_to) [milliS_per_microF] } Cellfaber_rudy_2000FromCellMLCvode::~Cellfaber_rudy_2000FromCellMLCvode() @@ -140,7 +142,7 @@ made_new_cvode_vector = true; rY = MakeNVector(*pStateVariables); } - double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -176,84 +178,84 @@ 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_ATP_sensitive_potassium_current__kATP = CHASTE_CONST(0.00025000000000000001); // millimolar + const double var_ATP_sensitive_potassium_current__nATP = CHASTE_CONST(0.23999999999999999); // dimensionless + const double var_ATP_sensitive_potassium_current__nicholsarea = CHASTE_CONST(5.0000000000000002e-5); // dimensionless + const double var_ATP_sensitive_potassium_current__g_K_ATP = CHASTE_CONST(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 + CHASTE_MATH::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 = CHASTE_CONST(0.00059999999999999995); // millimolar + const double var_Na_Ca_exchanger__c2 = CHASTE_CONST(0.0001); // dimensionless + const double var_Na_Ca_exchanger__gamma = CHASTE_CONST(0.14999999999999999); // dimensionless + const double var_T_type_Ca_channel__g_CaT = CHASTE_CONST(0.050000000000000003); // milliS_per_microF + const double var_calcium_background_current__g_Cab = CHASTE_CONST(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_calcium_background_current__E_Ca = CHASTE_CONST(0.5) * var_cell__R * var_cell__T * CHASTE_MATH::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 >= -CHASTE_CONST(1.3356169352749131e-6)) && (var_chaste_interface__cell__V <= CHASTE_CONST(1.3356169352749131e-6))) ? (CHASTE_CONST(374358.83507802623) * (CHASTE_CONST(1.3356169352749131e-6) + var_chaste_interface__cell__V) * (CHASTE_CONST(0.019296999999999998) * (-CHASTE_CONST(0.34100000000000003) * NV_Ith_S(mParameters, 5) + var_chaste_interface__calcium_dynamics__Cai * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) * NV_Ith_S(mParameters, 8) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) + CHASTE_CONST(0.019296999999999998) * (-CHASTE_CONST(0.34100000000000003) * NV_Ith_S(mParameters, 5) + var_chaste_interface__calcium_dynamics__Cai * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8))) * NV_Ith_S(mParameters, 8) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) - CHASTE_CONST(0.019296999999999998) * (-CHASTE_CONST(0.34100000000000003) * NV_Ith_S(mParameters, 5) + var_chaste_interface__calcium_dynamics__Cai * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8))) * NV_Ith_S(mParameters, 8) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) : (CHASTE_CONST(14448.004881001343) * (-CHASTE_CONST(0.34100000000000003) * NV_Ith_S(mParameters, 5) + var_chaste_interface__calcium_dynamics__Cai * CHASTE_MATH::Exp(CHASTE_CONST(0.074871767015605231) * var_chaste_interface__cell__V)) * NV_Ith_S(mParameters, 8) * var_chaste_interface__cell__V / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(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_T_type_Ca_channel__i_Ca_T = CHASTE_MATH::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_ATP_sensitive_potassium_current__GKbaraATP = CHASTE_MATH::Pow((CHASTE_CONST(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 >= -CHASTE_CONST(2.6712338705498262e-6)) && (var_chaste_interface__cell__V <= CHASTE_CONST(2.6712338705498262e-6))) ? (CHASTE_CONST(187179.41753901311) * (CHASTE_CONST(2.6712338705498262e-6) + var_chaste_interface__cell__V) * (CHASTE_CONST(1.8621604999999999e-9) * (-CHASTE_CONST(0.75) * NV_Ith_S(mParameters, 6) + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Ki * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) + CHASTE_CONST(1.8621604999999999e-9) * (-CHASTE_CONST(0.75) * NV_Ith_S(mParameters, 6) + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Ki * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) - CHASTE_CONST(1.8621604999999999e-9) * (-CHASTE_CONST(0.75) * NV_Ith_S(mParameters, 6) + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Ki * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) : (CHASTE_CONST(0.00069711623550831479) * (-CHASTE_CONST(0.75) * NV_Ith_S(mParameters, 6) + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Ki * CHASTE_MATH::Exp(CHASTE_CONST(0.037435883507802616) * var_chaste_interface__cell__V)) * var_chaste_interface__cell__V / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(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_chaste_interface__cell__V >= -CHASTE_CONST(2.6712338705498262e-6)) && (var_chaste_interface__cell__V <= CHASTE_CONST(2.6712338705498262e-6))) ? (CHASTE_CONST(187179.41753901311) * (CHASTE_CONST(2.6712338705498262e-6) + var_chaste_interface__cell__V) * (CHASTE_CONST(6.5127375e-9) * (-CHASTE_CONST(0.75) * NV_Ith_S(mParameters, 7) + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Nai * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) + CHASTE_CONST(6.5127375e-9) * (-CHASTE_CONST(0.75) * NV_Ith_S(mParameters, 7) + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Nai * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) - CHASTE_CONST(6.5127375e-9) * (-CHASTE_CONST(0.75) * NV_Ith_S(mParameters, 7) + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Nai * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) : (CHASTE_CONST(0.0024381008236689767) * (-CHASTE_CONST(0.75) * NV_Ith_S(mParameters, 7) + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Nai * CHASTE_MATH::Exp(CHASTE_CONST(0.037435883507802616) * var_chaste_interface__cell__V)) * var_chaste_interface__cell__V / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(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_L_type_Ca_channel__i_Ca_L_converted = CHASTE_CAP() * var_L_type_Ca_channel__i_Ca_L; // uA_per_cm2 + const double var_Na_Ca_exchanger__i_NaCa = (-CHASTE_MATH::Pow(NV_Ith_S(mParameters, 7), 3) * var_chaste_interface__calcium_dynamics__Cai + CHASTE_MATH::Pow(var_chaste_interface__ionic_concentrations__Nai, 3) * NV_Ith_S(mParameters, 5) * CHASTE_MATH::Exp(var_cell__F * var_chaste_interface__cell__V / (var_cell__R * var_cell__T))) * NV_Ith_S(mParameters, 15) * CHASTE_MATH::Exp((-1 + var_Na_Ca_exchanger__gamma) * var_cell__F * var_chaste_interface__cell__V / (var_cell__R * var_cell__T)) / (1 + (CHASTE_MATH::Pow(NV_Ith_S(mParameters, 7), 3) * var_chaste_interface__calcium_dynamics__Cai + CHASTE_MATH::Pow(var_chaste_interface__ionic_concentrations__Nai, 3) * NV_Ith_S(mParameters, 5) * CHASTE_MATH::Exp(var_cell__F * var_chaste_interface__cell__V / (var_cell__R * var_cell__T))) * var_Na_Ca_exchanger__c2 * CHASTE_MATH::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 = CHASTE_CAP() * var_Na_Ca_exchanger__i_NaCa; // uA_per_cm2 + const double var_fast_sodium_current__E_Na = var_cell__R * var_cell__T * CHASTE_MATH::Log(NV_Ith_S(mParameters, 7) / var_chaste_interface__ionic_concentrations__Nai) / var_cell__F; // millivolt + const double var_fast_sodium_current__i_Na = CHASTE_MATH::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 = CHASTE_CAP() * 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 >= -CHASTE_CONST(2.6712338705498262e-6)) && (var_chaste_interface__cell__V <= CHASTE_CONST(2.6712338705498262e-6))) ? (CHASTE_CONST(187179.41753901311) * (CHASTE_CONST(2.6712338705498262e-6) + var_chaste_interface__cell__V) * (CHASTE_CONST(1.6884874999999999e-9) * (-CHASTE_CONST(0.75) * NV_Ith_S(mParameters, 6) + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Ki * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) + CHASTE_CONST(1.6884874999999999e-9) * (-CHASTE_CONST(0.75) * NV_Ith_S(mParameters, 6) + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Ki * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) - CHASTE_CONST(1.6884874999999999e-9) * (-CHASTE_CONST(0.75) * NV_Ith_S(mParameters, 6) + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Ki * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) : (CHASTE_CONST(0.00063210021354380874) * (-CHASTE_CONST(0.75) * NV_Ith_S(mParameters, 6) + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Ki * CHASTE_MATH::Exp(CHASTE_CONST(0.037435883507802616) * var_chaste_interface__cell__V)) * var_chaste_interface__cell__V / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(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 >= -CHASTE_CONST(2.6712338705498262e-6)) && (var_chaste_interface__cell__V <= CHASTE_CONST(2.6712338705498262e-6))) ? (CHASTE_CONST(187179.41753901311) * (CHASTE_CONST(2.6712338705498262e-6) + var_chaste_interface__cell__V) * (CHASTE_CONST(1.6884874999999999e-9) * (-CHASTE_CONST(0.75) * NV_Ith_S(mParameters, 7) + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Nai * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) + CHASTE_CONST(1.6884874999999999e-9) * (-CHASTE_CONST(0.75) * NV_Ith_S(mParameters, 7) + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Nai * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) - CHASTE_CONST(1.6884874999999999e-9) * (-CHASTE_CONST(0.75) * NV_Ith_S(mParameters, 7) + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Nai * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) : (CHASTE_CONST(0.00063210021354380874) * (-CHASTE_CONST(0.75) * NV_Ith_S(mParameters, 7) + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Nai * CHASTE_MATH::Exp(CHASTE_CONST(0.037435883507802616) * var_chaste_interface__cell__V)) * var_chaste_interface__cell__V / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(0.037435883507802616) * var_chaste_interface__cell__V)))); // microA_per_microF + const double var_non_specific_calcium_activated_current__K_m_ns_Ca = CHASTE_CONST(0.0011999999999999999); // millimolar + const double var_non_specific_calcium_activated_current__i_ns_K = var_non_specific_calcium_activated_current__I_ns_K / (1 + CHASTE_MATH::Pow(var_non_specific_calcium_activated_current__K_m_ns_Ca, 3) / CHASTE_MATH::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 + CHASTE_MATH::Pow(var_non_specific_calcium_activated_current__K_m_ns_Ca, 3) / CHASTE_MATH::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_plateau_potassium_current__Kp = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.2521739130434781) - CHASTE_CONST(0.16722408026755853) * var_chaste_interface__cell__V)); // dimensionless + const double var_plateau_potassium_current__g_Kp = CHASTE_CONST(0.0055199999999999997); // milliS_per_microF + const double var_rapid_delayed_rectifier_potassium_current__Rect = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(0.4017857142857143) + CHASTE_CONST(0.044642857142857144) * var_chaste_interface__cell__V)); // dimensionless + const double var_rapid_delayed_rectifier_potassium_current__g_Kr = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::Sqrt(NV_Ith_S(mParameters, 6)) * NV_Ith_S(mParameters, 13); // milliS_per_microF + const double var_sarcolemmal_calcium_pump__I_pCa = CHASTE_CONST(1.1499999999999999); // microA_per_microF + const double var_sarcolemmal_calcium_pump__K_mpCa = CHASTE_CONST(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__PNaK = CHASTE_CONST(0.018329999999999999); // dimensionless + const double var_slow_delayed_rectifier_potassium_current__E_Ks = var_cell__R * var_cell__T * CHASTE_MATH::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 + CHASTE_CONST(0.59999999999999998) / (1 + CHASTE_CONST(6.4818210260626455e-7) * CHASTE_MATH::Pow((1 / var_chaste_interface__calcium_dynamics__Cai), CHASTE_CONST(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_slow_delayed_rectifier_potassium_current__i_Ks_converted = CHASTE_CAP() * var_slow_delayed_rectifier_potassium_current__i_Ks; // uA_per_cm2 + const double var_sodium_activated_potassium_current__g_K_Na = CHASTE_CONST(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_activated_potassium_current__nKNa = CHASTE_CONST(2.7999999999999998); // dimensionless + const double var_sodium_activated_potassium_current__pona = CHASTE_CONST(0.84999999999999998) / (1 + CHASTE_MATH::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 = CHASTE_CONST(0.80000000000000004) - CHASTE_CONST(0.65000000000000002) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(8.3333333333333339) + CHASTE_CONST(0.066666666666666666) * var_chaste_interface__cell__V)); // dimensionless + const double var_sodium_background_current__g_Nab = CHASTE_CONST(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__I_NaK = CHASTE_CONST(2.25); // microA_per_microF + const double var_sodium_potassium_pump__K_mKo = CHASTE_CONST(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_sodium_potassium_pump__sigma = -CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(0.01485884101040119) * NV_Ith_S(mParameters, 7)); // dimensionless + const double var_sodium_potassium_pump__f_NaK = 1 / (1 + CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(0.10000000000000001) * var_cell__F * var_chaste_interface__cell__V / (var_cell__R * var_cell__T)) + CHASTE_CONST(0.036499999999999998) * var_sodium_potassium_pump__sigma * CHASTE_MATH::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 + CHASTE_MATH::Pow(var_sodium_potassium_pump__K_mNai, 2) / CHASTE_MATH::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 * CHASTE_MATH::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_rapid_delayed_rectifier_potassium_current__i_Kr_converted = CHASTE_CAP() * 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__g_K1 = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::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 = CHASTE_CONST(1.02) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__cell__V - CHASTE_CONST(0.23849999999999999) * var_time_independent_potassium_current__E_K)); // per_ms + const double var_time_independent_potassium_current_K1_gate__beta_K1 = (CHASTE_CONST(0.49124000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__cell__V - CHASTE_CONST(0.080320000000000003) * var_time_independent_potassium_current__E_K) + CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__cell__V - CHASTE_CONST(0.061749999999999999) * var_time_independent_potassium_current__E_K)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(0.51429999999999998) * var_time_independent_potassium_current__E_K - CHASTE_CONST(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 var_time_independent_potassium_current__i_K1_converted = CHASTE_CAP() * var_time_independent_potassium_current__i_K1; // uA_per_cm2 + const double var_transient_outward_current__rvdv = CHASTE_MATH::Exp(CHASTE_CONST(0.01) * var_chaste_interface__cell__V); // dimensionless + const double var_transient_outward_current__i_to = CHASTE_MATH::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 = CHASTE_CAP() * var_transient_outward_current__i_to; // uA_per_cm2 + const double var_chaste_interface__i_ionic = CHASTE_CAP() * var_ATP_sensitive_potassium_current__i_K_ATP + CHASTE_CAP() * var_T_type_Ca_channel__i_Ca_T + CHASTE_CAP() * var_calcium_background_current__i_Ca_b + CHASTE_CAP() * var_non_specific_calcium_activated_current__i_ns_Ca + CHASTE_CAP() * var_plateau_potassium_current__i_Kp + CHASTE_CAP() * var_sarcolemmal_calcium_pump__i_p_Ca + CHASTE_CAP() * var_sodium_activated_potassium_current__i_K_Na + CHASTE_CAP() * var_sodium_background_current__i_Na_b + CHASTE_CAP() * 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) @@ -268,7 +270,7 @@ { // Inputs: // Time units: millisecond - double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -324,34 +326,34 @@ 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_ATP_sensitive_potassium_current__kATP = CHASTE_CONST(0.00025000000000000001); // millimolar + const double var_ATP_sensitive_potassium_current__nATP = CHASTE_CONST(0.23999999999999999); // dimensionless + const double var_ATP_sensitive_potassium_current__nicholsarea = CHASTE_CONST(5.0000000000000002e-5); // dimensionless + const double var_ATP_sensitive_potassium_current__g_K_ATP = CHASTE_CONST(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 + CHASTE_MATH::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 = CHASTE_CONST(0.00059999999999999995); // millimolar + const double var_Na_Ca_exchanger__c2 = CHASTE_CONST(0.0001); // dimensionless + const double var_Na_Ca_exchanger__gamma = CHASTE_CONST(0.14999999999999999); // dimensionless + const double var_T_type_Ca_channel__g_CaT = CHASTE_CONST(0.050000000000000003); // milliS_per_microF + const double var_calcium_background_current__g_Cab = CHASTE_CONST(0.003016); // milliS_per_microF + const double d_dt_chaste_interface_var_calcium_dynamics__APtrack2 = (((var_chaste_interface__calcium_dynamics__APtrack > CHASTE_CONST(0.17999999999999999)) && (var_chaste_interface__calcium_dynamics__APtrack < CHASTE_CONST(0.20000000000000001))) ? (100 - CHASTE_CONST(100.5) * var_chaste_interface__calcium_dynamics__APtrack2) : (-CHASTE_CONST(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 > CHASTE_CONST(0.17999999999999999)) && (var_chaste_interface__calcium_dynamics__APtrack < CHASTE_CONST(0.20000000000000001))) ? (100 - CHASTE_CONST(100.5) * var_chaste_interface__calcium_dynamics__APtrack3) : (-CHASTE_CONST(0.01) * var_chaste_interface__calcium_dynamics__APtrack3)); // 1 / ms + const double var_calcium_dynamics__CMDN_max = CHASTE_CONST(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__CSQNthresh = CHASTE_CONST(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__K_mCMDN = CHASTE_CONST(0.0023800000000000002); // millimolar + const double var_calcium_dynamics__K_mCSQN = CHASTE_CONST(0.80000000000000004); // millimolar + const double var_calcium_dynamics__K_mTn = CHASTE_CONST(0.00050000000000000001); // millimolar + const double var_calcium_dynamics__K_mup = CHASTE_CONST(0.00092000000000000003); // millimolar + const double var_calcium_dynamics__Logicthresh = CHASTE_CONST(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) : (-CHASTE_CONST(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 < CHASTE_CONST(0.37)) && (var_chaste_interface__calcium_dynamics__OVRLDtrack3 < CHASTE_CONST(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) : (-CHASTE_CONST(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) : (-CHASTE_CONST(0.01) * var_chaste_interface__calcium_dynamics__OVRLDtrack3)); // 1 / ms + const double var_calcium_dynamics__RyRopen = 1 / (1 + var_chaste_interface__calcium_dynamics__APtrack2 * CHASTE_MATH::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__Tn_max = CHASTE_CONST(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 @@ -360,130 +362,130 @@ 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_calcium_background_current__E_Ca = CHASTE_CONST(0.5) * var_cell__R * var_cell__T * CHASTE_MATH::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 >= -CHASTE_CONST(1.3356169352749131e-6)) && (var_chaste_interface__cell__V <= CHASTE_CONST(1.3356169352749131e-6))) ? (CHASTE_CONST(374358.83507802623) * (CHASTE_CONST(1.3356169352749131e-6) + var_chaste_interface__cell__V) * (CHASTE_CONST(0.019296999999999998) * (-CHASTE_CONST(0.34100000000000003) * NV_Ith_S(mParameters, 5) + var_chaste_interface__calcium_dynamics__Cai * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) * NV_Ith_S(mParameters, 8) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) + CHASTE_CONST(0.019296999999999998) * (-CHASTE_CONST(0.34100000000000003) * NV_Ith_S(mParameters, 5) + var_chaste_interface__calcium_dynamics__Cai * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8))) * NV_Ith_S(mParameters, 8) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) - CHASTE_CONST(0.019296999999999998) * (-CHASTE_CONST(0.34100000000000003) * NV_Ith_S(mParameters, 5) + var_chaste_interface__calcium_dynamics__Cai * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8))) * NV_Ith_S(mParameters, 8) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) : (CHASTE_CONST(14448.004881001343) * (-CHASTE_CONST(0.34100000000000003) * NV_Ith_S(mParameters, 5) + var_chaste_interface__calcium_dynamics__Cai * CHASTE_MATH::Exp(CHASTE_CONST(0.074871767015605231) * var_chaste_interface__cell__V)) * NV_Ith_S(mParameters, 8) * var_chaste_interface__cell__V / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(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__d_infinity = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.16025641025641024) * var_L_type_Ca_channel_d_gate__E0_d)); // dimensionless + const double var_L_type_Ca_channel_d_gate__tau_d = ((CHASTE_MATH::Abs(var_L_type_Ca_channel_d_gate__E0_d) < CHASTE_CONST(1.0000000000000001e-5)) ? (CHASTE_CONST(2.2893772893772892)) : (CHASTE_CONST(28.571428571428569) * (1 - CHASTE_MATH::Exp(-CHASTE_CONST(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__f_infinity = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(4.0767441860465121) + CHASTE_CONST(0.11627906976744186) * var_chaste_interface__cell__V)) + CHASTE_CONST(0.59999999999999998) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(2.5) - CHASTE_CONST(0.050000000000000003) * var_chaste_interface__cell__V)); // dimensionless + const double var_L_type_Ca_channel_f_gate__tau_f = 1 / (CHASTE_CONST(0.02) + CHASTE_CONST(0.019699999999999999) * CHASTE_MATH::Exp(-CHASTE_CONST(0.113569) * CHASTE_MATH::Pow((1 + CHASTE_CONST(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 var_T_type_Ca_channel__i_Ca_T = CHASTE_MATH::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 + CHASTE_MATH::Exp(-CHASTE_CONST(1.2962962962962963) - CHASTE_CONST(0.092592592592592587) * var_chaste_interface__cell__V)); // dimensionless + const double var_T_type_Ca_channel_b_gate__tau_b = CHASTE_CONST(3.7000000000000002) + CHASTE_CONST(6.0999999999999996) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(5.5555555555555554) + CHASTE_CONST(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 var_T_type_Ca_channel_g_gate__g_inf = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(10.714285714285715) + CHASTE_CONST(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 - CHASTE_CONST(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_cell__I_st_converted = CHASTE_STIM(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_cell__I_st = var_cell__I_st_converted / CHASTE_CAP(); // microA_per_microF + const double var_fast_sodium_current_h_gate__alpha_h = ((var_chaste_interface__cell__V < -40) ? (CHASTE_CONST(0.13500000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(11.764705882352942) + CHASTE_CONST(0.14705882352941177) * NV_Ith_S(mParameters, 11) - CHASTE_CONST(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 * CHASTE_MATH::Exp(CHASTE_CONST(0.34999999999999998) * var_chaste_interface__cell__V - CHASTE_CONST(0.34999999999999998) * NV_Ith_S(mParameters, 11)) + CHASTE_CONST(3.5600000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.079000000000000001) * var_chaste_interface__cell__V - CHASTE_CONST(0.079000000000000001) * NV_Ith_S(mParameters, 11))) : (CHASTE_CONST(7.6923076923076916) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.96036036036036043) + CHASTE_CONST(0.0900900900900901) * NV_Ith_S(mParameters, 11) - CHASTE_CONST(0.0900900900900901) * var_chaste_interface__cell__V)))); // per_ms + const double var_fast_sodium_current_h_gate__h_inf = CHASTE_CONST(0.01) * NV_Ith_S(mParameters, 10) + (1 - CHASTE_CONST(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__alpha_j = ((var_chaste_interface__cell__V < -40) ? ((CHASTE_CONST(37.780000000000001) + var_chaste_interface__cell__V) * (-127140 * CHASTE_MATH::Exp(CHASTE_CONST(0.24440000000000001) * var_chaste_interface__cell__V - CHASTE_CONST(0.24440000000000001) * NV_Ith_S(mParameters, 11)) - CHASTE_CONST(3.4740000000000003e-5) * CHASTE_MATH::Exp(CHASTE_CONST(0.043909999999999998) * NV_Ith_S(mParameters, 11) - CHASTE_CONST(0.043909999999999998) * var_chaste_interface__cell__V)) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(24.640530000000002) + CHASTE_CONST(0.311) * var_chaste_interface__cell__V - CHASTE_CONST(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) ? (CHASTE_CONST(0.1212) * CHASTE_MATH::Exp(CHASTE_CONST(0.01052) * NV_Ith_S(mParameters, 11) - CHASTE_CONST(0.01052) * var_chaste_interface__cell__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(5.5312920000000005) + CHASTE_CONST(0.13780000000000001) * NV_Ith_S(mParameters, 11) - CHASTE_CONST(0.13780000000000001) * var_chaste_interface__cell__V))) : (CHASTE_CONST(0.29999999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(2.5349999999999999e-7) * NV_Ith_S(mParameters, 11) - CHASTE_CONST(2.5349999999999999e-7) * var_chaste_interface__cell__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.2000000000000002) + CHASTE_CONST(0.10000000000000001) * NV_Ith_S(mParameters, 11) - CHASTE_CONST(0.10000000000000001) * var_chaste_interface__cell__V)))); // per_ms + const double var_fast_sodium_current_j_gate__j_inf = CHASTE_CONST(0.01) * NV_Ith_S(mParameters, 10) + (1 - CHASTE_CONST(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 var_fast_sodium_current_m_gate__E0_m = CHASTE_CONST(47.130000000000003) + var_chaste_interface__cell__V; // millivolt + const double var_fast_sodium_current_m_gate__beta_m = CHASTE_CONST(0.080000000000000002) * CHASTE_MATH::Exp(-CHASTE_CONST(0.090909090909090912) * var_chaste_interface__cell__V); // per_ms + const double var_fast_sodium_current_m_gate__delta_m = CHASTE_CONST(1.0000000000000001e-5); // millivolt + const double var_fast_sodium_current_m_gate__alpha_m = ((var_fast_sodium_current_m_gate__delta_m <= CHASTE_MATH::Abs(var_fast_sodium_current_m_gate__E0_m)) ? (CHASTE_CONST(0.32000000000000001) * var_fast_sodium_current_m_gate__E0_m / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(0.10000000000000001) * var_fast_sodium_current_m_gate__E0_m))) : (CHASTE_CONST(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 var_geometry__A_cap = CHASTE_CONST(0.00015339999999999999); // cm2 + const double var_geometry__preplength = CHASTE_CONST(0.10000000000000001); // mm + const double var_geometry__radius = CHASTE_CONST(0.010999999999999999); // mm + const double var_geometry__volume = CHASTE_CONST(CHASTE_MATH::Pi) * CHASTE_MATH::Pow(var_geometry__radius, 2) * var_geometry__preplength; // micro_litre + const double var_geometry__V_JSR = CHASTE_CONST(0.0047999999999999996) * var_geometry__volume; // micro_litre + const double var_geometry__V_NSR = CHASTE_CONST(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_geometry__V_myo = CHASTE_CONST(0.68000000000000005) * var_geometry__volume; // micro_litre + const double var_ATP_sensitive_potassium_current__GKbaraATP = CHASTE_MATH::Pow((CHASTE_CONST(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 >= -CHASTE_CONST(2.6712338705498262e-6)) && (var_chaste_interface__cell__V <= CHASTE_CONST(2.6712338705498262e-6))) ? (CHASTE_CONST(187179.41753901311) * (CHASTE_CONST(2.6712338705498262e-6) + var_chaste_interface__cell__V) * (CHASTE_CONST(1.8621604999999999e-9) * (-CHASTE_CONST(0.75) * NV_Ith_S(mParameters, 6) + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Ki * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) + CHASTE_CONST(1.8621604999999999e-9) * (-CHASTE_CONST(0.75) * NV_Ith_S(mParameters, 6) + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Ki * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) - CHASTE_CONST(1.8621604999999999e-9) * (-CHASTE_CONST(0.75) * NV_Ith_S(mParameters, 6) + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Ki * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) : (CHASTE_CONST(0.00069711623550831479) * (-CHASTE_CONST(0.75) * NV_Ith_S(mParameters, 6) + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Ki * CHASTE_MATH::Exp(CHASTE_CONST(0.037435883507802616) * var_chaste_interface__cell__V)) * var_chaste_interface__cell__V / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(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_chaste_interface__cell__V >= -CHASTE_CONST(2.6712338705498262e-6)) && (var_chaste_interface__cell__V <= CHASTE_CONST(2.6712338705498262e-6))) ? (CHASTE_CONST(187179.41753901311) * (CHASTE_CONST(2.6712338705498262e-6) + var_chaste_interface__cell__V) * (CHASTE_CONST(6.5127375e-9) * (-CHASTE_CONST(0.75) * NV_Ith_S(mParameters, 7) + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Nai * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) + CHASTE_CONST(6.5127375e-9) * (-CHASTE_CONST(0.75) * NV_Ith_S(mParameters, 7) + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Nai * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) - CHASTE_CONST(6.5127375e-9) * (-CHASTE_CONST(0.75) * NV_Ith_S(mParameters, 7) + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Nai * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) : (CHASTE_CONST(0.0024381008236689767) * (-CHASTE_CONST(0.75) * NV_Ith_S(mParameters, 7) + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Nai * CHASTE_MATH::Exp(CHASTE_CONST(0.037435883507802616) * var_chaste_interface__cell__V)) * var_chaste_interface__cell__V / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(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_Na_Ca_exchanger__i_NaCa = (-CHASTE_MATH::Pow(NV_Ith_S(mParameters, 7), 3) * var_chaste_interface__calcium_dynamics__Cai + CHASTE_MATH::Pow(var_chaste_interface__ionic_concentrations__Nai, 3) * NV_Ith_S(mParameters, 5) * CHASTE_MATH::Exp(var_cell__F * var_chaste_interface__cell__V / (var_cell__R * var_cell__T))) * NV_Ith_S(mParameters, 15) * CHASTE_MATH::Exp((-1 + var_Na_Ca_exchanger__gamma) * var_cell__F * var_chaste_interface__cell__V / (var_cell__R * var_cell__T)) / (1 + (CHASTE_MATH::Pow(NV_Ith_S(mParameters, 7), 3) * var_chaste_interface__calcium_dynamics__Cai + CHASTE_MATH::Pow(var_chaste_interface__ionic_concentrations__Nai, 3) * NV_Ith_S(mParameters, 5) * CHASTE_MATH::Exp(var_cell__F * var_chaste_interface__cell__V / (var_cell__R * var_cell__T))) * var_Na_Ca_exchanger__c2 * CHASTE_MATH::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 * CHASTE_MATH::Log(NV_Ith_S(mParameters, 7) / var_chaste_interface__ionic_concentrations__Nai) / var_cell__F; // millivolt + const double var_fast_sodium_current__i_Na = CHASTE_MATH::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 >= -CHASTE_CONST(2.6712338705498262e-6)) && (var_chaste_interface__cell__V <= CHASTE_CONST(2.6712338705498262e-6))) ? (CHASTE_CONST(187179.41753901311) * (CHASTE_CONST(2.6712338705498262e-6) + var_chaste_interface__cell__V) * (CHASTE_CONST(1.6884874999999999e-9) * (-CHASTE_CONST(0.75) * NV_Ith_S(mParameters, 6) + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Ki * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) + CHASTE_CONST(1.6884874999999999e-9) * (-CHASTE_CONST(0.75) * NV_Ith_S(mParameters, 6) + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Ki * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) - CHASTE_CONST(1.6884874999999999e-9) * (-CHASTE_CONST(0.75) * NV_Ith_S(mParameters, 6) + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Ki * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) : (CHASTE_CONST(0.00063210021354380874) * (-CHASTE_CONST(0.75) * NV_Ith_S(mParameters, 6) + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Ki * CHASTE_MATH::Exp(CHASTE_CONST(0.037435883507802616) * var_chaste_interface__cell__V)) * var_chaste_interface__cell__V / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(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 >= -CHASTE_CONST(2.6712338705498262e-6)) && (var_chaste_interface__cell__V <= CHASTE_CONST(2.6712338705498262e-6))) ? (CHASTE_CONST(187179.41753901311) * (CHASTE_CONST(2.6712338705498262e-6) + var_chaste_interface__cell__V) * (CHASTE_CONST(1.6884874999999999e-9) * (-CHASTE_CONST(0.75) * NV_Ith_S(mParameters, 7) + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Nai * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) + CHASTE_CONST(1.6884874999999999e-9) * (-CHASTE_CONST(0.75) * NV_Ith_S(mParameters, 7) + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Nai * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) - CHASTE_CONST(1.6884874999999999e-9) * (-CHASTE_CONST(0.75) * NV_Ith_S(mParameters, 7) + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Nai * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) : (CHASTE_CONST(0.00063210021354380874) * (-CHASTE_CONST(0.75) * NV_Ith_S(mParameters, 7) + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Nai * CHASTE_MATH::Exp(CHASTE_CONST(0.037435883507802616) * var_chaste_interface__cell__V)) * var_chaste_interface__cell__V / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(0.037435883507802616) * var_chaste_interface__cell__V)))); // microA_per_microF + const double var_non_specific_calcium_activated_current__K_m_ns_Ca = CHASTE_CONST(0.0011999999999999999); // millimolar + const double var_non_specific_calcium_activated_current__i_ns_K = var_non_specific_calcium_activated_current__I_ns_K / (1 + CHASTE_MATH::Pow(var_non_specific_calcium_activated_current__K_m_ns_Ca, 3) / CHASTE_MATH::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 + CHASTE_MATH::Pow(var_non_specific_calcium_activated_current__K_m_ns_Ca, 3) / CHASTE_MATH::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 var_plateau_potassium_current__Kp = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.2521739130434781) - CHASTE_CONST(0.16722408026755853) * var_chaste_interface__cell__V)); // dimensionless + const double var_plateau_potassium_current__g_Kp = CHASTE_CONST(0.0055199999999999997); // milliS_per_microF + const double var_rapid_delayed_rectifier_potassium_current__Rect = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(0.4017857142857143) + CHASTE_CONST(0.044642857142857144) * var_chaste_interface__cell__V)); // dimensionless + const double var_rapid_delayed_rectifier_potassium_current__g_Kr = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::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 >= -CHASTE_CONST(14.200000813008129)) && (var_chaste_interface__cell__V <= -CHASTE_CONST(14.199999186991869))) ? (-CHASTE_CONST(1.1219512194943214e-9) / (1 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999998406912e-8))) + CHASTE_CONST(615000.00000454858) * (CHASTE_CONST(14.200000813008129) + var_chaste_interface__cell__V) * (CHASTE_CONST(1.1219512194943214e-9) / (1 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999998406912e-8))) + CHASTE_CONST(1.1219512195134727e-9) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(1.0000000000011388e-7))))) : (CHASTE_CONST(0.0013799999999999999) * (CHASTE_CONST(14.199999999999999) + var_chaste_interface__cell__V) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(1.7465999999999999) - CHASTE_CONST(0.123) * var_chaste_interface__cell__V)))) + (((var_chaste_interface__cell__V >= -CHASTE_CONST(38.900000689655172)) && (var_chaste_interface__cell__V <= -CHASTE_CONST(38.899999310344825))) ? (-CHASTE_CONST(4.2068965517283451e-10) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.000000000001e-7))) + CHASTE_CONST(724999.99997009686) * (CHASTE_CONST(38.900000689655172) + var_chaste_interface__cell__V) * (CHASTE_CONST(4.2068965517283451e-10) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.000000000001e-7))) + CHASTE_CONST(4.2068965520669629e-10) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(1.0000000000814911e-7))))) : (CHASTE_CONST(0.00060999999999999997) * (CHASTE_CONST(38.899999999999999) + var_chaste_interface__cell__V) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(5.6404999999999994) + CHASTE_CONST(0.14499999999999999) * var_chaste_interface__cell__V))))); // ms + const double var_rapid_delayed_rectifier_potassium_current_xr_gate__xr_infinity = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.8666666666666667) - CHASTE_CONST(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_pCa = CHASTE_CONST(1.1499999999999999); // microA_per_microF + const double var_sarcolemmal_calcium_pump__K_mpCa = CHASTE_CONST(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 d_dt_chaste_interface_var_calcium_dynamics__Cainfluxtrack = ((var_chaste_interface__calcium_dynamics__APtrack > CHASTE_CONST(0.20000000000000001)) ? (-CHASTE_CONST(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 > CHASTE_CONST(0.01)) ? (0) : (-CHASTE_CONST(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 + CHASTE_MATH::Exp(CHASTE_CONST(5.5555555555555554) + CHASTE_CONST(1.1111111111111112) * var_L_type_Ca_channel__i_CaCa + CHASTE_CONST(1.1111111111111112) * var_T_type_Ca_channel__i_Ca_T + CHASTE_CONST(1.1111111111111112) * var_calcium_background_current__i_Ca_b + CHASTE_CONST(1.1111111111111112) * var_sarcolemmal_calcium_pump__i_p_Ca - CHASTE_CONST(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_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 / CHASTE_MATH::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 - CHASTE_CONST(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 / CHASTE_MATH::Pow((var_chaste_interface__calcium_dynamics__Cai + var_calcium_dynamics__K_mCMDN), 2) + var_calcium_dynamics__K_mTn * var_calcium_dynamics__Tn_max / CHASTE_MATH::Pow((var_chaste_interface__calcium_dynamics__Cai + var_calcium_dynamics__K_mTn), 2)); // millimolar / ms + const double var_slow_delayed_rectifier_potassium_current__PNaK = CHASTE_CONST(0.018329999999999999); // dimensionless + const double var_slow_delayed_rectifier_potassium_current__E_Ks = var_cell__R * var_cell__T * CHASTE_MATH::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 + CHASTE_CONST(0.59999999999999998) / (1 + CHASTE_CONST(6.4818210260626455e-7) * CHASTE_MATH::Pow((1 / var_chaste_interface__calcium_dynamics__Cai), CHASTE_CONST(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 >= -CHASTE_CONST(30.000001455604075)) && (var_chaste_interface__cell__V <= -CHASTE_CONST(29.999998544395925))) ? (1 / (-CHASTE_CONST(1.0465793304208771e-10) / (1 - CHASTE_MATH::Exp(CHASTE_CONST(2.1542940320207204e-7))) - CHASTE_CONST(1.9068413391534758e-10) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999880736e-8))) + CHASTE_CONST(343500.00000040967) * (CHASTE_CONST(30.000001455604075) + var_chaste_interface__cell__V) * (CHASTE_CONST(1.0465793304208771e-10) / (1 - CHASTE_MATH::Exp(CHASTE_CONST(2.1542940320207204e-7))) + CHASTE_CONST(1.0465793304208771e-10) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(2.1542940320207204e-7))) + CHASTE_CONST(1.9068413391534758e-10) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999880736e-8))) + CHASTE_CONST(1.9068413391534758e-10) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999880736e-8)))))) : (1 / (CHASTE_CONST(0.00013100000000000001) * (30 + var_chaste_interface__cell__V) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(2.0609999999999999) + CHASTE_CONST(0.068699999999999997) * var_chaste_interface__cell__V)) + CHASTE_CONST(7.1899999999999999e-5) * (30 + var_chaste_interface__cell__V) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(4.4399999999999995) - CHASTE_CONST(0.14799999999999999) * var_chaste_interface__cell__V))))); // ms + const double var_slow_delayed_rectifier_potassium_current_xs1_gate__xs1_infinity = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(0.089820359281437126) - CHASTE_CONST(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_xs2_gate__tau_xs2 = 4 * (((var_chaste_interface__cell__V >= -CHASTE_CONST(30.000001455604075)) && (var_chaste_interface__cell__V <= -CHASTE_CONST(29.999998544395925))) ? (1 / (-CHASTE_CONST(1.0465793304208771e-10) / (1 - CHASTE_MATH::Exp(CHASTE_CONST(2.1542940320207204e-7))) - CHASTE_CONST(1.9068413391534758e-10) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999880736e-8))) + CHASTE_CONST(343500.00000040967) * (CHASTE_CONST(30.000001455604075) + var_chaste_interface__cell__V) * (CHASTE_CONST(1.0465793304208771e-10) / (1 - CHASTE_MATH::Exp(CHASTE_CONST(2.1542940320207204e-7))) + CHASTE_CONST(1.0465793304208771e-10) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(2.1542940320207204e-7))) + CHASTE_CONST(1.9068413391534758e-10) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999880736e-8))) + CHASTE_CONST(1.9068413391534758e-10) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999880736e-8)))))) : (1 / (CHASTE_CONST(0.00013100000000000001) * (30 + var_chaste_interface__cell__V) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(2.0609999999999999) + CHASTE_CONST(0.068699999999999997) * var_chaste_interface__cell__V)) + CHASTE_CONST(7.1899999999999999e-5) * (30 + var_chaste_interface__cell__V) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(4.4399999999999995) - CHASTE_CONST(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 var_slow_delayed_rectifier_potassium_current_xs2_gate__xs2_infinity = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(0.089820359281437126) - CHASTE_CONST(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__g_K_Na = CHASTE_CONST(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_activated_potassium_current__nKNa = CHASTE_CONST(2.7999999999999998); // dimensionless + const double var_sodium_activated_potassium_current__pona = CHASTE_CONST(0.84999999999999998) / (1 + CHASTE_MATH::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 = CHASTE_CONST(0.80000000000000004) - CHASTE_CONST(0.65000000000000002) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(8.3333333333333339) + CHASTE_CONST(0.066666666666666666) * var_chaste_interface__cell__V)); // dimensionless + const double var_sodium_background_current__g_Nab = CHASTE_CONST(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__I_NaK = CHASTE_CONST(2.25); // microA_per_microF + const double var_sodium_potassium_pump__K_mKo = CHASTE_CONST(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_sodium_potassium_pump__sigma = -CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(0.01485884101040119) * NV_Ith_S(mParameters, 7)); // dimensionless + const double var_sodium_potassium_pump__f_NaK = 1 / (1 + CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(0.10000000000000001) * var_cell__F * var_chaste_interface__cell__V / (var_cell__R * var_cell__T)) + CHASTE_CONST(0.036499999999999998) * var_sodium_potassium_pump__sigma * CHASTE_MATH::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 + CHASTE_MATH::Pow(var_sodium_potassium_pump__K_mNai, 2) / CHASTE_MATH::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_time_independent_potassium_current__E_K = var_cell__R * var_cell__T * CHASTE_MATH::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__g_K1 = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::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 = CHASTE_CONST(1.02) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__cell__V - CHASTE_CONST(0.23849999999999999) * var_time_independent_potassium_current__E_K)); // per_ms + const double var_time_independent_potassium_current_K1_gate__beta_K1 = (CHASTE_CONST(0.49124000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__cell__V - CHASTE_CONST(0.080320000000000003) * var_time_independent_potassium_current__E_K) + CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__cell__V - CHASTE_CONST(0.061749999999999999) * var_time_independent_potassium_current__E_K)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(0.51429999999999998) * var_time_independent_potassium_current__E_K - CHASTE_CONST(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__rvdv = CHASTE_MATH::Exp(CHASTE_CONST(0.01) * var_chaste_interface__cell__V); // dimensionless + const double var_transient_outward_current_ydv_gate__alpha_ydv = CHASTE_CONST(0.014999999999999999) / (1 + CHASTE_MATH::Exp(12 + CHASTE_CONST(0.20000000000000001) * var_chaste_interface__cell__V)); // per_ms + const double var_transient_outward_current_ydv_gate__beta_ydv = CHASTE_CONST(0.10000000000000001) * CHASTE_MATH::Exp(5 + CHASTE_CONST(0.20000000000000001) * var_chaste_interface__cell__V) / (1 + CHASTE_MATH::Exp(5 + CHASTE_CONST(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__alpha_zdv = 10 * CHASTE_MATH::Exp(-CHASTE_CONST(1.6000000000000001) + CHASTE_CONST(0.040000000000000001) * var_chaste_interface__cell__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.6000000000000001) + CHASTE_CONST(0.040000000000000001) * var_chaste_interface__cell__V)); // per_ms + const double var_transient_outward_current_zdv_gate__beta_zdv = 10 * CHASTE_MATH::Exp(-CHASTE_CONST(3.6000000000000001) - CHASTE_CONST(0.040000000000000001) * var_chaste_interface__cell__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.6000000000000001) - CHASTE_CONST(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 var_transient_outward_current__i_to = CHASTE_MATH::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 d_dt_chaste_interface_var_calcium_dynamics__APtrack = ((var_cell__dVdt > 150) ? (100 - CHASTE_CONST(100.5) * var_chaste_interface__calcium_dynamics__APtrack) : (-CHASTE_CONST(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 @@ -527,7 +529,7 @@ { // Inputs: // Time units: millisecond - double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -565,65 +567,65 @@ // 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__Km_Ca = CHASTE_CONST(0.00059999999999999995); // millimolar + const double var_Na_Ca_exchanger__c2 = CHASTE_CONST(0.0001); // dimensionless + const double var_Na_Ca_exchanger__gamma = CHASTE_CONST(0.14999999999999999); // dimensionless + const double var_T_type_Ca_channel__g_CaT = CHASTE_CONST(0.050000000000000003); // milliS_per_microF + const double var_calcium_background_current__g_Cab = CHASTE_CONST(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__RyRopen = 1 / (1 + var_chaste_interface__calcium_dynamics__APtrack2 * CHASTE_MATH::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_calcium_background_current__E_Ca = CHASTE_CONST(0.5) * var_cell__R * var_cell__T * CHASTE_MATH::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 >= -CHASTE_CONST(1.3356169352749131e-6)) && (var_chaste_interface__cell__V <= CHASTE_CONST(1.3356169352749131e-6))) ? (CHASTE_CONST(374358.83507802623) * (CHASTE_CONST(1.3356169352749131e-6) + var_chaste_interface__cell__V) * (CHASTE_CONST(0.019296999999999998) * (-CHASTE_CONST(0.34100000000000003) * NV_Ith_S(mParameters, 5) + var_chaste_interface__calcium_dynamics__Cai * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) * NV_Ith_S(mParameters, 8) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) + CHASTE_CONST(0.019296999999999998) * (-CHASTE_CONST(0.34100000000000003) * NV_Ith_S(mParameters, 5) + var_chaste_interface__calcium_dynamics__Cai * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8))) * NV_Ith_S(mParameters, 8) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) - CHASTE_CONST(0.019296999999999998) * (-CHASTE_CONST(0.34100000000000003) * NV_Ith_S(mParameters, 5) + var_chaste_interface__calcium_dynamics__Cai * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8))) * NV_Ith_S(mParameters, 8) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) : (CHASTE_CONST(14448.004881001343) * (-CHASTE_CONST(0.34100000000000003) * NV_Ith_S(mParameters, 5) + var_chaste_interface__calcium_dynamics__Cai * CHASTE_MATH::Exp(CHASTE_CONST(0.074871767015605231) * var_chaste_interface__cell__V)) * NV_Ith_S(mParameters, 8) * var_chaste_interface__cell__V / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(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_L_type_Ca_channel_f_gate__tau_f = 1 / (CHASTE_CONST(0.02) + CHASTE_CONST(0.019699999999999999) * CHASTE_MATH::Exp(-CHASTE_CONST(0.113569) * CHASTE_MATH::Pow((1 + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__cell__V), 2))); // ms + const double var_T_type_Ca_channel__i_Ca_T = CHASTE_MATH::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_cell__I_st_converted = CHASTE_STIM(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_fast_sodium_current_h_gate__alpha_h = ((var_chaste_interface__cell__V < -40) ? (CHASTE_CONST(0.13500000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(11.764705882352942) + CHASTE_CONST(0.14705882352941177) * NV_Ith_S(mParameters, 11) - CHASTE_CONST(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 * CHASTE_MATH::Exp(CHASTE_CONST(0.34999999999999998) * var_chaste_interface__cell__V - CHASTE_CONST(0.34999999999999998) * NV_Ith_S(mParameters, 11)) + CHASTE_CONST(3.5600000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.079000000000000001) * var_chaste_interface__cell__V - CHASTE_CONST(0.079000000000000001) * NV_Ith_S(mParameters, 11))) : (CHASTE_CONST(7.6923076923076916) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.96036036036036043) + CHASTE_CONST(0.0900900900900901) * NV_Ith_S(mParameters, 11) - CHASTE_CONST(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__alpha_j = ((var_chaste_interface__cell__V < -40) ? ((CHASTE_CONST(37.780000000000001) + var_chaste_interface__cell__V) * (-127140 * CHASTE_MATH::Exp(CHASTE_CONST(0.24440000000000001) * var_chaste_interface__cell__V - CHASTE_CONST(0.24440000000000001) * NV_Ith_S(mParameters, 11)) - CHASTE_CONST(3.4740000000000003e-5) * CHASTE_MATH::Exp(CHASTE_CONST(0.043909999999999998) * NV_Ith_S(mParameters, 11) - CHASTE_CONST(0.043909999999999998) * var_chaste_interface__cell__V)) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(24.640530000000002) + CHASTE_CONST(0.311) * var_chaste_interface__cell__V - CHASTE_CONST(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) ? (CHASTE_CONST(0.1212) * CHASTE_MATH::Exp(CHASTE_CONST(0.01052) * NV_Ith_S(mParameters, 11) - CHASTE_CONST(0.01052) * var_chaste_interface__cell__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(5.5312920000000005) + CHASTE_CONST(0.13780000000000001) * NV_Ith_S(mParameters, 11) - CHASTE_CONST(0.13780000000000001) * var_chaste_interface__cell__V))) : (CHASTE_CONST(0.29999999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(2.5349999999999999e-7) * NV_Ith_S(mParameters, 11) - CHASTE_CONST(2.5349999999999999e-7) * var_chaste_interface__cell__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.2000000000000002) + CHASTE_CONST(0.10000000000000001) * NV_Ith_S(mParameters, 11) - CHASTE_CONST(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_chaste_interface__cell__V >= -CHASTE_CONST(2.6712338705498262e-6)) && (var_chaste_interface__cell__V <= CHASTE_CONST(2.6712338705498262e-6))) ? (CHASTE_CONST(187179.41753901311) * (CHASTE_CONST(2.6712338705498262e-6) + var_chaste_interface__cell__V) * (CHASTE_CONST(1.8621604999999999e-9) * (-CHASTE_CONST(0.75) * NV_Ith_S(mParameters, 6) + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Ki * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) + CHASTE_CONST(1.8621604999999999e-9) * (-CHASTE_CONST(0.75) * NV_Ith_S(mParameters, 6) + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Ki * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) - CHASTE_CONST(1.8621604999999999e-9) * (-CHASTE_CONST(0.75) * NV_Ith_S(mParameters, 6) + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Ki * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) : (CHASTE_CONST(0.00069711623550831479) * (-CHASTE_CONST(0.75) * NV_Ith_S(mParameters, 6) + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Ki * CHASTE_MATH::Exp(CHASTE_CONST(0.037435883507802616) * var_chaste_interface__cell__V)) * var_chaste_interface__cell__V / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(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_chaste_interface__cell__V >= -CHASTE_CONST(2.6712338705498262e-6)) && (var_chaste_interface__cell__V <= CHASTE_CONST(2.6712338705498262e-6))) ? (CHASTE_CONST(187179.41753901311) * (CHASTE_CONST(2.6712338705498262e-6) + var_chaste_interface__cell__V) * (CHASTE_CONST(6.5127375e-9) * (-CHASTE_CONST(0.75) * NV_Ith_S(mParameters, 7) + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Nai * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) + CHASTE_CONST(6.5127375e-9) * (-CHASTE_CONST(0.75) * NV_Ith_S(mParameters, 7) + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Nai * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) - CHASTE_CONST(6.5127375e-9) * (-CHASTE_CONST(0.75) * NV_Ith_S(mParameters, 7) + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Nai * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) : (CHASTE_CONST(0.0024381008236689767) * (-CHASTE_CONST(0.75) * NV_Ith_S(mParameters, 7) + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Nai * CHASTE_MATH::Exp(CHASTE_CONST(0.037435883507802616) * var_chaste_interface__cell__V)) * var_chaste_interface__cell__V / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(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_L_type_Ca_channel__i_Ca_L_converted = CHASTE_CAP() * var_L_type_Ca_channel__i_Ca_L; // uA_per_cm2 + const double var_Na_Ca_exchanger__i_NaCa = (-CHASTE_MATH::Pow(NV_Ith_S(mParameters, 7), 3) * var_chaste_interface__calcium_dynamics__Cai + CHASTE_MATH::Pow(var_chaste_interface__ionic_concentrations__Nai, 3) * NV_Ith_S(mParameters, 5) * CHASTE_MATH::Exp(var_cell__F * var_chaste_interface__cell__V / (var_cell__R * var_cell__T))) * NV_Ith_S(mParameters, 15) * CHASTE_MATH::Exp((-1 + var_Na_Ca_exchanger__gamma) * var_cell__F * var_chaste_interface__cell__V / (var_cell__R * var_cell__T)) / (1 + (CHASTE_MATH::Pow(NV_Ith_S(mParameters, 7), 3) * var_chaste_interface__calcium_dynamics__Cai + CHASTE_MATH::Pow(var_chaste_interface__ionic_concentrations__Nai, 3) * NV_Ith_S(mParameters, 5) * CHASTE_MATH::Exp(var_cell__F * var_chaste_interface__cell__V / (var_cell__R * var_cell__T))) * var_Na_Ca_exchanger__c2 * CHASTE_MATH::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 = CHASTE_CAP() * var_Na_Ca_exchanger__i_NaCa; // uA_per_cm2 + const double var_fast_sodium_current__E_Na = var_cell__R * var_cell__T * CHASTE_MATH::Log(NV_Ith_S(mParameters, 7) / var_chaste_interface__ionic_concentrations__Nai) / var_cell__F; // millivolt + const double var_fast_sodium_current__i_Na = CHASTE_MATH::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 = CHASTE_CAP() * var_fast_sodium_current__i_Na; // uA_per_cm2 + const double var_rapid_delayed_rectifier_potassium_current__Rect = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(0.4017857142857143) + CHASTE_CONST(0.044642857142857144) * var_chaste_interface__cell__V)); // dimensionless + const double var_rapid_delayed_rectifier_potassium_current__g_Kr = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::Sqrt(NV_Ith_S(mParameters, 6)) * NV_Ith_S(mParameters, 13); // milliS_per_microF + const double var_sarcolemmal_calcium_pump__I_pCa = CHASTE_CONST(1.1499999999999999); // microA_per_microF + const double var_sarcolemmal_calcium_pump__K_mpCa = CHASTE_CONST(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__G_rel = 150 * var_calcium_dynamics__RyRclose * var_calcium_dynamics__RyRopen / (1 + CHASTE_MATH::Exp(CHASTE_CONST(5.5555555555555554) + CHASTE_CONST(1.1111111111111112) * var_L_type_Ca_channel__i_CaCa + CHASTE_CONST(1.1111111111111112) * var_T_type_Ca_channel__i_Ca_T + CHASTE_CONST(1.1111111111111112) * var_calcium_background_current__i_Ca_b + CHASTE_CONST(1.1111111111111112) * var_sarcolemmal_calcium_pump__i_p_Ca - CHASTE_CONST(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__PNaK = CHASTE_CONST(0.018329999999999999); // dimensionless + const double var_slow_delayed_rectifier_potassium_current__E_Ks = var_cell__R * var_cell__T * CHASTE_MATH::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 + CHASTE_CONST(0.59999999999999998) / (1 + CHASTE_CONST(6.4818210260626455e-7) * CHASTE_MATH::Pow((1 / var_chaste_interface__calcium_dynamics__Cai), CHASTE_CONST(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_slow_delayed_rectifier_potassium_current__i_Ks_converted = CHASTE_CAP() * 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 * CHASTE_MATH::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_rapid_delayed_rectifier_potassium_current__i_Kr_converted = CHASTE_CAP() * var_rapid_delayed_rectifier_potassium_current__i_Kr; // uA_per_cm2 + const double var_time_independent_potassium_current__g_K1 = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::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 = CHASTE_CONST(1.02) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__cell__V - CHASTE_CONST(0.23849999999999999) * var_time_independent_potassium_current__E_K)); // per_ms + const double var_time_independent_potassium_current_K1_gate__beta_K1 = (CHASTE_CONST(0.49124000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__cell__V - CHASTE_CONST(0.080320000000000003) * var_time_independent_potassium_current__E_K) + CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__cell__V - CHASTE_CONST(0.061749999999999999) * var_time_independent_potassium_current__E_K)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(0.51429999999999998) * var_time_independent_potassium_current__E_K - CHASTE_CONST(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_time_independent_potassium_current__i_K1_converted = CHASTE_CAP() * var_time_independent_potassium_current__i_K1; // uA_per_cm2 + const double var_transient_outward_current__rvdv = CHASTE_MATH::Exp(CHASTE_CONST(0.01) * var_chaste_interface__cell__V); // dimensionless + const double var_transient_outward_current__i_to = CHASTE_MATH::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 = CHASTE_CAP() * var_transient_outward_current__i_to; // uA_per_cm2 #if CHASTE_SUNDIALS_VERSION >= 60000 N_Vector dqs = N_VNew_Serial(17, CvodeContextManager::Instance()->GetSundialsContext()); @@ -925,4 +927,5 @@ void OdeSystemInformation::Initialise(void) #include "SerializationExportWrapperForCpp.hpp" CHASTE_CLASS_EXPORT(Cellfaber_rudy_2000FromCellMLCvode) + #endif // CHASTE_CVODE diff --git a/chaste_codegen/data/tests/chaste_reference_models/Cvode/faber_rudy_2000.hpp b/chaste_codegen/data/tests/chaste_reference_models/Cvode/faber_rudy_2000.hpp index 7b50be6c8..9a184e252 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/Cvode/faber_rudy_2000.hpp +++ b/chaste_codegen/data/tests/chaste_reference_models/Cvode/faber_rudy_2000.hpp @@ -17,7 +17,11 @@ #include "ChasteSerialization.hpp" #include #include "AbstractStimulusFunction.hpp" +#if USING_DEVICE_COMPILER +#include "StimulusEvaluatorCuda.hpp" +#endif #include "AbstractCvodeCell.hpp" +#include "HostDeviceMacros.hpp" class Cellfaber_rudy_2000FromCellMLCvode : public AbstractCvodeCell { @@ -38,6 +42,10 @@ class Cellfaber_rudy_2000FromCellMLCvode : public AbstractCvodeCell 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: + static constexpr unsigned TOTAL_SIZE = 25u; + static constexpr unsigned NNZ = 0u; + static inline const int sparse_rowptr[] = { }; + static inline const int sparse_colind[] = { }; boost::shared_ptr UseCellMLDefaultStimulus(); double GetIntracellularCalciumConcentration(); @@ -46,7 +54,19 @@ const bool is_probability[25] = {false, false, true, true, true, true, true, fal 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); +#if USING_DEVICE_COMPILER + template + DEVICE + static void EvaluateYDerivativesDevice(ValueType var_chaste_interface__environment__time, const ValueType* rY, ValueType* rDY, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType* mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim); + template + DEVICE + static void EvaluateAnalyticJacobianDevice(ValueType var_chaste_interface__environment__time, const ValueType *rY, ValueType *rDY, ValueType *rJacobian, ValueType *rTmp1, ValueType *rTmp2, ValueType *rTmp3, const unsigned nvars, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType *mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim); + template + DEVICE + static void EvaluateSparseAnalyticJacobianDevice(ValueType var_chaste_interface__environment__time, const ValueType *rY, ValueType *rDY, ValueType *rJacobian, ValueType *rTmp1, ValueType *rTmp2, ValueType *rTmp3, const unsigned nvars, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType *mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim); +#endif }; // Needs to be included last @@ -83,4 +103,10 @@ namespace boost } #endif // CELLFABER_RUDY_2000FROMCELLMLCVODE_HPP_ + + + +#if USING_DEVICE_COMPILER + #include "faber_rudy_2000Kernels.hpp" +#endif #endif // CHASTE_CVODE \ No newline at end of file diff --git a/chaste_codegen/data/tests/chaste_reference_models/Cvode/hodgkin_huxley_squid_axon_model_1952_modified.cpp b/chaste_codegen/data/tests/chaste_reference_models/Cvode/hodgkin_huxley_squid_axon_model_1952_modified.cpp index 28dcdb822..4653c8de2 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/Cvode/hodgkin_huxley_squid_axon_model_1952_modified.cpp +++ b/chaste_codegen/data/tests/chaste_reference_models/Cvode/hodgkin_huxley_squid_axon_model_1952_modified.cpp @@ -22,6 +22,8 @@ #include "HeartConfig.hpp" #include "IsNan.hpp" #include "MathsCustomFunctions.hpp" +#include "ChasteMathDeviceNamespaces.hpp" +#include "ChasteCpuMacros.hpp" #if CHASTE_SUNDIALS_VERSION >= 60000 #include "CvodeContextManager.hpp" @@ -35,7 +37,7 @@ { // 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_duration = CHASTE_CONST(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( @@ -65,7 +67,7 @@ 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, 2) = CHASTE_CONST(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] } @@ -122,7 +124,7 @@ made_new_cvode_vector = true; rY = MakeNVector(*pStateVariables); } - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -132,12 +134,12 @@ // 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__E_L = CHASTE_CONST(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_potassium_channel__i_K = CHASTE_MATH::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_sodium_channel__i_Na = CHASTE_MATH::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; @@ -153,7 +155,7 @@ { // Inputs: // Time units: millisecond - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -164,22 +166,22 @@ // 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__B = -CHASTE_CONST(0.10000000000000001); // per_millivolt + const double var_potassium_channel_n_gate__A = -CHASTE_CONST(0.01) / var_potassium_channel_n_gate__B; // per_millisecond + const double var_potassium_channel_n_gate__beta_n = CHASTE_CONST(0.125) * CHASTE_MATH::Exp(CHASTE_CONST(0.9375) + CHASTE_CONST(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_potassium_channel_n_gate__alpha_n = (((var_potassium_channel_n_gate__U >= -CHASTE_CONST(9.9999999999999995e-8)) && (var_potassium_channel_n_gate__U <= CHASTE_CONST(9.9999999999999995e-8))) ? ((1 - CHASTE_CONST(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 + CHASTE_MATH::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 var_sodium_channel_h_gate__alpha_h = CHASTE_CONST(0.070000000000000007) * CHASTE_MATH::Exp(-CHASTE_CONST(3.75) - CHASTE_CONST(0.050000000000000003) * var_chaste_interface__membrane__V); // per_millisecond + const double var_sodium_channel_h_gate__beta_h = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(4.5) - CHASTE_CONST(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__B = -CHASTE_CONST(0.10000000000000001); // per_millivolt + const double var_sodium_channel_m_gate__A = -CHASTE_CONST(0.10000000000000001) / var_sodium_channel_m_gate__B; // per_millisecond + const double var_sodium_channel_m_gate__beta_m = 4 * CHASTE_MATH::Exp(-CHASTE_CONST(4.166666666666667) - CHASTE_CONST(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 var_sodium_channel_m_gate__alpha_m = (((var_sodium_channel_m_gate__U >= -CHASTE_CONST(9.9999999999999995e-8)) && (var_sodium_channel_m_gate__U <= CHASTE_CONST(9.9999999999999995e-8))) ? ((1 - CHASTE_CONST(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 + CHASTE_MATH::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) @@ -189,13 +191,13 @@ 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__E_L = CHASTE_CONST(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_membrane__i_Stim = CHASTE_STIM(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_potassium_channel__i_K = CHASTE_MATH::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_sodium_channel__i_Na = CHASTE_MATH::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 } @@ -209,7 +211,7 @@ { // Inputs: // Time units: millisecond - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -220,13 +222,13 @@ // 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__E_L = CHASTE_CONST(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_membrane__i_Stim = CHASTE_STIM(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_potassium_channel__i_K = CHASTE_MATH::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_sodium_channel__i_Na = CHASTE_MATH::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()); @@ -311,4 +313,5 @@ void OdeSystemInformation #include "AbstractStimulusFunction.hpp" +#if USING_DEVICE_COMPILER +#include "StimulusEvaluatorCuda.hpp" +#endif #include "AbstractCvodeCell.hpp" +#include "HostDeviceMacros.hpp" class Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvode : public AbstractCvodeCell { @@ -38,6 +42,10 @@ class Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvode : public const bool is_concentration[4] = {false, false, false, false}; const bool is_probability[4] = {false, false, false, false}; public: + static constexpr unsigned TOTAL_SIZE = 4u; + static constexpr unsigned NNZ = 0u; + static inline const int sparse_rowptr[] = { }; + static inline const int sparse_colind[] = { }; boost::shared_ptr UseCellMLDefaultStimulus(); Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvode(boost::shared_ptr pOdeSolver /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus); @@ -45,7 +53,19 @@ const bool is_probability[4] = {false, false, false, false}; 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); +#if USING_DEVICE_COMPILER + template + DEVICE + static void EvaluateYDerivativesDevice(ValueType var_chaste_interface__environment__time, const ValueType* rY, ValueType* rDY, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType* mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim); + template + DEVICE + static void EvaluateAnalyticJacobianDevice(ValueType var_chaste_interface__environment__time, const ValueType *rY, ValueType *rDY, ValueType *rJacobian, ValueType *rTmp1, ValueType *rTmp2, ValueType *rTmp3, const unsigned nvars, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType *mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim); + template + DEVICE + static void EvaluateSparseAnalyticJacobianDevice(ValueType var_chaste_interface__environment__time, const ValueType *rY, ValueType *rDY, ValueType *rJacobian, ValueType *rTmp1, ValueType *rTmp2, ValueType *rTmp3, const unsigned nvars, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType *mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim); +#endif }; // Needs to be included last @@ -82,4 +102,10 @@ namespace boost } #endif // CELLHODGKIN_HUXLEY_SQUID_AXON_MODEL_1952_MODIFIEDFROMCELLMLCVODE_HPP_ + + + +#if USING_DEVICE_COMPILER + #include "hodgkin_huxley_squid_axon_model_1952_modifiedKernels.hpp" +#endif #endif // CHASTE_CVODE \ No newline at end of file diff --git a/chaste_codegen/data/tests/chaste_reference_models/Cvode/paci_hyttinen_aaltosetala_severi_ventricularVersion.cpp b/chaste_codegen/data/tests/chaste_reference_models/Cvode/paci_hyttinen_aaltosetala_severi_ventricularVersion.cpp index fc4f4a6fe..df79f97dc 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/Cvode/paci_hyttinen_aaltosetala_severi_ventricularVersion.cpp +++ b/chaste_codegen/data/tests/chaste_reference_models/Cvode/paci_hyttinen_aaltosetala_severi_ventricularVersion.cpp @@ -22,6 +22,8 @@ #include "HeartConfig.hpp" #include "IsNan.hpp" #include "MathsCustomFunctions.hpp" +#include "ChasteMathDeviceNamespaces.hpp" +#include "ChasteCpuMacros.hpp" #if CHASTE_SUNDIALS_VERSION >= 60000 #include "CvodeContextManager.hpp" @@ -34,7 +36,7 @@ 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_Amplitude_converted = CHASTE_CONST(5.5718264182641404) * CHASTE_CAP(); // 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 @@ -69,17 +71,17 @@ 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, 1) = CHASTE_CONST(1.8); // (var_model_parameters__Cao) [millimolar] + NV_Ith_S(this->mParameters, 2) = CHASTE_CONST(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, 4) = CHASTE_CONST(8.6357020000000001e-5); // (var_i_CaL__g_CaL) [metre_cube_per_F_per_s] + NV_Ith_S(this->mParameters, 5) = CHASTE_CONST(3671.2302); // (var_i_Na__g_Na) [S_per_F] + NV_Ith_S(this->mParameters, 6) = CHASTE_CONST(30.103120000000001); // (var_i_f__g_f) [S_per_F] + NV_Ith_S(this->mParameters, 7) = CHASTE_CONST(28.1492); // (var_i_K1__g_K1) [S_per_F] + NV_Ith_S(this->mParameters, 8) = CHASTE_CONST(29.866700000000002); // (var_i_Kr__g_Kr) [S_per_F] + NV_Ith_S(this->mParameters, 9) = CHASTE_CONST(2.0409999999999999); // (var_i_Ks__g_Ks) [S_per_F] + NV_Ith_S(this->mParameters, 10) = CHASTE_CONST(29.9038); // (var_i_to__g_to) [S_per_F] + NV_Ith_S(this->mParameters, 11) = CHASTE_CONST(9.8710900000000003e-11); // (var_model_parameters__Cm) [farad] NV_Ith_S(this->mParameters, 12) = 310; // (var_model_parameters__T) [kelvin] } @@ -136,7 +138,7 @@ made_new_cvode_vector = true; rY = MakeNVector(*pStateVariables); } - double var_chaste_interface__Membrane__Vm_converted = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + double var_chaste_interface__Membrane__Vm_converted = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -169,7 +171,7 @@ 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_Membrane__Vm = CHASTE_CONST(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 @@ -179,59 +181,59 @@ 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_electric_potentials__PkNa = CHASTE_CONST(0.029999999999999999); // dimensionless + const double var_i_Kr__E4031_coeff = ((var_current_blockers__E4031_30nM == 1) ? (CHASTE_CONST(0.77000000000000002)) : ((var_current_blockers__E4031_100nM == 1) ? (CHASTE_CONST(0.5)) : (1))); // dimensionless + const double var_i_Ks__Chromanol_coeff = ((var_current_blockers__Chromanol_iKs30 == 1) ? (CHASTE_CONST(0.69999999999999996)) : ((var_current_blockers__Chromanol_iKs50 == 1) ? (CHASTE_CONST(0.5)) : ((var_current_blockers__Chromanol_iKs70 == 1) ? (CHASTE_CONST(0.29999999999999999)) : ((var_current_blockers__Chromanol_iKs90 == 1) ? (CHASTE_CONST(0.10000000000000001)) : (1))))); // dimensionless + const double var_i_Ks__g_Ks_total = (1 + CHASTE_CONST(0.59999999999999998) / (1 + CHASTE_CONST(6.4818210260626455e-7) * CHASTE_MATH::Pow((1 / var_chaste_interface__calcium_dynamics__Cai), CHASTE_CONST(1.3999999999999999)))) * NV_Ith_S(mParameters, 9); // S_per_F + const double var_i_Na__TTX_coeff = ((var_current_blockers__TTX_3uM == 1) ? (CHASTE_CONST(0.17999999999999999)) : ((var_current_blockers__TTX_10uM == 1) ? (CHASTE_CONST(0.059999999999999998)) : ((var_current_blockers__TTX_30uM == 1) ? (CHASTE_CONST(0.02)) : (1)))); // dimensionless + const double var_i_NaCa__KmCa = CHASTE_CONST(1.3799999999999999); // millimolar + const double var_i_NaCa__KmNai = CHASTE_CONST(87.5); // millimolar + const double var_i_NaCa__Ksat = CHASTE_CONST(0.10000000000000001); // dimensionless + const double var_i_NaCa__alpha = CHASTE_CONST(2.8571431999999999); // dimensionless + const double var_i_NaCa__gamma = CHASTE_CONST(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_NaK__PNaK = CHASTE_CONST(1.8414239999999999); // A_per_F + const double var_i_PCa__KPCa = CHASTE_CONST(0.00050000000000000001); // millimolar + const double var_i_PCa__g_PCa = CHASTE_CONST(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_PCa__i_PCa_converted = CHASTE_CAP() * var_i_PCa__i_PCa; // uA_per_cm2 + const double var_i_b_Ca__g_b_Ca = CHASTE_CONST(0.69264000000000003); // S_per_F + const double var_i_b_Na__g_b_Na = CHASTE_CONST(0.90000000000000002); // S_per_F + const double var_i_f__E_f = -CHASTE_CONST(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_f__i_f_converted = CHASTE_CAP() * var_i_f__i_f; // uA_per_cm2 + const double var_model_parameters__F = CHASTE_CONST(96485.341499999995); // coulomb_per_mole + const double var_i_K1__g_K1_total = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::Sqrt(NV_Ith_S(mParameters, 2)) * NV_Ith_S(mParameters, 7); // S_per_F + const double var_i_Kr__g_Kr_total = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::Sqrt(NV_Ith_S(mParameters, 2)) * NV_Ith_S(mParameters, 8); // S_per_F + const double var_model_parameters__R = CHASTE_CONST(8.3144720000000003); // joule_per_mole_kelvin + const double var_electric_potentials__E_Ca = CHASTE_CONST(0.5) * var_model_parameters__R * NV_Ith_S(mParameters, 12) * CHASTE_MATH::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) * CHASTE_MATH::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 >= -CHASTE_CONST(4.3086710741444596e-12) * NV_Ith_S(mParameters, 12)) && (var_Membrane__Vm <= CHASTE_CONST(4.3086710741444596e-12) * NV_Ith_S(mParameters, 12))) || ((var_Membrane__Vm >= CHASTE_CONST(4.3086710741444596e-12) * NV_Ith_S(mParameters, 12)) && (var_Membrane__Vm <= -CHASTE_CONST(4.3086710741444596e-12) * NV_Ith_S(mParameters, 12)))) ? (-CHASTE_CONST(116045061550.51096) * (-CHASTE_CONST(4.3086710741444596e-12) * NV_Ith_S(mParameters, 12) + var_Membrane__Vm) * (-CHASTE_CONST(0.019297068299999998) * (-CHASTE_CONST(0.34100000000000003) * NV_Ith_S(mParameters, 1) + var_chaste_interface__calcium_dynamics__Cai * CHASTE_MATH::Exp(CHASTE_CONST(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 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) - CHASTE_CONST(0.019297068299999998) * (-CHASTE_CONST(0.34100000000000003) * NV_Ith_S(mParameters, 1) + var_chaste_interface__calcium_dynamics__Cai * CHASTE_MATH::Exp(-CHASTE_CONST(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 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) / NV_Ith_S(mParameters, 12) + CHASTE_CONST(0.019297068299999998) * (-CHASTE_CONST(0.34100000000000003) * NV_Ith_S(mParameters, 1) + var_chaste_interface__calcium_dynamics__Cai * CHASTE_MATH::Exp(CHASTE_CONST(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 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8)))) : (CHASTE_CONST(4478658957.2358274) * (-CHASTE_CONST(0.34100000000000003) * NV_Ith_S(mParameters, 1) + var_chaste_interface__calcium_dynamics__Cai * CHASTE_MATH::Exp(CHASTE_CONST(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 + CHASTE_MATH::Exp(CHASTE_CONST(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 = CHASTE_CAP() * var_i_CaL__i_CaL; // uA_per_cm2 + const double var_i_K1__alpha_K1 = CHASTE_CONST(3.9100000000000001) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(118.83999999999999) + CHASTE_CONST(594.19999999999993) * var_Membrane__Vm - CHASTE_CONST(594.19999999999993) * var_electric_potentials__E_K)); // dimensionless + const double var_i_K1__beta_K1 = (-CHASTE_CONST(1.5089999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(0.02) + CHASTE_CONST(0.20000000000000001) * var_Membrane__Vm - CHASTE_CONST(0.20000000000000001) * var_electric_potentials__E_K) + CHASTE_MATH::Exp(-CHASTE_CONST(5.8860000000000001) + CHASTE_CONST(588.60000000000002) * var_Membrane__Vm - CHASTE_CONST(588.60000000000002) * var_electric_potentials__E_K)) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(454.69999999999999) * var_Membrane__Vm - CHASTE_CONST(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_K1__i_K1_converted = CHASTE_CAP() * 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_Kr__i_Kr_converted = CHASTE_CAP() * 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_to__i_to_converted = CHASTE_CAP() * var_i_to__i_to; // uA_per_cm2 + const double var_electric_potentials__E_Ks = var_model_parameters__R * NV_Ith_S(mParameters, 12) * CHASTE_MATH::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) * CHASTE_MATH::Log(NV_Ith_S(mParameters, 3) / var_chaste_interface__sodium_dynamics__Nai) / var_model_parameters__F; // volt + const double var_i_Ks__i_Ks = CHASTE_MATH::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 = CHASTE_CAP() * var_i_Ks__i_Ks; // uA_per_cm2 + const double var_i_Na__i_Na = CHASTE_MATH::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 = CHASTE_CAP() * var_i_Na__i_Na; // uA_per_cm2 + const double var_i_NaCa__i_NaCa = (CHASTE_MATH::Pow(var_chaste_interface__sodium_dynamics__Nai, 3) * NV_Ith_S(mParameters, 1) * CHASTE_MATH::Exp(var_Membrane__Vm * var_i_NaCa__gamma * var_model_parameters__F / (var_model_parameters__R * NV_Ith_S(mParameters, 12))) - CHASTE_MATH::Pow(NV_Ith_S(mParameters, 3), 3) * var_chaste_interface__calcium_dynamics__Cai * var_i_NaCa__alpha * CHASTE_MATH::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 * CHASTE_MATH::Exp((-1 + var_i_NaCa__gamma) * var_Membrane__Vm * var_model_parameters__F / (var_model_parameters__R * NV_Ith_S(mParameters, 12)))) * (CHASTE_MATH::Pow(var_i_NaCa__KmNai, 3) + CHASTE_MATH::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 = CHASTE_CAP() * 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 + CHASTE_CONST(0.035299999999999998) * CHASTE_MATH::Exp(-var_Membrane__Vm * var_model_parameters__F / (var_model_parameters__R * NV_Ith_S(mParameters, 12))) + CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(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 = CHASTE_CAP() * 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 var_chaste_interface__i_ionic = CHASTE_CAP() * var_i_b_Ca__i_b_Ca + CHASTE_CAP() * 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) @@ -246,7 +248,7 @@ { // Inputs: // Time units: millisecond - double var_chaste_interface__Membrane__Vm_converted = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + double var_chaste_interface__Membrane__Vm_converted = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -285,139 +287,139 @@ // 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_Membrane__Vm = CHASTE_CONST(0.001) * var_chaste_interface__Membrane__Vm_converted; // volt + const double var_calcium_dynamics__Buf_C = CHASTE_CONST(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__Kbuf_C = CHASTE_CONST(0.001); // millimolar + const double var_calcium_dynamics__Cai_bufc = 1 / (1 + var_calcium_dynamics__Buf_C * var_calcium_dynamics__Kbuf_C / CHASTE_MATH::Pow((var_chaste_interface__calcium_dynamics__Cai + var_calcium_dynamics__Kbuf_C), 2)); // dimensionless + const double var_calcium_dynamics__Kbuf_SR = CHASTE_CONST(0.29999999999999999); // millimolar + const double var_calcium_dynamics__Ca_SR_bufSR = 1 / (1 + var_calcium_dynamics__Buf_SR * var_calcium_dynamics__Kbuf_SR / CHASTE_MATH::Pow((var_chaste_interface__calcium_dynamics__Ca_SR + var_calcium_dynamics__Kbuf_SR), 2)); // dimensionless + const double var_calcium_dynamics__Kup = CHASTE_CONST(0.00025000000000000001); // millimolar + const double var_calcium_dynamics__V_leak = CHASTE_CONST(0.00044443999999999999); // per_second + const double var_calcium_dynamics__VmaxUp = CHASTE_CONST(0.56064000000000003); // millimolar_per_second + const double var_calcium_dynamics__a_rel = CHASTE_CONST(16.463999999999999); // millimolar_per_second + const double var_calcium_dynamics__b_rel = CHASTE_CONST(0.25); // millimolar + const double var_calcium_dynamics__c_rel = CHASTE_CONST(8.2319999999999993); // millimolar_per_second + const double var_calcium_dynamics__g_inf = ((var_chaste_interface__calcium_dynamics__Cai <= CHASTE_CONST(0.00035)) ? (1 / (1 + CHASTE_CONST(5.439910241481016e+20) * CHASTE_MATH::Pow(var_chaste_interface__calcium_dynamics__Cai, 6))) : (1 / (1 + CHASTE_CONST(1.9720198874049176e+55) * CHASTE_MATH::Pow(var_chaste_interface__calcium_dynamics__Cai, 16)))); // dimensionless + const double var_calcium_dynamics__const2 = (((var_Membrane__Vm > -CHASTE_CONST(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__i_up = var_calcium_dynamics__VmaxUp / (1 + CHASTE_MATH::Pow(var_calcium_dynamics__Kup, 2) / CHASTE_MATH::Pow(var_chaste_interface__calcium_dynamics__Cai, 2)); // millimolar_per_second + const double var_calcium_dynamics__tau_g = CHASTE_CONST(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 d_dt_chaste_interface_var_calcium_dynamics__g = CHASTE_CONST(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__alpha_d = CHASTE_CONST(0.25) + CHASTE_CONST(1.3999999999999999) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.6923076923076925) - CHASTE_CONST(76.92307692307692) * var_Membrane__Vm)); // dimensionless + const double var_i_CaL_d_gate__beta_d = CHASTE_CONST(1.3999999999999999) / (1 + CHASTE_MATH::Exp(1 + 200 * var_Membrane__Vm)); // dimensionless + const double var_calcium_dynamics__i_rel = CHASTE_CONST(0.041099999999999998) * (CHASTE_MATH::Pow(var_chaste_interface__calcium_dynamics__Ca_SR, 2) * var_calcium_dynamics__a_rel / (CHASTE_MATH::Pow(var_chaste_interface__calcium_dynamics__Ca_SR, 2) + CHASTE_MATH::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 + CHASTE_MATH::Exp(-CHASTE_CONST(1.3) - CHASTE_CONST(142.85714285714286) * var_Membrane__Vm)); // dimensionless + const double var_i_CaL_d_gate__gamma_d = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(2.5) - 50 * var_Membrane__Vm)); // dimensionless + const double var_i_CaL_d_gate__tau_d = CHASTE_CONST(0.001) * var_i_CaL_d_gate__gamma_d + CHASTE_CONST(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 d_dt_chaste_interface_var_i_CaL_d_gate__d = CHASTE_CONST(0.001) * var_i_CaL_d_gate__d_orig_deriv; // 1 / millisecond + const double var_i_CaL_f1_gate__f1_inf = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(8.6666666666666661) + CHASTE_CONST(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) ? (CHASTE_CONST(0.92835000000000001) + 1433 * var_chaste_interface__calcium_dynamics__Cai) : (1)); // dimensionless + const double var_i_CaL_f1_gate__tau_f1 = CHASTE_CONST(0.001) * (20 + 200 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.3) - 100 * var_Membrane__Vm)) + 180 / (1 + CHASTE_MATH::Exp(3 + 100 * var_Membrane__Vm)) + CHASTE_CONST(1102.5) * CHASTE_MATH::Exp(-CHASTE_CONST(4444444444.4444447) * CHASTE_MATH::Pow((CHASTE_CONST(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 d_dt_chaste_interface_var_i_CaL_f1_gate__f1 = CHASTE_CONST(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_inf = CHASTE_CONST(0.33000000000000002) + CHASTE_CONST(0.67000000000000004) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(8.75) + 250 * var_Membrane__Vm)); // dimensionless + const double var_i_CaL_f2_gate__tau_f2 = CHASTE_CONST(0.001) * (16 / (1 + CHASTE_MATH::Exp(3 + 100 * var_Membrane__Vm)) + 31 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(2.5) - 100 * var_Membrane__Vm)) + 600 * CHASTE_MATH::Exp(-CHASTE_CONST(5882.3529411764703) * CHASTE_MATH::Pow((CHASTE_CONST(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 d_dt_chaste_interface_var_i_CaL_f2_gate__f2 = CHASTE_CONST(0.001) * var_i_CaL_f2_gate__f2_orig_deriv; // 1 / millisecond + const double var_i_CaL_fCa_gate__alpha_fCa = 1 / (1 + CHASTE_CONST(5.9537418076512766e+25) * CHASTE_MATH::Pow(var_chaste_interface__calcium_dynamics__Cai, 8)); // dimensionless + const double var_i_CaL_fCa_gate__beta_fCa = CHASTE_CONST(0.10000000000000001) / (1 + CHASTE_MATH::Exp(-9 + 10000 * var_chaste_interface__calcium_dynamics__Cai)); // dimensionless + const double var_i_CaL_fCa_gate__gamma_fCa = CHASTE_CONST(0.29999999999999999) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.9375) + 1250 * var_chaste_interface__calcium_dynamics__Cai)); // dimensionless + const double var_i_CaL_fCa_gate__fCa_inf = CHASTE_CONST(0.76010945576162958) * var_i_CaL_fCa_gate__alpha_fCa + CHASTE_CONST(0.76010945576162958) * var_i_CaL_fCa_gate__beta_fCa + CHASTE_CONST(0.76010945576162958) * var_i_CaL_fCa_gate__gamma_fCa; // dimensionless + const double var_i_CaL_fCa_gate__constfCa = (((var_Membrane__Vm > -CHASTE_CONST(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 = CHASTE_CONST(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 d_dt_chaste_interface_var_i_CaL_fCa_gate__fCa = CHASTE_CONST(0.001) * var_i_CaL_fCa_gate__fCa_orig_deriv; // 1 / millisecond + const double var_i_Kr_Xr1_gate__L0 = CHASTE_CONST(0.025000000000000001); // dimensionless + const double var_i_Kr_Xr1_gate__Q = CHASTE_CONST(2.2999999999999998); // dimensionless + const double var_i_Kr_Xr1_gate__alpha_Xr1 = 450 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(4.5) - 100 * var_Membrane__Vm)); // dimensionless + const double var_i_Kr_Xr1_gate__beta_Xr1 = 6 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(2.6086956521739131) + CHASTE_CONST(86.956521739130437) * var_Membrane__Vm)); // dimensionless + const double var_i_Kr_Xr1_gate__tau_Xr1 = CHASTE_CONST(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 + CHASTE_MATH::Exp(CHASTE_CONST(1.76) + 20 * var_Membrane__Vm)); // dimensionless + const double var_i_Kr_Xr2_gate__alpha_Xr2 = 3 / (1 + CHASTE_MATH::Exp(-3 - 50 * var_Membrane__Vm)); // dimensionless + const double var_i_Kr_Xr2_gate__beta_Xr2 = CHASTE_CONST(1.1200000000000001) / (1 + CHASTE_MATH::Exp(-3 + 50 * var_Membrane__Vm)); // dimensionless + const double var_i_Kr_Xr2_gate__tau_Xr2 = CHASTE_CONST(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 d_dt_chaste_interface_var_i_Kr_Xr2_gate__Xr2 = CHASTE_CONST(0.001) * var_i_Kr_Xr2_gate__Xr2_orig_deriv; // 1 / millisecond + const double var_i_Ks_Xs_gate__Xs_infinity = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.25) - CHASTE_CONST(62.5) * var_Membrane__Vm)); // dimensionless + const double var_i_Ks_Xs_gate__alpha_Xs = 1100 / CHASTE_MATH::Sqrt(1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.6666666666666667) - CHASTE_CONST(166.66666666666666) * var_Membrane__Vm)); // dimensionless + const double var_i_Ks_Xs_gate__beta_Xs = 1 / (1 + CHASTE_MATH::Exp(-3 + 50 * var_Membrane__Vm)); // dimensionless + const double var_i_Ks_Xs_gate__tau_Xs = CHASTE_CONST(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 d_dt_chaste_interface_var_i_Ks_Xs_gate__Xs = CHASTE_CONST(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) ? (CHASTE_CONST(0.17999999999999999)) : ((var_current_blockers__TTX_10uM == 1) ? (CHASTE_CONST(0.059999999999999998)) : ((var_current_blockers__TTX_30uM == 1) ? (CHASTE_CONST(0.02)) : (1)))); // dimensionless + const double var_i_NaCa__KmCa = CHASTE_CONST(1.3799999999999999); // millimolar + const double var_i_NaCa__KmNai = CHASTE_CONST(87.5); // millimolar + const double var_i_NaCa__Ksat = CHASTE_CONST(0.10000000000000001); // dimensionless + const double var_i_NaCa__alpha = CHASTE_CONST(2.8571431999999999); // dimensionless + const double var_i_NaCa__gamma = CHASTE_CONST(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_NaK__PNaK = CHASTE_CONST(1.8414239999999999); // A_per_F + const double var_i_Na_h_gate__alpha_h = ((var_Membrane__Vm < -CHASTE_CONST(0.040000000000000001)) ? (CHASTE_CONST(0.057000000000000002) * CHASTE_MATH::Exp(-CHASTE_CONST(11.764705882352942) - CHASTE_CONST(147.05882352941177) * var_Membrane__Vm)) : (0)); // dimensionless + const double var_i_Na_h_gate__beta_h = ((var_Membrane__Vm < -CHASTE_CONST(0.040000000000000001)) ? (CHASTE_CONST(2.7000000000000002) * CHASTE_MATH::Exp(79 * var_Membrane__Vm) + 310000 * CHASTE_MATH::Exp(CHASTE_CONST(348.5) * var_Membrane__Vm)) : (CHASTE_CONST(5.9230769230769234) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.96036036036036043) - CHASTE_CONST(90.090090090090087) * var_Membrane__Vm)))); // dimensionless + const double var_i_Na_h_gate__h_inf = 1 / CHASTE_MATH::Sqrt(1 + CHASTE_MATH::Exp(CHASTE_CONST(12.649122807017543) + CHASTE_CONST(175.43859649122805) * var_Membrane__Vm)); // dimensionless + const double var_i_Na_h_gate__tau_h = ((var_Membrane__Vm < -CHASTE_CONST(0.040000000000000001)) ? (CHASTE_CONST(0.0015) / (var_i_Na_h_gate__alpha_h + var_i_Na_h_gate__beta_h)) : (CHASTE_CONST(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 d_dt_chaste_interface_var_i_Na_h_gate__h = CHASTE_CONST(0.001) * var_i_Na_h_gate__h_orig_deriv; // 1 / millisecond + const double var_i_Na_j_gate__alpha_j = ((var_Membrane__Vm < -CHASTE_CONST(0.040000000000000001)) ? ((CHASTE_CONST(37.780000000000001) + 1000 * var_Membrane__Vm) * (-25428 * CHASTE_MATH::Exp(CHASTE_CONST(244.40000000000001) * var_Membrane__Vm) - CHASTE_CONST(6.9480000000000002e-6) * CHASTE_MATH::Exp(-CHASTE_CONST(43.909999999999997) * var_Membrane__Vm)) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(24.640530000000002) + 311 * var_Membrane__Vm))) : (0)); // dimensionless + const double var_i_Na_j_gate__beta_j = ((var_Membrane__Vm < -CHASTE_CONST(0.040000000000000001)) ? (CHASTE_CONST(0.024240000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(10.52) * var_Membrane__Vm) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(5.5312920000000005) - CHASTE_CONST(137.80000000000001) * var_Membrane__Vm))) : (CHASTE_CONST(0.59999999999999998) * CHASTE_MATH::Exp(57 * var_Membrane__Vm) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.2000000000000002) - 100 * var_Membrane__Vm)))); // dimensionless + const double var_i_Na_j_gate__j_inf = 1 / CHASTE_MATH::Sqrt(1 + CHASTE_MATH::Exp(CHASTE_CONST(12.649122807017543) + CHASTE_CONST(175.43859649122805) * var_Membrane__Vm)); // dimensionless + const double var_i_Na_j_gate__tau_j = CHASTE_CONST(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 d_dt_chaste_interface_var_i_Na_j_gate__j = CHASTE_CONST(0.001) * var_i_Na_j_gate__j_orig_deriv; // 1 / millisecond + const double var_i_Na_m_gate__alpha_m = 1 / (1 + CHASTE_MATH::Exp(-12 - 200 * var_Membrane__Vm)); // dimensionless + const double var_i_Na_m_gate__beta_m = CHASTE_CONST(0.10000000000000001) / (1 + CHASTE_MATH::Exp(7 + 200 * var_Membrane__Vm)) + CHASTE_CONST(0.10000000000000001) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.25) + 5 * var_Membrane__Vm)); // dimensionless + const double var_i_Na_m_gate__m_inf = CHASTE_MATH::Pow((1 + CHASTE_MATH::Exp(-CHASTE_CONST(5.7796610169491522) - CHASTE_CONST(169.4915254237288) * var_Membrane__Vm)), (-CHASTE_CONST(0.33333333333333331))); // dimensionless + const double var_i_Na_m_gate__tau_m = CHASTE_CONST(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 d_dt_chaste_interface_var_i_Na_m_gate__m = CHASTE_CONST(0.001) * var_i_Na_m_gate__m_orig_deriv; // 1 / millisecond + const double var_i_PCa__KPCa = CHASTE_CONST(0.00050000000000000001); // millimolar + const double var_i_PCa__g_PCa = CHASTE_CONST(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_b_Ca__g_b_Ca = CHASTE_CONST(0.69264000000000003); // S_per_F + const double var_i_b_Na__g_b_Na = CHASTE_CONST(0.90000000000000002); // S_per_F + const double var_i_f_Xf_gate__Xf_infinity = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(15.569999999999999) + 200 * var_Membrane__Vm)); // dimensionless + const double var_i_f_Xf_gate__tau_Xf = CHASTE_CONST(1.8999999999999999) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(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 d_dt_chaste_interface_var_i_f_Xf_gate__Xf = CHASTE_CONST(0.001) * var_i_f_Xf_gate__Xf_orig_deriv; // 1 / millisecond + const double var_i_to_q_gate__q_inf = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(4.0769230769230766) + CHASTE_CONST(76.92307692307692) * var_Membrane__Vm)); // dimensionless + const double var_i_to_q_gate__tau_q = CHASTE_CONST(0.0060599999999999994) + CHASTE_CONST(0.039101999999999998) / (CHASTE_CONST(0.065000000000000002) * CHASTE_MATH::Exp(CHASTE_CONST(4.593) + 100 * var_Membrane__Vm) + CHASTE_CONST(0.56999999999999995) * CHASTE_MATH::Exp(-CHASTE_CONST(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 d_dt_chaste_interface_var_i_to_q_gate__q = CHASTE_CONST(0.001) * var_i_to_q_gate__q_orig_deriv; // 1 / millisecond + const double var_i_to_r_gate__r_inf = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.1893333333333334) - CHASTE_CONST(53.333333333333336) * var_Membrane__Vm)); // dimensionless + const double var_i_to_r_gate__tau_r = CHASTE_CONST(0.0027535199999999998) + CHASTE_CONST(0.01440516) / (CHASTE_CONST(1.0369999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(2.7548999999999997) + 90 * var_Membrane__Vm) + CHASTE_CONST(0.36899999999999999) * CHASTE_MATH::Exp(-CHASTE_CONST(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 d_dt_chaste_interface_var_i_to_r_gate__r = CHASTE_CONST(0.001) * var_i_to_r_gate__r_orig_deriv; // 1 / millisecond + const double var_model_parameters__F = CHASTE_CONST(96485.341499999995); // coulomb_per_mole + const double var_model_parameters__R = CHASTE_CONST(8.3144720000000003); // joule_per_mole_kelvin + const double var_electric_potentials__E_Ca = CHASTE_CONST(0.5) * var_model_parameters__R * NV_Ith_S(mParameters, 12) * CHASTE_MATH::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 >= -CHASTE_CONST(4.3086710741444596e-12) * NV_Ith_S(mParameters, 12)) && (var_Membrane__Vm <= CHASTE_CONST(4.3086710741444596e-12) * NV_Ith_S(mParameters, 12))) || ((var_Membrane__Vm >= CHASTE_CONST(4.3086710741444596e-12) * NV_Ith_S(mParameters, 12)) && (var_Membrane__Vm <= -CHASTE_CONST(4.3086710741444596e-12) * NV_Ith_S(mParameters, 12)))) ? (-CHASTE_CONST(116045061550.51096) * (-CHASTE_CONST(4.3086710741444596e-12) * NV_Ith_S(mParameters, 12) + var_Membrane__Vm) * (-CHASTE_CONST(0.019297068299999998) * (-CHASTE_CONST(0.34100000000000003) * NV_Ith_S(mParameters, 1) + var_chaste_interface__calcium_dynamics__Cai * CHASTE_MATH::Exp(CHASTE_CONST(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 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) - CHASTE_CONST(0.019297068299999998) * (-CHASTE_CONST(0.34100000000000003) * NV_Ith_S(mParameters, 1) + var_chaste_interface__calcium_dynamics__Cai * CHASTE_MATH::Exp(-CHASTE_CONST(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 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) / NV_Ith_S(mParameters, 12) + CHASTE_CONST(0.019297068299999998) * (-CHASTE_CONST(0.34100000000000003) * NV_Ith_S(mParameters, 1) + var_chaste_interface__calcium_dynamics__Cai * CHASTE_MATH::Exp(CHASTE_CONST(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 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8)))) : (CHASTE_CONST(4478658957.2358274) * (-CHASTE_CONST(0.34100000000000003) * NV_Ith_S(mParameters, 1) + var_chaste_interface__calcium_dynamics__Cai * CHASTE_MATH::Exp(CHASTE_CONST(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 + CHASTE_MATH::Exp(CHASTE_CONST(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 * (-CHASTE_CONST(2.1789087017666886) + CHASTE_MATH::Log(CHASTE_MATH::Pow((1 + CHASTE_CONST(0.38461538461538458) * NV_Ith_S(mParameters, 1)), 4) / (CHASTE_MATH::Pow((CHASTE_CONST(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 + CHASTE_MATH::Exp(CHASTE_CONST(0.2040816326530612) * var_i_Kr_Xr1_gate__V_half - CHASTE_CONST(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 d_dt_chaste_interface_var_i_Kr_Xr1_gate__Xr1 = CHASTE_CONST(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__V_SR = CHASTE_CONST(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 d_dt_chaste_interface_var_calcium_dynamics__Ca_SR = CHASTE_CONST(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) * CHASTE_MATH::Log(NV_Ith_S(mParameters, 3) / var_chaste_interface__sodium_dynamics__Nai) / var_model_parameters__F; // volt + const double var_i_Na__i_Na = CHASTE_MATH::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 = (CHASTE_MATH::Pow(var_chaste_interface__sodium_dynamics__Nai, 3) * NV_Ith_S(mParameters, 1) * CHASTE_MATH::Exp(var_Membrane__Vm * var_i_NaCa__gamma * var_model_parameters__F / (var_model_parameters__R * NV_Ith_S(mParameters, 12))) - CHASTE_MATH::Pow(NV_Ith_S(mParameters, 3), 3) * var_chaste_interface__calcium_dynamics__Cai * var_i_NaCa__alpha * CHASTE_MATH::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 * CHASTE_MATH::Exp((-1 + var_i_NaCa__gamma) * var_Membrane__Vm * var_model_parameters__F / (var_model_parameters__R * NV_Ith_S(mParameters, 12)))) * (CHASTE_MATH::Pow(var_i_NaCa__KmNai, 3) + CHASTE_MATH::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 - CHASTE_CONST(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 = CHASTE_CONST(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 + CHASTE_CONST(0.035299999999999998) * CHASTE_MATH::Exp(-var_Membrane__Vm * var_model_parameters__F / (var_model_parameters__R * NV_Ith_S(mParameters, 12))) + CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(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 + const double var_sodium_dynamics__Nai_orig_deriv = -CHASTE_CONST(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 = CHASTE_CONST(0.001) * var_sodium_dynamics__Nai_orig_deriv; // millimolar / millisecond if (mSetVoltageDerivativeToZero) { @@ -431,27 +433,27 @@ 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_electric_potentials__PkNa = CHASTE_CONST(0.029999999999999999); // dimensionless + const double var_i_Kr__E4031_coeff = ((var_current_blockers__E4031_30nM == 1) ? (CHASTE_CONST(0.77000000000000002)) : ((var_current_blockers__E4031_100nM == 1) ? (CHASTE_CONST(0.5)) : (1))); // dimensionless + const double var_i_Ks__Chromanol_coeff = ((var_current_blockers__Chromanol_iKs30 == 1) ? (CHASTE_CONST(0.69999999999999996)) : ((var_current_blockers__Chromanol_iKs50 == 1) ? (CHASTE_CONST(0.5)) : ((var_current_blockers__Chromanol_iKs70 == 1) ? (CHASTE_CONST(0.29999999999999999)) : ((var_current_blockers__Chromanol_iKs90 == 1) ? (CHASTE_CONST(0.10000000000000001)) : (1))))); // dimensionless + const double var_i_Ks__g_Ks_total = (1 + CHASTE_CONST(0.59999999999999998) / (1 + CHASTE_CONST(6.4818210260626455e-7) * CHASTE_MATH::Pow((1 / var_chaste_interface__calcium_dynamics__Cai), CHASTE_CONST(1.3999999999999999)))) * NV_Ith_S(mParameters, 9); // S_per_F + const double var_i_f__E_f = -CHASTE_CONST(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__g_K1_total = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::Sqrt(NV_Ith_S(mParameters, 2)) * NV_Ith_S(mParameters, 7); // S_per_F + const double var_i_Kr__g_Kr_total = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::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) * CHASTE_MATH::Log(NV_Ith_S(mParameters, 2) / NV_Ith_S(mParameters, 0)) / var_model_parameters__F; // volt + const double var_i_K1__alpha_K1 = CHASTE_CONST(3.9100000000000001) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(118.83999999999999) + CHASTE_CONST(594.19999999999993) * var_Membrane__Vm - CHASTE_CONST(594.19999999999993) * var_electric_potentials__E_K)); // dimensionless + const double var_i_K1__beta_K1 = (-CHASTE_CONST(1.5089999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(0.02) + CHASTE_CONST(0.20000000000000001) * var_Membrane__Vm - CHASTE_CONST(0.20000000000000001) * var_electric_potentials__E_K) + CHASTE_MATH::Exp(-CHASTE_CONST(5.8860000000000001) + CHASTE_CONST(588.60000000000002) * var_Membrane__Vm - CHASTE_CONST(588.60000000000002) * var_electric_potentials__E_K)) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(454.69999999999999) * var_Membrane__Vm - CHASTE_CONST(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_electric_potentials__E_Ks = var_model_parameters__R * NV_Ith_S(mParameters, 12) * CHASTE_MATH::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 = CHASTE_MATH::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 = -CHASTE_STIM(var_chaste_interface__environment__time_converted); // uA_per_cm2 + const double var_stim_mode__i_stim = var_stim_mode__i_stim_converted / CHASTE_CAP(); // 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 + const double var_Membrane__Vm_orig_deriv_a = CHASTE_CONST(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 } @@ -479,7 +481,7 @@ { // Inputs: // Time units: millisecond - double var_chaste_interface__Membrane__Vm_converted = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + double var_chaste_interface__Membrane__Vm_converted = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -513,10 +515,10 @@ // 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_Membrane__Vm = CHASTE_CONST(0.001) * var_chaste_interface__Membrane__Vm_converted; // volt + const double var_calcium_dynamics__Buf_C = CHASTE_CONST(0.25); // millimolar + const double var_calcium_dynamics__Kbuf_C = CHASTE_CONST(0.001); // millimolar + const double var_calcium_dynamics__Cai_bufc = 1 / (1 + var_calcium_dynamics__Buf_C * var_calcium_dynamics__Kbuf_C / CHASTE_MATH::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 @@ -526,55 +528,55 @@ 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_electric_potentials__PkNa = CHASTE_CONST(0.029999999999999999); // dimensionless + const double var_i_Kr__E4031_coeff = ((var_current_blockers__E4031_30nM == 1) ? (CHASTE_CONST(0.77000000000000002)) : ((var_current_blockers__E4031_100nM == 1) ? (CHASTE_CONST(0.5)) : (1))); // dimensionless + const double var_i_Ks__Chromanol_coeff = ((var_current_blockers__Chromanol_iKs30 == 1) ? (CHASTE_CONST(0.69999999999999996)) : ((var_current_blockers__Chromanol_iKs50 == 1) ? (CHASTE_CONST(0.5)) : ((var_current_blockers__Chromanol_iKs70 == 1) ? (CHASTE_CONST(0.29999999999999999)) : ((var_current_blockers__Chromanol_iKs90 == 1) ? (CHASTE_CONST(0.10000000000000001)) : (1))))); // dimensionless + const double var_i_Ks__g_Ks_total = (1 + CHASTE_CONST(0.59999999999999998) / (1 + CHASTE_CONST(6.4818210260626455e-7) * CHASTE_MATH::Pow((1 / var_chaste_interface__calcium_dynamics__Cai), CHASTE_CONST(1.3999999999999999)))) * NV_Ith_S(mParameters, 9); // S_per_F + const double var_i_Na__TTX_coeff = ((var_current_blockers__TTX_3uM == 1) ? (CHASTE_CONST(0.17999999999999999)) : ((var_current_blockers__TTX_10uM == 1) ? (CHASTE_CONST(0.059999999999999998)) : ((var_current_blockers__TTX_30uM == 1) ? (CHASTE_CONST(0.02)) : (1)))); // dimensionless + const double var_i_NaCa__KmCa = CHASTE_CONST(1.3799999999999999); // millimolar + const double var_i_NaCa__KmNai = CHASTE_CONST(87.5); // millimolar + const double var_i_NaCa__Ksat = CHASTE_CONST(0.10000000000000001); // dimensionless + const double var_i_NaCa__alpha = CHASTE_CONST(2.8571431999999999); // dimensionless + const double var_i_NaCa__gamma = CHASTE_CONST(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_NaK__PNaK = CHASTE_CONST(1.8414239999999999); // A_per_F + const double var_i_PCa__KPCa = CHASTE_CONST(0.00050000000000000001); // millimolar + const double var_i_PCa__g_PCa = CHASTE_CONST(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_PCa__i_PCa_converted = CHASTE_CAP() * var_i_PCa__i_PCa; // uA_per_cm2 + const double var_i_f__E_f = -CHASTE_CONST(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_i_f__i_f_converted = CHASTE_CAP() * 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_model_parameters__F = CHASTE_CONST(96485.341499999995); // coulomb_per_mole + const double var_i_K1__g_K1_total = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::Sqrt(NV_Ith_S(mParameters, 2)) * NV_Ith_S(mParameters, 7); // S_per_F + const double var_i_Kr__g_Kr_total = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::Sqrt(NV_Ith_S(mParameters, 2)) * NV_Ith_S(mParameters, 8); // S_per_F + const double var_model_parameters__R = CHASTE_CONST(8.3144720000000003); // joule_per_mole_kelvin + const double var_electric_potentials__E_K = var_model_parameters__R * NV_Ith_S(mParameters, 12) * CHASTE_MATH::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 >= -CHASTE_CONST(4.3086710741444596e-12) * NV_Ith_S(mParameters, 12)) && (var_Membrane__Vm <= CHASTE_CONST(4.3086710741444596e-12) * NV_Ith_S(mParameters, 12))) || ((var_Membrane__Vm >= CHASTE_CONST(4.3086710741444596e-12) * NV_Ith_S(mParameters, 12)) && (var_Membrane__Vm <= -CHASTE_CONST(4.3086710741444596e-12) * NV_Ith_S(mParameters, 12)))) ? (-CHASTE_CONST(116045061550.51096) * (-CHASTE_CONST(4.3086710741444596e-12) * NV_Ith_S(mParameters, 12) + var_Membrane__Vm) * (-CHASTE_CONST(0.019297068299999998) * (-CHASTE_CONST(0.34100000000000003) * NV_Ith_S(mParameters, 1) + var_chaste_interface__calcium_dynamics__Cai * CHASTE_MATH::Exp(CHASTE_CONST(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 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) - CHASTE_CONST(0.019297068299999998) * (-CHASTE_CONST(0.34100000000000003) * NV_Ith_S(mParameters, 1) + var_chaste_interface__calcium_dynamics__Cai * CHASTE_MATH::Exp(-CHASTE_CONST(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 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) / NV_Ith_S(mParameters, 12) + CHASTE_CONST(0.019297068299999998) * (-CHASTE_CONST(0.34100000000000003) * NV_Ith_S(mParameters, 1) + var_chaste_interface__calcium_dynamics__Cai * CHASTE_MATH::Exp(CHASTE_CONST(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 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8)))) : (CHASTE_CONST(4478658957.2358274) * (-CHASTE_CONST(0.34100000000000003) * NV_Ith_S(mParameters, 1) + var_chaste_interface__calcium_dynamics__Cai * CHASTE_MATH::Exp(CHASTE_CONST(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 + CHASTE_MATH::Exp(CHASTE_CONST(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 = CHASTE_CAP() * var_i_CaL__i_CaL; // uA_per_cm2 + const double var_i_K1__alpha_K1 = CHASTE_CONST(3.9100000000000001) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(118.83999999999999) + CHASTE_CONST(594.19999999999993) * var_Membrane__Vm - CHASTE_CONST(594.19999999999993) * var_electric_potentials__E_K)); // dimensionless + const double var_i_K1__beta_K1 = (-CHASTE_CONST(1.5089999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(0.02) + CHASTE_CONST(0.20000000000000001) * var_Membrane__Vm - CHASTE_CONST(0.20000000000000001) * var_electric_potentials__E_K) + CHASTE_MATH::Exp(-CHASTE_CONST(5.8860000000000001) + CHASTE_CONST(588.60000000000002) * var_Membrane__Vm - CHASTE_CONST(588.60000000000002) * var_electric_potentials__E_K)) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(454.69999999999999) * var_Membrane__Vm - CHASTE_CONST(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_K1__i_K1_converted = CHASTE_CAP() * 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_Kr__i_Kr_converted = CHASTE_CAP() * 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 + const double var_i_to__i_to_converted = CHASTE_CAP() * var_i_to__i_to; // uA_per_cm2 + const double var_electric_potentials__E_Ks = var_model_parameters__R * NV_Ith_S(mParameters, 12) * CHASTE_MATH::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) * CHASTE_MATH::Log(NV_Ith_S(mParameters, 3) / var_chaste_interface__sodium_dynamics__Nai) / var_model_parameters__F; // volt + const double var_i_Ks__i_Ks = CHASTE_MATH::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 = CHASTE_CAP() * var_i_Ks__i_Ks; // uA_per_cm2 + const double var_i_Na__i_Na = CHASTE_MATH::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 = CHASTE_CAP() * var_i_Na__i_Na; // uA_per_cm2 + const double var_i_NaCa__i_NaCa = (CHASTE_MATH::Pow(var_chaste_interface__sodium_dynamics__Nai, 3) * NV_Ith_S(mParameters, 1) * CHASTE_MATH::Exp(var_Membrane__Vm * var_i_NaCa__gamma * var_model_parameters__F / (var_model_parameters__R * NV_Ith_S(mParameters, 12))) - CHASTE_MATH::Pow(NV_Ith_S(mParameters, 3), 3) * var_chaste_interface__calcium_dynamics__Cai * var_i_NaCa__alpha * CHASTE_MATH::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 * CHASTE_MATH::Exp((-1 + var_i_NaCa__gamma) * var_Membrane__Vm * var_model_parameters__F / (var_model_parameters__R * NV_Ith_S(mParameters, 12)))) * (CHASTE_MATH::Pow(var_i_NaCa__KmNai, 3) + CHASTE_MATH::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 = CHASTE_CAP() * 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 + CHASTE_CONST(0.035299999999999998) * CHASTE_MATH::Exp(-var_Membrane__Vm * var_model_parameters__F / (var_model_parameters__R * NV_Ith_S(mParameters, 12))) + CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(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 = CHASTE_CAP() * var_i_NaK__i_NaK; // uA_per_cm2 + const double var_stim_mode__i_stim_converted = -CHASTE_STIM(var_chaste_interface__environment__time_converted); // uA_per_cm2 #if CHASTE_SUNDIALS_VERSION >= 60000 N_Vector dqs = N_VNew_Serial(18, CvodeContextManager::Instance()->GetSundialsContext()); @@ -830,4 +832,5 @@ void OdeSystemInformation #include "AbstractStimulusFunction.hpp" +#if USING_DEVICE_COMPILER +#include "StimulusEvaluatorCuda.hpp" +#endif #include "AbstractCvodeCell.hpp" +#include "HostDeviceMacros.hpp" class Cellpaci_hyttinen_aaltosetala_severi_ventricularVersionFromCellMLCvode : public AbstractCvodeCell { @@ -38,6 +42,10 @@ class Cellpaci_hyttinen_aaltosetala_severi_ventricularVersionFromCellMLCvode : p 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: + static constexpr unsigned TOTAL_SIZE = 18u; + static constexpr unsigned NNZ = 0u; + static inline const int sparse_rowptr[] = { }; + static inline const int sparse_colind[] = { }; boost::shared_ptr UseCellMLDefaultStimulus(); double GetIntracellularCalciumConcentration(); @@ -46,7 +54,19 @@ const bool is_probability[18] = {false, false, true, true, true, true, true, tru 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); +#if USING_DEVICE_COMPILER + template + DEVICE + static void EvaluateYDerivativesDevice(ValueType var_chaste_interface__environment__time_converted, const ValueType* rY, ValueType* rDY, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType* mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim); + template + DEVICE + static void EvaluateAnalyticJacobianDevice(ValueType var_chaste_interface__environment__time_converted, const ValueType *rY, ValueType *rDY, ValueType *rJacobian, ValueType *rTmp1, ValueType *rTmp2, ValueType *rTmp3, const unsigned nvars, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType *mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim); + template + DEVICE + static void EvaluateSparseAnalyticJacobianDevice(ValueType var_chaste_interface__environment__time_converted, const ValueType *rY, ValueType *rDY, ValueType *rJacobian, ValueType *rTmp1, ValueType *rTmp2, ValueType *rTmp3, const unsigned nvars, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType *mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim); +#endif }; // Needs to be included last @@ -83,4 +103,10 @@ namespace boost } #endif // CELLPACI_HYTTINEN_AALTOSETALA_SEVERI_VENTRICULARVERSIONFROMCELLMLCVODE_HPP_ + + + +#if USING_DEVICE_COMPILER + #include "paci_hyttinen_aaltosetala_severi_ventricularVersionKernels.hpp" +#endif #endif // CHASTE_CVODE \ No newline at end of file diff --git a/chaste_codegen/data/tests/chaste_reference_models/Cvode_opt/dynamic_aslanidi_Purkinje_model_2009.cpp b/chaste_codegen/data/tests/chaste_reference_models/Cvode_opt/dynamic_aslanidi_Purkinje_model_2009.cpp index 1d42f7976..9a43ba0b8 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/Cvode_opt/dynamic_aslanidi_Purkinje_model_2009.cpp +++ b/chaste_codegen/data/tests/chaste_reference_models/Cvode_opt/dynamic_aslanidi_Purkinje_model_2009.cpp @@ -22,6 +22,8 @@ #include "HeartConfig.hpp" #include "IsNan.hpp" #include "MathsCustomFunctions.hpp" +#include "ChasteMathDeviceNamespaces.hpp" +#include "ChasteCpuMacros.hpp" #if CHASTE_SUNDIALS_VERSION >= 60000 #include "CvodeContextManager.hpp" @@ -154,7 +156,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt_LookupTables : publi for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 + exp(1.2521739130434781 - 0.16722408026755853 * var_chaste_interface__membrane__V); + return 1 + CHASTE_MATH::Exp(CHASTE_CONST(1.2521739130434781) - CHASTE_CONST(0.16722408026755853) * 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); @@ -165,7 +167,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt_LookupTables : publi for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(0.074871767015605231 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(CHASTE_CONST(0.074871767015605231) * 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); @@ -176,7 +178,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt_LookupTables : publi for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return -1 + exp(0.074871767015605231 * var_chaste_interface__membrane__V); + return -1 + CHASTE_MATH::Exp(CHASTE_CONST(0.074871767015605231) * 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); @@ -187,7 +189,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt_LookupTables : publi for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(-0.024333324280071702 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(-CHASTE_CONST(0.024333324280071702) * 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); @@ -198,7 +200,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt_LookupTables : publi for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(0.013102559227730915 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(CHASTE_CONST(0.013102559227730915) * 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); @@ -209,7 +211,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt_LookupTables : publi for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 + 0.27000000000000002 * exp(-0.024333324280071702 * var_chaste_interface__membrane__V); + return 1 + CHASTE_CONST(0.27000000000000002) * CHASTE_MATH::Exp(-CHASTE_CONST(0.024333324280071702) * 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); @@ -220,7 +222,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt_LookupTables : publi for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(-0.037435883507802616 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(-CHASTE_CONST(0.037435883507802616) * 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); @@ -231,7 +233,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt_LookupTables : publi for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 0.1245 * exp(-0.003743588350780262 * var_chaste_interface__membrane__V); + return CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(0.003743588350780262) * 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); @@ -242,7 +244,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt_LookupTables : publi for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return -100 * exp(0.037435883507802616 * var_chaste_interface__membrane__V); + return -100 * CHASTE_MATH::Exp(CHASTE_CONST(0.037435883507802616) * 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); @@ -253,7 +255,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt_LookupTables : publi for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 - exp(0.037435883507802616 * var_chaste_interface__membrane__V); + return 1 - CHASTE_MATH::Exp(CHASTE_CONST(0.037435883507802616) * 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); @@ -264,7 +266,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt_LookupTables : publi for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 + exp(-0.26470588235294124 + 0.049019607843137261 * var_chaste_interface__membrane__V); + return 1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.26470588235294124) + CHASTE_CONST(0.049019607843137261) * 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); @@ -275,7 +277,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt_LookupTables : publi for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(-1.1230765052340785 + 0.074871767015605231 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(-CHASTE_CONST(1.1230765052340785) + CHASTE_CONST(0.074871767015605231) * 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); @@ -286,7 +288,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt_LookupTables : publi for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return -1 + exp(-1.1230765052340785 + 0.074871767015605231 * var_chaste_interface__membrane__V); + return -1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.1230765052340785) + CHASTE_CONST(0.074871767015605231) * 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); @@ -297,7 +299,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt_LookupTables : publi for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 / (1 + exp(0.59347181008902072 - 0.14836795252225518 * var_chaste_interface__membrane__V)); + return 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(0.59347181008902072) - CHASTE_CONST(0.14836795252225518) * 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); @@ -308,7 +310,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt_LookupTables : publi for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 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)); + return CHASTE_CONST(0.58999999999999997) + CHASTE_CONST(0.80000000000000004) * CHASTE_MATH::Exp(CHASTE_CONST(0.67599999999999993) + CHASTE_CONST(0.051999999999999998) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.7160000000000002) + CHASTE_CONST(0.13200000000000001) * 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); @@ -319,7 +321,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt_LookupTables : publi for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 / (1 + exp(1.8 + 0.10000000000000001 * var_chaste_interface__membrane__V)); + return 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.8) + CHASTE_CONST(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); @@ -330,7 +332,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt_LookupTables : publi for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 / (1 + exp(-5.4098360655737707 - 0.16393442622950821 * var_chaste_interface__membrane__V)); + return 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(5.4098360655737707) - CHASTE_CONST(0.16393442622950821) * 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); @@ -341,7 +343,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt_LookupTables : publi for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1.0680000000000001 * exp(0.54333333333333333 + 0.033333333333333333 * var_chaste_interface__membrane__V) + 1.0680000000000001 * exp(-0.54333333333333333 - 0.033333333333333333 * var_chaste_interface__membrane__V); + return CHASTE_CONST(1.0680000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.54333333333333333) + CHASTE_CONST(0.033333333333333333) * var_chaste_interface__membrane__V) + CHASTE_CONST(1.0680000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(0.54333333333333333) - CHASTE_CONST(0.033333333333333333) * 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); @@ -352,7 +354,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt_LookupTables : publi for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 / (1 + exp(9.0909090909090917 + 0.15151515151515152 * var_chaste_interface__membrane__V)); + return 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(9.0909090909090917) + CHASTE_CONST(0.15151515151515152) * 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); @@ -363,7 +365,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt_LookupTables : publi for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 0.014999999999999999 * exp(4.6558441558441563 + 0.064935064935064929 * var_chaste_interface__membrane__V) + 0.014999999999999999 * exp(-0.86074429771908767 - 0.012004801920768308 * var_chaste_interface__membrane__V); + return CHASTE_CONST(0.014999999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(4.6558441558441563) + CHASTE_CONST(0.064935064935064929) * var_chaste_interface__membrane__V) + CHASTE_CONST(0.014999999999999999) * CHASTE_MATH::Exp(-CHASTE_CONST(0.86074429771908767) - CHASTE_CONST(0.012004801920768308) * 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); @@ -374,7 +376,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt_LookupTables : publi for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 / (1 + exp(-0.0069387755102040824 - 0.081632653061224483 * var_chaste_interface__membrane__V)); + return 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.0069387755102040824) - CHASTE_CONST(0.081632653061224483) * 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); @@ -385,7 +387,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt_LookupTables : publi for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 100 + 900 / (1 + exp(0.20000000000000001 * var_chaste_interface__membrane__V)); + return 100 + 900 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(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); @@ -396,7 +398,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt_LookupTables : publi for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 / (1 + exp(0.65693430656934315 - 0.072992700729927015 * var_chaste_interface__membrane__V)); + return 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(0.65693430656934315) - CHASTE_CONST(0.072992700729927015) * 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); @@ -407,7 +409,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt_LookupTables : publi for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 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)); + return CHASTE_CONST(7.6100000000000007e-5) * (CHASTE_CONST(44.600000000000001) + var_chaste_interface__membrane__V) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(444.66200000000003) - CHASTE_CONST(9.9700000000000006) * var_chaste_interface__membrane__V)) + CHASTE_CONST(0.00036000000000000002) * (-CHASTE_CONST(0.55000000000000004) + var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.070400000000000004) + CHASTE_CONST(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); @@ -418,7 +420,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt_LookupTables : publi for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 3.8050000000000003e-5 * (44.600000000000001 + var_chaste_interface__membrane__V) / (1 - exp(-444.66200000000003 - 9.9700000000000006 * var_chaste_interface__membrane__V)) + 0.00018000000000000001 * (-0.55000000000000004 + var_chaste_interface__membrane__V) / (-1 + exp(-0.070400000000000004 + 0.128 * var_chaste_interface__membrane__V)); + return CHASTE_CONST(3.8050000000000003e-5) * (CHASTE_CONST(44.600000000000001) + var_chaste_interface__membrane__V) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(444.66200000000003) - CHASTE_CONST(9.9700000000000006) * var_chaste_interface__membrane__V)) + CHASTE_CONST(0.00018000000000000001) * (-CHASTE_CONST(0.55000000000000004) + var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.070400000000000004) + CHASTE_CONST(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); @@ -429,7 +431,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt_LookupTables : publi for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 / (1 + exp(11.311475409836067 + 0.16393442622950821 * var_chaste_interface__membrane__V)); + return 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(11.311475409836067) + CHASTE_CONST(0.16393442622950821) * 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); @@ -440,7 +442,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt_LookupTables : publi for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 175 + 125 / (1 + exp(-4.166666666666667 - 0.16666666666666666 * var_chaste_interface__membrane__V)); + return 175 + 125 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(4.166666666666667) - CHASTE_CONST(0.16666666666666666) * 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); @@ -451,7 +453,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt_LookupTables : publi for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 0.32000000000000001 * (47.130000000000003 + var_chaste_interface__membrane__V) / (1 - exp(-4.7130000000000001 - 0.10000000000000001 * var_chaste_interface__membrane__V)); + return CHASTE_CONST(0.32000000000000001) * (CHASTE_CONST(47.130000000000003) + var_chaste_interface__membrane__V) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(4.7130000000000001) - CHASTE_CONST(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); @@ -462,7 +464,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt_LookupTables : publi for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 0.080000000000000002 * exp(-0.090909090909090912 * var_chaste_interface__membrane__V); + return CHASTE_CONST(0.080000000000000002) * CHASTE_MATH::Exp(-CHASTE_CONST(0.090909090909090912) * 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); @@ -473,7 +475,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt_LookupTables : publi for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 25 * exp(-3.7999999999999998 + 0.050000000000000003 * var_chaste_interface__membrane__V) / (1 + exp(-3.7999999999999998 + 0.050000000000000003 * var_chaste_interface__membrane__V)); + return 25 * CHASTE_MATH::Exp(-CHASTE_CONST(3.7999999999999998) + CHASTE_CONST(0.050000000000000003) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.7999999999999998) + CHASTE_CONST(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); @@ -484,7 +486,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt_LookupTables : publi for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 25 * exp(-2.7000000000000002 - 0.050000000000000003 * var_chaste_interface__membrane__V) / (1 + exp(-2.7000000000000002 - 0.050000000000000003 * var_chaste_interface__membrane__V)); + return 25 * CHASTE_MATH::Exp(-CHASTE_CONST(2.7000000000000002) - CHASTE_CONST(0.050000000000000003) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.7000000000000002) - CHASTE_CONST(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); @@ -495,7 +497,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt_LookupTables : publi for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 0.0044200000000000003 / ((1 + exp(1.7333333333333334 + 0.066666666666666666 * var_chaste_interface__membrane__V)) * (0.0044200000000000003 / (1 + exp(1.7333333333333334 + 0.066666666666666666 * var_chaste_interface__membrane__V)) + 0.050000000000000003 * exp(-0.66666666666666663 + 0.066666666666666666 * var_chaste_interface__membrane__V) / (1 + exp(-0.66666666666666663 + 0.066666666666666666 * var_chaste_interface__membrane__V)))); + return CHASTE_CONST(0.0044200000000000003) / ((1 + CHASTE_MATH::Exp(CHASTE_CONST(1.7333333333333334) + CHASTE_CONST(0.066666666666666666) * var_chaste_interface__membrane__V)) * (CHASTE_CONST(0.0044200000000000003) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.7333333333333334) + CHASTE_CONST(0.066666666666666666) * var_chaste_interface__membrane__V)) + CHASTE_CONST(0.050000000000000003) * CHASTE_MATH::Exp(-CHASTE_CONST(0.66666666666666663) + CHASTE_CONST(0.066666666666666666) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.66666666666666663) + CHASTE_CONST(0.066666666666666666) * 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); @@ -506,7 +508,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt_LookupTables : publi for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 21.5 + 30 / (1 + exp(-2.5 + 0.10000000000000001 * var_chaste_interface__membrane__V)); + return CHASTE_CONST(21.5) + 30 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.5) + CHASTE_CONST(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); @@ -517,7 +519,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt_LookupTables : publi for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 0.029999999999999999 / ((1 + exp(1.6666666666666667 + 0.066666666666666666 * var_chaste_interface__membrane__V)) * (0.029999999999999999 / (1 + exp(1.6666666666666667 + 0.066666666666666666 * var_chaste_interface__membrane__V)) + 0.10000000000000001 * exp(-2.6666666666666665 + 0.066666666666666666 * var_chaste_interface__membrane__V) / (1 + exp(-2.6666666666666665 + 0.066666666666666666 * var_chaste_interface__membrane__V)))); + return CHASTE_CONST(0.029999999999999999) / ((1 + CHASTE_MATH::Exp(CHASTE_CONST(1.6666666666666667) + CHASTE_CONST(0.066666666666666666) * var_chaste_interface__membrane__V)) * (CHASTE_CONST(0.029999999999999999) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.6666666666666667) + CHASTE_CONST(0.066666666666666666) * var_chaste_interface__membrane__V)) + CHASTE_CONST(0.10000000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(2.6666666666666665) + CHASTE_CONST(0.066666666666666666) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.6666666666666665) + CHASTE_CONST(0.066666666666666666) * 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); @@ -528,7 +530,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt_LookupTables : publi for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 6 + 5 / (1 + exp(-1.6499999999999999 + 0.10000000000000001 * var_chaste_interface__membrane__V)); + return 6 + 5 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.6499999999999999) + CHASTE_CONST(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); @@ -561,7 +563,7 @@ std::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_amplitude_converted = -80 * CHASTE_CAP(); // 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 @@ -684,22 +686,22 @@ std::shared_ptrAddModifier("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, 0) = CHASTE_CONST(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, 2) = CHASTE_CONST(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, 4) = CHASTE_CONST(1.8); // (var_model_parameters__Ca_o) [millimolar] + NV_Ith_S(this->mParameters, 5) = CHASTE_CONST(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, 7) = CHASTE_CONST(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] + NV_Ith_S(this->mParameters, 11) = CHASTE_CONST(0.25); // (var_i_K1__g_K1_max) [milliS_per_microF] + NV_Ith_S(this->mParameters, 12) = CHASTE_CONST(0.040008488000000002); // (var_i_Kr__g_Kr_max) [milliS_per_microF] + NV_Ith_S(this->mParameters, 13) = CHASTE_CONST(0.052581329000000003); // (var_i_Ks__g_Ks_max) [milliS_per_microF] + NV_Ith_S(this->mParameters, 14) = CHASTE_CONST(4.5); // (var_i_NaCa__i_NaCa_max) [microA_per_microF] + NV_Ith_S(this->mParameters, 15) = CHASTE_CONST(0.14135944); // (var_i_to_1__g_to_1) [milliS_per_microF] } Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt::~Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt() @@ -759,7 +761,7 @@ std::shared_ptrmFixedVoltage : NV_Ith_S(rY, 0)); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -818,10 +820,10 @@ std::shared_ptrIndexTable0(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 var_equilibrium_potentials__E_K = CHASTE_CONST(26.712338705498265) * CHASTE_MATH::Log(NV_Ith_S(mParameters, 5) / var_chaste_interface__intracellular_ion_concentrations__K_i); // millivolt + const double var_equilibrium_potentials__E_Na = CHASTE_CONST(26.712338705498265) * CHASTE_MATH::Log(NV_Ith_S(mParameters, 6) / var_chaste_interface__intracellular_ion_concentrations__Na_i); // millivolt + const double var_membrane__i_tot = CHASTE_CONST(0.0077250000000000001) * var_chaste_interface__membrane__V + CHASTE_CONST(0.0060102762087371094) * CHASTE_MATH::Log(100 / var_chaste_interface__intracellular_ion_concentrations__Cl_i) - CHASTE_CONST(0.0025000000000000001) * var_equilibrium_potentials__E_Na - CHASTE_CONST(0.0050000000000000001) * var_equilibrium_potentials__E_K + (CHASTE_CONST(0.0040000000000000001) + CHASTE_CONST(0.4389381125701739) * CHASTE_MATH::Sqrt(NV_Ith_S(mParameters, 5)) * NV_Ith_S(mParameters, 11) / ((1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.23849999999999999) * var_equilibrium_potentials__E_K)) * (CHASTE_CONST(1.02) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.23849999999999999) * var_equilibrium_potentials__E_K)) + (CHASTE_CONST(0.49124000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__membrane__V - CHASTE_CONST(0.080320000000000003) * var_equilibrium_potentials__E_K) + CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.061749999999999999) * var_equilibrium_potentials__E_K)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(0.51429999999999998) * var_equilibrium_potentials__E_K - CHASTE_CONST(0.51429999999999998) * var_chaste_interface__membrane__V))))) * (-var_equilibrium_potentials__E_K + var_chaste_interface__membrane__V) + CHASTE_CONST(0.0027599999999999999) * (-var_equilibrium_potentials__E_K + var_chaste_interface__membrane__V) / (_lt_0_row[0]) + CHASTE_CONST(0.057500000000000002) * var_chaste_interface__Ca_i__Ca_i / (CHASTE_CONST(0.00050000000000000001) + var_chaste_interface__Ca_i__Ca_i) + CHASTE_CONST(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 + CHASTE_CONST(0.037374999999999999) * CHASTE_MATH::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 + CHASTE_CONST(0.0028824983370007683) * (-CHASTE_CONST(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]) + (-CHASTE_CONST(1.5) * CHASTE_MATH::Pow(NV_Ith_S(mParameters, 6), 3) * var_chaste_interface__Ca_i__Ca_i * _lt_0_row[3] + CHASTE_CONST(0.40000000000000002) * CHASTE_MATH::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 + CHASTE_CONST(6.9444444444444451e-9) / CHASTE_MATH::Pow(var_chaste_interface__Ca_i__Ca_i, 2)) * (CHASTE_CONST(1004882.8125) * var_chaste_interface__Ca_i__Ca_i + CHASTE_CONST(1.3) * CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) + CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * NV_Ith_S(mParameters, 4) + CHASTE_CONST(1.5) * CHASTE_MATH::Pow(NV_Ith_S(mParameters, 6), 3) * var_chaste_interface__Ca_i__Ca_i + CHASTE_CONST(0.0035999999999999999) * CHASTE_MATH::Pow(NV_Ith_S(mParameters, 6), 3) * (1 + CHASTE_CONST(0.081300813008130079) * var_chaste_interface__intracellular_ion_concentrations__Na_i) + CHASTE_CONST(1860.8670000000004) * (1 + CHASTE_CONST(416.66666666666669) * var_chaste_interface__Ca_i__Ca_i) * NV_Ith_S(mParameters, 4))) + CHASTE_MATH::Pow(var_chaste_interface__i_Na_m_gate__m, 3) * (-var_equilibrium_potentials__E_Na + var_chaste_interface__membrane__V) * (CHASTE_CONST(0.20000000000000001) * var_chaste_interface__i_Na_j_gate__j + CHASTE_CONST(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) * (CHASTE_CONST(0.20000000000000001) * var_chaste_interface__i_to_1_i2_gate__i2 + CHASTE_CONST(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 + CHASTE_CONST(0.61875000000000002) * NV_Ith_S(mParameters, 5) / ((1 + 100 / CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 2)) * (CHASTE_CONST(1.5) + NV_Ith_S(mParameters, 5)) * (1 + _lt_0_row[7] + CHASTE_CONST(0.036499999999999998) * (-CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(0.01485884101040119) * NV_Ith_S(mParameters, 6))) * _lt_0_row[6])) + CHASTE_CONST(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 + CHASTE_CONST(0.59999999999999998) / (1 + CHASTE_CONST(6.4818210260626455e-7) * CHASTE_MATH::Pow((1 / var_chaste_interface__Ca_i__Ca_i), CHASTE_CONST(1.3999999999999999)))) * (-CHASTE_CONST(26.712338705498265) * CHASTE_MATH::Log((CHASTE_CONST(0.018329999999999999) * NV_Ith_S(mParameters, 6) + NV_Ith_S(mParameters, 5)) / (CHASTE_CONST(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 + CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::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]) + CHASTE_CONST(3.510865186083326) * (-15 + var_chaste_interface__membrane__V) * (-CHASTE_CONST(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 = CHASTE_CAP() * var_membrane__i_tot; // uA_per_cm2 const double i_ionic = var_chaste_interface__i_ionic; if (made_new_cvode_vector) @@ -836,7 +838,7 @@ std::shared_ptrmFixedVoltage : mp_membrane_voltage_modifier->Calc(NV_Ith_S(rY, 0), var_chaste_interface__environment__time)); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -907,15 +909,15 @@ std::shared_ptrCalc(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_h_gate__alpha_h = ((var_chaste_interface__membrane__V < -40) ? (CHASTE_CONST(0.13500000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(11.764705882352942) + CHASTE_CONST(0.14705882352941177) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) - CHASTE_CONST(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 * CHASTE_MATH::Exp(CHASTE_CONST(0.34999999999999998) * var_chaste_interface__membrane__V - CHASTE_CONST(0.34999999999999998) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time)) + CHASTE_CONST(3.5600000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.079000000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.079000000000000001) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time))) : (CHASTE_CONST(7.6923076923076916) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.96036036036036043) + CHASTE_CONST(0.0900900900900901) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) - CHASTE_CONST(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 + CHASTE_CONST(0.01) * mp_membrane_fast_sodium_current_reduced_inactivation_modifier->Calc(NV_Ith_S(mParameters, 9), var_chaste_interface__environment__time) + (1 - CHASTE_CONST(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) ? ((CHASTE_CONST(37.780000000000001) + var_chaste_interface__membrane__V) * (-127140 * CHASTE_MATH::Exp(CHASTE_CONST(0.24440000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.24440000000000001) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time)) - CHASTE_CONST(3.4740000000000003e-5) * CHASTE_MATH::Exp(CHASTE_CONST(0.043909999999999998) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) - CHASTE_CONST(0.043909999999999998) * var_chaste_interface__membrane__V)) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(24.640530000000002) + CHASTE_CONST(0.311) * var_chaste_interface__membrane__V - CHASTE_CONST(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) ? (CHASTE_CONST(0.1212) * CHASTE_MATH::Exp(CHASTE_CONST(0.01052) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) - CHASTE_CONST(0.01052) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(5.5312920000000005) + CHASTE_CONST(0.13780000000000001) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) - CHASTE_CONST(0.13780000000000001) * var_chaste_interface__membrane__V))) : (CHASTE_CONST(0.29999999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(2.5349999999999999e-7) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) - CHASTE_CONST(2.5349999999999999e-7) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.2000000000000002) + CHASTE_CONST(0.10000000000000001) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) - CHASTE_CONST(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 + CHASTE_CONST(0.01) * mp_membrane_fast_sodium_current_reduced_inactivation_modifier->Calc(NV_Ith_S(mParameters, 9), var_chaste_interface__environment__time) + (1 - CHASTE_CONST(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 @@ -939,43 +941,43 @@ std::shared_ptrCalc(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_equilibrium_potentials__E_Cl = -CHASTE_CONST(26.712338705498265) * CHASTE_MATH::Log(100 / var_chaste_interface__intracellular_ion_concentrations__Cl_i); // millivolt + const double var_background_currents__i_Cl_b = CHASTE_CONST(0.00022499999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.00022499999999999999) * var_equilibrium_potentials__E_Cl; // microA_per_microF + const double var_equilibrium_potentials__E_K = CHASTE_CONST(26.712338705498265) * CHASTE_MATH::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 = CHASTE_CONST(7.0755999999999996e-6) * (-var_equilibrium_potentials__E_Cl + var_equilibrium_potentials__E_K) / (CHASTE_CONST(87.825100000000006) - var_equilibrium_potentials__E_Cl + var_equilibrium_potentials__E_K); // millimolar_per_millisecond + const double var_background_currents__i_K_b = CHASTE_CONST(0.0050000000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.0050000000000000001) * var_equilibrium_potentials__E_K; // microA_per_microF + const double var_equilibrium_potentials__E_Na = CHASTE_CONST(26.712338705498265) * CHASTE_MATH::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 = CHASTE_CONST(9.8442999999999999e-6) * CHASTE_MATH::Pow((-var_equilibrium_potentials__E_Cl + var_equilibrium_potentials__E_Na), 4) / (CHASTE_CONST(59494197.640692554) + CHASTE_MATH::Pow((-var_equilibrium_potentials__E_Cl + var_equilibrium_potentials__E_Na), 4)); // millimolar_per_millisecond + const double var_background_currents__i_Na_b = CHASTE_CONST(0.0025000000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.0025000000000000001) * var_equilibrium_potentials__E_Na; // microA_per_microF + const double var_i_K1__i_K1 = mp_i_K1__i_K1_modifier->Calc((CHASTE_CONST(0.0040000000000000001) + CHASTE_CONST(0.4389381125701739) * CHASTE_MATH::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 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.23849999999999999) * var_equilibrium_potentials__E_K)) * (CHASTE_CONST(1.02) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.23849999999999999) * var_equilibrium_potentials__E_K)) + (CHASTE_CONST(0.49124000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__membrane__V - CHASTE_CONST(0.080320000000000003) * var_equilibrium_potentials__E_K) + CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.061749999999999999) * var_equilibrium_potentials__E_K)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(0.51429999999999998) * var_equilibrium_potentials__E_K - CHASTE_CONST(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 = CHASTE_CONST(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(CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::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 + CHASTE_CONST(0.59999999999999998) / (1 + CHASTE_CONST(6.4818210260626455e-7) * CHASTE_MATH::Pow((1 / var_chaste_interface__Ca_i__Ca_i), CHASTE_CONST(1.3999999999999999)))) * (-CHASTE_CONST(26.712338705498265) * CHASTE_MATH::Log((CHASTE_CONST(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)) / (CHASTE_CONST(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(CHASTE_MATH::Pow(var_chaste_interface__i_Na_m_gate__m, 3) * (-var_equilibrium_potentials__E_Na + var_chaste_interface__membrane__V) * (CHASTE_CONST(0.20000000000000001) * var_chaste_interface__i_Na_j_gate__j + CHASTE_CONST(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((-CHASTE_CONST(1.5) * CHASTE_MATH::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] + CHASTE_CONST(0.40000000000000002) * CHASTE_MATH::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 + CHASTE_CONST(6.9444444444444451e-9) / CHASTE_MATH::Pow(var_chaste_interface__Ca_i__Ca_i, 2)) * (CHASTE_CONST(1004882.8125) * var_chaste_interface__Ca_i__Ca_i + CHASTE_CONST(1.3) * CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) + CHASTE_MATH::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) + CHASTE_CONST(1.5) * CHASTE_MATH::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 + CHASTE_CONST(0.0035999999999999999) * CHASTE_MATH::Pow(mp_extracellular_sodium_concentration_modifier->Calc(NV_Ith_S(mParameters, 6), var_chaste_interface__environment__time), 3) * (1 + CHASTE_CONST(0.081300813008130079) * var_chaste_interface__intracellular_ion_concentrations__Na_i) + CHASTE_CONST(1860.8670000000004) * (1 + CHASTE_CONST(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 = CHASTE_CONST(0.61875000000000002) * mp_extracellular_potassium_concentration_modifier->Calc(NV_Ith_S(mParameters, 5), var_chaste_interface__environment__time) / ((1 + 100 / CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 2)) * (CHASTE_CONST(1.5) + mp_extracellular_potassium_concentration_modifier->Calc(NV_Ith_S(mParameters, 5), var_chaste_interface__environment__time)) * (1 + _lt_0_row[7] + CHASTE_CONST(0.036499999999999998) * (-CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(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 = CHASTE_CONST(0.037374999999999999) * CHASTE_MATH::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) * (CHASTE_CONST(0.20000000000000001) * var_chaste_interface__i_to_1_i2_gate__i2 + CHASTE_CONST(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 = CHASTE_CONST(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 = (-CHASTE_CONST(6.767281717060562e-9) * var_background_currents__i_Cl_b - CHASTE_CONST(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 = (CHASTE_CONST(1.3534563434121124e-8) * var_i_NaK__i_NaK - CHASTE_CONST(6.767281717060562e-9) * var_background_currents__i_K_b - CHASTE_CONST(6.767281717060562e-9) * var_i_K1__i_K1 - CHASTE_CONST(6.767281717060562e-9) * var_i_K_p__i_K_p - CHASTE_CONST(6.767281717060562e-9) * var_i_Kr__i_Kr - CHASTE_CONST(6.767281717060562e-9) * var_i_Ks__i_Ks - CHASTE_CONST(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 = (-CHASTE_CONST(2.0301845151181685e-8) * var_i_NaCa__i_NaCa - CHASTE_CONST(2.0301845151181685e-8) * var_i_NaK__i_NaK - CHASTE_CONST(6.767281717060562e-9) * var_background_currents__i_Na_b - CHASTE_CONST(6.767281717060562e-9) * var_i_Na__i_Na - CHASTE_CONST(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 = CHASTE_CONST(0.0028824983370007683) * (-CHASTE_CONST(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 = CHASTE_CONST(3.510865186083326) * (-15 + var_chaste_interface__membrane__V) * (-CHASTE_CONST(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 + 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 + CHASTE_MATH::Exp(-CHASTE_CONST(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 = (CHASTE_CONST(0.14999999999999999) - var_chaste_interface__i_Ca_L_f_Ca_gate__f_Ca + CHASTE_CONST(0.55000000000000004) / (1 + CHASTE_CONST(333.33333333333331) * var_chaste_interface__Ca_r__Ca_r) + CHASTE_CONST(0.29999999999999999) / (1 - 20 * var_i_Ca_L__i_Ca_L)) / (CHASTE_CONST(0.5) + 1 / (1 + CHASTE_CONST(333.33333333333331) * var_chaste_interface__Ca_r__Ca_r) + 10 * var_Ca_MK_act__Ca_MK_act / (CHASTE_CONST(0.14999999999999999) + var_Ca_MK_act__Ca_MK_act)); // 1 / millisecond + const double var_q_leak__q_leak = CHASTE_CONST(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 + CHASTE_MATH::Exp(CHASTE_CONST(3.3333333333333335) + CHASTE_CONST(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 + CHASTE_MATH::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 / (CHASTE_CONST(0.14999999999999999) + var_Ca_MK_act__Ca_MK_act)) / (1 + CHASTE_MATH::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 / (CHASTE_CONST(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 + CHASTE_MATH::Exp(CHASTE_CONST(2.6000000000000001) + CHASTE_CONST(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 + CHASTE_CONST(0.23999999999999996) * var_q_rel__q_rel - CHASTE_CONST(1.1504378919002956e-7) * var_i_Ca_L__i_Ca_L) / (1 + CHASTE_CONST(2.2480000000000002) * var_chaste_interface__Ca_r__Ca_r / CHASTE_MATH::Pow((CHASTE_CONST(0.0086999999999999994) + var_chaste_interface__Ca_r__Ca_r), 2) + CHASTE_CONST(0.094) * var_chaste_interface__Ca_r__Ca_r / CHASTE_MATH::Pow((CHASTE_CONST(0.00087000000000000001) + var_chaste_interface__Ca_r__Ca_r), 2)); // millimolar / millisecond + const double d_dt_chaste_interface_var_q_rel_ro_gate__ro = -CHASTE_CONST(0.33333333333333331) * var_chaste_interface__q_rel_ro_gate__ro + CHASTE_CONST(0.33333333333333331) * CHASTE_MATH::Pow(var_chaste_interface__Ca_JSR__Ca_JSR, CHASTE_CONST(1.8999999999999999)) * CHASTE_MATH::Pow(var_i_Ca_L__i_Ca_L, 2) / ((1 + CHASTE_MATH::Pow(var_i_Ca_L__i_Ca_L, 2)) * (CHASTE_MATH::Pow(var_chaste_interface__Ca_JSR__Ca_JSR, CHASTE_CONST(1.8999999999999999)) + CHASTE_CONST(1644.6531773416521) * CHASTE_MATH::Pow((var_chaste_interface__Ca_r__Ca_r / (CHASTE_CONST(0.0028) + var_chaste_interface__Ca_r__Ca_r)), CHASTE_CONST(1.8999999999999999)))); // 1 / millisecond + const double var_q_tr__q_tr = CHASTE_CONST(0.0083333333333333332) * var_chaste_interface__Ca_NSR__Ca_NSR - CHASTE_CONST(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 / CHASTE_MATH::Pow((CHASTE_CONST(0.80000000000000004) + var_chaste_interface__Ca_JSR__Ca_JSR), 2)); // millimolar / millisecond + const double var_q_up__q_up = CHASTE_CONST(0.5) * (1 + CHASTE_CONST(0.75) * var_Ca_MK_act__Ca_MK_act / (CHASTE_CONST(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) / (CHASTE_CONST(0.00092000000000000003) - CHASTE_CONST(0.00017000000000000001) * var_Ca_MK_act__Ca_MK_act / (CHASTE_CONST(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 - CHASTE_CONST(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 = -(CHASTE_CONST(3.383640858530281e-9) * var_background_currents__i_Ca_b + CHASTE_CONST(3.383640858530281e-9) * var_i_Ca_p__i_Ca_p + CHASTE_CONST(0.081176470588235281) * var_q_up__q_up - CHASTE_CONST(0.029411764705882353) * var_Ca_r__q_diff - CHASTE_CONST(6.767281717060562e-9) * var_i_NaCa__i_NaCa - CHASTE_CONST(0.081176470588235281) * var_q_leak__q_leak) / (1 + CHASTE_CONST(0.14000000000000001) * var_chaste_interface__Ca_i__Ca_i / CHASTE_MATH::Pow((CHASTE_CONST(0.00050000000000000001) + var_chaste_interface__Ca_i__Ca_i), 2) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__Ca_i__Ca_i / CHASTE_MATH::Pow((CHASTE_CONST(0.0023800000000000002) + var_chaste_interface__Ca_i__Ca_i), 2)); // millimolar / millisecond if (mSetVoltageDerivativeToZero) { @@ -983,7 +985,7 @@ std::shared_ptrGetCapacitance() - 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 + 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 - CHASTE_STIM(var_chaste_interface__environment__time) / CHASTE_CAP() - CHASTE_CONST(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; @@ -1022,7 +1024,7 @@ std::shared_ptrmFixedVoltage : mp_membrane_voltage_modifier->Calc(NV_Ith_S(rY, 0), var_chaste_interface__environment__time)); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -1078,65 +1080,65 @@ std::shared_ptrIndexTable0(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_0 = CHASTE_CONST(0.050000000000000003); // dimensionless + const double var_Ca_MK_act__km_Ca_MK = CHASTE_CONST(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_equilibrium_potentials__r_NaK = CHASTE_CONST(0.018329999999999999); // dimensionless + const double var_i_Ca_L__p_Ca = CHASTE_CONST(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(CHASTE_CONST(0.5) + 1 / (1 + CHASTE_CONST(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 + CHASTE_CONST(0.59999999999999998) / (1 + CHASTE_CONST(6.4818210260626455e-7) * CHASTE_MATH::Pow((1 / var_chaste_interface__Ca_i__Ca_i), CHASTE_CONST(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 = CHASTE_CONST(0.40000000000000002); // dimensionless + const double var_i_NaCa__k_sat = CHASTE_CONST(0.27000000000000002); // dimensionless + const double var_i_NaCa__km_Ca_act = CHASTE_CONST(0.000125); // millimolar + const double var_i_NaCa__km_Ca_i = CHASTE_CONST(0.0035999999999999999); // millimolar + const double var_i_NaCa__km_Ca_o = CHASTE_CONST(1.3); // millimolar + const double var_i_NaCa__km_Na_i_1 = CHASTE_CONST(12.300000000000001); // millimolar + const double var_i_NaCa__km_Na_o = CHASTE_CONST(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 + CHASTE_CONST(24.217200000000005) * CHASTE_MATH::Pow((-1 + CHASTE_CONST(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 + CHASTE_CONST(0.03125) * CHASTE_MATH::Pow((-1 + CHASTE_CONST(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__alpha_h = ((var_chaste_interface__membrane__V < -40) ? (CHASTE_CONST(0.13500000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(11.764705882352942) + CHASTE_CONST(0.14705882352941177) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) - CHASTE_CONST(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 * CHASTE_MATH::Exp(CHASTE_CONST(0.34999999999999998) * var_chaste_interface__membrane__V - CHASTE_CONST(0.34999999999999998) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time)) + CHASTE_CONST(3.5600000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.079000000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.079000000000000001) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time))) : (CHASTE_CONST(7.6923076923076916) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.96036036036036043) + CHASTE_CONST(0.0900900900900901) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) - CHASTE_CONST(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__alpha_j = ((var_chaste_interface__membrane__V < -40) ? ((CHASTE_CONST(37.780000000000001) + var_chaste_interface__membrane__V) * (-127140 * CHASTE_MATH::Exp(CHASTE_CONST(0.24440000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.24440000000000001) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time)) - CHASTE_CONST(3.4740000000000003e-5) * CHASTE_MATH::Exp(CHASTE_CONST(0.043909999999999998) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) - CHASTE_CONST(0.043909999999999998) * var_chaste_interface__membrane__V)) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(24.640530000000002) + CHASTE_CONST(0.311) * var_chaste_interface__membrane__V - CHASTE_CONST(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) ? (CHASTE_CONST(0.1212) * CHASTE_MATH::Exp(CHASTE_CONST(0.01052) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) - CHASTE_CONST(0.01052) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(5.5312920000000005) + CHASTE_CONST(0.13780000000000001) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) - CHASTE_CONST(0.13780000000000001) * var_chaste_interface__membrane__V))) : (CHASTE_CONST(0.29999999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(2.5349999999999999e-7) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) - CHASTE_CONST(2.5349999999999999e-7) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.2000000000000002) + CHASTE_CONST(0.10000000000000001) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(NV_Ith_S(mParameters, 10), var_chaste_interface__environment__time) - CHASTE_CONST(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_membrane__i_stim_converted = CHASTE_STIM(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_i_NaCa__dNaCa_1 = CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * var_i_NaCa__km_Ca_o + CHASTE_CONST(1.5) * CHASTE_MATH::Pow(var_i_NaCa__km_Na_o, 3) * var_chaste_interface__Ca_i__Ca_i + CHASTE_MATH::Pow(var_i_NaCa__km_Na_i_1, 3) * (1 + CHASTE_CONST(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_i_K1__g_K1 = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::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 = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::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 = CHASTE_MATH::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) + CHASTE_CONST(1.5) * CHASTE_MATH::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 + CHASTE_MATH::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_equilibrium_potentials__E_K = var_model_parameters__R * var_model_parameters__T * CHASTE_MATH::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 * CHASTE_MATH::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 * CHASTE_MATH::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 = CHASTE_CONST(1.02) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.23849999999999999) * var_equilibrium_potentials__E_K)); // dimensionless + const double var_i_K1_xK1_gate__beta_xK1 = (CHASTE_CONST(0.49124000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__membrane__V - CHASTE_CONST(0.080320000000000003) * var_equilibrium_potentials__E_K) + CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.061749999999999999) * var_equilibrium_potentials__E_K)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(0.51429999999999998) * var_equilibrium_potentials__E_K - CHASTE_CONST(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_K1__i_K1 = mp_i_K1__i_K1_modifier->Calc((CHASTE_CONST(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 = CHASTE_CAP() * 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_Kr__i_Kr_converted = CHASTE_CAP() * 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_i_Ks__i_Ks_converted = CHASTE_CAP() * var_i_Ks__i_Ks; // uA_per_cm2 + const double var_i_Na__i_Na = mp_i_Na__i_Na_modifier->Calc(CHASTE_MATH::Pow(var_chaste_interface__i_Na_m_gate__m, 3) * (-var_equilibrium_potentials__E_Na + var_chaste_interface__membrane__V) * (CHASTE_CONST(0.20000000000000001) * var_chaste_interface__i_Na_j_gate__j + CHASTE_CONST(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 = CHASTE_CAP() * var_i_Na__i_Na; // uA_per_cm2 + const double var_i_NaCa__i_NaCa = mp_i_NaCa__i_NaCa_modifier->Calc((-CHASTE_CONST(1.5) * CHASTE_MATH::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 * CHASTE_MATH::Exp(-CHASTE_CONST(0.65000000000000002) * var_chaste_interface__membrane__V * var_model_parameters__F / (var_model_parameters__R * var_model_parameters__T)) + CHASTE_MATH::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) * CHASTE_MATH::Exp(CHASTE_CONST(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 * CHASTE_MATH::Exp(-CHASTE_CONST(0.65000000000000002) * var_chaste_interface__membrane__V * var_model_parameters__F / (var_model_parameters__R * var_model_parameters__T))) * (1 + CHASTE_CONST(0.44444444444444442) * CHASTE_MATH::Pow(var_i_NaCa__km_Ca_act, 2) / CHASTE_MATH::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 = CHASTE_CAP() * 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) * (CHASTE_CONST(0.20000000000000001) * var_chaste_interface__i_to_1_i2_gate__i2 + CHASTE_CONST(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 = CHASTE_CAP() * 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__gamma_Cao = CHASTE_CONST(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_max = CHASTE_MATH::Pow(var_model_parameters__F, 2) * CHASTE_MATH::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 * CHASTE_MATH::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 + CHASTE_MATH::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_i_Ca_L__i_Ca_L_converted = CHASTE_CAP() * 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 + CHASTE_MATH::Exp(-CHASTE_CONST(4.375) - 25 * var_i_Ca_L__i_Ca_L)), var_chaste_interface__environment__time); // millisecond + const double var_q_rel__vg = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(2.6000000000000001) + CHASTE_CONST(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 @@ -1465,4 +1467,5 @@ extern "C" } } + #endif // CHASTE_CVODE diff --git a/chaste_codegen/data/tests/chaste_reference_models/Cvode_opt/dynamic_aslanidi_Purkinje_model_2009.hpp b/chaste_codegen/data/tests/chaste_reference_models/Cvode_opt/dynamic_aslanidi_Purkinje_model_2009.hpp index 7ce5481bc..1cdd46058 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/Cvode_opt/dynamic_aslanidi_Purkinje_model_2009.hpp +++ b/chaste_codegen/data/tests/chaste_reference_models/Cvode_opt/dynamic_aslanidi_Purkinje_model_2009.hpp @@ -20,7 +20,11 @@ #include "AbstractModifier.hpp" #include "AbstractDynamicallyLoadableEntity.hpp" #include "AbstractStimulusFunction.hpp" +#if USING_DEVICE_COMPILER +#include "StimulusEvaluatorCuda.hpp" +#endif #include "AbstractCvodeCell.hpp" +#include "HostDeviceMacros.hpp" class Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt : public AbstractCardiacCellWithModifiers, public AbstractDynamicallyLoadableEntity { @@ -89,6 +93,10 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLCvodeOpt : public AbstractCar 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: + static constexpr unsigned TOTAL_SIZE = 30u; + static constexpr unsigned NNZ = 0u; + static inline const int sparse_rowptr[] = { }; + static inline const int sparse_colind[] = { }; boost::shared_ptr UseCellMLDefaultStimulus(); double GetIntracellularCalciumConcentration(); @@ -98,7 +106,11 @@ const bool is_probability[30] = {false, false, true, true, true, false, false, t 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); +#if USING_DEVICE_COMPILER + +#endif }; // Needs to be included last @@ -135,4 +147,7 @@ namespace boost } #endif // DYNAMICASLANIDI_PURKINJE_MODEL_2009FROMCELLMLCVODEOPT_HPP_ + + + #endif // CHASTE_CVODE \ No newline at end of file diff --git a/chaste_codegen/data/tests/chaste_reference_models/Cvode_opt/hilgemann_noble_model_1987.cpp b/chaste_codegen/data/tests/chaste_reference_models/Cvode_opt/hilgemann_noble_model_1987.cpp index aed12e9d4..1ad3141da 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/Cvode_opt/hilgemann_noble_model_1987.cpp +++ b/chaste_codegen/data/tests/chaste_reference_models/Cvode_opt/hilgemann_noble_model_1987.cpp @@ -22,6 +22,8 @@ #include "HeartConfig.hpp" #include "IsNan.hpp" #include "MathsCustomFunctions.hpp" +#include "ChasteMathDeviceNamespaces.hpp" +#include "ChasteCpuMacros.hpp" #if CHASTE_SUNDIALS_VERSION >= 60000 #include "CvodeContextManager.hpp" @@ -148,7 +150,7 @@ class Cellhilgemann_noble_model_1987FromCellMLCvodeOpt_LookupTables : public Abs for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(0.018716945411372737 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(CHASTE_CONST(0.018716945411372737) * 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); @@ -159,7 +161,7 @@ class Cellhilgemann_noble_model_1987FromCellMLCvodeOpt_LookupTables : public Abs for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(-0.018716945411372737 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(-CHASTE_CONST(0.018716945411372737) * 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); @@ -170,7 +172,7 @@ class Cellhilgemann_noble_model_1987FromCellMLCvodeOpt_LookupTables : public Abs for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(1.8716945411372736 - 0.037433890822745473 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736) - CHASTE_CONST(0.037433890822745473) * 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); @@ -192,7 +194,7 @@ class Cellhilgemann_noble_model_1987FromCellMLCvodeOpt_LookupTables : public Abs for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 - exp(1.8716945411372736 - 0.037433890822745473 * var_chaste_interface__membrane__V); + return 1 - CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736) - CHASTE_CONST(0.037433890822745473) * 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); @@ -214,7 +216,7 @@ class Cellhilgemann_noble_model_1987FromCellMLCvodeOpt_LookupTables : public Abs for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(3.7433890822745473 - 0.074867781645490947 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(CHASTE_CONST(3.7433890822745473) - CHASTE_CONST(0.074867781645490947) * 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); @@ -236,7 +238,7 @@ class Cellhilgemann_noble_model_1987FromCellMLCvodeOpt_LookupTables : public Abs for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 - exp(3.7433890822745473 - 0.074867781645490947 * var_chaste_interface__membrane__V); + return 1 - CHASTE_MATH::Exp(CHASTE_CONST(3.7433890822745473) - CHASTE_CONST(0.074867781645490947) * 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); @@ -258,7 +260,7 @@ class Cellhilgemann_noble_model_1987FromCellMLCvodeOpt_LookupTables : public Abs for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 600 * exp(-3.2000000000000002 + 0.080000000000000002 * var_chaste_interface__membrane__V); + return 600 * CHASTE_MATH::Exp(-CHASTE_CONST(3.2000000000000002) + CHASTE_CONST(0.080000000000000002) * 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); @@ -269,7 +271,7 @@ class Cellhilgemann_noble_model_1987FromCellMLCvodeOpt_LookupTables : public Abs for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return ((fabs(41 + var_chaste_interface__membrane__V) < 1.0000000000000001e-5) ? (2000) : (200 * (41 + var_chaste_interface__membrane__V) / (1 - exp(-4.1000000000000005 - 0.10000000000000001 * var_chaste_interface__membrane__V)))); + return ((CHASTE_MATH::Abs(41 + var_chaste_interface__membrane__V) < CHASTE_CONST(1.0000000000000001e-5)) ? (2000) : (200 * (41 + var_chaste_interface__membrane__V) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(4.1000000000000005) - CHASTE_CONST(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); @@ -291,7 +293,7 @@ class Cellhilgemann_noble_model_1987FromCellMLCvodeOpt_LookupTables : public Abs for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(-3.6960000000000002 - 0.056000000000000001 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(-CHASTE_CONST(3.6960000000000002) - CHASTE_CONST(0.056000000000000001) * 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); @@ -324,7 +326,7 @@ std::shared_ptr C 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_amplitude_converted = -CHASTE_CONST(0.20000000000000001) * CHASTE_CAP() / 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 @@ -360,18 +362,18 @@ std::shared_ptr C 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, 2) = CHASTE_CONST(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, 8) = CHASTE_CONST(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] + NV_Ith_S(this->mParameters, 12) = CHASTE_CONST(1.7); // (var_time_independent_potassium_current__g_K1) [microS] + NV_Ith_S(this->mParameters, 13) = CHASTE_CONST(0.01); // (var_Na_Ca_exchanger__k_NaCa) [nanoA] } Cellhilgemann_noble_model_1987FromCellMLCvodeOpt::~Cellhilgemann_noble_model_1987FromCellMLCvodeOpt() @@ -431,7 +433,7 @@ std::shared_ptr C made_new_cvode_vector = true; rY = MakeNVector(*pStateVariables); } - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -458,16 +460,16 @@ std::shared_ptr C // 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_Na_Ca_exchanger__i_NaCa_converted = CHASTE_CONST(0.001) * (CHASTE_MATH::Pow(var_chaste_interface__intracellular_sodium_concentration__Na_i, 3) * var_chaste_interface__extracellular_calcium_concentration__Ca_o * _lt_0_row[0] - CHASTE_MATH::Pow(NV_Ith_S(mParameters, 6), 3) * var_chaste_interface__intracellular_calcium_concentration__Ca_i * _lt_0_row[1]) * CHASTE_CAP() * NV_Ith_S(mParameters, 13) / ((1 + CHASTE_CONST(144.92753623188406) * var_chaste_interface__intracellular_calcium_concentration__Ca_i) * (1 + CHASTE_CONST(0.0001) * CHASTE_MATH::Pow(NV_Ith_S(mParameters, 6), 3) * var_chaste_interface__intracellular_calcium_concentration__Ca_i + CHASTE_CONST(0.0001) * CHASTE_MATH::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 = CHASTE_CONST(0.0050000000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.066784401649239128) * CHASTE_MATH::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 = CHASTE_CONST(0.001) * CHASTE_MATH::Pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3) * (-CHASTE_CONST(26.713760659695652) * CHASTE_MATH::Log((NV_Ith_S(mParameters, 6) + CHASTE_CONST(0.12) * NV_Ith_S(mParameters, 5)) / (var_chaste_interface__intracellular_sodium_concentration__Na_i + CHASTE_CONST(0.12) * var_chaste_interface__intracellular_potassium_concentration__K_i)) + var_chaste_interface__membrane__V) * CHASTE_CAP() * 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 = CHASTE_CONST(0.001) * ((((var_chaste_interface__membrane__V >= CHASTE_CONST(49.999997328623934)) && (var_chaste_interface__membrane__V <= CHASTE_CONST(50.000002671376066))) ? (CHASTE_CONST(187169.45411399176) * (-CHASTE_CONST(49.999997328623934) + var_chaste_interface__membrane__V) * (CHASTE_CONST(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 / (CHASTE_CONST(0.001) + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (var_chaste_interface__intracellular_sodium_concentration__Na_i * CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736)) - NV_Ith_S(mParameters, 6) * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999858739e-8))) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_calcium_current_d_gate__d / (1 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999858739e-8))) + CHASTE_CONST(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 / (CHASTE_CONST(0.001) + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (var_chaste_interface__intracellular_sodium_concentration__Na_i * CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736)) - NV_Ith_S(mParameters, 6) * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999858739e-8))) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_calcium_current_d_gate__d / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999858739e-8)))) - CHASTE_CONST(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 / (CHASTE_CONST(0.001) + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (var_chaste_interface__intracellular_sodium_concentration__Na_i * CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736)) - NV_Ith_S(mParameters, 6) * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999858739e-8))) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_calcium_current_d_gate__d / (1 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999858739e-8)))) : (CHASTE_CONST(0.00037433890822745472) * (1 - var_chaste_interface__second_inward_calcium_current_f_Ca_gate__f_Ca) * (1 - var_chaste_interface__intracellular_calcium_concentration__Ca_i / (CHASTE_CONST(0.001) + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (-50 + var_chaste_interface__membrane__V) * (var_chaste_interface__intracellular_sodium_concentration__Na_i * CHASTE_MATH::Exp(CHASTE_CONST(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 >= CHASTE_CONST(49.999997328623934)) && (var_chaste_interface__membrane__V <= CHASTE_CONST(50.000002671376066))) ? (CHASTE_CONST(187169.45411399176) * (-CHASTE_CONST(49.999997328623934) + var_chaste_interface__membrane__V) * (CHASTE_CONST(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 / (CHASTE_CONST(0.001) + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (var_chaste_interface__intracellular_potassium_concentration__K_i * CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736)) - NV_Ith_S(mParameters, 5) * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999858739e-8))) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_calcium_current_d_gate__d / (1 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999858739e-8))) + CHASTE_CONST(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 / (CHASTE_CONST(0.001) + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (var_chaste_interface__intracellular_potassium_concentration__K_i * CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736)) - NV_Ith_S(mParameters, 5) * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999858739e-8))) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_calcium_current_d_gate__d / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999858739e-8)))) - CHASTE_CONST(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 / (CHASTE_CONST(0.001) + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (var_chaste_interface__intracellular_potassium_concentration__K_i * CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736)) - NV_Ith_S(mParameters, 5) * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999858739e-8))) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_calcium_current_d_gate__d / (1 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999858739e-8)))) : (CHASTE_CONST(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 / (CHASTE_CONST(0.001) + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (-50 + var_chaste_interface__membrane__V) * (var_chaste_interface__intracellular_potassium_concentration__K_i * CHASTE_MATH::Exp(CHASTE_CONST(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 >= CHASTE_CONST(49.999998664311967)) && (var_chaste_interface__membrane__V <= CHASTE_CONST(50.000001335688033))) ? (CHASTE_CONST(374338.90823576227) * (-CHASTE_CONST(49.999998664311967) + var_chaste_interface__membrane__V) * (CHASTE_CONST(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 / (CHASTE_CONST(0.001) + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (var_chaste_interface__intracellular_calcium_concentration__Ca_i * CHASTE_MATH::Exp(CHASTE_CONST(3.7433890822745473)) - var_chaste_interface__extracellular_calcium_concentration__Ca_o * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999997780743e-8))) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_calcium_current_d_gate__d / (1 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999997780743e-8))) + CHASTE_CONST(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 / (CHASTE_CONST(0.001) + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (var_chaste_interface__intracellular_calcium_concentration__Ca_i * CHASTE_MATH::Exp(CHASTE_CONST(3.7433890822745473)) - var_chaste_interface__extracellular_calcium_concentration__Ca_o * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999997780743e-8))) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_calcium_current_d_gate__d / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999997780743e-8)))) - CHASTE_CONST(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 / (CHASTE_CONST(0.001) + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (var_chaste_interface__intracellular_calcium_concentration__Ca_i * CHASTE_MATH::Exp(CHASTE_CONST(3.7433890822745473)) - var_chaste_interface__extracellular_calcium_concentration__Ca_o * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999997780743e-8))) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_calcium_current_d_gate__d / (1 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999997780743e-8)))) : (CHASTE_CONST(0.14973556329098189) * (1 - var_chaste_interface__second_inward_calcium_current_f_Ca_gate__f_Ca) * (1 - var_chaste_interface__intracellular_calcium_concentration__Ca_i / (CHASTE_CONST(0.001) + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (-50 + var_chaste_interface__membrane__V) * (var_chaste_interface__intracellular_calcium_concentration__Ca_i * CHASTE_MATH::Exp(CHASTE_CONST(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])))) * CHASTE_CAP() / NV_Ith_S(mParameters, 8); // uA_per_cm2 + const double var_sodium_background_current__i_b_Na = CHASTE_CONST(0.012) * var_chaste_interface__membrane__V - CHASTE_CONST(0.32056512791634778) * CHASTE_MATH::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 var_time_independent_potassium_current__E_K = CHASTE_CONST(26.713760659695652) * CHASTE_MATH::Log(NV_Ith_S(mParameters, 5) / var_chaste_interface__intracellular_potassium_concentration__K_i); // millivolt + const double var_potassium_background_current__i_b_K = CHASTE_CONST(0.17000000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.17000000000000001) * var_time_independent_potassium_current__E_K; // nanoA + const double var_time_independent_potassium_current__i_K1_converted = CHASTE_CONST(0.001) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * CHASTE_CAP() * NV_Ith_S(mParameters, 5) * NV_Ith_S(mParameters, 12) / ((1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.74867781645490938) + CHASTE_CONST(0.074867781645490947) * var_chaste_interface__membrane__V - CHASTE_CONST(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) + CHASTE_CONST(0.001) * CHASTE_CAP() * var_calcium_background_current__i_b_Ca + CHASTE_CONST(0.001) * CHASTE_CAP() * var_potassium_background_current__i_b_K + CHASTE_CONST(0.001) * CHASTE_CAP() * var_sodium_background_current__i_b_Na + CHASTE_CONST(0.001) * CHASTE_CAP() * 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) @@ -482,7 +484,7 @@ std::shared_ptr C { // Inputs: // Time units: millisecond - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -523,42 +525,42 @@ std::shared_ptr C // 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__RegBindSite = CHASTE_MATH::Pow(var_chaste_interface__intracellular_calcium_concentration__Ca_i, 2) / CHASTE_MATH::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 d_dt_chaste_interface_var_calcium_release__ProdFrac = -CHASTE_CONST(0.00059999999999999995) * var_chaste_interface__calcium_release__ProdFrac + CHASTE_CONST(0.001) * var_chaste_interface__calcium_release__ActFrac * var_calcium_release__InactRate; // 1 / millisecond + const double var_calcium_release__i_rel = (CHASTE_MATH::Pow(var_chaste_interface__calcium_release__ActFrac, 2) * NV_Ith_S(mParameters, 1) / CHASTE_MATH::Pow((CHASTE_CONST(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 d_dt_chaste_interface_var_intracellular_calcium_concentration__Ca_rel = CHASTE_CONST(9.9999999999999991e-5) * var_calcium_translocation__i_trans - CHASTE_CONST(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 * (CHASTE_CONST(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 = CHASTE_CONST(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 * (CHASTE_CONST(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 = CHASTE_CONST(0.001) * var_intracellular_calcium_concentration__Ca_Trop_orig_deriv; // millimolar / millisecond + const double var_Na_Ca_exchanger__i_NaCa = (CHASTE_MATH::Pow(var_chaste_interface__intracellular_sodium_concentration__Na_i, 3) * var_chaste_interface__extracellular_calcium_concentration__Ca_o * _lt_0_row[0] - CHASTE_MATH::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 + CHASTE_CONST(144.92753623188406) * var_chaste_interface__intracellular_calcium_concentration__Ca_i) * (1 + CHASTE_CONST(0.0001) * CHASTE_MATH::Pow(NV_Ith_S(mParameters, 6), 3) * var_chaste_interface__intracellular_calcium_concentration__Ca_i + CHASTE_CONST(0.0001) * CHASTE_MATH::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 = CHASTE_CONST(0.0050000000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.066784401649239128) * CHASTE_MATH::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 = CHASTE_CONST(0.001) * (_lt_0_row[6] + 500 * var_calcium_release__RegBindSite) * (1 - var_chaste_interface__calcium_release__ActFrac - var_chaste_interface__calcium_release__ProdFrac) - CHASTE_CONST(0.001) * var_chaste_interface__calcium_release__ActFrac * var_calcium_release__InactRate; // 1 / millisecond + const double var_fast_sodium_current__i_Na = CHASTE_MATH::Pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3) * (-CHASTE_CONST(26.713760659695652) * CHASTE_MATH::Log((NV_Ith_S(mParameters, 6) + CHASTE_CONST(0.12) * NV_Ith_S(mParameters, 5)) / (var_chaste_interface__intracellular_sodium_concentration__Na_i + CHASTE_CONST(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 * CHASTE_MATH::Exp(-CHASTE_CONST(9.375) + CHASTE_CONST(0.125) * NV_Ith_S(mParameters, 11) - CHASTE_CONST(0.125) * var_chaste_interface__membrane__V); // per_second + const double var_fast_sodium_current_h_gate__beta_h = 2000 / (1 + 320 * CHASTE_MATH::Exp(-CHASTE_CONST(7.5) + CHASTE_CONST(0.10000000000000001) * NV_Ith_S(mParameters, 11) - CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V)); // per_second + const double d_dt_chaste_interface_var_fast_sodium_current_h_gate__h = CHASTE_CONST(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 + CHASTE_CONST(0.01) * NV_Ith_S(mParameters, 10) + (1 - CHASTE_CONST(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 = CHASTE_CONST(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 / (CHASTE_CONST(0.00041999999999999996) + CHASTE_CONST(0.00023999999999999998) * var_chaste_interface__intracellular_calcium_concentration__Ca_up + var_chaste_interface__intracellular_calcium_concentration__Ca_i) - CHASTE_CONST(5.52e-5) * var_chaste_interface__intracellular_calcium_concentration__Ca_up / (CHASTE_CONST(0.00041999999999999996) + CHASTE_CONST(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 = CHASTE_CONST(0.048999999999999995) * var_sarcoplasmic_reticulum_calcium_pump__i_up - CHASTE_CONST(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 d_dt_chaste_interface_var_second_inward_calcium_current_d_gate__d = CHASTE_CONST(0.001) * (1 - var_chaste_interface__second_inward_calcium_current_d_gate__d) * ((CHASTE_MATH::Abs(var_second_inward_calcium_current_d_gate__E0_d) < CHASTE_CONST(0.0001)) ? (120) : (30 * var_second_inward_calcium_current_d_gate__E0_d / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(0.25) * var_second_inward_calcium_current_d_gate__E0_d)))) - CHASTE_CONST(0.001) * ((CHASTE_MATH::Abs(var_second_inward_calcium_current_d_gate__E0_d) < CHASTE_CONST(0.0001)) ? (120) : (12 * var_second_inward_calcium_current_d_gate__E0_d / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(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_second_inward_calcium_current__i_siCa = (((var_chaste_interface__membrane__V >= CHASTE_CONST(49.999998664311967)) && (var_chaste_interface__membrane__V <= CHASTE_CONST(50.000001335688033))) ? (CHASTE_CONST(374338.90823576227) * (-CHASTE_CONST(49.999998664311967) + var_chaste_interface__membrane__V) * (CHASTE_CONST(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 / (CHASTE_CONST(0.001) + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (var_chaste_interface__intracellular_calcium_concentration__Ca_i * CHASTE_MATH::Exp(CHASTE_CONST(3.7433890822745473)) - var_chaste_interface__extracellular_calcium_concentration__Ca_o * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999997780743e-8))) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_calcium_current_d_gate__d / (1 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999997780743e-8))) + CHASTE_CONST(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 / (CHASTE_CONST(0.001) + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (var_chaste_interface__intracellular_calcium_concentration__Ca_i * CHASTE_MATH::Exp(CHASTE_CONST(3.7433890822745473)) - var_chaste_interface__extracellular_calcium_concentration__Ca_o * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999997780743e-8))) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_calcium_current_d_gate__d / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999997780743e-8)))) - CHASTE_CONST(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 / (CHASTE_CONST(0.001) + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (var_chaste_interface__intracellular_calcium_concentration__Ca_i * CHASTE_MATH::Exp(CHASTE_CONST(3.7433890822745473)) - var_chaste_interface__extracellular_calcium_concentration__Ca_o * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999997780743e-8))) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_calcium_current_d_gate__d / (1 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999997780743e-8)))) : (CHASTE_CONST(0.14973556329098189) * (1 - var_chaste_interface__second_inward_calcium_current_f_Ca_gate__f_Ca) * (1 - var_chaste_interface__intracellular_calcium_concentration__Ca_i / (CHASTE_CONST(0.001) + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (-50 + var_chaste_interface__membrane__V) * (var_chaste_interface__intracellular_calcium_concentration__Ca_i * CHASTE_MATH::Exp(CHASTE_CONST(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 = CHASTE_CONST(0.001) * (CHASTE_CONST(0.001) - CHASTE_CONST(0.00050000000000000001) * var_chaste_interface__extracellular_calcium_concentration__Ca_o - CHASTE_CONST(0.0080543192715385042) * var_Na_Ca_exchanger__i_NaCa - CHASTE_CONST(0.0080543192715385042) * var_calcium_background_current__i_b_Ca - CHASTE_CONST(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 = CHASTE_CONST(0.00020408163265306126) * var_calcium_release__i_rel + CHASTE_CONST(1.3149909014756744e-5) * var_Na_Ca_exchanger__i_NaCa - CHASTE_CONST(0.001) * var_intracellular_calcium_concentration__Ca_Calmod_orig_deriv - CHASTE_CONST(0.001) * var_intracellular_calcium_concentration__Ca_Trop_orig_deriv - CHASTE_CONST(0.001) * var_sarcoplasmic_reticulum_calcium_pump__i_up - CHASTE_CONST(6.5749545073783721e-6) * var_calcium_background_current__i_b_Ca - CHASTE_CONST(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 >= CHASTE_CONST(49.999997328623934)) && (var_chaste_interface__membrane__V <= CHASTE_CONST(50.000002671376066))) ? (CHASTE_CONST(187169.45411399176) * (-CHASTE_CONST(49.999997328623934) + var_chaste_interface__membrane__V) * (CHASTE_CONST(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 / (CHASTE_CONST(0.001) + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (var_chaste_interface__intracellular_potassium_concentration__K_i * CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736)) - NV_Ith_S(mParameters, 5) * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999858739e-8))) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_calcium_current_d_gate__d / (1 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999858739e-8))) + CHASTE_CONST(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 / (CHASTE_CONST(0.001) + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (var_chaste_interface__intracellular_potassium_concentration__K_i * CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736)) - NV_Ith_S(mParameters, 5) * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999858739e-8))) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_calcium_current_d_gate__d / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999858739e-8)))) - CHASTE_CONST(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 / (CHASTE_CONST(0.001) + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (var_chaste_interface__intracellular_potassium_concentration__K_i * CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736)) - NV_Ith_S(mParameters, 5) * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999858739e-8))) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_calcium_current_d_gate__d / (1 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999858739e-8)))) : (CHASTE_CONST(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 / (CHASTE_CONST(0.001) + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (-50 + var_chaste_interface__membrane__V) * (var_chaste_interface__intracellular_potassium_concentration__K_i * CHASTE_MATH::Exp(CHASTE_CONST(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 >= CHASTE_CONST(49.999997328623934)) && (var_chaste_interface__membrane__V <= CHASTE_CONST(50.000002671376066))) ? (CHASTE_CONST(187169.45411399176) * (-CHASTE_CONST(49.999997328623934) + var_chaste_interface__membrane__V) * (CHASTE_CONST(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 / (CHASTE_CONST(0.001) + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (var_chaste_interface__intracellular_sodium_concentration__Na_i * CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736)) - NV_Ith_S(mParameters, 6) * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999858739e-8))) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_calcium_current_d_gate__d / (1 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999858739e-8))) + CHASTE_CONST(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 / (CHASTE_CONST(0.001) + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (var_chaste_interface__intracellular_sodium_concentration__Na_i * CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736)) - NV_Ith_S(mParameters, 6) * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999858739e-8))) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_calcium_current_d_gate__d / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999858739e-8)))) - CHASTE_CONST(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 / (CHASTE_CONST(0.001) + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (var_chaste_interface__intracellular_sodium_concentration__Na_i * CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736)) - NV_Ith_S(mParameters, 6) * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999858739e-8))) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_calcium_current_d_gate__d / (1 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999858739e-8)))) : (CHASTE_CONST(0.00037433890822745472) * (1 - var_chaste_interface__second_inward_calcium_current_f_Ca_gate__f_Ca) * (1 - var_chaste_interface__intracellular_calcium_concentration__Ca_i / (CHASTE_CONST(0.001) + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (-50 + var_chaste_interface__membrane__V) * (var_chaste_interface__intracellular_sodium_concentration__Na_i * CHASTE_MATH::Exp(CHASTE_CONST(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 = CHASTE_CONST(0.012) * ((1 - var_chaste_interface__second_inward_calcium_current_f_Ca_gate__f_Ca) * (1 - var_chaste_interface__intracellular_calcium_concentration__Ca_i / (CHASTE_CONST(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 / (CHASTE_CONST(0.001) + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.25) * var_second_inward_calcium_current_f_Ca_gate__E0_f)) - CHASTE_CONST(0.001) * ((CHASTE_MATH::Abs(var_second_inward_calcium_current_f_Ca_gate__E0_f) < CHASTE_CONST(0.0001)) ? (25) : (CHASTE_CONST(6.25) * var_second_inward_calcium_current_f_Ca_gate__E0_f / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(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 = CHASTE_CONST(0.012) * var_chaste_interface__membrane__V - CHASTE_CONST(0.32056512791634778) * CHASTE_MATH::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 + const double d_dt_chaste_interface_var_intracellular_sodium_concentration__Na_i = -CHASTE_CONST(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 = CHASTE_CONST(26.713760659695652) * CHASTE_MATH::Log(NV_Ith_S(mParameters, 5) / var_chaste_interface__intracellular_potassium_concentration__K_i); // millivolt + const double var_potassium_background_current__i_b_K = CHASTE_CONST(0.17000000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(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 + CHASTE_MATH::Exp(-CHASTE_CONST(0.74867781645490938) + CHASTE_CONST(0.074867781645490947) * var_chaste_interface__membrane__V - CHASTE_CONST(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 = -CHASTE_CONST(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) { @@ -566,7 +568,7 @@ std::shared_ptr C } 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 + d_dt_chaste_interface_var_membrane__V = CHASTE_CONST(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 * CHASTE_STIM(var_chaste_interface__environment__time_converted) * NV_Ith_S(mParameters, 8) / CHASTE_CAP()) / NV_Ith_S(mParameters, 8); // millivolt / millisecond } NV_Ith_S(rDY,0) = d_dt_chaste_interface_var_membrane__V; @@ -590,7 +592,7 @@ std::shared_ptr C { // Inputs: // Time units: millisecond - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -622,37 +624,37 @@ std::shared_ptr C 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__d_NaCa = CHASTE_CONST(0.0001); // dimensionless + const double var_Na_Ca_exchanger__gamma = CHASTE_CONST(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_calcium_release__i_rel = (CHASTE_MATH::Pow(var_chaste_interface__calcium_release__ActFrac, 2) * NV_Ith_S(mParameters, 1) / CHASTE_MATH::Pow((CHASTE_CONST(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 = CHASTE_CONST(96485.341499999995); // coulomb_per_mole + const double var_membrane__R = CHASTE_CONST(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__E_mh = var_membrane__RTONF * CHASTE_MATH::Log((NV_Ith_S(mParameters, 6) + CHASTE_CONST(0.12) * NV_Ith_S(mParameters, 5)) / (var_chaste_interface__intracellular_sodium_concentration__Na_i + CHASTE_CONST(0.12) * var_chaste_interface__intracellular_potassium_concentration__K_i)); // millivolt + const double var_Na_Ca_exchanger__i_NaCa = (CHASTE_MATH::Pow(var_chaste_interface__intracellular_sodium_concentration__Na_i, var_Na_Ca_exchanger__n_NaCa) * var_chaste_interface__extracellular_calcium_concentration__Ca_o * CHASTE_MATH::Exp((-2 + var_Na_Ca_exchanger__n_NaCa) * var_Na_Ca_exchanger__gamma * var_chaste_interface__membrane__V / var_membrane__RTONF) - CHASTE_MATH::Pow(NV_Ith_S(mParameters, 6), var_Na_Ca_exchanger__n_NaCa) * var_chaste_interface__intracellular_calcium_concentration__Ca_i * CHASTE_MATH::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 + CHASTE_CONST(144.92753623188406) * var_chaste_interface__intracellular_calcium_concentration__Ca_i) * (1 + (CHASTE_MATH::Pow(NV_Ith_S(mParameters, 6), var_Na_Ca_exchanger__n_NaCa) * var_chaste_interface__intracellular_calcium_concentration__Ca_i + CHASTE_MATH::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 = CHASTE_CONST(0.001) * CHASTE_CAP() * var_Na_Ca_exchanger__i_NaCa / NV_Ith_S(mParameters, 8); // uA_per_cm2 + const double var_fast_sodium_current__i_Na = CHASTE_MATH::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 = CHASTE_CONST(0.001) * CHASTE_CAP() * 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 * CHASTE_MATH::Exp(-CHASTE_CONST(9.375) + CHASTE_CONST(0.125) * NV_Ith_S(mParameters, 11) - CHASTE_CONST(0.125) * var_chaste_interface__membrane__V); // per_second + const double var_fast_sodium_current_h_gate__beta_h = 2000 / (1 + 320 * CHASTE_MATH::Exp(-CHASTE_CONST(7.5) + CHASTE_CONST(0.10000000000000001) * NV_Ith_S(mParameters, 11) - CHASTE_CONST(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_membrane__i_Stim_converted = CHASTE_STIM(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_f_Ca_gate__beta_f_Ca = 12 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(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 = CHASTE_CONST(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 > CHASTE_MATH::Abs(var_second_inward_calcium_current_f_Ca_gate__E0_f)) ? (25) : (CHASTE_CONST(6.25) * var_second_inward_calcium_current_f_Ca_gate__E0_f / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(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 >= CHASTE_CONST(49.999998664311967)) && (var_chaste_interface__membrane__V <= CHASTE_CONST(50.000001335688033))) ? (CHASTE_CONST(374338.90823576227) * (-CHASTE_CONST(49.999998664311967) + var_chaste_interface__membrane__V) * (CHASTE_CONST(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 / (CHASTE_CONST(0.001) + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (var_chaste_interface__intracellular_calcium_concentration__Ca_i * CHASTE_MATH::Exp(CHASTE_CONST(3.7433890822745473)) - var_chaste_interface__extracellular_calcium_concentration__Ca_o * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999997780743e-8))) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_calcium_current_d_gate__d / (1 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999997780743e-8))) + CHASTE_CONST(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 / (CHASTE_CONST(0.001) + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (var_chaste_interface__intracellular_calcium_concentration__Ca_i * CHASTE_MATH::Exp(CHASTE_CONST(3.7433890822745473)) - var_chaste_interface__extracellular_calcium_concentration__Ca_o * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999997780743e-8))) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_calcium_current_d_gate__d / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999997780743e-8)))) - CHASTE_CONST(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 / (CHASTE_CONST(0.001) + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (var_chaste_interface__intracellular_calcium_concentration__Ca_i * CHASTE_MATH::Exp(CHASTE_CONST(3.7433890822745473)) - var_chaste_interface__extracellular_calcium_concentration__Ca_o * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999997780743e-8))) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_calcium_current_d_gate__d / (1 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999997780743e-8)))) : (CHASTE_CONST(0.14973556329098189) * (1 - var_chaste_interface__second_inward_calcium_current_f_Ca_gate__f_Ca) * (1 - var_chaste_interface__intracellular_calcium_concentration__Ca_i / (CHASTE_CONST(0.001) + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (-50 + var_chaste_interface__membrane__V) * (var_chaste_interface__intracellular_calcium_concentration__Ca_i * CHASTE_MATH::Exp(CHASTE_CONST(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 >= CHASTE_CONST(49.999997328623934)) && (var_chaste_interface__membrane__V <= CHASTE_CONST(50.000002671376066))) ? (CHASTE_CONST(187169.45411399176) * (-CHASTE_CONST(49.999997328623934) + var_chaste_interface__membrane__V) * (CHASTE_CONST(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 / (CHASTE_CONST(0.001) + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (var_chaste_interface__intracellular_potassium_concentration__K_i * CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736)) - NV_Ith_S(mParameters, 5) * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999858739e-8))) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_calcium_current_d_gate__d / (1 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999858739e-8))) + CHASTE_CONST(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 / (CHASTE_CONST(0.001) + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (var_chaste_interface__intracellular_potassium_concentration__K_i * CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736)) - NV_Ith_S(mParameters, 5) * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999858739e-8))) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_calcium_current_d_gate__d / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999858739e-8)))) - CHASTE_CONST(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 / (CHASTE_CONST(0.001) + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (var_chaste_interface__intracellular_potassium_concentration__K_i * CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736)) - NV_Ith_S(mParameters, 5) * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999858739e-8))) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_calcium_current_d_gate__d / (1 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999858739e-8)))) : (CHASTE_CONST(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 / (CHASTE_CONST(0.001) + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (-50 + var_chaste_interface__membrane__V) * (var_chaste_interface__intracellular_potassium_concentration__K_i * CHASTE_MATH::Exp(CHASTE_CONST(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 >= CHASTE_CONST(49.999997328623934)) && (var_chaste_interface__membrane__V <= CHASTE_CONST(50.000002671376066))) ? (CHASTE_CONST(187169.45411399176) * (-CHASTE_CONST(49.999997328623934) + var_chaste_interface__membrane__V) * (CHASTE_CONST(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 / (CHASTE_CONST(0.001) + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (var_chaste_interface__intracellular_sodium_concentration__Na_i * CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736)) - NV_Ith_S(mParameters, 6) * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999858739e-8))) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_calcium_current_d_gate__d / (1 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999858739e-8))) + CHASTE_CONST(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 / (CHASTE_CONST(0.001) + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (var_chaste_interface__intracellular_sodium_concentration__Na_i * CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736)) - NV_Ith_S(mParameters, 6) * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999858739e-8))) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_calcium_current_d_gate__d / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999858739e-8)))) - CHASTE_CONST(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 / (CHASTE_CONST(0.001) + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (var_chaste_interface__intracellular_sodium_concentration__Na_i * CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736)) - NV_Ith_S(mParameters, 6) * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999858739e-8))) * NV_Ith_S(mParameters, 7) * var_chaste_interface__second_inward_calcium_current_d_gate__d / (1 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999858739e-8)))) : (CHASTE_CONST(0.00037433890822745472) * (1 - var_chaste_interface__second_inward_calcium_current_f_Ca_gate__f_Ca) * (1 - var_chaste_interface__intracellular_calcium_concentration__Ca_i / (CHASTE_CONST(0.001) + var_chaste_interface__intracellular_calcium_concentration__Ca_i)) * (-50 + var_chaste_interface__membrane__V) * (var_chaste_interface__intracellular_sodium_concentration__Na_i * CHASTE_MATH::Exp(CHASTE_CONST(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__i_si_converted = CHASTE_CONST(0.001) * CHASTE_CAP() * 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__E_K = var_membrane__RTONF * CHASTE_MATH::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 + 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 + CHASTE_MATH::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 = CHASTE_CONST(0.001) * CHASTE_CAP() * 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()); @@ -852,4 +854,5 @@ void OdeSystemInformation::Ini #include "SerializationExportWrapperForCpp.hpp" CHASTE_CLASS_EXPORT(Cellhilgemann_noble_model_1987FromCellMLCvodeOpt) + #endif // CHASTE_CVODE diff --git a/chaste_codegen/data/tests/chaste_reference_models/Cvode_opt/hilgemann_noble_model_1987.hpp b/chaste_codegen/data/tests/chaste_reference_models/Cvode_opt/hilgemann_noble_model_1987.hpp index 14dfa1f0d..beb908f62 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/Cvode_opt/hilgemann_noble_model_1987.hpp +++ b/chaste_codegen/data/tests/chaste_reference_models/Cvode_opt/hilgemann_noble_model_1987.hpp @@ -17,7 +17,11 @@ #include "ChasteSerialization.hpp" #include #include "AbstractStimulusFunction.hpp" +#if USING_DEVICE_COMPILER +#include "StimulusEvaluatorCuda.hpp" +#endif #include "AbstractCvodeCell.hpp" +#include "HostDeviceMacros.hpp" class Cellhilgemann_noble_model_1987FromCellMLCvodeOpt : public AbstractCvodeCell { @@ -38,6 +42,10 @@ class Cellhilgemann_noble_model_1987FromCellMLCvodeOpt : public AbstractCvodeCel 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: + static constexpr unsigned TOTAL_SIZE = 15u; + static constexpr unsigned NNZ = 0u; + static inline const int sparse_rowptr[] = { }; + static inline const int sparse_colind[] = { }; boost::shared_ptr UseCellMLDefaultStimulus(); double GetIntracellularCalciumConcentration(); @@ -47,7 +55,11 @@ const bool is_probability[15] = {false, false, true, true, true, true, false, fa 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); +#if USING_DEVICE_COMPILER + +#endif }; // Needs to be included last @@ -84,4 +96,7 @@ namespace boost } #endif // CELLHILGEMANN_NOBLE_MODEL_1987FROMCELLMLCVODEOPT_HPP_ + + + #endif // CHASTE_CVODE \ No newline at end of file diff --git a/chaste_codegen/data/tests/chaste_reference_models/Cvode_opt_with_jacobian/hodgkin_huxley_squid_axon_model_1952_modified.cpp b/chaste_codegen/data/tests/chaste_reference_models/Cvode_opt_with_jacobian/hodgkin_huxley_squid_axon_model_1952_modified.cpp index 35dfc9ffa..5591704f5 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/Cvode_opt_with_jacobian/hodgkin_huxley_squid_axon_model_1952_modified.cpp +++ b/chaste_codegen/data/tests/chaste_reference_models/Cvode_opt_with_jacobian/hodgkin_huxley_squid_axon_model_1952_modified.cpp @@ -22,6 +22,8 @@ #include "HeartConfig.hpp" #include "IsNan.hpp" #include "MathsCustomFunctions.hpp" +#include "ChasteMathDeviceNamespaces.hpp" +#include "ChasteCpuMacros.hpp" #if CHASTE_SUNDIALS_VERSION >= 60000 #include "CvodeContextManager.hpp" @@ -148,7 +150,7 @@ class Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeOpt_Lookup for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return (((6.5 + 0.10000000000000001 * 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)))); + return (((CHASTE_CONST(6.5) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V >= -CHASTE_CONST(9.9999999999999995e-8)) && (CHASTE_CONST(6.5) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V <= CHASTE_CONST(9.9999999999999995e-8))) ? (CHASTE_CONST(0.42499999999999999) + CHASTE_CONST(0.0050000000000000001) * var_chaste_interface__membrane__V) : (-CHASTE_CONST(0.099999999999999992) * (CHASTE_CONST(6.5) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(6.5) - CHASTE_CONST(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); @@ -170,7 +172,7 @@ class Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeOpt_Lookup for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(0.9375 + 0.012500000000000001 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(CHASTE_CONST(0.9375) + CHASTE_CONST(0.012500000000000001) * 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); @@ -181,7 +183,7 @@ class Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeOpt_Lookup for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(-3.75 - 0.050000000000000003 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(-CHASTE_CONST(3.75) - CHASTE_CONST(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); @@ -192,7 +194,7 @@ class Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeOpt_Lookup for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 + exp(-4.5 - 0.10000000000000001 * var_chaste_interface__membrane__V); + return 1 + CHASTE_MATH::Exp(-CHASTE_CONST(4.5) - CHASTE_CONST(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); @@ -203,7 +205,7 @@ class Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeOpt_Lookup for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return (((5 + 0.10000000000000001 * var_chaste_interface__membrane__V >= -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)))); + return (((5 + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V >= -CHASTE_CONST(9.9999999999999995e-8)) && (5 + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V <= CHASTE_CONST(9.9999999999999995e-8))) ? (CHASTE_CONST(3.5) + CHASTE_CONST(0.050000000000000003) * var_chaste_interface__membrane__V) : (-(5 + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(-5 - CHASTE_CONST(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); @@ -225,7 +227,7 @@ class Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeOpt_Lookup for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(-4.166666666666667 - 0.055555555555555552 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(-CHASTE_CONST(4.166666666666667) - CHASTE_CONST(0.055555555555555552) * 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); @@ -259,7 +261,7 @@ std::shared_ptr p_cellml_stim(new RegularStimulus( @@ -291,7 +293,7 @@ std::shared_ptrmParameters, 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, 2) = CHASTE_CONST(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] } @@ -352,7 +354,7 @@ std::shared_ptrmFixedVoltage : NV_Ith_S(rY, 0)); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -362,9 +364,9 @@ std::shared_ptrmFixedVoltage : NV_Ith_S(rY, 0)); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -399,8 +401,8 @@ std::shared_ptrmFixedVoltage : NV_Ith_S(rY, 0)); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -437,48 +439,48 @@ std::shared_ptrIndexTable0(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_x1 = CHASTE_MATH::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_x4 = CHASTE_CONST(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_x6 = (var_x5 >= -CHASTE_CONST(9.9999999999999995e-8)) && (var_x5 <= CHASTE_CONST(9.9999999999999995e-8)); + const double var_x7 = CHASTE_MATH::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_x10 = CHASTE_CONST(0.10000000000000001) - CHASTE_CONST(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_x13 = CHASTE_MATH::Exp(-CHASTE_CONST(4.5) - CHASTE_CONST(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_x16 = CHASTE_CONST(0.0015625000000000001) * var_x15 * var_chaste_interface__potassium_channel_n_gate__n; + const double var_x17 = CHASTE_CONST(6.5) + var_x4; + const double var_x18 = (var_x17 >= -CHASTE_CONST(9.9999999999999995e-8)) && (var_x17 <= CHASTE_CONST(9.9999999999999995e-8)); + const double var_x19 = CHASTE_MATH::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; + const double var_x22 = CHASTE_CONST(0.01) - CHASTE_CONST(0.01) * var_chaste_interface__potassium_channel_n_gate__n; + const double var_x23 = CHASTE_CONST(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, 0) = mSetVoltageDerivativeToZero ? 0.0 : (var_x0 * (-NV_Ith_S(mParameters, 2) - var_x1 * var_chaste_interface__sodium_channel_h_gate__h - CHASTE_MATH::Pow(var_chaste_interface__potassium_channel_n_gate__n, 4) * NV_Ith_S(mParameters, 3))); + IJth(rJacobian, 1, 0) = ((var_x6) ? (CHASTE_CONST(0.050000000000000003) - CHASTE_CONST(0.050000000000000003) * var_chaste_interface__sodium_channel_m_gate__m + CHASTE_CONST(0.22222222222222221) * var_x3 * var_chaste_interface__sodium_channel_m_gate__m) : (-var_x10 * var_x9 + CHASTE_CONST(0.22222222222222221) * var_x3 * var_chaste_interface__sodium_channel_m_gate__m - var_x10 * var_x5 * var_x7 / CHASTE_MATH::Pow(var_x8, 2))); + IJth(rJacobian, 2, 0) = -CHASTE_CONST(0.050000000000000003) * var_x12 * (CHASTE_CONST(0.070000000000000007) - CHASTE_CONST(0.070000000000000007) * var_chaste_interface__sodium_channel_h_gate__h) - CHASTE_CONST(0.10000000000000001) * var_x13 * var_chaste_interface__sodium_channel_h_gate__h / CHASTE_MATH::Pow(var_x14, 2); + IJth(rJacobian, 3, 0) = ((var_x18) ? (CHASTE_CONST(0.0050000000000000001) - var_x16 - CHASTE_CONST(0.0050000000000000001) * var_chaste_interface__potassium_channel_n_gate__n) : (-var_x16 - var_x21 * var_x22 - var_x17 * var_x19 * var_x22 / CHASTE_MATH::Pow(var_x20, 2))); + IJth(rJacobian, 0, 1) = mSetVoltageDerivativeToZero ? 0.0 : (-3 * var_x2 * CHASTE_MATH::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) ? (-CHASTE_CONST(3.5) - var_x11 - CHASTE_CONST(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)); + IJth(rJacobian, 2, 2) = -1 / var_x14 - CHASTE_CONST(0.070000000000000007) * var_x12; + IJth(rJacobian, 0, 3) = mSetVoltageDerivativeToZero ? 0.0 : (-4 * var_x0 * CHASTE_MATH::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) ? (-CHASTE_CONST(0.42499999999999999) - var_x23 - CHASTE_CONST(0.0050000000000000001) * var_chaste_interface__membrane__V) : (-var_x23 + CHASTE_CONST(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)); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -490,13 +492,13 @@ const double var_x0 = 1 / NV_Ith_S(mParameters, 0); // 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__E_L = CHASTE_CONST(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_membrane__i_Stim = CHASTE_STIM(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_potassium_channel__i_K = CHASTE_MATH::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_sodium_channel__i_Na = CHASTE_MATH::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()); @@ -581,4 +583,5 @@ void OdeSystemInformation #include "AbstractStimulusFunction.hpp" +#if USING_DEVICE_COMPILER +#include "StimulusEvaluatorCuda.hpp" +#endif #include "AbstractCvodeCell.hpp" +#include "HostDeviceMacros.hpp" class Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeOpt : public AbstractCvodeCell { @@ -38,6 +42,10 @@ class Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeOpt : publ const bool is_concentration[4] = {false, false, false, false}; const bool is_probability[4] = {false, false, false, false}; public: + static constexpr unsigned TOTAL_SIZE = 4u; + static constexpr unsigned NNZ = 10u; + static inline const int sparse_rowptr[] = { 0, 4, 6, 8, 10 }; + static inline const int sparse_colind[] = { 0, 1, 2, 3, 0, 1, 0, 2, 0, 3 }; boost::shared_ptr UseCellMLDefaultStimulus(); Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvodeOpt(boost::shared_ptr pOdeSolver /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus); @@ -46,8 +54,11 @@ const bool is_probability[4] = {false, false, false, false}; 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); + N_Vector ComputeDerivedQuantities(double var_chaste_interface__environment__time, const N_Vector & rY); +#if USING_DEVICE_COMPILER + +#endif }; // Needs to be included last @@ -84,4 +95,7 @@ namespace boost } #endif // CELLHODGKIN_HUXLEY_SQUID_AXON_MODEL_1952_MODIFIEDFROMCELLMLCVODEOPT_HPP_ + + + #endif // CHASTE_CVODE \ No newline at end of file diff --git a/chaste_codegen/data/tests/chaste_reference_models/Cvode_with_jacobian/aslanidi_atrial_model_2009.cpp b/chaste_codegen/data/tests/chaste_reference_models/Cvode_with_jacobian/aslanidi_atrial_model_2009.cpp index 5e8763461..56b4ffb68 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/Cvode_with_jacobian/aslanidi_atrial_model_2009.cpp +++ b/chaste_codegen/data/tests/chaste_reference_models/Cvode_with_jacobian/aslanidi_atrial_model_2009.cpp @@ -22,6 +22,8 @@ #include "HeartConfig.hpp" #include "IsNan.hpp" #include "MathsCustomFunctions.hpp" +#include "ChasteMathDeviceNamespaces.hpp" +#include "ChasteCpuMacros.hpp" #if CHASTE_SUNDIALS_VERSION >= 60000 #include "CvodeContextManager.hpp" @@ -34,9 +36,9 @@ 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_membrane__Cm_converted = CHASTE_CONST(0.001) * NV_Ith_S(mParameters, 4); // uF + const double var_chaste_interface__membrane__stim_amplitude_converted = -CHASTE_CONST(3.9999999999999998e-6) * CHASTE_CAP() / var_membrane__Cm_converted; // uA_per_cm2 + const double var_chaste_interface__membrane__stim_duration_converted = CHASTE_CONST(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( @@ -72,15 +74,15 @@ 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, 1) = CHASTE_CONST(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] + NV_Ith_S(this->mParameters, 3) = CHASTE_CONST(0.0040000000000000001); // (var_L_type_Ca_channel__g_Ca_L) [nanoS] + NV_Ith_S(this->mParameters, 4) = CHASTE_CONST(5.0000000000000002e-5); // (var_membrane__Cm) [nanoF] + NV_Ith_S(this->mParameters, 5) = CHASTE_CONST(1.3999999999999999e-6); // (var_sodium_current__P_Na) [nanolitre_per_second] + NV_Ith_S(this->mParameters, 6) = CHASTE_CONST(0.0050800000000000003); // (var_inward_rectifier__g_K1) [nanoS] + NV_Ith_S(this->mParameters, 7) = CHASTE_CONST(0.0035000000000000001); // (var_delayed_rectifier_K_current__g_Kr) [nanoS] + NV_Ith_S(this->mParameters, 8) = CHASTE_CONST(0.0025000000000000001); // (var_delayed_rectifier_K_current__g_Ks) [nanoS] + NV_Ith_S(this->mParameters, 9) = CHASTE_CONST(2.0000000000000002e-5); // (var_Na_Ca_ion_exchanger_current__k_NaCa) [picoA_per_millimolar_4] } Cellaslanidi_atrial_model_2009FromCellMLCvode::~Cellaslanidi_atrial_model_2009FromCellMLCvode() @@ -136,7 +138,7 @@ made_new_cvode_vector = true; rY = MakeNVector(*pStateVariables); } - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -175,52 +177,52 @@ 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_Ca_independent_transient_outward_K_current__g_to = CHASTE_CONST(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_Na_Ca_ion_exchanger_current__d_NaCa = CHASTE_CONST(0.00029999999999999997); // per_millimolar_4 + const double var_Na_Ca_ion_exchanger_current__gamma = CHASTE_CONST(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_T_type_Ca_channel__g_Ca_T = CHASTE_CONST(0.0060000000000000001); // nanoS + const double var_background_currents__g_B_Ca = CHASTE_CONST(3.1000000000000001e-5); // nanoS + const double var_background_currents__g_B_Na = CHASTE_CONST(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_inward_rectifier__KmK1 = CHASTE_CONST(0.58999999999999997); // millimolar + const double var_inward_rectifier__shiftK1 = -CHASTE_CONST(3.6000000000000001); // millivolt + const double var_inward_rectifier__steepK1 = CHASTE_CONST(1.393); // dimensionless + const double var_membrane__Cm_converted = CHASTE_CONST(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_Ca_independent_transient_outward_K_current__E_K = var_membrane__R * var_membrane__T * CHASTE_MATH::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 = CHASTE_CONST(0.5) * var_membrane__R * var_membrane__T * CHASTE_MATH::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)) ? (CHASTE_CONST(0.098000000000000004) + CHASTE_CONST(0.0014) * var_chaste_interface__membrane__V) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (CHASTE_CONST(0.16799999999999998) + CHASTE_CONST(0.0023999999999999998) * var_chaste_interface__membrane__V) : (CHASTE_CONST(0.070000000000000007) + CHASTE_CONST(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)) ? (CHASTE_CONST(0.20000000000000001) * (CHASTE_CONST(0.40000000000000002) + CHASTE_CONST(0.59999999999999998) * CHASTE_MATH::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) * (CHASTE_CONST(0.58999999999999997) * CHASTE_MATH::Pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s1_gate__s1, 3) + CHASTE_CONST(0.40999999999999998) * CHASTE_MATH::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)) ? (CHASTE_CONST(0.34999999999999998) * (CHASTE_CONST(0.40000000000000002) + CHASTE_CONST(0.59999999999999998) * CHASTE_MATH::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) * (CHASTE_CONST(0.58999999999999997) * CHASTE_MATH::Pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s1_gate__s1, 3) + CHASTE_CONST(0.40999999999999998) * CHASTE_MATH::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) : ((CHASTE_CONST(0.40000000000000002) + CHASTE_CONST(0.59999999999999998) * CHASTE_MATH::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) * (CHASTE_CONST(0.58999999999999997) * CHASTE_MATH::Pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s1_gate__s1, 3) + CHASTE_CONST(0.40999999999999998) * CHASTE_MATH::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 + CHASTE_MATH::Exp(CHASTE_CONST(1.9166666666666667) - CHASTE_CONST(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)) ? (CHASTE_CONST(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)) ? (CHASTE_CONST(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 = CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * 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 = (CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * NV_Ith_S(mParameters, 1) * CHASTE_MATH::Exp(var_Na_Ca_ion_exchanger_current__gamma * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - CHASTE_MATH::Pow(NV_Ith_S(mParameters, 2), 3) * var_chaste_interface__intracellular_ion_concentrations__Ca_i * CHASTE_MATH::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 + (CHASTE_MATH::Pow(NV_Ith_S(mParameters, 2), 3) * var_chaste_interface__intracellular_ion_concentrations__Ca_i + CHASTE_MATH::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 = CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * 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_background_currents__i_B_Ca = (((var_environment__CT == 1) && (var_environment__PM == 0)) ? (CHASTE_CONST(2.0000000000000002e-5) * var_chaste_interface__membrane__V - CHASTE_CONST(2.0000000000000002e-5) * var_background_currents__E_Ca) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (CHASTE_CONST(3.0000000000000001e-5) * var_chaste_interface__membrane__V - CHASTE_CONST(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_Kr_converted = CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * 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_delayed_rectifier_K_current__i_Ks_converted = CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * 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 * CHASTE_MATH::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 + CHASTE_MATH::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))) * CHASTE_MATH::Pow((var_chaste_interface__cleft_space_ion_concentrations__K_c + var_inward_rectifier__KmK1), 3))) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (CHASTE_CONST(2.5) * CHASTE_MATH::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 + CHASTE_MATH::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))) * CHASTE_MATH::Pow((var_chaste_interface__cleft_space_ion_concentrations__K_c + var_inward_rectifier__KmK1), 3))) : (CHASTE_MATH::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 + CHASTE_MATH::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))) * CHASTE_MATH::Pow((var_chaste_interface__cleft_space_ion_concentrations__K_c + var_inward_rectifier__KmK1), 3))))); // picoA + const double var_inward_rectifier__i_K1_converted = CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * var_inward_rectifier__i_K1 / var_membrane__Cm_converted; // uA_per_cm2 + const double var_sarcolemmal_calcium_pump_current__i_CaP_max = CHASTE_CONST(0.0095090000000000001); // picoA + const double var_sarcolemmal_calcium_pump_current__k_CaP = CHASTE_CONST(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_current__E_Na = var_membrane__R * var_membrane__T * CHASTE_MATH::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)) ? (CHASTE_CONST(2.0000000000000002e-5) * var_chaste_interface__membrane__V - CHASTE_CONST(2.0000000000000002e-5) * var_sodium_current__E_Na) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (CHASTE_CONST(3.0000000000000001e-5) * var_chaste_interface__membrane__V - CHASTE_CONST(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 >= -CHASTE_CONST(2.6539450910485349e-6)) && (var_chaste_interface__membrane__V <= CHASTE_CONST(2.6539450910485349e-6))) ? (CHASTE_CONST(188398.77346612973) * (CHASTE_CONST(2.6539450910485349e-6) + var_chaste_interface__membrane__V) * (CHASTE_CONST(0.0096486999999999996) * CHASTE_MATH::Pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8) - CHASTE_MATH::Log(NV_Ith_S(mParameters, 2) / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (CHASTE_CONST(0.36499999999999999) * var_chaste_interface__sodium_current_h2_gate__h2 + CHASTE_CONST(0.63500000000000001) * var_chaste_interface__sodium_current_h1_gate__h1) * NV_Ith_S(mParameters, 2) * NV_Ith_S(mParameters, 5) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) + CHASTE_CONST(0.0096486999999999996) * CHASTE_MATH::Pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8) - CHASTE_MATH::Log(NV_Ith_S(mParameters, 2) / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (CHASTE_CONST(0.36499999999999999) * var_chaste_interface__sodium_current_h2_gate__h2 + CHASTE_CONST(0.63500000000000001) * var_chaste_interface__sodium_current_h1_gate__h1) * NV_Ith_S(mParameters, 2) * NV_Ith_S(mParameters, 5) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) - CHASTE_CONST(0.0096486999999999996) * CHASTE_MATH::Pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8) - CHASTE_MATH::Log(NV_Ith_S(mParameters, 2) / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (CHASTE_CONST(0.36499999999999999) * var_chaste_interface__sodium_current_h2_gate__h2 + CHASTE_CONST(0.63500000000000001) * var_chaste_interface__sodium_current_h1_gate__h1) * NV_Ith_S(mParameters, 2) * NV_Ith_S(mParameters, 5) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) : (CHASTE_CONST(3635.606491085292) * CHASTE_MATH::Pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + CHASTE_MATH::Exp(CHASTE_CONST(0.037679754693225945) * var_chaste_interface__membrane__V - CHASTE_MATH::Log(NV_Ith_S(mParameters, 2) / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (CHASTE_CONST(0.36499999999999999) * var_chaste_interface__sodium_current_h2_gate__h2 + CHASTE_CONST(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 + CHASTE_MATH::Exp(CHASTE_CONST(0.037679754693225945) * var_chaste_interface__membrane__V)))); // picoA + const double var_sodium_current__i_Na_converted = CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * var_sodium_current__i_Na / var_membrane__Cm_converted; // uA_per_cm2 + const double var_sodium_potassium_pump__i_NaK_max = CHASTE_CONST(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 var_sodium_potassium_pump__i_p = CHASTE_CONST(1.6000000000000001) * CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, CHASTE_CONST(1.5)) * var_chaste_interface__cleft_space_ion_concentrations__K_c * var_sodium_potassium_pump__i_NaK_max / ((CHASTE_CONST(1.5) + CHASTE_MATH::Exp(-CHASTE_CONST(1.5) - CHASTE_CONST(0.025000000000000001) * var_chaste_interface__membrane__V)) * (CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, CHASTE_CONST(1.5)) + CHASTE_MATH::Pow(var_sodium_potassium_pump__k_NaK_Na, CHASTE_CONST(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 + CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * var_Ca_independent_transient_outward_K_current__i_sus + CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * var_Ca_independent_transient_outward_K_current__i_to + CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * var_T_type_Ca_channel__i_Ca_T + CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * var_background_currents__i_B_Ca + CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * var_background_currents__i_B_Na + CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * var_sarcolemmal_calcium_pump_current__i_CaP + CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * 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) @@ -235,7 +237,7 @@ { // Inputs: // Time units: millisecond - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -296,171 +298,171 @@ // 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__I_up_max = CHASTE_CONST(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_Ca_handling_by_the_SR__Vol_rel = CHASTE_CONST(4.3999999999999997e-8); // nanolitre + const double var_Ca_handling_by_the_SR__Vol_up = CHASTE_CONST(3.9690000000000001e-7); // nanolitre + const double var_Ca_handling_by_the_SR__k_F3 = CHASTE_CONST(0.81499999999999995); // per_second + const double var_Ca_handling_by_the_SR__k_cyca = CHASTE_CONST(0.00029999999999999997); // millimolar + const double var_Ca_handling_by_the_SR__k_rel = CHASTE_CONST(0.00029999999999999997); // millimolar + const double var_Ca_handling_by_the_SR__k_srca = CHASTE_CONST(0.5); // millimolar + const double var_Ca_handling_by_the_SR__k_xcs = CHASTE_CONST(0.40000000000000002); // dimensionless + const double var_Ca_handling_by_the_SR__tau_tr = CHASTE_CONST(0.01); // second + const double var_Ca_independent_transient_outward_K_current__g_to = CHASTE_CONST(0.050001999999999998); // nanoS + const double d_dt_chaste_interface_var_Ca_handling_by_the_SR__O_Calse = CHASTE_CONST(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_Na_Ca_ion_exchanger_current__d_NaCa = CHASTE_CONST(0.00029999999999999997); // per_millimolar_4 + const double var_Na_Ca_ion_exchanger_current__gamma = CHASTE_CONST(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_T_type_Ca_channel__g_Ca_T = CHASTE_CONST(0.0060000000000000001); // nanoS + const double var_background_currents__g_B_Ca = CHASTE_CONST(3.1000000000000001e-5); // nanoS + const double var_background_currents__g_B_Na = CHASTE_CONST(6.3999999999999997e-5); // nanoS + const double var_cleft_space_ion_concentrations__Vol_c = CHASTE_CONST(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__Mg_i = CHASTE_CONST(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 d_dt_chaste_interface_var_intracellular_Ca_buffering__O_TMgMg = CHASTE_CONST(0.001) * var_intracellular_Ca_buffering__O_TMgMg_orig_deriv; // 1 / millisecond + const double var_Ca_handling_by_the_SR__i_rel = CHASTE_MATH::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) / CHASTE_MATH::Pow((CHASTE_CONST(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 - CHASTE_MATH::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 = CHASTE_CONST(33.960000000000001) + CHASTE_CONST(339.60000000000002) * CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Ca_i, 4) / CHASTE_MATH::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 d_dt_chaste_interface_var_Ca_handling_by_the_SR__F3 = CHASTE_CONST(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 d_dt_chaste_interface_var_intracellular_Ca_buffering__O_C = CHASTE_CONST(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 d_dt_chaste_interface_var_intracellular_Ca_buffering__O_TC = CHASTE_CONST(0.001) * var_intracellular_Ca_buffering__O_TC_orig_deriv; // 1 / millisecond + const double var_intracellular_Ca_buffering__dOTMgCdt = -CHASTE_CONST(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 d_dt_chaste_interface_var_intracellular_Ca_buffering__O_TMgC = CHASTE_CONST(0.001) * var_intracellular_Ca_buffering__O_TMgC_orig_deriv; // 1 / millisecond + const double var_intracellular_ion_concentrations__Vol_Ca = CHASTE_CONST(5.8839999999999999e-6); // nanolitre + const double var_intracellular_ion_concentrations__Vol_i = CHASTE_CONST(1.26e-5); // nanolitre + const double var_inward_rectifier__KmK1 = CHASTE_CONST(0.58999999999999997); // millimolar + const double var_inward_rectifier__shiftK1 = -CHASTE_CONST(3.6000000000000001); // millivolt + const double var_inward_rectifier__steepK1 = CHASTE_CONST(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_Ca_handling_by_the_SR__Ca_rel_orig_deriv = -31 * var_Ca_handling_by_the_SR__O_Calse_orig_deriv + CHASTE_CONST(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 = CHASTE_CONST(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 = CHASTE_CONST(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 = CHASTE_CONST(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_independent_transient_outward_K_current__E_K = var_membrane__R * var_membrane__T * CHASTE_MATH::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 = CHASTE_CONST(0.5) * var_membrane__R * var_membrane__T * CHASTE_MATH::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 * CHASTE_MATH::Exp(-CHASTE_CONST(1.6000000000000001) + CHASTE_CONST(0.080000000000000002) * var_chaste_interface__membrane__V) + CHASTE_CONST(203.80000000000001) * CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Ca_i, 4) / CHASTE_MATH::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__i_sus = (((var_environment__CT == 1) && (var_environment__PM == 0)) ? (CHASTE_CONST(0.098000000000000004) + CHASTE_CONST(0.0014) * var_chaste_interface__membrane__V) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (CHASTE_CONST(0.16799999999999998) + CHASTE_CONST(0.0023999999999999998) * var_chaste_interface__membrane__V) : (CHASTE_CONST(0.070000000000000007) + CHASTE_CONST(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)) ? (CHASTE_CONST(0.20000000000000001) * (CHASTE_CONST(0.40000000000000002) + CHASTE_CONST(0.59999999999999998) * CHASTE_MATH::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) * (CHASTE_CONST(0.58999999999999997) * CHASTE_MATH::Pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s1_gate__s1, 3) + CHASTE_CONST(0.40999999999999998) * CHASTE_MATH::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)) ? (CHASTE_CONST(0.34999999999999998) * (CHASTE_CONST(0.40000000000000002) + CHASTE_CONST(0.59999999999999998) * CHASTE_MATH::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) * (CHASTE_CONST(0.58999999999999997) * CHASTE_MATH::Pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s1_gate__s1, 3) + CHASTE_CONST(0.40999999999999998) * CHASTE_MATH::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) : ((CHASTE_CONST(0.40000000000000002) + CHASTE_CONST(0.59999999999999998) * CHASTE_MATH::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) * (CHASTE_CONST(0.58999999999999997) * CHASTE_MATH::Pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s1_gate__s1, 3) + CHASTE_CONST(0.40999999999999998) * CHASTE_MATH::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 = CHASTE_CONST(386.60000000000002) * CHASTE_MATH::Exp(CHASTE_CONST(0.083333333333333329) * var_chaste_interface__membrane__V); // per_second + const double var_Ca_independent_transient_outward_K_current_r_gate__beta_r = CHASTE_CONST(8.0109999999999992) * CHASTE_MATH::Exp(-CHASTE_CONST(0.1388888888888889) * var_chaste_interface__membrane__V); // per_second + const double var_Ca_independent_transient_outward_K_current_r_gate__r_infinity = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.6628794603230959) - CHASTE_CONST(0.17752529735487307) * var_chaste_interface__membrane__V)); // dimensionless + const double var_Ca_independent_transient_outward_K_current_r_gate__tau_r = CHASTE_CONST(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_infinity = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(4.0070821529745047) + CHASTE_CONST(0.14164305949008499) * var_chaste_interface__membrane__V)); // dimensionless + const double var_Ca_independent_transient_outward_K_current_s1_gate__tau_s1 = CHASTE_CONST(0.020400000000000001) + CHASTE_CONST(0.54659999999999997) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(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_infinity = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(4.0070821529745047) + CHASTE_CONST(0.14164305949008499) * var_chaste_interface__membrane__V)); // dimensionless + const double var_Ca_independent_transient_outward_K_current_s2_gate__tau_s2 = CHASTE_CONST(5.75) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(327.99999999999994) + 10 * var_chaste_interface__membrane__V)) + CHASTE_CONST(0.45000000000000001) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(0.96921975662133131) - CHASTE_CONST(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_infinity = CHASTE_CONST(0.39975990396158467) + CHASTE_CONST(0.60024009603841544) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.8506208911614319) + CHASTE_CONST(0.036523009495982472) * var_chaste_interface__membrane__V)); // dimensionless + const double var_Ca_independent_transient_outward_K_current_s3_gate__tau_s3 = CHASTE_CONST(0.5) + CHASTE_CONST(7.5) / (1 + CHASTE_MATH::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 d_dt_chaste_interface_var_Ca_handling_by_the_SR__F1 = CHASTE_CONST(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 = CHASTE_CONST(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 = CHASTE_CONST(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 = CHASTE_CONST(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 = CHASTE_CONST(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 = CHASTE_CONST(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 + CHASTE_MATH::Exp(CHASTE_CONST(1.9166666666666667) - CHASTE_CONST(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)) ? (CHASTE_CONST(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)) ? (CHASTE_CONST(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__alpha_d_L = (((var_chaste_interface__membrane__V >= -CHASTE_CONST(10.000000480800001)) && (var_chaste_interface__membrane__V <= -CHASTE_CONST(9.9999995191999993))) ? (CHASTE_CONST(2.4040000000391526e-5) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(1.0000000000162864e-7))) + CHASTE_CONST(1039933.4442576389) * (CHASTE_CONST(10.000000480800001) + var_chaste_interface__membrane__V) * (-CHASTE_CONST(2.4040000000391526e-5) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(1.0000000000162864e-7))) - CHASTE_CONST(2.4039999999697637e-5) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999998742257e-8))))) : (-50 * (10 + var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.0798668885191347) - CHASTE_CONST(0.20798668885191349) * var_chaste_interface__membrane__V)))) + (((var_chaste_interface__membrane__V >= -CHASTE_CONST(45.000000249999999)) && (var_chaste_interface__membrane__V <= -CHASTE_CONST(44.999999750000001))) ? (CHASTE_CONST(4.1799999996561256e-6) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999991773334e-8))) + CHASTE_CONST(1999999.9999424887) * (CHASTE_CONST(45.000000249999999) + var_chaste_interface__membrane__V) * (-CHASTE_CONST(4.1800000005842713e-6) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.000000000139778e-7))) - CHASTE_CONST(4.1799999996561256e-6) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999991773334e-8))))) : (-CHASTE_CONST(16.719999999999999) * (45 + var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(-18 - CHASTE_CONST(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 >= -CHASTE_CONST(5.0000002500000003)) && (var_chaste_interface__membrane__V <= -CHASTE_CONST(4.9999997499999997))) ? (-CHASTE_CONST(1.1200000000011203e-6) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.0000000000010001e-7))) + CHASTE_CONST(1999999.9999979998) * (CHASTE_CONST(5.0000002500000003) + var_chaste_interface__membrane__V) * (CHASTE_CONST(1.1200000000011203e-6) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(1.0000000000010001e-7))) + CHASTE_CONST(1.1200000000011203e-6) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.0000000000010001e-7))))) : (CHASTE_CONST(4.4800000000000004) * (5 + var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(2 + CHASTE_CONST(0.40000000000000002) * var_chaste_interface__membrane__V)))); // per_second + const double var_L_type_Ca_channel_d_L_gate__d_L_infinity = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.14393939393939395) - CHASTE_CONST(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 d_dt_chaste_interface_var_L_type_Ca_channel_d_L_gate__d_L = CHASTE_CONST(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__alpha_f_L = (((var_chaste_interface__membrane__V >= -CHASTE_CONST(18.000000400000001)) && (var_chaste_interface__membrane__V <= -CHASTE_CONST(17.999999599999999))) ? (-CHASTE_CONST(3.3960000000976542e-6) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.0000000000287557e-7))) + CHASTE_CONST(1249999.9999640554) * (CHASTE_CONST(18.000000400000001) + var_chaste_interface__membrane__V) * (CHASTE_CONST(3.3960000000976542e-6) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(1.0000000000287557e-7))) + CHASTE_CONST(3.3960000000976542e-6) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.0000000000287557e-7))))) : (CHASTE_CONST(8.4900000000000002) * (18 + var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(4.5) + CHASTE_CONST(0.25) * var_chaste_interface__membrane__V)))); // per_second + const double var_L_type_Ca_channel_f_L_gate__beta_f_L = CHASTE_CONST(67.921999999999997) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(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 d_dt_chaste_interface_var_L_type_Ca_channel_f_L_gate__f_L = CHASTE_CONST(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 = (CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * NV_Ith_S(mParameters, 1) * CHASTE_MATH::Exp(var_Na_Ca_ion_exchanger_current__gamma * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - CHASTE_MATH::Pow(NV_Ith_S(mParameters, 2), 3) * var_chaste_interface__intracellular_ion_concentrations__Ca_i * CHASTE_MATH::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 + (CHASTE_MATH::Pow(NV_Ith_S(mParameters, 2), 3) * var_chaste_interface__intracellular_ion_concentrations__Ca_i + CHASTE_MATH::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__E0_d_T = CHASTE_CONST(23.300000000000001) + var_chaste_interface__membrane__V; // millivolt + const double var_T_type_Ca_channel_d_T_gate__alpha_d_T = CHASTE_CONST(674.173) * CHASTE_MATH::Exp(CHASTE_CONST(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 = CHASTE_CONST(674.173) * CHASTE_MATH::Exp(-CHASTE_CONST(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 + CHASTE_MATH::Exp(CHASTE_CONST(0.049180327868852458) - CHASTE_CONST(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 d_dt_chaste_interface_var_T_type_Ca_channel_d_T_gate__d_T = CHASTE_CONST(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__alpha_f_T = CHASTE_CONST(9.6370000000000005) * CHASTE_MATH::Exp(-CHASTE_CONST(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 = CHASTE_CONST(9.6370000000000005) * CHASTE_MATH::Exp(CHASTE_CONST(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 d_dt_chaste_interface_var_T_type_Ca_channel_f_T_gate__f_T = CHASTE_CONST(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)) ? (CHASTE_CONST(2.0000000000000002e-5) * var_chaste_interface__membrane__V - CHASTE_CONST(2.0000000000000002e-5) * var_background_currents__E_Ca) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (CHASTE_CONST(3.0000000000000001e-5) * var_chaste_interface__membrane__V - CHASTE_CONST(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__alpha_p_a = 9 * CHASTE_MATH::Exp(CHASTE_CONST(0.03941508020968823) * var_chaste_interface__membrane__V); // per_second + const double var_delayed_rectifier_K_current_pa_gate__beta_p_a = CHASTE_CONST(1.3) * CHASTE_MATH::Exp(-CHASTE_CONST(0.076769537847382163) * var_chaste_interface__membrane__V); // per_second + const double var_delayed_rectifier_K_current_pa_gate__p_a_infinity = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.68918918918918914) - CHASTE_CONST(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 d_dt_chaste_interface_var_delayed_rectifier_K_current_pa_gate__p_a = CHASTE_CONST(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 * CHASTE_MATH::Exp(-CHASTE_CONST(0.018299935950224173) * var_chaste_interface__membrane__V); // per_second + const double var_delayed_rectifier_K_current_pi_gate__beta_p_i = 656 * CHASTE_MATH::Exp(CHASTE_CONST(0.009420009985210585) * var_chaste_interface__membrane__V); // per_second + const double var_delayed_rectifier_K_current_pi_gate__p_i_infinity = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(2.539728728905752) + CHASTE_CONST(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 d_dt_chaste_interface_var_delayed_rectifier_K_current_pi_gate__p_i = CHASTE_CONST(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 = CHASTE_CONST(1.6599999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(0.014398433450440593) * var_chaste_interface__membrane__V); // per_second + const double var_delayed_rectifier_K_current_z_gate__beta_z = CHASTE_CONST(0.29999999999999999) * CHASTE_MATH::Exp(-CHASTE_CONST(0.045816915605241454) * var_chaste_interface__membrane__V); // per_second + const double var_delayed_rectifier_K_current_z_gate__tau_z = CHASTE_CONST(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 + CHASTE_MATH::Exp(CHASTE_CONST(0.065217391304347824) - CHASTE_CONST(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 d_dt_chaste_interface_var_delayed_rectifier_K_current_z_gate__z = CHASTE_CONST(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 * CHASTE_MATH::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 + CHASTE_MATH::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))) * CHASTE_MATH::Pow((var_chaste_interface__cleft_space_ion_concentrations__K_c + var_inward_rectifier__KmK1), 3))) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (CHASTE_CONST(2.5) * CHASTE_MATH::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 + CHASTE_MATH::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))) * CHASTE_MATH::Pow((var_chaste_interface__cleft_space_ion_concentrations__K_c + var_inward_rectifier__KmK1), 3))) : (CHASTE_MATH::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 + CHASTE_MATH::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))) * CHASTE_MATH::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 = CHASTE_CONST(0.0095090000000000001); // picoA + const double var_sarcolemmal_calcium_pump_current__k_CaP = CHASTE_CONST(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_intracellular_ion_concentrations__Ca_i_orig_deriv = -CHASTE_CONST(0.044999999999999998) * var_intracellular_Ca_buffering__dOCdt - CHASTE_CONST(0.080000000000000002) * var_intracellular_Ca_buffering__dOTCdt - CHASTE_CONST(0.16) * var_intracellular_Ca_buffering__dOTMgCdt + CHASTE_CONST(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 = CHASTE_CONST(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 * CHASTE_MATH::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)) ? (CHASTE_CONST(2.0000000000000002e-5) * var_chaste_interface__membrane__V - CHASTE_CONST(2.0000000000000002e-5) * var_sodium_current__E_Na) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (CHASTE_CONST(3.0000000000000001e-5) * var_chaste_interface__membrane__V - CHASTE_CONST(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 = CHASTE_CONST(44.899999999999999) * CHASTE_MATH::Exp(-CHASTE_CONST(12.010771992818672) - CHASTE_CONST(0.17953321364452424) * var_chaste_interface__membrane__V); // per_second + const double var_sodium_current_h1_gate__beta_h = 1491 / (1 + CHASTE_CONST(323.30000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(7.333333333333333) - CHASTE_CONST(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__tau_h1 = CHASTE_CONST(0.00014999999999999999) + CHASTE_CONST(0.029999999999999999) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(6.666666666666667) + CHASTE_CONST(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 d_dt_chaste_interface_var_sodium_current_h1_gate__h1 = CHASTE_CONST(0.001) * var_sodium_current_h1_gate__h1_orig_deriv; // 1 / millisecond + const double var_sodium_current_h2_gate__tau_h2 = CHASTE_CONST(0.00044999999999999999) + CHASTE_CONST(0.12) / (1 + CHASTE_MATH::Exp(30 + CHASTE_CONST(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 d_dt_chaste_interface_var_sodium_current_h2_gate__h2 = CHASTE_CONST(0.001) * var_sodium_current_h2_gate__h2_orig_deriv; // 1 / millisecond + const double var_sodium_current_m_gate__E0_m = CHASTE_CONST(44.399999999999999) + var_chaste_interface__membrane__V; // millivolt + const double var_sodium_current_m_gate__alpha_m = (((var_chaste_interface__membrane__V >= -CHASTE_CONST(44.400001267299999)) && (var_chaste_interface__membrane__V <= -CHASTE_CONST(44.399998732699999))) ? (CHASTE_CONST(0.00058295799999830145) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999708629e-8))) + CHASTE_CONST(394539.57232025318) * (CHASTE_CONST(44.400001267299999) + var_chaste_interface__membrane__V) * (-CHASTE_CONST(0.00058295799999830145) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999708629e-8))) - CHASTE_CONST(0.00058295799999830145) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999708629e-8))))) : (-460 * (CHASTE_CONST(44.399999999999999) + var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.5035114021936398) - CHASTE_CONST(0.078907914463820727) * var_chaste_interface__membrane__V)))); // per_second + const double var_sodium_current_m_gate__beta_m = 18400 * CHASTE_MATH::Exp(-CHASTE_CONST(0.078907914463820727) * var_sodium_current_m_gate__E0_m); // per_second + const double var_sodium_current__i_Na = (((var_chaste_interface__membrane__V >= -CHASTE_CONST(2.6539450910485349e-6)) && (var_chaste_interface__membrane__V <= CHASTE_CONST(2.6539450910485349e-6))) ? (CHASTE_CONST(188398.77346612973) * (CHASTE_CONST(2.6539450910485349e-6) + var_chaste_interface__membrane__V) * (CHASTE_CONST(0.0096486999999999996) * CHASTE_MATH::Pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8) - CHASTE_MATH::Log(NV_Ith_S(mParameters, 2) / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (CHASTE_CONST(0.36499999999999999) * var_chaste_interface__sodium_current_h2_gate__h2 + CHASTE_CONST(0.63500000000000001) * var_chaste_interface__sodium_current_h1_gate__h1) * NV_Ith_S(mParameters, 2) * NV_Ith_S(mParameters, 5) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) + CHASTE_CONST(0.0096486999999999996) * CHASTE_MATH::Pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8) - CHASTE_MATH::Log(NV_Ith_S(mParameters, 2) / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (CHASTE_CONST(0.36499999999999999) * var_chaste_interface__sodium_current_h2_gate__h2 + CHASTE_CONST(0.63500000000000001) * var_chaste_interface__sodium_current_h1_gate__h1) * NV_Ith_S(mParameters, 2) * NV_Ith_S(mParameters, 5) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) - CHASTE_CONST(0.0096486999999999996) * CHASTE_MATH::Pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8) - CHASTE_MATH::Log(NV_Ith_S(mParameters, 2) / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (CHASTE_CONST(0.36499999999999999) * var_chaste_interface__sodium_current_h2_gate__h2 + CHASTE_CONST(0.63500000000000001) * var_chaste_interface__sodium_current_h1_gate__h1) * NV_Ith_S(mParameters, 2) * NV_Ith_S(mParameters, 5) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) : (CHASTE_CONST(3635.606491085292) * CHASTE_MATH::Pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + CHASTE_MATH::Exp(CHASTE_CONST(0.037679754693225945) * var_chaste_interface__membrane__V - CHASTE_MATH::Log(NV_Ith_S(mParameters, 2) / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (CHASTE_CONST(0.36499999999999999) * var_chaste_interface__sodium_current_h2_gate__h2 + CHASTE_CONST(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 + CHASTE_MATH::Exp(CHASTE_CONST(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 d_dt_chaste_interface_var_sodium_current_m_gate__m = CHASTE_CONST(0.001) * var_sodium_current_m_gate__m_orig_deriv; // 1 / millisecond + const double var_sodium_potassium_pump__i_NaK_max = CHASTE_CONST(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_sodium_potassium_pump__i_p = CHASTE_CONST(1.6000000000000001) * CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, CHASTE_CONST(1.5)) * var_chaste_interface__cleft_space_ion_concentrations__K_c * var_sodium_potassium_pump__i_NaK_max / ((CHASTE_CONST(1.5) + CHASTE_MATH::Exp(-CHASTE_CONST(1.5) - CHASTE_CONST(0.025000000000000001) * var_chaste_interface__membrane__V)) * (CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, CHASTE_CONST(1.5)) + CHASTE_MATH::Pow(var_sodium_potassium_pump__k_NaK_Na, CHASTE_CONST(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 d_dt_chaste_interface_var_cleft_space_ion_concentrations__K_c = CHASTE_CONST(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 d_dt_chaste_interface_var_intracellular_ion_concentrations__K_i = CHASTE_CONST(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 + const double d_dt_chaste_interface_var_intracellular_ion_concentrations__Na_i = CHASTE_CONST(0.001) * var_intracellular_ion_concentrations__Na_i_orig_deriv; // millimolar / millisecond if (mSetVoltageDerivativeToZero) { @@ -468,11 +470,11 @@ } 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__Cm_converted = CHASTE_CONST(0.001) * NV_Ith_S(mParameters, 4); // uF + const double var_membrane__i_Stim_converted = CHASTE_STIM(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 / CHASTE_CAP(); // 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 + d_dt_chaste_interface_var_membrane__V = CHASTE_CONST(0.001) * var_membrane__V_orig_deriv; // millivolt / millisecond } NV_Ith_S(rDY,0) = d_dt_chaste_interface_var_membrane__V; @@ -508,7 +510,7 @@ 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)); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -564,455 +566,455 @@ // 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_x0 = CHASTE_CONST(0.083333333333333329) * var_chaste_interface__membrane__V; + const double var_x1 = CHASTE_MATH::Exp(CHASTE_CONST(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_x7 = CHASTE_MATH::Exp(CHASTE_CONST(0.016955889611951675) * var_chaste_interface__membrane__V); + const double var_x8 = CHASTE_MATH::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_x10 = CHASTE_MATH::Exp(-CHASTE_CONST(0.02072386508127427) * var_chaste_interface__membrane__V); + const double var_x11 = CHASTE_MATH::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_x14 = 1 + CHASTE_CONST(0.00029999999999999997) * var_x12 + CHASTE_CONST(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_x17 = var_x16 * (CHASTE_CONST(0.016955889611951675) * var_x9 + CHASTE_CONST(0.02072386508127427) * var_x13); + const double var_x18 = CHASTE_MATH::Pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s3_gate__s3, 6); + const double var_x19 = CHASTE_CONST(0.00400016) + CHASTE_CONST(0.0060002399999999996) * var_x18; + const double var_x20 = CHASTE_CONST(0.58999999999999997) * CHASTE_MATH::Pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s1_gate__s1, 3) + CHASTE_CONST(0.40999999999999998) * CHASTE_MATH::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_x25 = CHASTE_MATH::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_x27 = CHASTE_MATH::Log(var_x26 * var_chaste_interface__cleft_space_ion_concentrations__K_c); + const double var_x28 = CHASTE_MATH::Exp(CHASTE_CONST(0.18895643383558949) + CHASTE_CONST(0.052487898287663745) * var_chaste_interface__membrane__V - CHASTE_CONST(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_x31 = CHASTE_CONST(0.58999999999999997) + var_chaste_interface__cleft_space_ion_concentrations__K_c; + const double var_x32 = CHASTE_MATH::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_x36 = (-90 + CHASTE_CONST(1.8) * var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 3); + const double var_x37 = CHASTE_CONST(0.083333333333333329) * var_x1 / CHASTE_MATH::Pow(var_x2, 2); + const double var_x38 = CHASTE_MATH::Exp(-CHASTE_CONST(1.5) - CHASTE_CONST(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_x41 = CHASTE_MATH::Pow((1 + CHASTE_CONST(0.66666666666666663) * var_x38), (-2)); + const double var_x42 = CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, CHASTE_CONST(1.5)); + const double var_x43 = 1 / (CHASTE_CONST(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_x46 = -CHASTE_CONST(26.53945091048535) * var_x27 + var_chaste_interface__membrane__V; + const double var_x47 = CHASTE_MATH::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_x50 = 1 / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(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_x53 = CHASTE_MATH::Log(var_x52); + const double var_x54 = CHASTE_MATH::Exp(CHASTE_CONST(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_x56 = CHASTE_CONST(0.36499999999999999) * var_chaste_interface__sodium_current_h2_gate__h2 + CHASTE_CONST(0.63500000000000001) * var_chaste_interface__sodium_current_h1_gate__h1; + const double var_x57 = CHASTE_MATH::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_x61 = CHASTE_CONST(1817.803245542646) * var_x60; + const double var_x62 = 1 / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8))); + const double var_x63 = CHASTE_MATH::Exp(-CHASTE_CONST(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_x65 = (var_chaste_interface__membrane__V >= -CHASTE_CONST(2.6539450910485349e-6)) && (var_chaste_interface__membrane__V <= CHASTE_CONST(2.6539450910485349e-6)); + const double var_x66 = CHASTE_CONST(0.037679754693225945) * var_chaste_interface__membrane__V; + const double var_x67 = CHASTE_MATH::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_x70 = CHASTE_MATH::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_x73 = CHASTE_CONST(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_x75 = ((var_x65) ? (var_x55 * var_x61 + var_x61 * var_x64) : (var_x73 * var_x74 + CHASTE_CONST(3635.606491085292) * var_x60 * var_x72 - var_x67 * var_x71 * var_x73 / CHASTE_MATH::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_x77 = CHASTE_CONST(0.001) * var_x76; + const double var_x78 = CHASTE_CONST(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_x81 = CHASTE_MATH::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_x83 = CHASTE_MATH::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_x87 = CHASTE_CONST(0.5) + CHASTE_CONST(188398.77346612973) * var_chaste_interface__membrane__V; + const double var_x88 = var_x56 * var_x58 * CHASTE_MATH::Pow(var_chaste_interface__sodium_current_m_gate__m, 2); + const double var_x89 = CHASTE_CONST(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_x92 = ((var_x65) ? (-var_x90 + var_x87 * (var_x90 + var_x55 * var_x89)) : (CHASTE_CONST(10906.819473255875) * var_x88 * var_x91)); + const double var_x93 = CHASTE_CONST(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_x96 = ((var_x65) ? (-var_x94 + var_x87 * (var_x94 + var_x55 * var_x93)) : (CHASTE_CONST(2308.6101218391605) * var_x95)); + const double var_x97 = CHASTE_CONST(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_x99 = ((var_x65) ? (-var_x98 + var_x87 * (var_x98 + var_x55 * var_x97)) : (CHASTE_CONST(1326.9963692461315) * var_x95)); + const double var_x100 = CHASTE_CONST(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_x102 = CHASTE_CONST(0.001) * var_chaste_interface__L_type_Ca_channel_d_L_gate__d_L; + const double var_x103 = CHASTE_CONST(0.001) * var_chaste_interface__T_type_Ca_channel_f_T_gate__f_T; + const double var_x104 = var_x76 * (-CHASTE_CONST(0.22800000000000001) + CHASTE_CONST(0.0060000000000000001) * var_chaste_interface__membrane__V); + const double var_x105 = CHASTE_CONST(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_x107 = CHASTE_MATH::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_x110 = CHASTE_MATH::Pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s2_gate__s2, 2); + const double var_x111 = var_x21 * CHASTE_MATH::Pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s3_gate__s3, 5); + const double var_x112 = CHASTE_CONST(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_x114 = CHASTE_CONST(0.001) * var_chaste_interface__delayed_rectifier_K_current_pa_gate__p_a; + const double var_x115 = CHASTE_MATH::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_x118 = 1 / (CHASTE_CONST(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_x121 = var_x120 * CHASTE_MATH::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_x123 = CHASTE_MATH::Pow((1 + CHASTE_CONST(0.027410122234342148) * var_x42), (-2)); + const double var_x124 = CHASTE_MATH::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_x127 = CHASTE_CONST(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_x129 = ((var_x65) ? (-var_x128 + var_x87 * (var_x128 + var_x127 * var_x50 * var_x54)) : (CHASTE_CONST(3635.606491085292) * var_x126 * var_x74 * var_chaste_interface__membrane__V)); + const double var_x130 = CHASTE_CONST(26.53945091048535) * var_x5; + const double var_x131 = CHASTE_CONST(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_x135 = CHASTE_CONST(26.53945091048535) * var_x134; + const double var_x136 = CHASTE_MATH::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_x138 = var_x25 * var_x30 * NV_Ith_S(mParameters, 6) / CHASTE_MATH::Pow(var_x31, 4); + const double var_x139 = CHASTE_MATH::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_x141 = (CHASTE_CONST(0.079263098651550096) - CHASTE_CONST(0.001585261973031002) * var_chaste_interface__membrane__V) * NV_Ith_S(mParameters, 3); + const double var_x142 = 1 / (CHASTE_CONST(1.3999999999999999) + CHASTE_CONST(0.80000000000000004) * var_chaste_interface__Ca_handling_by_the_SR__Ca_up + CHASTE_CONST(3333.3333333333335) * var_chaste_interface__intracellular_ion_concentrations__Ca_i); + const double var_x143 = CHASTE_MATH::Pow((CHASTE_CONST(0.00041999999999999996) + CHASTE_CONST(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 = CHASTE_CONST(3333.3333333333335) * var_chaste_interface__intracellular_ion_concentrations__Ca_i - CHASTE_CONST(0.32000000000000006) * var_chaste_interface__Ca_handling_by_the_SR__Ca_up; + const double var_x145 = CHASTE_MATH::Pow(var_chaste_interface__Ca_handling_by_the_SR__F2, 2); + const double var_x146 = CHASTE_CONST(0.25) + var_chaste_interface__Ca_handling_by_the_SR__F2; + const double var_x147 = CHASTE_MATH::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_x150 = CHASTE_CONST(0.00088070109612833447) * var_x149; + const double var_x151 = CHASTE_CONST(0.00020079984991726025) - CHASTE_CONST(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_x155 = var_x145 * NV_Ith_S(mParameters, 0) / CHASTE_MATH::Pow(var_x146, 3); + const double var_x156 = 1 / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999708629e-8))); + const double var_x157 = 1 / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999708629e-8))); + const double var_x158 = (var_chaste_interface__membrane__V >= -CHASTE_CONST(44.400001267299999)) && (var_chaste_interface__membrane__V <= -CHASTE_CONST(44.399998732699999)); + const double var_x159 = CHASTE_MATH::Exp(-CHASTE_CONST(3.5035114021936398) - CHASTE_CONST(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_x162 = CHASTE_CONST(44.399999999999999) + var_chaste_interface__membrane__V; + const double var_x163 = CHASTE_CONST(0.00058295799999830145) * var_x156; + const double var_x164 = CHASTE_MATH::Exp(-CHASTE_CONST(7.333333333333333) - CHASTE_CONST(0.077519379844961239) * var_chaste_interface__membrane__V); + const double var_x165 = 1 / (1 + CHASTE_CONST(323.30000000000001) * var_x164); + const double var_x166 = CHASTE_MATH::Exp(-CHASTE_CONST(12.010771992818672) - CHASTE_CONST(0.17953321364452424) * var_chaste_interface__membrane__V); + const double var_x167 = 1 / (1491 * var_x165 + CHASTE_CONST(44.899999999999999) * var_x166); + const double var_x168 = CHASTE_CONST(8.0610412926391373) * var_x166; + const double var_x169 = -var_x167 * var_x168 + CHASTE_CONST(2.019719479407183e-5) * var_x166 * (var_x168 - CHASTE_CONST(0.35750508923240704) * var_x164 / CHASTE_MATH::Pow((CHASTE_CONST(0.0030931023816888337) + var_x164), 2)) / CHASTE_MATH::Pow((var_x165 + CHASTE_CONST(0.030114017437961098) * var_x166), 2); + const double var_x170 = CHASTE_MATH::Exp(CHASTE_CONST(6.666666666666667) + CHASTE_CONST(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_x173 = CHASTE_CONST(0.001) / (CHASTE_CONST(0.00014999999999999999) + CHASTE_CONST(0.029999999999999999) * var_x172); + const double var_x174 = -CHASTE_CONST(44.899999999999999) * var_x166 * var_x167; + const double var_x175 = CHASTE_MATH::Exp(30 + CHASTE_CONST(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_x178 = CHASTE_CONST(0.001) / (CHASTE_CONST(0.00044999999999999999) + CHASTE_CONST(0.12) * var_x177); + const double var_x179 = 1 / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(1.0000000000010001e-7))); + const double var_x180 = 1 / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.0000000000010001e-7))); + const double var_x181 = (var_chaste_interface__membrane__V >= -CHASTE_CONST(5.0000002500000003)) && (var_chaste_interface__membrane__V <= -CHASTE_CONST(4.9999997499999997)); + const double var_x182 = CHASTE_CONST(0.40000000000000002) * var_chaste_interface__membrane__V; + const double var_x183 = CHASTE_MATH::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_x187 = 1 / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.000000000139778e-7))); + const double var_x188 = 1 / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999991773334e-8))); + const double var_x189 = CHASTE_CONST(8.3600000009281459) * var_x187 + CHASTE_CONST(8.359999999071853) * var_x188; + const double var_x190 = 1 / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999998742257e-8))); + const double var_x191 = 1 / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(1.0000000000162864e-7))); + const double var_x192 = CHASTE_CONST(24.999999999639201) * var_x190 + CHASTE_CONST(25.000000000360799) * var_x191; + const double var_x193 = var_chaste_interface__membrane__V >= -CHASTE_CONST(45.000000249999999); + const double var_x194 = var_chaste_interface__membrane__V >= -CHASTE_CONST(10.000000480800001); + const double var_x195 = var_chaste_interface__membrane__V <= -CHASTE_CONST(44.999999750000001); + const double var_x196 = var_chaste_interface__membrane__V <= -CHASTE_CONST(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_x198 = CHASTE_MATH::Exp(-CHASTE_CONST(2.0798668885191347) - CHASTE_CONST(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_x202 = var_x200 + CHASTE_CONST(10.399334442595674) * var_x198 * var_x201 / CHASTE_MATH::Pow(var_x199, 2); const double var_x203 = (var_x193) && (var_x195); - const double var_x204 = exp(-18 - var_x182); + const double var_x204 = CHASTE_MATH::Exp(-18 - var_x182); const double var_x205 = -1 + var_x204; - const double var_x206 = 16.719999999999999 / var_x205; + const double var_x206 = CHASTE_CONST(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_x208 = var_x206 + CHASTE_CONST(6.6879999999999997) * var_x204 * var_x207 / CHASTE_MATH::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_x210 = CHASTE_MATH::Exp(-CHASTE_CONST(1.6590909090909092) - CHASTE_CONST(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_x212 = CHASTE_CONST(1.1200000000011203e-6) * var_x180; + const double var_x213 = ((var_x181) ? (-var_x212 + CHASTE_CONST(1999999.9999979998) * (CHASTE_CONST(5.0000002500000003) + var_chaste_interface__membrane__V) * (var_x212 + CHASTE_CONST(1.1200000000011203e-6) * var_x179)) : (CHASTE_CONST(4.4800000000000004) * var_x185 * var_x186)); + const double var_x214 = CHASTE_CONST(4.1799999996561256e-6) * var_x188; + const double var_x215 = var_x214 + CHASTE_CONST(1999999.9999424887) * (CHASTE_CONST(45.000000249999999) + var_chaste_interface__membrane__V) * (-var_x214 - CHASTE_CONST(4.1800000005842713e-6) * var_x187); + const double var_x216 = CHASTE_CONST(2.4040000000391526e-5) * var_x191; + const double var_x217 = var_x216 + CHASTE_CONST(1039933.4442576389) * (CHASTE_CONST(10.000000480800001) + var_chaste_interface__membrane__V) * (-var_x216 - CHASTE_CONST(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_x221 = 1 / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(1.0000000000287557e-7))); + const double var_x222 = 1 / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.0000000000287557e-7))); + const double var_x223 = (var_chaste_interface__membrane__V >= -CHASTE_CONST(18.000000400000001)) && (var_chaste_interface__membrane__V <= -CHASTE_CONST(17.999999599999999)); + const double var_x224 = CHASTE_CONST(4.5) + CHASTE_CONST(0.25) * var_chaste_interface__membrane__V; + const double var_x225 = CHASTE_MATH::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_x229 = ((var_x223) ? (CHASTE_CONST(4.2450000000000001) * var_x221 + CHASTE_CONST(4.2450000000000001) * var_x222) : (CHASTE_CONST(8.4900000000000002) * var_x227 - CHASTE_CONST(2.1225000000000001) * var_x225 * var_x228 / CHASTE_MATH::Pow(var_x226, 2))); + const double var_x230 = CHASTE_MATH::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_x232 = CHASTE_CONST(16.980499999999999) * var_x230 / CHASTE_MATH::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_x234 = CHASTE_CONST(67.921999999999997) * var_x233; + const double var_x235 = CHASTE_CONST(3.3960000000976542e-6) * var_x222; + const double var_x236 = ((var_x223) ? (-var_x235 + CHASTE_CONST(1249999.9999640554) * (CHASTE_CONST(18.000000400000001) + var_chaste_interface__membrane__V) * (var_x235 + CHASTE_CONST(3.3960000000976542e-6) * var_x221)) : (CHASTE_CONST(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_x238 = CHASTE_MATH::Exp(-CHASTE_CONST(3.7704918032786887) - CHASTE_CONST(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_x240 = CHASTE_CONST(0.77666666666666673) + CHASTE_CONST(0.033333333333333333) * var_chaste_interface__membrane__V; + const double var_x241 = CHASTE_MATH::Exp(-var_x240); + const double var_x242 = CHASTE_MATH::Exp(var_x240); + const double var_x243 = CHASTE_MATH::Exp(CHASTE_CONST(4.876462938881664) + CHASTE_CONST(0.065019505851755519) * var_chaste_interface__membrane__V); + const double var_x244 = CHASTE_MATH::Exp(-CHASTE_CONST(0.9003601440576231) - CHASTE_CONST(0.012004801920768308) * var_chaste_interface__membrane__V); + const double var_x245 = CHASTE_CONST(9.6370000000000005) * var_x243 + CHASTE_CONST(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_x247 = CHASTE_CONST(0.11569027611044419) * var_x244 - CHASTE_CONST(0.62659297789336799) * var_x243; + const double var_x248 = CHASTE_MATH::Exp(-CHASTE_CONST(2.6628794603230959) - CHASTE_CONST(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_x250 = CHASTE_MATH::Exp(-CHASTE_CONST(0.1388888888888889) * var_chaste_interface__membrane__V); + const double var_x251 = CHASTE_MATH::Exp(var_x0); + const double var_x252 = CHASTE_CONST(0.00040000000000000002) + 1 / (CHASTE_CONST(8.0109999999999992) * var_x250 + CHASTE_CONST(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_x254 = CHASTE_MATH::Exp(CHASTE_CONST(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_x257 = 1 / (CHASTE_CONST(0.020400000000000001) + CHASTE_CONST(0.54659999999999997) * var_x256); + const double var_x258 = CHASTE_MATH::Exp(CHASTE_CONST(4.0070821529745047) + CHASTE_CONST(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_x260 = CHASTE_CONST(0.000141643059490085) * var_x258 / CHASTE_MATH::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_x262 = var_x254 / CHASTE_MATH::Pow(var_x255, 2); + const double var_x263 = CHASTE_MATH::Exp(CHASTE_CONST(0.96921975662133131) - CHASTE_CONST(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_x266 = 1 / (CHASTE_CONST(5.75) * var_x256 + CHASTE_CONST(0.45000000000000001) * var_x265); + const double var_x267 = CHASTE_MATH::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_x270 = 1 / (CHASTE_CONST(0.5) + CHASTE_CONST(7.5) * var_x269); + const double var_x271 = CHASTE_MATH::Exp(CHASTE_CONST(1.8506208911614319) + CHASTE_CONST(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_x273 = CHASTE_MATH::Exp(CHASTE_CONST(0.065217391304347824) - CHASTE_CONST(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_x275 = CHASTE_MATH::Exp(-CHASTE_CONST(0.045816915605241454) * var_chaste_interface__membrane__V); + const double var_x276 = CHASTE_MATH::Exp(CHASTE_CONST(0.014398433450440593) * var_chaste_interface__membrane__V); + const double var_x277 = CHASTE_CONST(0.059999999999999998) + 1 / (CHASTE_CONST(0.29999999999999999) * var_x275 + CHASTE_CONST(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_x279 = CHASTE_MATH::Exp(-CHASTE_CONST(0.68918918918918914) - CHASTE_CONST(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_x281 = CHASTE_MATH::Exp(-CHASTE_CONST(0.076769537847382163) * var_chaste_interface__membrane__V); + const double var_x282 = CHASTE_MATH::Exp(CHASTE_CONST(0.03941508020968823) * var_chaste_interface__membrane__V); + const double var_x283 = CHASTE_MATH::Exp(-CHASTE_CONST(0.018299935950224173) * var_chaste_interface__membrane__V); + const double var_x284 = CHASTE_MATH::Exp(CHASTE_CONST(0.009420009985210585) * var_chaste_interface__membrane__V); + const double var_x285 = CHASTE_MATH::Exp(CHASTE_CONST(2.539728728905752) + CHASTE_CONST(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_x288 = -CHASTE_CONST(3.290319067574035e-6) - CHASTE_CONST(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_x291 = CHASTE_CONST(1.77) * var_x107; + const double var_x292 = CHASTE_CONST(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_x294 = CHASTE_CONST(0.021829942145742926) * var_x27 - CHASTE_CONST(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_x296 = CHASTE_CONST(0.021829942145742926) * var_x5; + const double var_x297 = CHASTE_CONST(0.021829942145742926) * var_x24; + const double var_x298 = CHASTE_CONST(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_x300 = CHASTE_CONST(1.6583208100573134e-5) + CHASTE_CONST(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_x303 = CHASTE_CONST(0.0041456361996952953) * var_chaste_interface__membrane__V - CHASTE_CONST(0.11002290841454433) * var_x27; + const double var_x304 = CHASTE_CONST(0.11002290841454433) * var_x5; + const double var_x305 = CHASTE_CONST(0.11002290841454433) * var_x24; + const double var_x306 = CHASTE_CONST(0.11777375567316183) * var_x149; + const double var_x307 = CHASTE_CONST(0.23554751134632365) * var_x154; + const double var_x308 = CHASTE_MATH::Exp(-CHASTE_CONST(1.6000000000000001) + CHASTE_CONST(0.080000000000000002) * var_chaste_interface__membrane__V); + const double var_x309 = CHASTE_CONST(0.019200000000000002) * var_x308 * var_chaste_interface__Ca_handling_by_the_SR__F1; + const double var_x310 = CHASTE_CONST(0.00029999999999999997) + var_chaste_interface__intracellular_ion_concentrations__Ca_i; + const double var_x311 = CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Ca_i, 4); + const double var_x312 = var_x311 / CHASTE_MATH::Pow(var_x310, 5); + const double var_x313 = CHASTE_MATH::Pow(var_x310, (-4)); + const double var_x314 = var_x313 * CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Ca_i, 3); + const double var_x315 = CHASTE_CONST(0.81520000000000004) * var_x312 - CHASTE_CONST(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; + const double var_x317 = CHASTE_CONST(0.20380000000000001) * var_x316 + CHASTE_CONST(0.23999999999999999) * var_x308; + const double var_x318 = CHASTE_CONST(1.3584000000000001) * var_x312 - CHASTE_CONST(1.3584000000000001) * var_x314; + const double var_x319 = CHASTE_CONST(0.033960000000000004) + CHASTE_CONST(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, 0, 0) = mSetVoltageDerivativeToZero ? 0.0 : (-var_x77 * (CHASTE_CONST(0.0014400000000000001) + var_x17 + var_x22 + var_x24 + var_x5 + var_x75 + 2 * var_x35 + CHASTE_CONST(0.0060000000000000001) * var_x6 + CHASTE_CONST(0.0011450666666666667) * var_x45 - CHASTE_CONST(0.10497579657532749) * var_x49 + var_x36 * var_x37 + (CHASTE_CONST(1.8) * var_x3 + CHASTE_CONST(1.8) * var_x4) * NV_Ith_S(mParameters, 3))); + IJth(rJacobian, 1, 0) = -CHASTE_CONST(1.7614021922566692e-8) + CHASTE_CONST(0.0017614021922566689) * var_x17 - CHASTE_CONST(5.2842065767700066e-6) * var_x6 + var_x141 * var_x37 + (-CHASTE_CONST(0.001585261973031002) * var_x3 - CHASTE_CONST(0.001585261973031002) * var_x4) * NV_Ith_S(mParameters, 3); + IJth(rJacobian, 2, 0) = (CHASTE_CONST(0.001) - CHASTE_CONST(0.001) * var_chaste_interface__sodium_current_m_gate__m) * ((var_x158) ? (-230 * var_x156 - 230 * var_x157) : (-var_x161 - CHASTE_CONST(36.297640653357533) * var_x159 * var_x162 / CHASTE_MATH::Pow(var_x160, 2))) + CHASTE_CONST(1.4519056261343013) * var_x159 * var_chaste_interface__sodium_current_m_gate__m; + IJth(rJacobian, 3, 0) = var_x169 * var_x173 + CHASTE_CONST(0.0055555555555555558) * var_x170 * (-var_x174 - var_chaste_interface__sodium_current_h1_gate__h1) / (CHASTE_MATH::Pow(var_x171, 2) * CHASTE_MATH::Pow((CHASTE_CONST(0.0050000000000000001) + var_x172), 2)); + IJth(rJacobian, 4, 0) = var_x169 * var_x178 + CHASTE_CONST(0.0041666666666666666) * var_x175 * (-var_x174 - var_chaste_interface__sodium_current_h2_gate__h2) / (CHASTE_MATH::Pow(var_x176, 2) * CHASTE_MATH::Pow((CHASTE_CONST(0.0037499999999999999) + var_x177), 2)); + IJth(rJacobian, 5, 0) = (-var_x102 + CHASTE_CONST(0.001) / var_x211) * (((var_x181) ? (CHASTE_CONST(2.2400000000000002) * var_x179 + CHASTE_CONST(2.2400000000000002) * var_x180) : (CHASTE_CONST(4.4800000000000004) * var_x185 - CHASTE_CONST(1.7920000000000003) * var_x183 * var_x186 / CHASTE_MATH::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))))) + CHASTE_CONST(0.00015151515151515152) * var_x210 * (var_x213 + var_x220) / CHASTE_MATH::Pow(var_x211, 2); + IJth(rJacobian, 6, 0) = (var_x232 + var_x229) * (-var_x100 + CHASTE_CONST(0.001) * var_x236 * var_x237) + (var_x234 + var_x236) * (CHASTE_CONST(0.001) * var_x229 * var_x237 + CHASTE_CONST(2.1675996343523e-7) * var_x236 * (-var_x229 - var_x232) / CHASTE_MATH::Pow((var_x233 + CHASTE_CONST(0.014722770236447691) * var_x236), 2)); + IJth(rJacobian, 7, 0) = (-var_x105 + CHASTE_CONST(0.001) / var_x239) * (CHASTE_CONST(22.472433333333335) * var_x242 - CHASTE_CONST(22.472433333333335) * var_x241) + CHASTE_CONST(0.0001639344262295082) * var_x238 * (CHASTE_CONST(674.173) * var_x241 + CHASTE_CONST(674.173) * var_x242) / CHASTE_MATH::Pow(var_x239, 2); + IJth(rJacobian, 8, 0) = var_x245 * (-CHASTE_CONST(0.00011569027611044419) * var_x244 * var_x246 + CHASTE_CONST(0.00010376673238559718) * var_x244 * var_x247 / CHASTE_MATH::Pow((var_x243 + var_x244), 2)) - var_x247 * (-var_x103 + CHASTE_CONST(0.0096369999999999997) * var_x244 * var_x246); + IJth(rJacobian, 9, 0) = CHASTE_CONST(0.00017752529735487306) * var_x248 * var_x253 / CHASTE_MATH::Pow(var_x249, 2) - CHASTE_CONST(6.6907730760079843e-9) * (-var_chaste_interface__Ca_independent_transient_outward_K_current_r_gate__r + 1 / var_x249) * (CHASTE_CONST(1.1126388888888887) * var_x250 - CHASTE_CONST(32.216666666666669) * var_x251) / (CHASTE_MATH::Pow(var_x252, 2) * CHASTE_MATH::Pow((var_x251 + CHASTE_CONST(0.020721676151060523) * var_x250), 2)); + IJth(rJacobian, 10, 0) = -var_x257 * var_x260 + CHASTE_CONST(0.018294914013904134) * var_x262 * (-var_x261 - var_chaste_interface__Ca_independent_transient_outward_K_current_s1_gate__s1) / CHASTE_MATH::Pow((CHASTE_CONST(0.037321624588364438) + var_x256), 2); + IJth(rJacobian, 11, 0) = -var_x260 * var_x266 + CHASTE_CONST(3.0245746691871456e-5) * (-var_x261 - var_chaste_interface__Ca_independent_transient_outward_K_current_s2_gate__s2) * (CHASTE_CONST(57.5) * var_x262 - CHASTE_CONST(0.032211882605583393) * var_x263 / CHASTE_MATH::Pow(var_x264, 2)) / CHASTE_MATH::Pow((var_x256 + CHASTE_CONST(0.078260869565217397) * var_x265), 2); + IJth(rJacobian, 12, 0) = -CHASTE_CONST(2.1922574727480476e-5) * var_x270 * var_x271 / CHASTE_MATH::Pow(var_x272, 2) + CHASTE_CONST(0.00026666666666666668) * var_x267 * (CHASTE_CONST(0.39975990396158467) - var_chaste_interface__Ca_independent_transient_outward_K_current_s3_gate__s3 + CHASTE_CONST(0.60024009603841544) / var_x272) / (CHASTE_MATH::Pow(var_x268, 2) * CHASTE_MATH::Pow((CHASTE_CONST(0.066666666666666666) + var_x269), 2)); + IJth(rJacobian, 13, 0) = CHASTE_CONST(7.2463768115942027e-5) * var_x273 * var_x278 / CHASTE_MATH::Pow(var_x274, 2) - CHASTE_CONST(0.00036289737262302222) * (-var_chaste_interface__delayed_rectifier_K_current_z_gate__z + 1 / var_x274) * (CHASTE_CONST(0.013745074681572435) * var_x275 - CHASTE_CONST(0.023901399527731383) * var_x276) / (CHASTE_MATH::Pow(var_x277, 2) * CHASTE_MATH::Pow((var_x276 + CHASTE_CONST(0.18072289156626506) * var_x275), 2)); + IJth(rJacobian, 14, 0) = (-var_x114 + CHASTE_CONST(0.001) / var_x280) * (CHASTE_CONST(0.35473572188719404) * var_x282 - CHASTE_CONST(0.099800399201596807) * var_x281) + CHASTE_CONST(0.00013513513513513514) * var_x279 * (9 * var_x282 + CHASTE_CONST(1.3) * var_x281) / CHASTE_MATH::Pow(var_x280, 2); + IJth(rJacobian, 15, 0) = (-var_x112 + CHASTE_CONST(0.001) / var_x286) * (CHASTE_CONST(6.1795265502981431) * var_x284 - CHASTE_CONST(1.8299935950224173) * var_x283) - CHASTE_CONST(5.3589706489177562e-5) * var_x285 * (100 * var_x283 + 656 * var_x284) / CHASTE_MATH::Pow(var_x286, 2); + IJth(rJacobian, 16, 0) = -CHASTE_CONST(1.6450937300378158e-8) - CHASTE_CONST(0.0024676405950567236) * var_x17 - CHASTE_CONST(2.8256129907129523e-6) * var_x45 - CHASTE_CONST(0.00082254686501890791) * var_x75; + IJth(rJacobian, 17, 0) = -CHASTE_CONST(1.151565611026471e-6) - CHASTE_CONST(0.00082254686501890791) * var_x24 - CHASTE_CONST(0.00082254686501890791) * var_x5 - CHASTE_CONST(0.0016450937300378158) * var_x35 + var_x20 * var_x288 * var_chaste_interface__Ca_independent_transient_outward_K_current_r_gate__r + CHASTE_CONST(8.6347512375898239e-5) * var_x25 * var_x28 * var_x32 * var_x46 * var_x47 * NV_Ith_S(mParameters, 6) + CHASTE_CONST(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) = CHASTE_CONST(5.8038906795734136e-6) + var_x301 + CHASTE_CONST(0.0041456361996952953) * var_x24 + CHASTE_CONST(0.0041456361996952953) * var_x5 + CHASTE_CONST(0.0082912723993905906) * var_x35 - CHASTE_CONST(9.4940596487955185e-6) * var_x45 - CHASTE_CONST(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, 0, 1) = mSetVoltageDerivativeToZero ? 0.0 : (-var_x77 * (-var_x82 + CHASTE_CONST(0.0095090000000000001) * var_x79 + CHASTE_CONST(0.0002653945091048535) * var_x80 - CHASTE_CONST(0.00029999999999999997) * var_x86 - CHASTE_CONST(0.0095090000000000001) * var_x81 * var_chaste_interface__intracellular_ion_concentrations__Ca_i)); + IJth(rJacobian, 1, 1) = -CHASTE_CONST(47.271999999999998) - var_x150 + CHASTE_CONST(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 - CHASTE_CONST(8.3745867230843319e-6) * var_x79 - CHASTE_CONST(5.2842065767700058e-7) * var_x86 - CHASTE_CONST(8.2198768971977874) * var_x142 - CHASTE_CONST(0.0017614021922566689) * var_x82 - CHASTE_CONST(2.3373323507508574e-7) * var_x80 + CHASTE_CONST(8.3745867230843319e-6) * var_x81 * var_chaste_interface__intracellular_ion_concentrations__Ca_i + CHASTE_CONST(7.3978892074780085e-7) * var_x143 * var_x144; + IJth(rJacobian, 16, 1) = CHASTE_CONST(0.0024676405950567236) * var_x82 + CHASTE_CONST(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, 19, 1) = CHASTE_CONST(78.400000000000006) - CHASTE_CONST(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, 24, 1) = CHASTE_CONST(121.85879481761599) * var_x142 - CHASTE_CONST(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, 2, 2) = -CHASTE_CONST(0.001) * ((var_x158) ? (var_x163 + CHASTE_CONST(394539.57232025318) * (CHASTE_CONST(44.400001267299999) + var_chaste_interface__membrane__V) * (-var_x163 - CHASTE_CONST(0.00058295799999830145) * var_x157)) : (-var_x161 * var_x162)) - CHASTE_CONST(18.399999999999999) * var_x159; + IJth(rJacobian, 16, 2) = -CHASTE_CONST(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, 16, 3) = -CHASTE_CONST(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, 16, 4) = -CHASTE_CONST(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, 5, 5) = -CHASTE_CONST(0.001) * var_x213 - CHASTE_CONST(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, 6, 6) = -CHASTE_CONST(0.001) * var_x236 - CHASTE_CONST(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, 7, 7) = -CHASTE_CONST(0.67417300000000002) * var_x241 - CHASTE_CONST(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, 8, 8) = -CHASTE_CONST(0.0096369999999999997) * var_x243 - CHASTE_CONST(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, 9, 9) = -CHASTE_CONST(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, 0, 10) = mSetVoltageDerivativeToZero ? 0.0 : (-CHASTE_CONST(0.0017699999999999999) * var_x107 * var_x109); + IJth(rJacobian, 10, 10) = -CHASTE_CONST(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, 0, 11) = mSetVoltageDerivativeToZero ? 0.0 : (-CHASTE_CONST(0.00123) * var_x109 * var_x110); + IJth(rJacobian, 11, 11) = -CHASTE_CONST(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, 12) = mSetVoltageDerivativeToZero ? 0.0 : (-CHASTE_CONST(3.600144e-5) * var_x108 * var_x111); + IJth(rJacobian, 12, 12) = -CHASTE_CONST(0.001) * var_x270; + IJth(rJacobian, 17, 12) = -CHASTE_CONST(2.9612871608166312e-5) * var_x293; + IJth(rJacobian, 22, 12) = CHASTE_CONST(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, 13, 13) = -CHASTE_CONST(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, 14, 14) = -CHASTE_CONST(0.0089999999999999993) * var_x282 - CHASTE_CONST(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, 15, 15) = -CHASTE_CONST(0.65600000000000003) * var_x284 - CHASTE_CONST(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, 0, 16) = mSetVoltageDerivativeToZero ? 0.0 : (-var_x77 * (var_x129 + 3 * var_x117 + CHASTE_CONST(0.00053078901820970701) * var_x51 + CHASTE_CONST(0.154584) * var_x121 - CHASTE_CONST(0.00089999999999999998) * var_x122 - CHASTE_CONST(0.0001161412471825695) * var_x125)); + IJth(rJacobian, 1, 16) = -CHASTE_CONST(1.5852619730310017e-6) * var_x122 + CHASTE_CONST(0.0052842065767700064) * var_x115 * var_x15 * var_x7 * NV_Ith_S(mParameters, 9) * NV_Ith_S(mParameters, 1); + IJth(rJacobian, 16, 16) = -CHASTE_CONST(0.00038145775374624855) * var_x121 - CHASTE_CONST(4.3659884291485854e-7) * var_x51 - CHASTE_CONST(0.00082254686501890791) * var_x129 - CHASTE_CONST(0.0074029217851701709) * var_x117 + CHASTE_CONST(2.2208765355510512e-6) * var_x115 * var_x83 * var_x84 * NV_Ith_S(mParameters, 9) * NV_Ith_S(mParameters, 1) + CHASTE_CONST(2.8659485630822583e-7) * var_x118 * var_x123 * var_x124 * var_x40 * var_chaste_interface__cleft_space_ion_concentrations__K_c; + IJth(rJacobian, 17, 16) = CHASTE_CONST(0.00025430516916416572) * var_x121 - CHASTE_CONST(1.9106323753881723e-7) * var_x125; + IJth(rJacobian, 22, 16) = -CHASTE_CONST(0.0012816980525873951) * var_x121 + CHASTE_CONST(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 * (CHASTE_CONST(53.0789018209707) * var_x132 - CHASTE_CONST(2.786) * var_x133 + var_x130 * var_x26 + var_x131 * var_x22 + var_x131 * var_x24)); + IJth(rJacobian, 17, 17) = -CHASTE_CONST(0.043659884291485852) * var_x132 - var_x26 * var_x296 - var_x26 * var_x297 + CHASTE_CONST(26.53945091048535) * var_x20 * var_x26 * var_x288 * var_chaste_interface__Ca_independent_transient_outward_K_current_r_gate__r + CHASTE_CONST(0.0022916155659426776) * var_x25 * var_x26 * var_x28 * var_x32 * var_x46 * var_x47 * NV_Ith_S(mParameters, 6); + IJth(rJacobian, 22, 17) = CHASTE_CONST(0.22004581682908866) * var_x132 - CHASTE_CONST(0.011549742452351092) * var_x133 + var_x131 * var_x301 + var_x26 * var_x304 + var_x26 * var_x305; + IJth(rJacobian, 1, 18) = CHASTE_CONST(0.021419999999999998) + 9 * var_chaste_interface__intracellular_ion_concentrations__Ca_i; + IJth(rJacobian, 18, 18) = -CHASTE_CONST(0.47599999999999998) - var_x299; + IJth(rJacobian, 1, 19) = CHASTE_CONST(0.031359999999999999) + CHASTE_CONST(6.2720000000000002) * var_chaste_interface__intracellular_ion_concentrations__Ca_i; + IJth(rJacobian, 19, 19) = -CHASTE_CONST(0.39200000000000002) - CHASTE_CONST(78.400000000000006) * var_chaste_interface__intracellular_ion_concentrations__Ca_i; + IJth(rJacobian, 1, 20) = CHASTE_CONST(0.0010559999999999999) + var_x152; + IJth(rJacobian, 20, 20) = -CHASTE_CONST(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, 21, 21) = -CHASTE_CONST(5.6660000000000004); + IJth(rJacobian, 0, 22) = mSetVoltageDerivativeToZero ? 0.0 : (-var_x77 * (-CHASTE_CONST(53.0789018209707) * var_x137 - CHASTE_CONST(0.10305599999999999) * var_x140 - var_x130 * var_x134 - var_x135 * var_x22 - var_x135 * var_x24 - 6 * var_x138 * var_x46 + CHASTE_CONST(0.10305599999999999) * var_x118 * var_x40 * var_x42 * var_x43 + 6 * var_x136 * var_x30 * var_x32 * var_x46 * NV_Ith_S(mParameters, 6) + CHASTE_CONST(2.786) * var_x136 * var_x28 * var_x32 * var_x46 * var_x47 * NV_Ith_S(mParameters, 6))); + IJth(rJacobian, 16, 22) = CHASTE_CONST(0.00025430516916416572) * var_x140 - CHASTE_CONST(0.00025430516916416572) * var_x287; + IJth(rJacobian, 17, 22) = CHASTE_CONST(0.043659884291485852) * var_x137 + CHASTE_CONST(0.00016953677944277714) * var_x287 - CHASTE_CONST(0.00016953677944277714) * var_x140 + var_x134 * var_x296 + var_x134 * var_x297 + var_x138 * var_x298 - var_x137 * var_x298 - CHASTE_CONST(0.0022916155659426776) * var_x136 * var_x48 - var_x135 * var_x21 * var_x288; + IJth(rJacobian, 22, 22) = -CHASTE_CONST(0.00085446536839159674) * var_x287 - CHASTE_CONST(0.22004581682908866) * var_x137 - var_x134 * var_x304 - var_x134 * var_x305 - var_x135 * var_x301 - CHASTE_CONST(0.024873817198171774) * var_x138 * var_x46 + CHASTE_CONST(0.024873817198171774) * var_x136 * var_x30 * var_x32 * var_x46 * NV_Ith_S(mParameters, 6) + CHASTE_CONST(0.00085446536839159674) * var_x118 * var_x139 * var_x42 * var_x43 * var_chaste_interface__cleft_space_ion_concentrations__K_c + CHASTE_CONST(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, 23, 23) = -CHASTE_CONST(14.98) - var_x306 + CHASTE_CONST(14.880000000000001) * var_chaste_interface__Ca_handling_by_the_SR__O_Calse; + IJth(rJacobian, 24, 23) = CHASTE_CONST(0.011085915847820609); + IJth(rJacobian, 25, 23) = CHASTE_CONST(0.47999999999999998) - CHASTE_CONST(0.47999999999999998) * var_chaste_interface__Ca_handling_by_the_SR__O_Calse; + IJth(rJacobian, 1, 24) = CHASTE_CONST(1.7754934097947219e-10) * var_x153 + CHASTE_CONST(0.00078910818213098765) * var_x142; + IJth(rJacobian, 23, 24) = CHASTE_CONST(0.099999999999999992); + IJth(rJacobian, 24, 24) = -CHASTE_CONST(0.011085915847820609) - CHASTE_CONST(2.6321499680605046e-9) * var_x153 - CHASTE_CONST(0.011698444302491135) * var_x142; + IJth(rJacobian, 23, 25) = CHASTE_CONST(12.4) + CHASTE_CONST(14.880000000000001) * var_chaste_interface__Ca_handling_by_the_SR__Ca_rel; + IJth(rJacobian, 25, 25) = -CHASTE_CONST(0.40000000000000002) - CHASTE_CONST(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, 1, 27) = -CHASTE_CONST(0.0017614021922566689) * var_x154 * var_x155 + CHASTE_CONST(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; + IJth(rJacobian, 26, 28) = CHASTE_CONST(0.00081499999999999997); + IJth(rJacobian, 28, 28) = -CHASTE_CONST(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)); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -1045,33 +1047,33 @@ // 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_Na_Ca_ion_exchanger_current__d_NaCa = CHASTE_CONST(0.00029999999999999997); // per_millimolar_4 + const double var_Na_Ca_ion_exchanger_current__gamma = CHASTE_CONST(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_Ca_handling_by_the_SR__i_rel = CHASTE_MATH::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) / CHASTE_MATH::Pow((CHASTE_CONST(0.25) + var_chaste_interface__Ca_handling_by_the_SR__F2), 2); // picoA + const double var_inward_rectifier__KmK1 = CHASTE_CONST(0.58999999999999997); // millimolar + const double var_inward_rectifier__shiftK1 = -CHASTE_CONST(3.6000000000000001); // millivolt + const double var_inward_rectifier__steepK1 = CHASTE_CONST(1.393); // dimensionless + const double var_membrane__Cm_converted = CHASTE_CONST(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_Ca_independent_transient_outward_K_current__E_K = var_membrane__R * var_membrane__T * CHASTE_MATH::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 + CHASTE_MATH::Exp(CHASTE_CONST(1.9166666666666667) - CHASTE_CONST(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)) ? (CHASTE_CONST(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)) ? (CHASTE_CONST(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 = CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * 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 = (CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * NV_Ith_S(mParameters, 1) * CHASTE_MATH::Exp(var_Na_Ca_ion_exchanger_current__gamma * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - CHASTE_MATH::Pow(NV_Ith_S(mParameters, 2), 3) * var_chaste_interface__intracellular_ion_concentrations__Ca_i * CHASTE_MATH::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 + (CHASTE_MATH::Pow(NV_Ith_S(mParameters, 2), 3) * var_chaste_interface__intracellular_ion_concentrations__Ca_i + CHASTE_MATH::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 = CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * 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_Kr_converted = CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * 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 + const double var_delayed_rectifier_K_current__i_Ks_converted = CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * 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 * CHASTE_MATH::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 + CHASTE_MATH::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))) * CHASTE_MATH::Pow((var_chaste_interface__cleft_space_ion_concentrations__K_c + var_inward_rectifier__KmK1), 3))) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (CHASTE_CONST(2.5) * CHASTE_MATH::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 + CHASTE_MATH::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))) * CHASTE_MATH::Pow((var_chaste_interface__cleft_space_ion_concentrations__K_c + var_inward_rectifier__KmK1), 3))) : (CHASTE_MATH::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 + CHASTE_MATH::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))) * CHASTE_MATH::Pow((var_chaste_interface__cleft_space_ion_concentrations__K_c + var_inward_rectifier__KmK1), 3))))); // picoA + const double var_inward_rectifier__i_K1_converted = CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * var_inward_rectifier__i_K1 / var_membrane__Cm_converted; // uA_per_cm2 + const double var_membrane__i_Stim_converted = CHASTE_STIM(var_chaste_interface__environment__time_converted); // uA_per_cm2 + const double var_sodium_current__i_Na = (((var_chaste_interface__membrane__V >= -CHASTE_CONST(2.6539450910485349e-6)) && (var_chaste_interface__membrane__V <= CHASTE_CONST(2.6539450910485349e-6))) ? (CHASTE_CONST(188398.77346612973) * (CHASTE_CONST(2.6539450910485349e-6) + var_chaste_interface__membrane__V) * (CHASTE_CONST(0.0096486999999999996) * CHASTE_MATH::Pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8) - CHASTE_MATH::Log(NV_Ith_S(mParameters, 2) / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (CHASTE_CONST(0.36499999999999999) * var_chaste_interface__sodium_current_h2_gate__h2 + CHASTE_CONST(0.63500000000000001) * var_chaste_interface__sodium_current_h1_gate__h1) * NV_Ith_S(mParameters, 2) * NV_Ith_S(mParameters, 5) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) + CHASTE_CONST(0.0096486999999999996) * CHASTE_MATH::Pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8) - CHASTE_MATH::Log(NV_Ith_S(mParameters, 2) / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (CHASTE_CONST(0.36499999999999999) * var_chaste_interface__sodium_current_h2_gate__h2 + CHASTE_CONST(0.63500000000000001) * var_chaste_interface__sodium_current_h1_gate__h1) * NV_Ith_S(mParameters, 2) * NV_Ith_S(mParameters, 5) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) - CHASTE_CONST(0.0096486999999999996) * CHASTE_MATH::Pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8) - CHASTE_MATH::Log(NV_Ith_S(mParameters, 2) / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (CHASTE_CONST(0.36499999999999999) * var_chaste_interface__sodium_current_h2_gate__h2 + CHASTE_CONST(0.63500000000000001) * var_chaste_interface__sodium_current_h1_gate__h1) * NV_Ith_S(mParameters, 2) * NV_Ith_S(mParameters, 5) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) : (CHASTE_CONST(3635.606491085292) * CHASTE_MATH::Pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + CHASTE_MATH::Exp(CHASTE_CONST(0.037679754693225945) * var_chaste_interface__membrane__V - CHASTE_MATH::Log(NV_Ith_S(mParameters, 2) / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (CHASTE_CONST(0.36499999999999999) * var_chaste_interface__sodium_current_h2_gate__h2 + CHASTE_CONST(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 + CHASTE_MATH::Exp(CHASTE_CONST(0.037679754693225945) * var_chaste_interface__membrane__V)))); // picoA + const double var_sodium_current__i_Na_converted = CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * 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()); @@ -1330,4 +1332,5 @@ void OdeSystemInformation::Initia #include "SerializationExportWrapperForCpp.hpp" CHASTE_CLASS_EXPORT(Cellaslanidi_atrial_model_2009FromCellMLCvode) + #endif // CHASTE_CVODE diff --git a/chaste_codegen/data/tests/chaste_reference_models/Cvode_with_jacobian/aslanidi_atrial_model_2009.hpp b/chaste_codegen/data/tests/chaste_reference_models/Cvode_with_jacobian/aslanidi_atrial_model_2009.hpp index 7031a18f8..546fe3780 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/Cvode_with_jacobian/aslanidi_atrial_model_2009.hpp +++ b/chaste_codegen/data/tests/chaste_reference_models/Cvode_with_jacobian/aslanidi_atrial_model_2009.hpp @@ -17,7 +17,11 @@ #include "ChasteSerialization.hpp" #include #include "AbstractStimulusFunction.hpp" +#if USING_DEVICE_COMPILER +#include "StimulusEvaluatorCuda.hpp" +#endif #include "AbstractCvodeCell.hpp" +#include "HostDeviceMacros.hpp" class Cellaslanidi_atrial_model_2009FromCellMLCvode : public AbstractCvodeCell { @@ -38,6 +42,10 @@ class Cellaslanidi_atrial_model_2009FromCellMLCvode : public AbstractCvodeCell 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: + static constexpr unsigned TOTAL_SIZE = 29u; + static constexpr unsigned NNZ = 120u; + static inline const int sparse_rowptr[] = { 0, 19, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 68, 79, 81, 83, 86, 88, 99, 104, 107, 109, 113, 117, 120 }; + static inline const int sparse_colind[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 22, 0, 1, 5, 6, 7, 8, 16, 18, 19, 20, 21, 23, 24, 27, 0, 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, 7, 0, 8, 0, 9, 0, 10, 0, 11, 0, 12, 0, 13, 0, 14, 0, 15, 0, 1, 2, 3, 4, 16, 22, 0, 9, 10, 11, 12, 13, 14, 15, 16, 17, 22, 1, 18, 1, 19, 1, 20, 21, 20, 21, 0, 9, 10, 11, 12, 13, 14, 15, 16, 17, 22, 1, 23, 24, 25, 27, 1, 23, 24, 23, 25, 0, 1, 26, 28, 0, 1, 26, 27, 1, 27, 28 }; boost::shared_ptr UseCellMLDefaultStimulus(); double GetIntracellularCalciumConcentration(); @@ -46,8 +54,19 @@ const bool is_probability[29] = {false, false, false, false, false, false, false 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); + N_Vector ComputeDerivedQuantities(double var_chaste_interface__environment__time_converted, const N_Vector & rY); +#if USING_DEVICE_COMPILER + template + DEVICE + static void EvaluateYDerivativesDevice(ValueType var_chaste_interface__environment__time_converted, const ValueType* rY, ValueType* rDY, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType* mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim); + template + DEVICE + static void EvaluateAnalyticJacobianDevice(ValueType var_chaste_interface__environment__time_converted, const ValueType *rY, ValueType *rDY, ValueType *rJacobian, ValueType *rTmp1, ValueType *rTmp2, ValueType *rTmp3, const unsigned nvars, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType *mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim); + template + DEVICE + static void EvaluateSparseAnalyticJacobianDevice(ValueType var_chaste_interface__environment__time_converted, const ValueType *rY, ValueType *rDY, ValueType *rJacobian, ValueType *rTmp1, ValueType *rTmp2, ValueType *rTmp3, const unsigned nvars, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType *mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim); +#endif }; // Needs to be included last @@ -84,4 +103,10 @@ namespace boost } #endif // CELLASLANIDI_ATRIAL_MODEL_2009FROMCELLMLCVODE_HPP_ + + + +#if USING_DEVICE_COMPILER + #include "aslanidi_atrial_model_2009Kernels.hpp" +#endif #endif // CHASTE_CVODE \ No newline at end of file diff --git a/chaste_codegen/data/tests/chaste_reference_models/Cvode_with_jacobian/dynamic_Shannon2004.cpp b/chaste_codegen/data/tests/chaste_reference_models/Cvode_with_jacobian/dynamic_Shannon2004.cpp index e5733f956..7305f6892 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/Cvode_with_jacobian/dynamic_Shannon2004.cpp +++ b/chaste_codegen/data/tests/chaste_reference_models/Cvode_with_jacobian/dynamic_Shannon2004.cpp @@ -22,6 +22,8 @@ #include "HeartConfig.hpp" #include "IsNan.hpp" #include "MathsCustomFunctions.hpp" +#include "ChasteMathDeviceNamespaces.hpp" +#include "ChasteCpuMacros.hpp" #if CHASTE_SUNDIALS_VERSION >= 60000 #include "CvodeContextManager.hpp" @@ -40,7 +42,7 @@ bool Dynamicshannon_wang_puglisi_weber_bers_2004FromCellMLCvode::registered = Mo 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_amplitude_converted = -CHASTE_CONST(9.5) * CHASTE_CAP(); // 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 @@ -76,28 +78,28 @@ bool Dynamicshannon_wang_puglisi_weber_bers_2004FromCellMLCvode::registered = Mo mUseAnalyticJacobian = true; mHasAnalyticJacobian = true; - NV_Ith_S(this->mParameters, 0) = 5.3480000000000003e-6; // (var_Jleak_SR__KSRleak) [per_millisecond] + NV_Ith_S(this->mParameters, 0) = CHASTE_CONST(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, 2) = CHASTE_CONST(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, 6) = CHASTE_CONST(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, 8) = CHASTE_CONST(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, 10) = CHASTE_CONST(96486.699999999997); // (var_model_parameters__F) [coulomb_per_mole] + NV_Ith_S(this->mParameters, 11) = CHASTE_CONST(8314.2999999999993); // (var_model_parameters__R) [joule_per_kilomole_kelvin] + NV_Ith_S(this->mParameters, 12) = CHASTE_CONST(0.00054000000000000001); // (var_ICaL__PCa) [litre_per_farad_millisecond] + NV_Ith_S(this->mParameters, 13) = CHASTE_CONST(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, 17) = CHASTE_CONST(0.02); // (var_Itof__G_tof) [milliS_per_microF] + NV_Ith_S(this->mParameters, 18) = CHASTE_CONST(0.90000000000000002); // (var_IK1__G_K1_max) [milliS_per_microF] + NV_Ith_S(this->mParameters, 19) = CHASTE_CONST(0.029999999999999999); // (var_IKr__G_IKr_const) [milliS_per_microF] + NV_Ith_S(this->mParameters, 20) = CHASTE_CONST(0.070000000000000007); // (var_IKs__G_Ks_max) [milliS_per_microF] + NV_Ith_S(this->mParameters, 21) = CHASTE_CONST(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] } @@ -155,7 +157,7 @@ bool Dynamicshannon_wang_puglisi_weber_bers_2004FromCellMLCvode::registered = Mo made_new_cvode_vector = true; rY = MakeNVector(*pStateVariables); } - double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -196,135 +198,135 @@ bool Dynamicshannon_wang_puglisi_weber_bers_2004FromCellMLCvode::registered = Mo 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__Fx_ICaL_SL = CHASTE_CONST(0.10000000000000001); // dimensionless + const double var_ICaL__Fx_ICaL_jct = CHASTE_CONST(0.90000000000000002); // dimensionless + const double var_ICaL__PK = CHASTE_CONST(2.7000000000000001e-7); // litre_per_farad_millisecond + const double var_ICaL__PNa = CHASTE_CONST(1.4999999999999999e-8); // litre_per_farad_millisecond + const double var_ICaL__Q10_CaL = CHASTE_CONST(1.8); // dimensionless + const double var_ICaL__gamma_Cai = CHASTE_CONST(0.34100000000000003); // dimensionless + const double var_ICaL__gamma_Cao = CHASTE_CONST(0.34100000000000003); // dimensionless + const double var_ICaL__gamma_Ki = CHASTE_CONST(0.75); // dimensionless + const double var_ICaL__gamma_Ko = CHASTE_CONST(0.75); // dimensionless + const double var_ICaL__gamma_Nai = CHASTE_CONST(0.75); // dimensionless + const double var_ICaL__gamma_Nao = CHASTE_CONST(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_ICab__Fx_CaBk_SL = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_ICab__Fx_CaBk_jct = CHASTE_CONST(0.11); // dimensionless + const double var_ICab__G_CaBk = CHASTE_CONST(0.00025129999999999998); // milliS_per_microF + const double var_ICap__Fx_SLCaP_SL = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_ICap__Fx_SLCaP_jct = CHASTE_CONST(0.11); // dimensionless + const double var_ICap__H = CHASTE_CONST(1.6000000000000001); // dimensionless + const double var_ICap__Km = CHASTE_CONST(0.00050000000000000001); // millimolar + const double var_ICap__Q10_SLCaP = CHASTE_CONST(2.3500000000000001); // dimensionless + const double var_ICap__V_maxAF = CHASTE_CONST(0.067299999999999999); // microA_per_microF + const double var_ICl_Ca__Fx_Cl_SL = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_ICl_Ca__Fx_Cl_jct = CHASTE_CONST(0.11); // dimensionless + const double var_ICl_Ca__G_Cl = CHASTE_CONST(0.109625); // milliS_per_microF + const double var_ICl_Ca__Kd_ClCa = CHASTE_CONST(0.10000000000000001); // millimolar + const double var_IKs__Fx_Ks_SL = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_IKs__Fx_Ks_jct = CHASTE_CONST(0.11); // dimensionless + const double var_IKs__pCa_SL = 3 - CHASTE_MATH::Log10(var_chaste_interface__Ca_buffer__Ca_SL); // dimensionless + const double var_IKs__G_Ks_SL = (CHASTE_CONST(0.057000000000000002) + CHASTE_CONST(0.19) / (1 + CHASTE_MATH::Exp(-12 + CHASTE_CONST(1.6666666666666667) * var_IKs__pCa_SL))) * NV_Ith_S(mParameters, 20); // milliS_per_microF + const double var_IKs__pCa_jct = 3 - CHASTE_MATH::Log10(var_chaste_interface__Ca_buffer__Ca_jct); // dimensionless + const double var_IKs__G_Ks_jct = (CHASTE_CONST(0.057000000000000002) + CHASTE_CONST(0.19) / (1 + CHASTE_MATH::Exp(-12 + CHASTE_CONST(1.6666666666666667) * var_IKs__pCa_jct))) * NV_Ith_S(mParameters, 20); // milliS_per_microF + const double var_IKs__pKNa = CHASTE_CONST(0.018329999999999999); // dimensionless + const double var_INa__Fx_Na_SL = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_INa__Fx_Na_jct = CHASTE_CONST(0.11); // dimensionless + const double var_INaCa__Fx_NCX_SL = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_INaCa__Fx_NCX_jct = CHASTE_CONST(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_INaCa__K_mCai = CHASTE_CONST(0.0035899999999999999); // millimolar + const double var_INaCa__K_mCao = CHASTE_CONST(1.3); // millimolar + const double var_INaCa__K_mNai = CHASTE_CONST(12.289999999999999); // millimolar + const double var_INaCa__K_mNao = CHASTE_CONST(87.5); // millimolar + const double var_INaCa__Kd_act = CHASTE_CONST(0.00025599999999999999); // millimolar + const double var_INaCa__Ka_SL = 1 / (1 + CHASTE_MATH::Pow(var_INaCa__Kd_act, 3) / CHASTE_MATH::Pow(var_chaste_interface__Ca_buffer__Ca_SL, 3)); // dimensionless + const double var_INaCa__Ka_jct = 1 / (1 + CHASTE_MATH::Pow(var_INaCa__Kd_act, 3) / CHASTE_MATH::Pow(var_chaste_interface__Ca_buffer__Ca_jct, 3)); // dimensionless + const double var_INaCa__Q10_NCX = CHASTE_CONST(1.5700000000000001); // dimensionless + const double var_INaCa__eta = CHASTE_CONST(0.34999999999999998); // dimensionless + const double var_INaCa__ksat = CHASTE_CONST(0.27000000000000002); // dimensionless + const double var_INaK__Fx_NaK_SL = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_INaK__Fx_NaK_jct = CHASTE_CONST(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__I_NaK_max = CHASTE_CONST(1.9099999999999999); // microA_per_microF + const double var_INaK__Km_Ko = CHASTE_CONST(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_INaK__Q10_Km_Nai = CHASTE_CONST(1.49); // dimensionless + const double var_INaK__Q10_NaK = CHASTE_CONST(1.6299999999999999); // dimensionless + const double var_INa__openProb = CHASTE_MATH::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 = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_INab__Fx_NaBk_jct = CHASTE_CONST(0.11); // dimensionless + const double var_INab__G_NaBk = CHASTE_CONST(0.00029700000000000001); // milliS_per_microF + const double var_IKr_Rr_gate__Rr = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.4732142857142858) + CHASTE_CONST(0.044642857142857144) * var_chaste_interface__cell__V)); // dimensionless + const double var_IK1__G_K1 = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::Sqrt(NV_Ith_S(mParameters, 8)) * NV_Ith_S(mParameters, 18); // milliS_per_microF + const double var_IKr__G_IKr = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::Sqrt(NV_Ith_S(mParameters, 8)) * NV_Ith_S(mParameters, 19); // milliS_per_microF + const double var_INaK__sigma = -CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(0.01485884101040119) * NV_Ith_S(mParameters, 9)); // dimensionless + const double var_ICaL__Q_CaL = CHASTE_MATH::Pow(var_ICaL__Q10_CaL, (-31 + CHASTE_CONST(0.10000000000000001) * NV_Ith_S(mParameters, 23))); // dimensionless + const double var_ICaL__temp = CHASTE_CONST(0.45000000000000001) * CHASTE_MATH::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 * CHASTE_MATH::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 + CHASTE_MATH::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 * CHASTE_MATH::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 + CHASTE_MATH::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) * CHASTE_MATH::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 + CHASTE_MATH::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 * CHASTE_MATH::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 + CHASTE_MATH::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 * CHASTE_MATH::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 + CHASTE_MATH::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_ICaL__i_CaL_converted = CHASTE_CAP() * var_ICaL__i_CaL; // uA_per_cm2 + const double var_ICap__Q_SLCaP = CHASTE_MATH::Pow(var_ICap__Q10_SLCaP, (-31 + CHASTE_CONST(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 + CHASTE_MATH::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 + CHASTE_MATH::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_ICap__i_Cap_converted = CHASTE_CAP() * var_ICap__i_Cap; // uA_per_cm2 + const double var_IKs__E_Ks = NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23) * CHASTE_MATH::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 = CHASTE_MATH::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 = CHASTE_MATH::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_IKs__i_Ks_converted = CHASTE_CAP() * var_IKs__i_Ks; // uA_per_cm2 + const double var_INaCa__Q_NCX = CHASTE_MATH::Pow(var_INaCa__Q10_NCX, (-31 + CHASTE_CONST(0.10000000000000001) * NV_Ith_S(mParameters, 23))); // dimensionless + const double var_INaCa__temp_SL = (CHASTE_MATH::Pow(var_chaste_interface__Na_buffer__Na_SL, var_INaCa__HNa) * NV_Ith_S(mParameters, 6) * CHASTE_MATH::Exp(var_INaCa__eta * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23))) - CHASTE_MATH::Pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * var_chaste_interface__Ca_buffer__Ca_SL * CHASTE_MATH::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 * CHASTE_MATH::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 / (CHASTE_MATH::Pow(var_chaste_interface__Na_buffer__Na_SL, var_INaCa__HNa) * var_INaCa__K_mCao + CHASTE_MATH::Pow(var_chaste_interface__Na_buffer__Na_SL, var_INaCa__HNa) * NV_Ith_S(mParameters, 6) + CHASTE_MATH::Pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * var_chaste_interface__Ca_buffer__Ca_SL + CHASTE_MATH::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 + CHASTE_MATH::Pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * (1 + CHASTE_MATH::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 = (CHASTE_MATH::Pow(var_chaste_interface__Na_buffer__Na_jct, var_INaCa__HNa) * NV_Ith_S(mParameters, 6) * CHASTE_MATH::Exp(var_INaCa__eta * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23))) - CHASTE_MATH::Pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * var_chaste_interface__Ca_buffer__Ca_jct * CHASTE_MATH::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 * CHASTE_MATH::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 / (CHASTE_MATH::Pow(var_chaste_interface__Na_buffer__Na_jct, var_INaCa__HNa) * var_INaCa__K_mCao + CHASTE_MATH::Pow(var_chaste_interface__Na_buffer__Na_jct, var_INaCa__HNa) * NV_Ith_S(mParameters, 6) + CHASTE_MATH::Pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * var_chaste_interface__Ca_buffer__Ca_jct + CHASTE_MATH::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 + CHASTE_MATH::Pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * (1 + CHASTE_MATH::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_INaCa__i_NaCa_converted = CHASTE_CAP() * var_INaCa__i_NaCa; // uA_per_cm2 + const double var_INaK__Q_Km_Nai = CHASTE_MATH::Pow(var_INaK__Q10_Km_Nai, (-31 + CHASTE_CONST(0.10000000000000001) * NV_Ith_S(mParameters, 23))); // dimensionless + const double var_INaK__Q_NaK = CHASTE_MATH::Pow(var_INaK__Q10_NaK, (-31 + CHASTE_CONST(0.10000000000000001) * NV_Ith_S(mParameters, 23))); // dimensionless + const double var_INaK__f_NaK = 1 / (1 + CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(0.10000000000000001) * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23))) + CHASTE_CONST(0.036499999999999998) * var_INaK__sigma * CHASTE_MATH::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 + CHASTE_MATH::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 + CHASTE_MATH::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_reversal_potentials__E_Ca_SL = CHASTE_CONST(0.5) * NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23) * CHASTE_MATH::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_reversal_potentials__E_Ca_jct = CHASTE_CONST(0.5) * NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23) * CHASTE_MATH::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_ICab__i_Cab_converted = CHASTE_CAP() * var_ICab__i_Cab; // uA_per_cm2 + const double var_reversal_potentials__E_Cl = -NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23) * CHASTE_MATH::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_IClb__i_Clb_converted = CHASTE_CAP() * var_IClb__i_Clb; // uA_per_cm2 + const double var_reversal_potentials__E_K = NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23) * CHASTE_MATH::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 = CHASTE_CONST(1.02) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__cell__V - CHASTE_CONST(0.23849999999999999) * var_reversal_potentials__E_K)); // per_millisecond + const double var_IK1_K1_gate__beta_K1 = (CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__cell__V - CHASTE_CONST(0.061749999999999999) * var_reversal_potentials__E_K) + CHASTE_CONST(0.49124000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__cell__V - CHASTE_CONST(0.080320000000000003) * var_reversal_potentials__E_K)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(0.51429999999999998) * var_reversal_potentials__E_K - CHASTE_CONST(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_IK1__i_K1_converted = CHASTE_CAP() * 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_IKr__i_Kr_converted = CHASTE_CAP() * 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_Itof__i_tof_converted = CHASTE_CAP() * var_Itof__i_tof; // uA_per_cm2 + const double var_Itos__i_tos = (-var_reversal_potentials__E_K + var_chaste_interface__cell__V) * (CHASTE_CONST(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 = CHASTE_CAP() * 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) * CHASTE_MATH::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_reversal_potentials__E_Na_jct = NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23) * CHASTE_MATH::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_INa__i_Na_converted = CHASTE_CAP() * 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 var_INab__i_Nab_converted = CHASTE_CAP() * var_INab__i_Nab; // uA_per_cm2 + const double var_chaste_interface__i_ionic = CHASTE_CAP() * var_ICl_Ca__i_Cl_Ca + CHASTE_CAP() * 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) @@ -339,7 +341,7 @@ bool Dynamicshannon_wang_puglisi_weber_bers_2004FromCellMLCvode::registered = Mo { // Inputs: // Time units: millisecond - double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -432,217 +434,217 @@ bool Dynamicshannon_wang_puglisi_weber_bers_2004FromCellMLCvode::registered = Mo // 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__Bmax_Calsequestrin = CHASTE_CONST(0.14000000000000001); // millimolar + const double var_Ca_buffer__Bmax_SLB_SL = CHASTE_CONST(0.037400000000000003); // millimolar + const double var_Ca_buffer__Bmax_SLB_jct = CHASTE_CONST(0.0045999999999999999); // millimolar + const double var_Ca_buffer__Bmax_SLHigh_SL = CHASTE_CONST(0.0134); // millimolar + const double var_Ca_buffer__Bmax_SLHigh_jct = CHASTE_CONST(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__koff_SLB = CHASTE_CONST(1.3); // per_millisecond + const double var_Ca_buffer__koff_SLHigh = CHASTE_CONST(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__Fx_ICaL_SL = CHASTE_CONST(0.10000000000000001); // dimensionless + const double var_ICaL__Fx_ICaL_jct = CHASTE_CONST(0.90000000000000002); // dimensionless + const double var_ICaL__PNa = CHASTE_CONST(1.4999999999999999e-8); // litre_per_farad_millisecond + const double var_ICaL__Q10_CaL = CHASTE_CONST(1.8); // dimensionless + const double var_ICaL__gamma_Cai = CHASTE_CONST(0.34100000000000003); // dimensionless + const double var_ICaL__gamma_Cao = CHASTE_CONST(0.34100000000000003); // dimensionless + const double var_ICaL__gamma_Nai = CHASTE_CONST(0.75); // dimensionless + const double var_ICaL__gamma_Nao = CHASTE_CONST(0.75); // dimensionless + const double d_dt_chaste_interface_var_ICaL_fCa_gate__fCaB_SL = -CHASTE_CONST(0.011900000000000001) * var_chaste_interface__ICaL_fCa_gate__fCaB_SL + CHASTE_CONST(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 = -CHASTE_CONST(0.011900000000000001) * var_chaste_interface__ICaL_fCa_gate__fCaB_jct + CHASTE_CONST(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_ICab__Fx_CaBk_SL = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_ICab__Fx_CaBk_jct = CHASTE_CONST(0.11); // dimensionless + const double var_ICab__G_CaBk = CHASTE_CONST(0.00025129999999999998); // milliS_per_microF + const double var_ICap__Fx_SLCaP_SL = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_ICap__Fx_SLCaP_jct = CHASTE_CONST(0.11); // dimensionless + const double var_ICap__H = CHASTE_CONST(1.6000000000000001); // dimensionless + const double var_ICap__Km = CHASTE_CONST(0.00050000000000000001); // millimolar + const double var_ICap__Q10_SLCaP = CHASTE_CONST(2.3500000000000001); // dimensionless + const double var_ICap__V_maxAF = CHASTE_CONST(0.067299999999999999); // microA_per_microF + const double var_INa__Fx_Na_SL = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_INa__Fx_Na_jct = CHASTE_CONST(0.11); // dimensionless + const double var_INaCa__Fx_NCX_SL = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_INaCa__Fx_NCX_jct = CHASTE_CONST(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_INaCa__K_mCai = CHASTE_CONST(0.0035899999999999999); // millimolar + const double var_INaCa__K_mCao = CHASTE_CONST(1.3); // millimolar + const double var_INaCa__K_mNai = CHASTE_CONST(12.289999999999999); // millimolar + const double var_INaCa__K_mNao = CHASTE_CONST(87.5); // millimolar + const double var_INaCa__Kd_act = CHASTE_CONST(0.00025599999999999999); // millimolar + const double var_INaCa__Ka_SL = 1 / (1 + CHASTE_MATH::Pow(var_INaCa__Kd_act, 3) / CHASTE_MATH::Pow(var_chaste_interface__Ca_buffer__Ca_SL, 3)); // dimensionless + const double var_INaCa__Ka_jct = 1 / (1 + CHASTE_MATH::Pow(var_INaCa__Kd_act, 3) / CHASTE_MATH::Pow(var_chaste_interface__Ca_buffer__Ca_jct, 3)); // dimensionless + const double var_INaCa__Q10_NCX = CHASTE_CONST(1.5700000000000001); // dimensionless + const double var_INaCa__eta = CHASTE_CONST(0.34999999999999998); // dimensionless + const double var_INaCa__ksat = CHASTE_CONST(0.27000000000000002); // dimensionless + const double var_INaK__Fx_NaK_SL = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_INaK__Fx_NaK_jct = CHASTE_CONST(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__I_NaK_max = CHASTE_CONST(1.9099999999999999); // microA_per_microF + const double var_INaK__Km_Ko = CHASTE_CONST(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_INaK__Q10_Km_Nai = CHASTE_CONST(1.49); // dimensionless + const double var_INaK__Q10_NaK = CHASTE_CONST(1.6299999999999999); // dimensionless + const double var_INa__openProb = CHASTE_MATH::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 = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_INab__Fx_NaBk_jct = CHASTE_CONST(0.11); // dimensionless + const double var_INab__G_NaBk = CHASTE_CONST(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_Jpump_SR__H = CHASTE_CONST(1.7869999999999999); // dimensionless + const double var_Jpump_SR__Kmf = CHASTE_CONST(0.00024600000000000002); // millimolar + const double var_Jpump_SR__Kmr = CHASTE_CONST(1.7); // millimolar + const double var_Jpump_SR__Q10_SRCaP = CHASTE_CONST(2.6000000000000001); // dimensionless + const double var_Jrel_SR__EC50_SR = CHASTE_CONST(0.45000000000000001); // millimolar + const double var_Jrel_SR__HSR = CHASTE_CONST(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__kCaSR = -(-var_Jrel_SR__Min_SR + var_Jrel_SR__Max_SR) / (1 + CHASTE_MATH::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 = CHASTE_CONST(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__kim = CHASTE_CONST(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__kom = CHASTE_CONST(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 + CHASTE_MATH::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 + CHASTE_MATH::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 - CHASTE_MATH::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__Bmax_SL = CHASTE_CONST(1.6499999999999999); // millimolar + const double var_Na_buffer__Bmax_jct = CHASTE_CONST(7.5609999999999999); // millimolar + const double var_Na_buffer__koff = CHASTE_CONST(0.001); // per_millisecond + const double var_Na_buffer__kon = CHASTE_CONST(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 var_ICaL_d_gate__d_infinity = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4166666666666665) - CHASTE_CONST(0.16666666666666666) * var_chaste_interface__cell__V)); // dimensionless + const double var_ICaL_d_gate__tau_d = CHASTE_CONST(28.571428571428569) * (1 - CHASTE_MATH::Exp(-CHASTE_CONST(2.4166666666666665) - CHASTE_CONST(0.16666666666666666) * var_chaste_interface__cell__V)) * var_ICaL_d_gate__d_infinity / (CHASTE_CONST(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 var_ICaL_f_gate__f_infinity = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(9.7388888888888889) + CHASTE_CONST(0.27777777777777779) * var_chaste_interface__cell__V)) + CHASTE_CONST(0.59999999999999998) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(2.5) - CHASTE_CONST(0.050000000000000003) * var_chaste_interface__cell__V)); // dimensionless + const double var_ICaL_f_gate__tau_f = 1 / (CHASTE_CONST(0.02) + CHASTE_CONST(0.019699999999999999) * CHASTE_MATH::Exp(-CHASTE_CONST(0.23877882250000002) * CHASTE_MATH::Pow((1 + CHASTE_CONST(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 var_IKr_Xr_gate__Xr_infinity = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(6.666666666666667) - CHASTE_CONST(0.13333333333333333) * var_chaste_interface__cell__V)); // dimensionless + const double var_IKr_Xr_gate__tau_Xr = 1 / (CHASTE_CONST(0.00060999999999999997) * (10 + var_chaste_interface__cell__V) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(1.45) + CHASTE_CONST(0.14499999999999999) * var_chaste_interface__cell__V)) + CHASTE_CONST(0.0013799999999999999) * (7 + var_chaste_interface__cell__V) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(0.86099999999999999) - CHASTE_CONST(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 var_IKs_Xs_gate__Xs_infinity = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(0.089820359281437126) - CHASTE_CONST(0.059880239520958084) * var_chaste_interface__cell__V)); // dimensionless + const double var_IKs_Xs_gate__tau_Xs = 1 / (CHASTE_CONST(0.00013100000000000001) * (30 + var_chaste_interface__cell__V) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(2.0609999999999999) + CHASTE_CONST(0.068699999999999997) * var_chaste_interface__cell__V)) + CHASTE_CONST(7.1899999999999999e-5) * (30 + var_chaste_interface__cell__V) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(4.4399999999999995) - CHASTE_CONST(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__alpha_h = ((var_chaste_interface__cell__V < -40) ? (CHASTE_CONST(0.13500000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(11.764705882352942) + CHASTE_CONST(0.14705882352941177) * NV_Ith_S(mParameters, 16) - CHASTE_CONST(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 * CHASTE_MATH::Exp(CHASTE_CONST(0.34999999999999998) * var_chaste_interface__cell__V - CHASTE_CONST(0.34999999999999998) * NV_Ith_S(mParameters, 16)) + CHASTE_CONST(3.5600000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.079000000000000001) * var_chaste_interface__cell__V - CHASTE_CONST(0.079000000000000001) * NV_Ith_S(mParameters, 16))) : (CHASTE_CONST(7.6923076923076916) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.96036036036036043) + CHASTE_CONST(0.0900900900900901) * NV_Ith_S(mParameters, 16) - CHASTE_CONST(0.0900900900900901) * var_chaste_interface__cell__V)))); // per_millisecond + const double var_INa_h_gate__h_infinity = CHASTE_CONST(0.01) * NV_Ith_S(mParameters, 15) + (1 - CHASTE_CONST(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__alpha_j = ((var_chaste_interface__cell__V < -40) ? ((CHASTE_CONST(37.780000000000001) + var_chaste_interface__cell__V) * (-127140 * CHASTE_MATH::Exp(CHASTE_CONST(0.24440000000000001) * var_chaste_interface__cell__V - CHASTE_CONST(0.24440000000000001) * NV_Ith_S(mParameters, 16)) - CHASTE_CONST(3.4740000000000003e-5) * CHASTE_MATH::Exp(CHASTE_CONST(0.043909999999999998) * NV_Ith_S(mParameters, 16) - CHASTE_CONST(0.043909999999999998) * var_chaste_interface__cell__V)) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(24.640530000000002) + CHASTE_CONST(0.311) * var_chaste_interface__cell__V - CHASTE_CONST(0.311) * NV_Ith_S(mParameters, 16)))) : (0)); // per_millisecond + const double var_INa_j_gate__beta_j = ((var_chaste_interface__cell__V < -40) ? (CHASTE_CONST(0.1212) * CHASTE_MATH::Exp(CHASTE_CONST(0.01052) * NV_Ith_S(mParameters, 16) - CHASTE_CONST(0.01052) * var_chaste_interface__cell__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(5.5312920000000005) + CHASTE_CONST(0.13780000000000001) * NV_Ith_S(mParameters, 16) - CHASTE_CONST(0.13780000000000001) * var_chaste_interface__cell__V))) : (CHASTE_CONST(0.29999999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(2.5349999999999999e-7) * NV_Ith_S(mParameters, 16) - CHASTE_CONST(2.5349999999999999e-7) * var_chaste_interface__cell__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.2000000000000002) + CHASTE_CONST(0.10000000000000001) * NV_Ith_S(mParameters, 16) - CHASTE_CONST(0.10000000000000001) * var_chaste_interface__cell__V)))); // per_millisecond + const double var_INa_j_gate__j_infinity = CHASTE_CONST(0.01) * NV_Ith_S(mParameters, 15) + (1 - CHASTE_CONST(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__alpha_m = CHASTE_CONST(0.32000000000000001) * (CHASTE_CONST(47.130000000000003) + var_chaste_interface__cell__V) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(4.7130000000000001) - CHASTE_CONST(0.10000000000000001) * var_chaste_interface__cell__V)); // per_millisecond + const double var_INa_m_gate__beta_m = CHASTE_CONST(0.080000000000000002) * CHASTE_MATH::Exp(-CHASTE_CONST(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 var_Itof_X_gate__X_tof_infinity = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.20000000000000001) - CHASTE_CONST(0.066666666666666666) * var_chaste_interface__cell__V)); // dimensionless + const double var_Itof_X_gate__tau_X_tof = CHASTE_CONST(1.5) + CHASTE_CONST(3.5) * CHASTE_MATH::Exp(-CHASTE_CONST(0.0011111111111111111) * CHASTE_MATH::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 var_Itof_Y_gate__Y_tof_infinity = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(3.3500000000000001) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__cell__V)); // dimensionless + const double var_Itof_Y_gate__tau_Y_tof = 20 + 20 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(3.3500000000000001) + CHASTE_CONST(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 var_Itos_R_gate__R_tos_infinity = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(3.3500000000000001) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__cell__V)); // dimensionless + const double var_Itos_R_gate__tau_R_tos = 220 + 2800 / (1 + CHASTE_MATH::Exp(6 + CHASTE_CONST(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 var_Itos_X_gate__X_tos_infinity = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.20000000000000001) - CHASTE_CONST(0.066666666666666666) * var_chaste_interface__cell__V)); // dimensionless + const double var_Itos_X_gate__tau_X_tos = CHASTE_CONST(0.5) + 9 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(0.20000000000000001) + CHASTE_CONST(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 var_Itos_Y_gate__Y_tos_infinity = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(3.3500000000000001) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__cell__V)); // dimensionless + const double var_Itos_Y_gate__tau_Y_tos = 30 + 3000 / (1 + CHASTE_MATH::Exp(6 + CHASTE_CONST(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__Bmax_Calmodulin = CHASTE_CONST(0.024); // millimolar + const double var_cytosolic_Ca_buffer__Bmax_Myosin_Ca = CHASTE_CONST(0.14000000000000001); // millimolar + const double var_cytosolic_Ca_buffer__Bmax_Myosin_Mg = CHASTE_CONST(0.14000000000000001); // millimolar + const double var_cytosolic_Ca_buffer__Bmax_SRB = CHASTE_CONST(0.017100000000000001); // millimolar + const double var_cytosolic_Ca_buffer__Bmax_TroponinC = CHASTE_CONST(0.070000000000000007); // millimolar + const double var_cytosolic_Ca_buffer__Bmax_TroponinC_Ca_Mg_Ca = CHASTE_CONST(0.14000000000000001); // millimolar + const double var_cytosolic_Ca_buffer__Bmax_TroponinC_Ca_Mg_Mg = CHASTE_CONST(0.14000000000000001); // millimolar + const double var_cytosolic_Ca_buffer__koff_Calmodulin = CHASTE_CONST(0.23799999999999999); // per_millisecond + const double var_cytosolic_Ca_buffer__koff_Myosin_Ca = CHASTE_CONST(0.00046000000000000001); // per_millisecond + const double var_cytosolic_Ca_buffer__koff_Myosin_Mg = CHASTE_CONST(5.7000000000000003e-5); // per_millisecond + const double var_cytosolic_Ca_buffer__koff_SRB = CHASTE_CONST(0.059999999999999998); // per_millisecond + const double var_cytosolic_Ca_buffer__koff_TroponinC = CHASTE_CONST(0.019599999999999999); // per_millisecond + const double var_cytosolic_Ca_buffer__koff_TroponinC_Ca_Mg_Ca = CHASTE_CONST(3.1999999999999999e-5); // per_millisecond + const double var_cytosolic_Ca_buffer__koff_TroponinC_Ca_Mg_Mg = CHASTE_CONST(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__kon_Myosin_Ca = CHASTE_CONST(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_Myosin_Mg = CHASTE_CONST(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__kon_TroponinC = CHASTE_CONST(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__kon_TroponinC_Ca_Mg_Ca = CHASTE_CONST(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_cytosolic_Ca_buffer__kon_TroponinC_Ca_Mg_Mg = CHASTE_CONST(0.0030000000000000001); // per_millimolar_per_millisecond + const double var_indo_fluo_Ca_buffer_not_connected__Bmax_Fluo3_Cytosol = CHASTE_CONST(0.025000000000000001); // millimolar + const double var_indo_fluo_Ca_buffer_not_connected__Bmax_Fluo3_SL = CHASTE_CONST(0.00076999999999999996); // millimolar + const double var_indo_fluo_Ca_buffer_not_connected__Bmax_Fluo3_jct = CHASTE_CONST(2.0000000000000002e-5); // millimolar + const double var_indo_fluo_Ca_buffer_not_connected__Bmax_Indo1_Cytosol = CHASTE_CONST(0.025000000000000001); // millimolar + const double var_indo_fluo_Ca_buffer_not_connected__Bmax_Indo1_SL = CHASTE_CONST(0.00076999999999999996); // millimolar + const double var_indo_fluo_Ca_buffer_not_connected__Bmax_Indo1_jct = CHASTE_CONST(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__koff_Fluo3 = CHASTE_CONST(0.11); // per_millisecond + const double var_indo_fluo_Ca_buffer_not_connected__koff_Indo1 = CHASTE_CONST(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_ion_diffusion__J_Ca_SL_cytosol = CHASTE_CONST(3.7243000000000002e-12) * var_chaste_interface__Ca_buffer__Ca_SL - CHASTE_CONST(3.7243000000000002e-12) * var_chaste_interface__Ca_buffer__Cai; // millimole_per_millisecond + const double var_ion_diffusion__J_Ca_jct_SL = CHASTE_CONST(8.2413000000000004e-13) * var_chaste_interface__Ca_buffer__Ca_jct - CHASTE_CONST(8.2413000000000004e-13) * var_chaste_interface__Ca_buffer__Ca_SL; // millimole_per_millisecond + const double var_ion_diffusion__J_Na_SL_cytosol = CHASTE_CONST(1.6385999999999999e-12) * var_chaste_interface__Na_buffer__Na_SL - CHASTE_CONST(1.6385999999999999e-12) * var_chaste_interface__Na_buffer__Nai; // millimole_per_millisecond + const double var_ion_diffusion__J_Na_jct_SL = CHASTE_CONST(1.8312999999999999e-14) * var_chaste_interface__Na_buffer__Na_jct - CHASTE_CONST(1.8312999999999999e-14) * var_chaste_interface__Na_buffer__Na_SL; // millimole_per_millisecond + const double var_model_parameters__Cm_per_area = CHASTE_CONST(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_INaK__sigma = -CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(0.01485884101040119) * NV_Ith_S(mParameters, 9)); // dimensionless + const double var_ICaL__Q_CaL = CHASTE_MATH::Pow(var_ICaL__Q10_CaL, (-31 + CHASTE_CONST(0.10000000000000001) * NV_Ith_S(mParameters, 23))); // dimensionless + const double var_ICaL__temp = CHASTE_CONST(0.45000000000000001) * CHASTE_MATH::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 * CHASTE_MATH::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 + CHASTE_MATH::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 * CHASTE_MATH::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 + CHASTE_MATH::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 * CHASTE_MATH::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 + CHASTE_MATH::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 * CHASTE_MATH::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 + CHASTE_MATH::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 = CHASTE_MATH::Pow(var_ICap__Q10_SLCaP, (-31 + CHASTE_CONST(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 + CHASTE_MATH::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 + CHASTE_MATH::Pow((var_ICap__Km / var_chaste_interface__Ca_buffer__Ca_jct), var_ICap__H)); // microA_per_microF + const double var_INaCa__Q_NCX = CHASTE_MATH::Pow(var_INaCa__Q10_NCX, (-31 + CHASTE_CONST(0.10000000000000001) * NV_Ith_S(mParameters, 23))); // dimensionless + const double var_INaCa__temp_SL = (CHASTE_MATH::Pow(var_chaste_interface__Na_buffer__Na_SL, var_INaCa__HNa) * NV_Ith_S(mParameters, 6) * CHASTE_MATH::Exp(var_INaCa__eta * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23))) - CHASTE_MATH::Pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * var_chaste_interface__Ca_buffer__Ca_SL * CHASTE_MATH::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 * CHASTE_MATH::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 / (CHASTE_MATH::Pow(var_chaste_interface__Na_buffer__Na_SL, var_INaCa__HNa) * var_INaCa__K_mCao + CHASTE_MATH::Pow(var_chaste_interface__Na_buffer__Na_SL, var_INaCa__HNa) * NV_Ith_S(mParameters, 6) + CHASTE_MATH::Pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * var_chaste_interface__Ca_buffer__Ca_SL + CHASTE_MATH::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 + CHASTE_MATH::Pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * (1 + CHASTE_MATH::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 = (CHASTE_MATH::Pow(var_chaste_interface__Na_buffer__Na_jct, var_INaCa__HNa) * NV_Ith_S(mParameters, 6) * CHASTE_MATH::Exp(var_INaCa__eta * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23))) - CHASTE_MATH::Pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * var_chaste_interface__Ca_buffer__Ca_jct * CHASTE_MATH::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 * CHASTE_MATH::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 / (CHASTE_MATH::Pow(var_chaste_interface__Na_buffer__Na_jct, var_INaCa__HNa) * var_INaCa__K_mCao + CHASTE_MATH::Pow(var_chaste_interface__Na_buffer__Na_jct, var_INaCa__HNa) * NV_Ith_S(mParameters, 6) + CHASTE_MATH::Pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * var_chaste_interface__Ca_buffer__Ca_jct + CHASTE_MATH::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 + CHASTE_MATH::Pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * (1 + CHASTE_MATH::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 = CHASTE_MATH::Pow(var_INaK__Q10_Km_Nai, (-31 + CHASTE_CONST(0.10000000000000001) * NV_Ith_S(mParameters, 23))); // dimensionless + const double var_INaK__Q_NaK = CHASTE_MATH::Pow(var_INaK__Q10_NaK, (-31 + CHASTE_CONST(0.10000000000000001) * NV_Ith_S(mParameters, 23))); // dimensionless + const double var_INaK__f_NaK = 1 / (1 + CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(0.10000000000000001) * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23))) + CHASTE_CONST(0.036499999999999998) * var_INaK__sigma * CHASTE_MATH::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 + CHASTE_MATH::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 + CHASTE_MATH::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 = CHASTE_MATH::Pow(var_Jpump_SR__Q10_SRCaP, (-31 + CHASTE_CONST(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_model_parameters__cell_radius = CHASTE_CONST(10.25); // micrometre + const double var_model_parameters__Cm = CHASTE_CONST(2.0e-8) * CHASTE_CONST(CHASTE_MATH::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 = CHASTE_CONST(3.1415926540000002e-15) * CHASTE_MATH::Pow(var_model_parameters__cell_radius, 2) * var_model_parameters__cell_length; // liter + const double var_model_parameters__Vol_SL = CHASTE_CONST(0.02) * var_model_parameters__Vol_Cell; // liter + const double var_model_parameters__Vol_SR = CHASTE_CONST(0.035000000000000003) * var_model_parameters__Vol_Cell; // liter + const double var_model_parameters__Vol_cytosol = CHASTE_CONST(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 @@ -651,12 +653,12 @@ bool Dynamicshannon_wang_puglisi_weber_bers_2004FromCellMLCvode::registered = Mo 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 var_Jpump_SR__j_pump_SR = (CHASTE_MATH::Pow((var_chaste_interface__Ca_buffer__Cai / var_Jpump_SR__Kmf), var_Jpump_SR__H) - CHASTE_MATH::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 + CHASTE_MATH::Pow((var_chaste_interface__Ca_buffer__Cai / var_Jpump_SR__Kmf), var_Jpump_SR__H) + CHASTE_MATH::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_model_parameters__Vol_jct = CHASTE_CONST(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 + CHASTE_CONST(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 + CHASTE_CONST(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 @@ -674,19 +676,19 @@ bool Dynamicshannon_wang_puglisi_weber_bers_2004FromCellMLCvode::registered = Mo 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_reversal_potentials__E_Ca_SL = CHASTE_CONST(0.5) * NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23) * CHASTE_MATH::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 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 - CHASTE_CONST(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 = CHASTE_CONST(0.5) * NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23) * CHASTE_MATH::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 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 - CHASTE_CONST(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) * CHASTE_MATH::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_reversal_potentials__E_Na_jct = NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23) * CHASTE_MATH::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 @@ -697,46 +699,46 @@ bool Dynamicshannon_wang_puglisi_weber_bers_2004FromCellMLCvode::registered = Mo } 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__PK = CHASTE_CONST(2.7000000000000001e-7); // litre_per_farad_millisecond + const double var_ICaL__gamma_Ki = CHASTE_CONST(0.75); // dimensionless + const double var_ICaL__gamma_Ko = CHASTE_CONST(0.75); // dimensionless + const double var_ICl_Ca__Fx_Cl_SL = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_ICl_Ca__Fx_Cl_jct = CHASTE_CONST(0.11); // dimensionless + const double var_ICl_Ca__G_Cl = CHASTE_CONST(0.109625); // milliS_per_microF + const double var_ICl_Ca__Kd_ClCa = CHASTE_CONST(0.10000000000000001); // millimolar + const double var_IKs__Fx_Ks_SL = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_IKs__Fx_Ks_jct = CHASTE_CONST(0.11); // dimensionless + const double var_IKs__pCa_SL = 3 - CHASTE_MATH::Log10(var_chaste_interface__Ca_buffer__Ca_SL); // dimensionless + const double var_IKs__G_Ks_SL = (CHASTE_CONST(0.057000000000000002) + CHASTE_CONST(0.19) / (1 + CHASTE_MATH::Exp(-12 + CHASTE_CONST(1.6666666666666667) * var_IKs__pCa_SL))) * NV_Ith_S(mParameters, 20); // milliS_per_microF + const double var_IKs__pCa_jct = 3 - CHASTE_MATH::Log10(var_chaste_interface__Ca_buffer__Ca_jct); // dimensionless + const double var_IKs__G_Ks_jct = (CHASTE_CONST(0.057000000000000002) + CHASTE_CONST(0.19) / (1 + CHASTE_MATH::Exp(-12 + CHASTE_CONST(1.6666666666666667) * var_IKs__pCa_jct))) * NV_Ith_S(mParameters, 20); // milliS_per_microF + const double var_IKs__pKNa = CHASTE_CONST(0.018329999999999999); // dimensionless + const double var_IKr_Rr_gate__Rr = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.4732142857142858) + CHASTE_CONST(0.044642857142857144) * var_chaste_interface__cell__V)); // dimensionless + const double var_cell__i_Stim_converted = CHASTE_STIM(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_cell__i_Stim = var_cell__i_Stim_converted / CHASTE_CAP(); // microA_per_microF + const double var_IK1__G_K1 = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::Sqrt(NV_Ith_S(mParameters, 8)) * NV_Ith_S(mParameters, 18); // milliS_per_microF + const double var_IKr__G_IKr = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::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) * CHASTE_MATH::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 + CHASTE_MATH::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__E_Ks = NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23) * CHASTE_MATH::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 = CHASTE_MATH::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 = CHASTE_MATH::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_reversal_potentials__E_Cl = -NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23) * CHASTE_MATH::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_reversal_potentials__E_K = NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23) * CHASTE_MATH::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 = CHASTE_CONST(1.02) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__cell__V - CHASTE_CONST(0.23849999999999999) * var_reversal_potentials__E_K)); // per_millisecond + const double var_IK1_K1_gate__beta_K1 = (CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__cell__V - CHASTE_CONST(0.061749999999999999) * var_reversal_potentials__E_K) + CHASTE_CONST(0.49124000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__cell__V - CHASTE_CONST(0.080320000000000003) * var_reversal_potentials__E_K)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(0.51429999999999998) * var_reversal_potentials__E_K - CHASTE_CONST(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_Itos__i_tos = (-var_reversal_potentials__E_K + var_chaste_interface__cell__V) * (CHASTE_CONST(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 @@ -791,7 +793,7 @@ bool Dynamicshannon_wang_puglisi_weber_bers_2004FromCellMLCvode::registered = Mo 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)); + double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -882,177 +884,177 @@ bool Dynamicshannon_wang_puglisi_weber_bers_2004FromCellMLCvode::registered = Mo 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_x1 = 1 + CHASTE_CONST(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_x3 = 1 + CHASTE_CONST(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_x5 = -var_chaste_interface__Itos_Y_gate__Y_tos - CHASTE_CONST(0.5) * var_chaste_interface__Itos_R_gate__R_tos; + const double var_x6 = CHASTE_MATH::Exp(-CHASTE_CONST(7.0000000000000009) - CHASTE_CONST(1.6666666666666667) * CHASTE_MATH::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_x8 = CHASTE_CONST(0.057000000000000002) + CHASTE_CONST(0.19) / var_x7; + const double var_x9 = CHASTE_MATH::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_x11 = CHASTE_MATH::Exp(-CHASTE_CONST(7.0000000000000009) - CHASTE_CONST(1.6666666666666667) * CHASTE_MATH::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_x13 = CHASTE_CONST(0.057000000000000002) + CHASTE_CONST(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_x15 = CHASTE_MATH::Sqrt(NV_Ith_S(mParameters, 8)); + const double var_x16 = CHASTE_MATH::Exp(CHASTE_CONST(1.4732142857142858) + CHASTE_CONST(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_x18 = CHASTE_CONST(0.43033148291193518) / var_x17; + const double var_x19 = CHASTE_MATH::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_x22 = CHASTE_MATH::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_x26 = CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__cell__V - CHASTE_CONST(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_x29 = CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) - CHASTE_CONST(0.51429999999999998) * var_chaste_interface__cell__V + CHASTE_CONST(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_x32 = CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__cell__V - CHASTE_CONST(0.061749999999999999) * var_x25); + const double var_x33 = CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__cell__V - CHASTE_CONST(0.080320000000000003) * var_x25); + const double var_x34 = var_x32 + CHASTE_CONST(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_x36 = 1 / (var_x35 + CHASTE_CONST(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_x39 = CHASTE_MATH::Exp(CHASTE_CONST(0.34999999999999998) * var_x38 * var_chaste_interface__cell__V); + const double var_x40 = CHASTE_MATH::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_x43 = CHASTE_CONST(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_x45 = CHASTE_MATH::Exp(-CHASTE_CONST(0.65000000000000002) * var_x44); + const double var_x46 = CHASTE_MATH::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_x49 = CHASTE_CONST(0.65000000000000002) * var_x38; + const double var_x50 = (1 + CHASTE_CONST(278.55153203342621) * var_chaste_interface__Ca_buffer__Ca_jct) * var_chaste_interface__Ca_buffer__Ca_jct; + const double var_x51 = 1 + CHASTE_CONST(0.00053869674493876331) * var_x40; + const double var_x52 = CHASTE_CONST(0.0035899999999999999) * var_x46; + const double var_x53 = 1 / (var_x41 + var_x47 + CHASTE_CONST(669921.875) * var_x50 + CHASTE_CONST(1.3) * var_x40 + var_x51 * var_x52); + const double var_x54 = 1 + CHASTE_CONST(1.6777215999999998e-11) / CHASTE_MATH::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_x56 = 1 + CHASTE_CONST(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_x58 = -31 + CHASTE_CONST(0.10000000000000001) * NV_Ith_S(mParameters, 23); + const double var_x59 = CHASTE_MATH::Pow(CHASTE_CONST(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_x65 = CHASTE_MATH::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_x70 = (1 + CHASTE_CONST(278.55153203342621) * var_chaste_interface__Ca_buffer__Ca_SL) * var_chaste_interface__Ca_buffer__Ca_SL; + const double var_x71 = 1 + CHASTE_CONST(0.00053869674493876331) * var_x65; + const double var_x72 = 1 / (var_x66 + var_x68 + CHASTE_CONST(669921.875) * var_x70 + CHASTE_CONST(1.3) * var_x65 + var_x52 * var_x71); + const double var_x73 = 1 + CHASTE_CONST(1.6777215999999998e-11) / CHASTE_MATH::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_x78 = CHASTE_MATH::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_x81 = CHASTE_MATH::Pow(CHASTE_CONST(1.49), (-124 + CHASTE_CONST(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_x83 = var_x81 * CHASTE_MATH::Pow(var_x82, 4); + const double var_x84 = CHASTE_CONST(0.10000000000000001) * var_chaste_interface__cell__V; + const double var_x85 = CHASTE_MATH::Exp(-var_x38 * var_x84); + const double var_x86 = CHASTE_MATH::Exp(CHASTE_CONST(0.01485884101040119) * NV_Ith_S(mParameters, 9)); + const double var_x87 = CHASTE_MATH::Exp(-var_x44); + const double var_x88 = 1 + CHASTE_CONST(0.1245) * var_x85 + CHASTE_CONST(0.036499999999999998) * var_x87 * (-CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * var_x86); + const double var_x89 = CHASTE_MATH::Pow(CHASTE_CONST(1.6299999999999999), var_x58) * NV_Ith_S(mParameters, 8) / (CHASTE_CONST(1.5) + NV_Ith_S(mParameters, 8)); + const double var_x90 = var_x89 * (CHASTE_CONST(0.012450000000000001) * var_x38 * var_x85 + var_x38 * var_x87 * (-CHASTE_CONST(0.0052142857142857138) + CHASTE_CONST(0.0052142857142857138) * var_x86)) / CHASTE_MATH::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_x93 = var_x81 * CHASTE_MATH::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_x95 = CHASTE_MATH::Exp(var_x44); + const double var_x96 = CHASTE_CONST(0.75) * var_x95; + const double var_x97 = -CHASTE_CONST(0.75) * NV_Ith_S(mParameters, 8) + var_x96 * NV_Ith_S(mParameters, 5); + const double var_x98 = var_x37 * CHASTE_MATH::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_x101 = CHASTE_MATH::Pow(CHASTE_CONST(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_x107 = 1 - CHASTE_CONST(0.10000000000000001) * var_chaste_interface__ICaL_fCa_gate__fCaB_SL - CHASTE_CONST(0.90000000000000002) * var_chaste_interface__ICaL_fCa_gate__fCaB_jct; + const double var_x108 = CHASTE_CONST(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_x111 = var_x38 * var_x45 * var_x60 / CHASTE_MATH::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_x117 = CHASTE_MATH::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_x122 = -CHASTE_CONST(0.34100000000000003) * NV_Ith_S(mParameters, 6); + const double var_x123 = CHASTE_CONST(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_x125 = CHASTE_CONST(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_x131 = CHASTE_CONST(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_x134 = CHASTE_MATH::Pow(NV_Ith_S(mParameters, 10), 3); + const double var_x135 = CHASTE_MATH::Pow(NV_Ith_S(mParameters, 11), (-2)); + const double var_x136 = CHASTE_MATH::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_x138 = CHASTE_MATH::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_x140 = CHASTE_CONST(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_x142 = CHASTE_CONST(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_x144 = var_x117 * var_x143 * NV_Ith_S(mParameters, 12) / CHASTE_MATH::Pow(var_x118, 2); + const double var_x145 = CHASTE_CONST(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_x147 = CHASTE_CONST(3.2400000000000002) * var_x144 * var_x146; + const double var_x148 = -CHASTE_CONST(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_x151 = CHASTE_CONST(6.7499999999999994e-10) * var_x150; + const double var_x152 = CHASTE_CONST(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_x157 = CHASTE_CONST(6.0749999999999998e-9) * var_x128; + const double var_x158 = CHASTE_CONST(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_x160 = var_x156 * var_x157 - CHASTE_CONST(6.0749999999999998e-9) * var_x153 * var_x159 + var_x139 * var_x158 * var_chaste_interface__Na_buffer__Na_jct; + const double var_x161 = -var_x24 * CHASTE_MATH::Log(var_x82 * NV_Ith_S(mParameters, 9)) + var_chaste_interface__cell__V; + const double var_x162 = CHASTE_CONST(0.11) * var_x161; + const double var_x163 = -var_x24 * CHASTE_MATH::Log(var_x92 * NV_Ith_S(mParameters, 9)) + var_chaste_interface__cell__V; + const double var_x164 = CHASTE_CONST(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_x167 = var_x165 * CHASTE_MATH::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_x170 = 1 / (CHASTE_CONST(0.018329999999999999) * var_chaste_interface__Na_buffer__Nai + NV_Ith_S(mParameters, 5)); + const double var_x171 = -var_x24 * CHASTE_MATH::Log(var_x170 * (CHASTE_CONST(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; @@ -1074,284 +1076,284 @@ bool Dynamicshannon_wang_puglisi_weber_bers_2004FromCellMLCvode::registered = Mo 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_x193 = CHASTE_MATH::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_x195 = CHASTE_CONST(5.8017639429904805e-6) * var_x46; + const double var_x196 = -CHASTE_CONST(3.9000000000000004) * var_x193 - var_x193 * var_x194 - var_x193 * var_x195; + const double var_x197 = CHASTE_CONST(5.3588338192419823e-9) * var_x46; + const double var_x198 = var_x109 * var_x75 / CHASTE_MATH::Pow((var_x70 + CHASTE_CONST(1.9405247813411081e-6) * var_x65 + CHASTE_CONST(1.4927113702623908e-6) * var_x66 + CHASTE_CONST(1.4927113702623908e-6) * var_x68 + var_x197 * var_x71), 2); + const double var_x199 = CHASTE_CONST(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_x203 = var_x202 * var_x92 * var_x93 / CHASTE_MATH::Pow((CHASTE_CONST(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_x205 = CHASTE_CONST(0.89000000000000001) * var_x21; + const double var_x206 = CHASTE_CONST(0.00026433000000000001) * var_x204 + var_x152 * var_x191 + var_x204 * var_x205; + const double var_x207 = CHASTE_MATH::Pow(var_chaste_interface__Na_buffer__Na_jct, 2); + const double var_x208 = -CHASTE_CONST(3.9000000000000004) * var_x207 - var_x194 * var_x207 - var_x195 * var_x207; + const double var_x209 = var_x113 * var_x62 / CHASTE_MATH::Pow((var_x50 + CHASTE_CONST(1.9405247813411081e-6) * var_x40 + CHASTE_CONST(1.4927113702623908e-6) * var_x41 + CHASTE_CONST(1.4927113702623908e-6) * var_x47 + var_x197 * var_x51), 2); + const double var_x210 = CHASTE_CONST(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_x212 = var_x202 * var_x82 * var_x83 / CHASTE_MATH::Pow((CHASTE_CONST(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_x214 = CHASTE_CONST(0.11) * var_x21; + const double var_x215 = CHASTE_CONST(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_x217 = var_x24 * CHASTE_MATH::Log(NV_Ith_S(mParameters, 7) / NV_Ith_S(mParameters, 4)) + var_chaste_interface__cell__V; + const double var_x218 = var_x171 * var_x9 / CHASTE_MATH::Log(10); + const double var_x219 = var_x110 * var_x61 / (CHASTE_MATH::Pow(var_x73, 2) * CHASTE_MATH::Pow(var_chaste_interface__Ca_buffer__Ca_SL, 4)); + const double var_x220 = CHASTE_CONST(669921.875) + var_x46; + const double var_x221 = -var_x220 - CHASTE_CONST(373215529.24791086) * var_chaste_interface__Ca_buffer__Ca_SL; + const double var_x222 = CHASTE_MATH::Pow(CHASTE_CONST(2.3500000000000001), var_x58); + const double var_x223 = CHASTE_MATH::Pow(var_x2, CHASTE_CONST(1.6000000000000001)); + const double var_x224 = CHASTE_CONST(0.00011182849999999999) * var_x2 * var_x24 + CHASTE_CONST(0.061380000000000011) * var_x141 * var_x180 + CHASTE_CONST(5.0104537825247566e-7) * var_x2 * var_x222 * var_x223 / CHASTE_MATH::Pow((1 + CHASTE_CONST(5.2281977629563632e-6) * var_x223), 2); + const double var_x225 = CHASTE_MATH::Pow(var_chaste_interface__Ca_buffer__Ca_jct, 2); + const double var_x226 = -var_x220 - CHASTE_CONST(373215529.24791086) * var_chaste_interface__Ca_buffer__Ca_jct; + const double var_x227 = var_x114 * var_x61 / (CHASTE_MATH::Pow(var_x54, 2) * CHASTE_MATH::Pow(var_chaste_interface__Ca_buffer__Ca_jct, 4)); + const double var_x228 = CHASTE_MATH::Pow(var_x0, CHASTE_CONST(1.6000000000000001)); + const double var_x229 = CHASTE_CONST(1.38215e-5) * var_x0 * var_x24 + CHASTE_CONST(0.55242000000000002) * var_x117 * var_x129 * var_chaste_interface__cell__V + CHASTE_CONST(6.1926956862665531e-8) * var_x0 * var_x222 * var_x228 / CHASTE_MATH::Pow((1 + CHASTE_CONST(5.2281977629563632e-6) * var_x228), 2); + const double var_x230 = CHASTE_CONST(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_x233 = CHASTE_MATH::Pow(var_chaste_interface__Ca_buffer__Cai, CHASTE_CONST(0.78699999999999992)); + const double var_x234 = CHASTE_MATH::Pow(var_chaste_interface__Ca_buffer__Ca_SR, CHASTE_CONST(1.7869999999999999)); + const double var_x235 = CHASTE_CONST(0.38742512113256738) * var_x234; + const double var_x236 = CHASTE_MATH::Pow(var_chaste_interface__Ca_buffer__Cai, CHASTE_CONST(1.7869999999999999)); + const double var_x237 = 1 / (1 + var_x235 + CHASTE_CONST(2814485.1633595936) * var_x236); + const double var_x238 = CHASTE_MATH::Pow(CHASTE_CONST(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_x241 = var_x239 * (-var_x235 + CHASTE_CONST(2814485.1633595936) * var_x236) / CHASTE_MATH::Pow((CHASTE_CONST(3.5530476870814998e-7) + var_x236 + CHASTE_CONST(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_x243 = CHASTE_CONST(2.3700000000000001) * var_chaste_interface__cytosolic_Ca_buffer__Ca_TroponinC_Ca_Mg + CHASTE_CONST(2.3700000000000001) * var_chaste_interface__cytosolic_Ca_buffer__Mg_TroponinC_Ca_Mg; + const double var_x244 = CHASTE_CONST(13.800000000000001) * var_chaste_interface__cytosolic_Ca_buffer__Ca_Myosin + CHASTE_CONST(13.800000000000001) * var_chaste_interface__cytosolic_Ca_buffer__Mg_Myosin; + const double var_x245 = CHASTE_MATH::Pow(var_chaste_interface__Ca_buffer__Ca_SR, CHASTE_CONST(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_x248 = CHASTE_CONST(0.019599999999999999) + CHASTE_CONST(32.700000000000003) * var_chaste_interface__Ca_buffer__Cai; + const double var_x249 = CHASTE_CONST(2.3700000000000001) * var_chaste_interface__Ca_buffer__Cai; + const double var_x250 = CHASTE_CONST(0.23799999999999999) + 34 * var_chaste_interface__Ca_buffer__Cai; + const double var_x251 = CHASTE_CONST(13.800000000000001) * var_chaste_interface__Ca_buffer__Cai; + const double var_x252 = CHASTE_CONST(0.059999999999999998) + 100 * var_chaste_interface__Ca_buffer__Cai; + const double var_x253 = CHASTE_MATH::Exp(-CHASTE_CONST(11.764705882352942) + CHASTE_CONST(0.14705882352941177) * NV_Ith_S(mParameters, 16) - CHASTE_CONST(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_x255 = ((var_x254) ? (CHASTE_CONST(0.13500000000000001) * var_x253) : (0)); + const double var_x256 = CHASTE_MATH::Exp(CHASTE_CONST(0.34999999999999998) * var_chaste_interface__cell__V - CHASTE_CONST(0.34999999999999998) * NV_Ith_S(mParameters, 16)); + const double var_x257 = CHASTE_MATH::Exp(CHASTE_CONST(0.079000000000000001) * var_chaste_interface__cell__V - CHASTE_CONST(0.079000000000000001) * NV_Ith_S(mParameters, 16)); + const double var_x258 = CHASTE_MATH::Exp(-CHASTE_CONST(0.96036036036036043) + CHASTE_CONST(0.0900900900900901) * NV_Ith_S(mParameters, 16) - CHASTE_CONST(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_x260 = ((var_x254) ? (310000 * var_x256 + CHASTE_CONST(3.5600000000000001) * var_x257) : (CHASTE_CONST(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_x262 = ((var_x254) ? (-CHASTE_CONST(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_x264 = CHASTE_CONST(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_x267 = ((var_x254) ? (CHASTE_CONST(0.28123999999999999) * var_x257 + 108500 * var_x256) : (CHASTE_CONST(0.693000693000693) * var_x258 / CHASTE_MATH::Pow(var_x259, 2))); + const double var_x268 = CHASTE_MATH::Exp(-CHASTE_CONST(5.5312920000000005) + CHASTE_CONST(0.13780000000000001) * NV_Ith_S(mParameters, 16) - CHASTE_CONST(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_x270 = CHASTE_MATH::Exp(CHASTE_CONST(0.01052) * NV_Ith_S(mParameters, 16) - CHASTE_CONST(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_x272 = CHASTE_MATH::Exp(-CHASTE_CONST(3.2000000000000002) - var_x84 + CHASTE_CONST(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_x274 = CHASTE_MATH::Exp(CHASTE_CONST(2.5349999999999999e-7) * NV_Ith_S(mParameters, 16) - CHASTE_CONST(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_x276 = ((var_x254) ? (CHASTE_CONST(0.1212) * var_x271) : (CHASTE_CONST(0.29999999999999999) * var_x275)); + const double var_x277 = CHASTE_CONST(37.780000000000001) + var_chaste_interface__cell__V; + const double var_x278 = CHASTE_MATH::Exp(CHASTE_CONST(0.24440000000000001) * var_chaste_interface__cell__V - CHASTE_CONST(0.24440000000000001) * NV_Ith_S(mParameters, 16)); + const double var_x279 = CHASTE_MATH::Exp(CHASTE_CONST(0.043909999999999998) * NV_Ith_S(mParameters, 16) - CHASTE_CONST(0.043909999999999998) * var_chaste_interface__cell__V); + const double var_x280 = -127140 * var_x278 - CHASTE_CONST(3.4740000000000003e-5) * var_x279; + const double var_x281 = CHASTE_MATH::Exp(CHASTE_CONST(24.640530000000002) + CHASTE_CONST(0.311) * var_chaste_interface__cell__V - CHASTE_CONST(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_x287 = ((var_x254) ? (var_x284 + var_x277 * var_x283 * (CHASTE_CONST(1.5254334000000001e-6) * var_x279 - CHASTE_CONST(31073.016) * var_x278) - CHASTE_CONST(0.311) * var_x277 * var_x280 * var_x281 / CHASTE_MATH::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_x290 = ((var_x254) ? (-CHASTE_CONST(0.001275024) * var_x271 + CHASTE_CONST(0.016701360000000002) * var_x268 * var_x270 / CHASTE_MATH::Pow(var_x269, 2)) : (-CHASTE_CONST(7.6049999999999996e-8) * var_x275 + CHASTE_CONST(0.029999999999999999) * var_x272 * var_x274 / CHASTE_MATH::Pow(var_x273, 2))); + const double var_x291 = CHASTE_MATH::Exp(-CHASTE_CONST(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_x294 = CHASTE_MATH::Exp(-CHASTE_CONST(0.090909090909090912) * var_chaste_interface__cell__V); + const double var_x295 = CHASTE_CONST(47.130000000000003) + var_chaste_interface__cell__V; + const double var_x296 = CHASTE_CONST(0.32000000000000001) * var_x293; + const double var_x297 = CHASTE_CONST(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_x299 = CHASTE_CONST(0.032000000000000001) * var_x291 * var_x295 / CHASTE_MATH::Pow(var_x292, 2); + const double var_x300 = var_x299 + CHASTE_CONST(0.0072727272727272727) * var_x294 - CHASTE_CONST(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_x302 = CHASTE_MATH::Exp(-CHASTE_CONST(6.666666666666667) - CHASTE_CONST(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_x304 = CHASTE_MATH::Exp(CHASTE_CONST(1.45) + CHASTE_CONST(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_x307 = CHASTE_MATH::Exp(-CHASTE_CONST(0.86099999999999999) - CHASTE_CONST(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_x312 = CHASTE_CONST(0.00060999999999999997) * var_x306 * var_x311 + CHASTE_CONST(0.0013799999999999999) * var_x309 * var_x310; + const double var_x313 = CHASTE_MATH::Exp(CHASTE_CONST(0.089820359281437126) - CHASTE_CONST(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_x315 = CHASTE_MATH::Exp(CHASTE_CONST(2.0609999999999999) + CHASTE_CONST(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_x318 = CHASTE_MATH::Exp(-CHASTE_CONST(4.4399999999999995) - CHASTE_CONST(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_x322 = CHASTE_CONST(0.00013100000000000001) * var_x317 * var_x321 + CHASTE_CONST(7.1899999999999999e-5) * var_x320 * var_x321; + const double var_x323 = CHASTE_CONST(0.20000000000000001) + CHASTE_CONST(0.066666666666666666) * var_chaste_interface__cell__V; + const double var_x324 = CHASTE_MATH::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_x327 = 1 / (CHASTE_CONST(0.5) + 9 * var_x326); + const double var_x328 = CHASTE_MATH::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_x330 = CHASTE_CONST(0.066666666666666666) * var_x328 / CHASTE_MATH::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_x332 = CHASTE_CONST(0.10000000000000001) * var_chaste_interface__cell__V; + const double var_x333 = CHASTE_MATH::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_x337 = CHASTE_MATH::Exp(CHASTE_CONST(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_x339 = CHASTE_MATH::Pow(var_x338, (-2)); + const double var_x340 = CHASTE_CONST(0.10000000000000001) * var_x337 * var_x339; + const double var_x341 = CHASTE_MATH::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_x345 = CHASTE_MATH::Exp(-CHASTE_CONST(0.0011111111111111111) * CHASTE_MATH::Pow(var_chaste_interface__cell__V, 2)); + const double var_x346 = 1 / (CHASTE_CONST(1.5) + CHASTE_CONST(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_x348 = CHASTE_MATH::Exp(-CHASTE_CONST(2.4166666666666665) - CHASTE_CONST(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_x354 = CHASTE_CONST(14.5) + var_chaste_interface__cell__V; + const double var_x355 = CHASTE_CONST(0.0058333333333333336) * var_x348 * var_x354; + const double var_x356 = CHASTE_CONST(0.019699999999999999) * CHASTE_MATH::Exp(-CHASTE_CONST(0.23877882250000002) * CHASTE_MATH::Pow((1 + CHASTE_CONST(0.068965517241379309) * var_chaste_interface__cell__V), 2)); + const double var_x357 = CHASTE_CONST(0.02) + var_x356; + const double var_x358 = CHASTE_MATH::Exp(CHASTE_CONST(9.7388888888888889) + CHASTE_CONST(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_x360 = CHASTE_MATH::Exp(CHASTE_CONST(2.5) - CHASTE_CONST(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_x363 = CHASTE_MATH::Pow(var_x362, CHASTE_CONST(2.5)); + const double var_x364 = 1 + CHASTE_CONST(0.13584112963311223) * var_x363; const double var_x365 = 1 / var_x364; - const double var_x366 = 7.5 - 7 * var_x365; + const double var_x366 = CHASTE_CONST(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_x370 = CHASTE_MATH::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_x372 = CHASTE_CONST(0.21130842387373014) * var_x225 * var_x371 / CHASTE_MATH::Pow((1 - CHASTE_CONST(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_x376 = CHASTE_CONST(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_x378 = CHASTE_CONST(CHASTE_MATH::Pi) * var_x23; + const double var_x379 = CHASTE_CONST(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_x383 = CHASTE_CONST(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_x386 = CHASTE_CONST(CHASTE_MATH::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_x388 = CHASTE_CONST(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_x391 = CHASTE_CONST(0.0001) * var_chaste_interface__Na_buffer__Na_SL_buf; + const double var_x392 = CHASTE_CONST(5.9492599172113663e-12) * var_x198; + const double var_x393 = CHASTE_CONST(0.001) + CHASTE_CONST(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_x396 = CHASTE_CONST(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_x398 = CHASTE_CONST(267.92223797719811) * var_x161; + const double var_x399 = CHASTE_CONST(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_x401 = CHASTE_CONST(0.0001) * var_chaste_interface__Na_buffer__Na_jct_buf; + const double var_x402 = CHASTE_CONST(7.3530178752050587e-13) * var_x209; + const double var_x403 = CHASTE_CONST(0.001) + CHASTE_CONST(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_x405 = CHASTE_CONST(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_x408 = var_x407 + CHASTE_CONST(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_x410 = CHASTE_CONST(31.054623038266147) * var_x378; + const double var_x411 = CHASTE_CONST(5.5898321468879066) * var_x124 * var_x386; + const double var_x412 = CHASTE_CONST(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_x416 = CHASTE_CONST(1.3) + var_x415; + const double var_x417 = CHASTE_CONST(0.029999999999999999) + var_x415; + const double var_x418 = CHASTE_CONST(1217.8283544418096) * var_x378; + const double var_x419 = CHASTE_CONST(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_x421 = CHASTE_CONST(4.9020119168033731e-13) * var_x209; + const double var_x422 = CHASTE_CONST(68.627450980392155) * var_x407 + CHASTE_CONST(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_x426 = CHASTE_CONST(1.3) + var_x425; + const double var_x427 = CHASTE_CONST(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_x429 = -CHASTE_CONST(2.5) + var_x428; + const double var_x430 = -var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Indo1_Cytosol - CHASTE_CONST(0.030769230769230767) * var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Indo1_SL - CHASTE_CONST(0.00078461538461538469) * var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Indo1_jct; + const double var_x431 = CHASTE_CONST(0.078461538461538471) * var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Indo1_jct; + const double var_x432 = CHASTE_CONST(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_x434 = -CHASTE_CONST(2.5024999999999999) + 100 * var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Indo1_SL; + const double var_x435 = -CHASTE_CONST(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_x437 = -CHASTE_CONST(2.5) + var_x436; + const double var_x438 = -var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_Cytosol - CHASTE_CONST(0.030769230769230767) * var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_SL - CHASTE_CONST(0.00078461538461538469) * var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_jct; + const double var_x439 = CHASTE_CONST(0.078461538461538471) * var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_jct; + const double var_x440 = CHASTE_CONST(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; + const double var_x442 = -CHASTE_CONST(2.5024999999999999) + 100 * var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_SL; + const double var_x443 = -CHASTE_CONST(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, 0, 0) = mSetVoltageDerivativeToZero ? 0.0 : (-CHASTE_CONST(0.00054830000000000005) + var_x145 + var_x147 - var_x126 - var_x132 - var_x140 - var_x142 - var_x154 - var_x160 - NV_Ith_S(mParameters, 13) - CHASTE_CONST(0.11) * var_x10 - CHASTE_CONST(0.11) * var_x64 - CHASTE_CONST(0.89000000000000001) * var_x14 - CHASTE_CONST(0.89000000000000001) * var_x77 - CHASTE_CONST(0.15619500000000003) * var_x112 - 1 * var_x21 - CHASTE_CONST(0.01205875) / var_x1 - CHASTE_CONST(0.019305000000000003) * var_x115 - CHASTE_CONST(0.097566250000000007) / var_x3 - CHASTE_CONST(0.21009999999999998) * var_x91 - CHASTE_CONST(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 - CHASTE_CONST(9.1125000000000004e-8) * var_x107 * var_x133 * var_x137 * NV_Ith_S(mParameters, 5) - CHASTE_CONST(0.4389381125701739) * var_x15 * var_x28 * var_x36 * NV_Ith_S(mParameters, 18) - CHASTE_CONST(0.42189361069797565) * var_x28 * var_x80 * (-var_x31 * (CHASTE_CONST(0.061749999999999999) * var_x32 + CHASTE_CONST(0.039456396800000001) * var_x33) + CHASTE_CONST(0.24326999999999999) * var_x26 * var_x78 - CHASTE_CONST(0.51429999999999998) * var_x29 * var_x34 / CHASTE_MATH::Pow(var_x30, 2)) * NV_Ith_S(mParameters, 18) / CHASTE_MATH::Pow((var_x28 + CHASTE_CONST(0.98039215686274506) * var_x35), 2) + CHASTE_CONST(0.10468673984798647) * var_x15 * var_x26 * var_x36 * var_x78 * var_x79 * NV_Ith_S(mParameters, 18) + CHASTE_CONST(0.019211226915711394) * var_x15 * var_x16 * var_x79 * NV_Ith_S(mParameters, 19) * var_chaste_interface__IKr_Xr_gate__Xr / CHASTE_MATH::Pow(var_x17, 2) + CHASTE_CONST(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) / CHASTE_MATH::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) / CHASTE_MATH::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 + CHASTE_CONST(3.125) * var_x300 * var_x301 / CHASTE_MATH::Pow((var_x301 + CHASTE_CONST(0.25) * var_x294), 2)) - var_x300 * (-var_chaste_interface__INa_m_gate__m + CHASTE_CONST(0.32000000000000001) * var_x293 * var_x295 * var_x298); + IJth(rJacobian, 5, 0) = (-var_chaste_interface__IKr_Xr_gate__Xr + 1 / var_x303) * (CHASTE_CONST(0.00060999999999999997) * var_x306 + CHASTE_CONST(0.0013799999999999999) * var_x309 - CHASTE_CONST(0.00016973999999999998) * var_x307 * var_x310 / CHASTE_MATH::Pow(var_x308, 2) - CHASTE_CONST(8.8449999999999995e-5) * var_x304 * var_x311 / CHASTE_MATH::Pow(var_x305, 2)) + CHASTE_CONST(0.13333333333333333) * var_x302 * var_x312 / CHASTE_MATH::Pow(var_x303, 2); + IJth(rJacobian, 6, 0) = (-var_chaste_interface__IKs_Xs_gate__Xs + 1 / var_x314) * (CHASTE_CONST(0.00013100000000000001) * var_x317 + CHASTE_CONST(7.1899999999999999e-5) * var_x320 - CHASTE_CONST(8.9997000000000013e-6) * var_x315 * var_x321 / CHASTE_MATH::Pow(var_x316, 2) - CHASTE_CONST(1.0641199999999999e-5) * var_x318 * var_x321 / CHASTE_MATH::Pow(var_x319, 2)) + CHASTE_CONST(0.059880239520958084) * var_x313 * var_x322 / CHASTE_MATH::Pow(var_x314, 2); + IJth(rJacobian, 7, 0) = var_x327 * var_x330 + CHASTE_CONST(0.0074074074074074077) * var_x324 * (-var_x331 - var_chaste_interface__Itos_X_gate__X_tos) / (CHASTE_MATH::Pow(var_x325, 2) * CHASTE_MATH::Pow((CHASTE_CONST(0.055555555555555552) + var_x326), 2)); + IJth(rJacobian, 8, 0) = -var_x336 * var_x340 + CHASTE_CONST(3.3333333333333335e-5) * var_x333 * var_x341 * (-var_x343 - var_chaste_interface__Itos_Y_gate__Y_tos) / CHASTE_MATH::Pow((CHASTE_CONST(0.01) + var_x335), 2); + IJth(rJacobian, 9, 0) = -var_x340 * var_x344 + CHASTE_CONST(3.5714285714285717e-5) * var_x333 * var_x341 * (-var_x343 - var_chaste_interface__Itos_R_gate__R_tos) / CHASTE_MATH::Pow((CHASTE_CONST(0.07857142857142857) + var_x335), 2); + IJth(rJacobian, 10, 0) = var_x330 * var_x346 + CHASTE_CONST(0.00063492063492063492) * var_x345 * (-var_x331 - var_chaste_interface__Itof_X_gate__X_tof) * var_chaste_interface__cell__V / CHASTE_MATH::Pow((CHASTE_CONST(0.42857142857142855) + var_x345), 2); + IJth(rJacobian, 11, 0) = -var_x340 * var_x347 + CHASTE_CONST(0.0050000000000000001) * var_x337 * var_x339 * (-var_x343 - var_chaste_interface__Itof_Y_gate__Y_tof) / CHASTE_MATH::Pow((1 + var_x342), 2); + IJth(rJacobian, 12, 0) = -var_x350 * var_x353 * var_x355 + CHASTE_CONST(0.035000000000000003) * var_x350 * var_x351 * var_x353 - var_x351 * var_x353 * var_x355 / CHASTE_MATH::Pow(var_x349, 2) + CHASTE_CONST(0.0058333333333333336) * var_x348 * var_x350 * var_x352 * var_x354; + IJth(rJacobian, 13, 0) = var_x357 * (CHASTE_CONST(0.029999999999999999) * var_x360 / CHASTE_MATH::Pow(var_x361, 2) - CHASTE_CONST(0.27777777777777779) * var_x358 / CHASTE_MATH::Pow(var_x359, 2)) + var_x356 * (-CHASTE_CONST(0.032935010000000001) - CHASTE_CONST(0.0022713799999999999) * var_chaste_interface__cell__V) * (-var_chaste_interface__ICaL_f_gate__f + 1 / var_x359 + CHASTE_CONST(0.59999999999999998) / var_x361); + IJth(rJacobian, 19, 0) = -var_x380 * (CHASTE_CONST(0.00026433000000000001) + var_x154 + var_x205 + CHASTE_CONST(2.6699999999999999) * var_x77 + CHASTE_CONST(5.0996999999999995) * var_x94 + CHASTE_CONST(0.46858500000000003) * var_x112); + IJth(rJacobian, 20, 0) = -var_x397 * (CHASTE_CONST(3.2670000000000004e-5) + var_x160 + var_x214 + CHASTE_CONST(0.33000000000000002) * var_x64 + CHASTE_CONST(0.63029999999999997) * var_x91 + CHASTE_CONST(0.057915000000000008) * var_x115); + IJth(rJacobian, 25, 0) = -var_x410 * (CHASTE_CONST(0.00022365699999999999) + var_x126 + var_x142 - var_x145 - CHASTE_CONST(1.78) * var_x77 - CHASTE_CONST(0.31239000000000006) * var_x112); + IJth(rJacobian, 26, 0) = -var_x418 * (CHASTE_CONST(2.7642999999999999e-5) + var_x132 + var_x140 - var_x147 - CHASTE_CONST(0.22) * var_x64 - CHASTE_CONST(0.038610000000000005) * var_x115); + IJth(rJacobian, 1, 1) = -CHASTE_CONST(7.2523935948689155) + var_x230 + var_x231 + var_x232 + var_x243 + var_x244 + CHASTE_CONST(6.3492962168146398e-7) * var_x242 - CHASTE_CONST(5029484.9869235931) * var_x233 * var_x240; + IJth(rJacobian, 24, 1) = -CHASTE_CONST(1.1791550116941473e-5) * var_x242 + CHASTE_CONST(93404721.185723871) * var_x233 * var_x237 * var_x238 * NV_Ith_S(mParameters, 2); + IJth(rJacobian, 25, 1) = CHASTE_CONST(5.6417918332397381); + IJth(rJacobian, 32, 1) = CHASTE_CONST(2.2890000000000006) - var_x230; + IJth(rJacobian, 33, 1) = CHASTE_CONST(0.33180000000000004) - var_x243; + IJth(rJacobian, 35, 1) = CHASTE_CONST(0.81600000000000006) - var_x231; + IJth(rJacobian, 36, 1) = CHASTE_CONST(1.9320000000000004) - var_x244; + IJth(rJacobian, 38, 1) = CHASTE_CONST(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); @@ -1362,26 +1364,26 @@ bool Dynamicshannon_wang_puglisi_weber_bers_2004FromCellMLCvode::registered = Mo 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, 0, 4) = mSetVoltageDerivativeToZero ? 0.0 : (-CHASTE_CONST(0.33000000000000002) * var_x168 - CHASTE_CONST(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, 19, 4) = -CHASTE_CONST(165.83168702434122) * var_x169 * var_x381; + IJth(rJacobian, 20, 4) = -CHASTE_CONST(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, 0, 6) = mSetVoltageDerivativeToZero ? 0.0 : (-CHASTE_CONST(0.22) * var_x172 * var_x8 - CHASTE_CONST(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, 0, 9) = mSetVoltageDerivativeToZero ? 0.0 : (var_x174 * (-CHASTE_CONST(0.5) * var_chaste_interface__cell__V + CHASTE_CONST(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, 12, 12) = -CHASTE_CONST(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; @@ -1392,71 +1394,71 @@ bool Dynamicshannon_wang_puglisi_weber_bers_2004FromCellMLCvode::registered = Mo 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, 0, 14) = mSetVoltageDerivativeToZero ? 0.0 : (CHASTE_CONST(1.2150000000000001e-8) * var_x192 + var_x120 * var_x181 + CHASTE_CONST(6.7499999999999994e-10) * var_x149 * var_x191); + IJth(rJacobian, 14, 14) = -CHASTE_CONST(0.011900000000000001) - CHASTE_CONST(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, 0, 15) = mSetVoltageDerivativeToZero ? 0.0 : (CHASTE_CONST(1.0935000000000001e-7) * var_x192 + CHASTE_CONST(6.0749999999999998e-9) * var_x156 * var_x180 + var_x120 * var_x131 * var_x180); + IJth(rJacobian, 15, 15) = -CHASTE_CONST(0.011900000000000001) - CHASTE_CONST(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, 16, 16) = -CHASTE_CONST(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, 16, 17) = -CHASTE_CONST(0.0050000000000000001); + IJth(rJacobian, 17, 17) = -CHASTE_CONST(0.065000000000000002) - var_x369; + IJth(rJacobian, 18, 17) = CHASTE_CONST(0.0050000000000000001); + IJth(rJacobian, 16, 18) = CHASTE_CONST(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, 18, 18) = -CHASTE_CONST(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, 26, 18) = (CHASTE_CONST(68.627450980392155) * var_chaste_interface__Ca_buffer__Ca_SR - CHASTE_CONST(68.627450980392155) * var_chaste_interface__Ca_buffer__Ca_jct) * NV_Ith_S(mParameters, 1); + IJth(rJacobian, 0, 19) = mSetVoltageDerivativeToZero ? 0.0 : (-var_x206 - CHASTE_CONST(2.6699999999999999) * var_x201 - CHASTE_CONST(0.00046442182911003347) * var_x203 - var_x196 * var_x199); + IJth(rJacobian, 19, 19) = (-CHASTE_CONST(2.5101556644976917) + var_x391 - var_x379 * (var_x206 + CHASTE_CONST(8.0099999999999998) * var_x201 + CHASTE_CONST(0.0013932654873301004) * var_x203 + var_x196 * var_x392)) * NV_Ith_S(mParameters, 3); + IJth(rJacobian, 20, 19) = CHASTE_CONST(1.0879068612142859) * NV_Ith_S(mParameters, 3); + IJth(rJacobian, 21, 19) = CHASTE_CONST(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, 25, 19) = -var_x410 * (-CHASTE_CONST(5.3399999999999999) * var_x201 - var_x196 * var_x412); + IJth(rJacobian, 0, 20) = mSetVoltageDerivativeToZero ? 0.0 : (-var_x215 - CHASTE_CONST(0.33000000000000002) * var_x211 - CHASTE_CONST(5.7400450788880541e-5) * var_x212 - var_x208 * var_x210); + IJth(rJacobian, 19, 20) = CHASTE_CONST(0.02774162496096429) * NV_Ith_S(mParameters, 3); + IJth(rJacobian, 20, 20) = (-CHASTE_CONST(1.0886629612142857) + var_x401 - var_x396 * (var_x215 + CHASTE_CONST(0.98999999999999999) * var_x211 + CHASTE_CONST(0.00017220135236664162) * var_x212 + var_x208 * var_x402)) * NV_Ith_S(mParameters, 3); + IJth(rJacobian, 22, 20) = CHASTE_CONST(0.0007561) - var_x401; + IJth(rJacobian, 26, 20) = -var_x418 * (-CHASTE_CONST(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, 0, 23) = mSetVoltageDerivativeToZero ? 0.0 : (-CHASTE_CONST(0.0020162999999999999) * var_x10 * var_x216 - CHASTE_CONST(0.0163137) * var_x14 * var_x216); + IJth(rJacobian, 19, 23) = CHASTE_CONST(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, 1, 24) = CHASTE_CONST(0.69232869146389786) * var_x246 + CHASTE_CONST(8.7400597733819945e-14) * var_x247; + IJth(rJacobian, 16, 24) = -var_x373 + CHASTE_CONST(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, 24, 24) = -260 + var_x406 - var_x408 - CHASTE_CONST(1.6231539579137989e-12) * var_x247 - CHASTE_CONST(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, 0, 25) = mSetVoltageDerivativeToZero ? 0.0 : (-var_x224 - CHASTE_CONST(4.4795166719999994e-11) * var_x219 - var_x199 * var_x221 - CHASTE_CONST(0.0097566250000000014) * var_x217 / (CHASTE_MATH::Pow(var_x3, 2) * CHASTE_MATH::Pow(var_chaste_interface__Ca_buffer__Ca_SL, 2)) - CHASTE_CONST(0.28183333333333332) * var_x11 * var_x2 * var_x218 / CHASTE_MATH::Pow(var_x12, 2) + CHASTE_CONST(0.89000000000000001) * var_x45 * var_x46 * var_x57 * var_x59 * var_x72 * var_x74 * NV_Ith_S(mParameters, 22)); + IJth(rJacobian, 1, 25) = CHASTE_CONST(0.17359359486891501); + IJth(rJacobian, 14, 25) = CHASTE_CONST(1.7) - CHASTE_CONST(1.7) * var_chaste_interface__ICaL_fCa_gate__fCaB_SL; + IJth(rJacobian, 19, 25) = -var_x380 * (CHASTE_CONST(1.3438550016e-10) * var_x219 - CHASTE_CONST(2.6699999999999999) * var_x395 + var_x221 * var_x392); + IJth(rJacobian, 25, 25) = -CHASTE_CONST(171.99023312516786) + var_x413 + var_x414 - var_x410 * (var_x224 + CHASTE_CONST(1.78) * var_x395 - CHASTE_CONST(8.9590333439999989e-11) * var_x219 - var_x221 * var_x412); + IJth(rJacobian, 26, 25) = CHASTE_CONST(48.958482036396518); + IJth(rJacobian, 27, 25) = CHASTE_CONST(121.55000000000001) - var_x413; + IJth(rJacobian, 29, 25) = CHASTE_CONST(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, 0, 26) = mSetVoltageDerivativeToZero ? 0.0 : (-var_x229 - CHASTE_CONST(5.5364812799999996e-12) * var_x227 - var_x210 * var_x226 - CHASTE_CONST(0.0012058750000000001) * var_x217 / (CHASTE_MATH::Pow(var_x1, 2) * var_x225) - CHASTE_CONST(0.034833333333333334) * var_x0 * var_x218 * var_x6 / CHASTE_MATH::Pow(var_x7, 2) + CHASTE_CONST(0.11) * var_x45 * var_x46 * var_x53 * var_x55 * var_x57 * var_x59 * NV_Ith_S(mParameters, 22)); + IJth(rJacobian, 15, 26) = CHASTE_CONST(1.7) - CHASTE_CONST(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, 20, 26) = -var_x397 * (CHASTE_CONST(1.6609443839999999e-11) * var_x227 - CHASTE_CONST(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, 25, 26) = CHASTE_CONST(1.2484412919281114); + IJth(rJacobian, 26, 26) = -CHASTE_CONST(128.61534478149457) + var_x423 + var_x424 - var_x422 - var_x418 * (var_x229 + CHASTE_CONST(0.22) * var_x404 - CHASTE_CONST(1.1072962559999999e-11) * var_x227 - var_x226 * var_x421); + IJth(rJacobian, 28, 26) = CHASTE_CONST(58.627450980392155) - var_x423; + IJth(rJacobian, 30, 26) = CHASTE_CONST(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; @@ -1471,47 +1473,47 @@ bool Dynamicshannon_wang_puglisi_weber_bers_2004FromCellMLCvode::registered = Mo 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, 1, 33) = CHASTE_CONST(0.003032) + var_x249; + IJth(rJacobian, 33, 33) = -CHASTE_CONST(3.1999999999999999e-5) - var_x249; + IJth(rJacobian, 34, 33) = -CHASTE_CONST(0.0030000000000000001); + IJth(rJacobian, 1, 34) = CHASTE_CONST(0.0063300000000000006) + var_x249; IJth(rJacobian, 33, 34) = -var_x249; - IJth(rJacobian, 34, 34) = -0.0063300000000000006; + IJth(rJacobian, 34, 34) = -CHASTE_CONST(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, 1, 36) = CHASTE_CONST(0.016159999999999997) + var_x251; + IJth(rJacobian, 36, 36) = -CHASTE_CONST(0.00046000000000000001) - var_x251; + IJth(rJacobian, 37, 36) = -CHASTE_CONST(0.015699999999999999); + IJth(rJacobian, 1, 37) = CHASTE_CONST(0.015757) + var_x251; IJth(rJacobian, 36, 37) = -var_x251; - IJth(rJacobian, 37, 37) = -0.015757; + IJth(rJacobian, 37, 37) = -CHASTE_CONST(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, 39, 39) = -CHASTE_CONST(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, 39, 40) = (-CHASTE_CONST(0.076923076923076927) + CHASTE_CONST(3.0769230769230771) * var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Indo1_Cytosol) * var_chaste_interface__Ca_buffer__Cai; + IJth(rJacobian, 40, 40) = -CHASTE_CONST(0.059999999999999998) + var_x433 * var_chaste_interface__Ca_buffer__Ca_SL + (-CHASTE_CONST(0.076999999999999999) + var_x432) * var_chaste_interface__Ca_buffer__Ca_SL; + IJth(rJacobian, 41, 40) = (-CHASTE_CONST(0.078431372549019607) + CHASTE_CONST(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) = (-CHASTE_CONST(0.0019615384615384616) + CHASTE_CONST(0.078461538461538471) * var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Indo1_Cytosol) * var_chaste_interface__Ca_buffer__Cai; + IJth(rJacobian, 40, 41) = (-CHASTE_CONST(0.0019635) + CHASTE_CONST(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) = -CHASTE_CONST(0.059999999999999998) + var_x433 * var_chaste_interface__Ca_buffer__Ca_jct + (-CHASTE_CONST(0.002) + var_x431) * var_chaste_interface__Ca_buffer__Ca_jct; + IJth(rJacobian, 42, 42) = -CHASTE_CONST(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; + IJth(rJacobian, 42, 43) = (-CHASTE_CONST(0.076923076923076927) + CHASTE_CONST(3.0769230769230771) * var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_Cytosol) * var_chaste_interface__Ca_buffer__Cai; + IJth(rJacobian, 43, 43) = -CHASTE_CONST(0.11) + var_x441 * var_chaste_interface__Ca_buffer__Ca_SL + (-CHASTE_CONST(0.076999999999999999) + var_x440) * var_chaste_interface__Ca_buffer__Ca_SL; + IJth(rJacobian, 44, 43) = (-CHASTE_CONST(0.078431372549019607) + CHASTE_CONST(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) = (-CHASTE_CONST(0.0019615384615384616) + CHASTE_CONST(0.078461538461538471) * var_chaste_interface__indo_fluo_Ca_buffer_not_connected__Ca_Fluo3_Cytosol) * var_chaste_interface__Ca_buffer__Cai; + IJth(rJacobian, 43, 44) = (-CHASTE_CONST(0.0019635) + CHASTE_CONST(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) = -CHASTE_CONST(0.11) + var_x441 * var_chaste_interface__Ca_buffer__Ca_jct + (-CHASTE_CONST(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)); + double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -1557,128 +1559,128 @@ bool Dynamicshannon_wang_puglisi_weber_bers_2004FromCellMLCvode::registered = Mo // 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__Fx_ICaL_SL = CHASTE_CONST(0.10000000000000001); // dimensionless + const double var_ICaL__Fx_ICaL_jct = CHASTE_CONST(0.90000000000000002); // dimensionless + const double var_ICaL__PK = CHASTE_CONST(2.7000000000000001e-7); // litre_per_farad_millisecond + const double var_ICaL__PNa = CHASTE_CONST(1.4999999999999999e-8); // litre_per_farad_millisecond + const double var_ICaL__Q10_CaL = CHASTE_CONST(1.8); // dimensionless + const double var_ICaL__gamma_Cai = CHASTE_CONST(0.34100000000000003); // dimensionless + const double var_ICaL__gamma_Cao = CHASTE_CONST(0.34100000000000003); // dimensionless + const double var_ICaL__gamma_Ki = CHASTE_CONST(0.75); // dimensionless + const double var_ICaL__gamma_Ko = CHASTE_CONST(0.75); // dimensionless + const double var_ICaL__gamma_Nai = CHASTE_CONST(0.75); // dimensionless + const double var_ICaL__gamma_Nao = CHASTE_CONST(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_ICab__Fx_CaBk_SL = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_ICab__Fx_CaBk_jct = CHASTE_CONST(0.11); // dimensionless + const double var_ICab__G_CaBk = CHASTE_CONST(0.00025129999999999998); // milliS_per_microF + const double var_ICap__Fx_SLCaP_SL = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_ICap__Fx_SLCaP_jct = CHASTE_CONST(0.11); // dimensionless + const double var_ICap__H = CHASTE_CONST(1.6000000000000001); // dimensionless + const double var_ICap__Km = CHASTE_CONST(0.00050000000000000001); // millimolar + const double var_ICap__Q10_SLCaP = CHASTE_CONST(2.3500000000000001); // dimensionless + const double var_ICap__V_maxAF = CHASTE_CONST(0.067299999999999999); // microA_per_microF + const double var_IKs__Fx_Ks_SL = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_IKs__Fx_Ks_jct = CHASTE_CONST(0.11); // dimensionless + const double var_IKs__pCa_SL = 3 - CHASTE_MATH::Log10(var_chaste_interface__Ca_buffer__Ca_SL); // dimensionless + const double var_IKs__G_Ks_SL = (CHASTE_CONST(0.057000000000000002) + CHASTE_CONST(0.19) / (1 + CHASTE_MATH::Exp(-12 + CHASTE_CONST(1.6666666666666667) * var_IKs__pCa_SL))) * NV_Ith_S(mParameters, 20); // milliS_per_microF + const double var_IKs__pCa_jct = 3 - CHASTE_MATH::Log10(var_chaste_interface__Ca_buffer__Ca_jct); // dimensionless + const double var_IKs__G_Ks_jct = (CHASTE_CONST(0.057000000000000002) + CHASTE_CONST(0.19) / (1 + CHASTE_MATH::Exp(-12 + CHASTE_CONST(1.6666666666666667) * var_IKs__pCa_jct))) * NV_Ith_S(mParameters, 20); // milliS_per_microF + const double var_IKs__pKNa = CHASTE_CONST(0.018329999999999999); // dimensionless + const double var_INa__Fx_Na_SL = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_INa__Fx_Na_jct = CHASTE_CONST(0.11); // dimensionless + const double var_INaCa__Fx_NCX_SL = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_INaCa__Fx_NCX_jct = CHASTE_CONST(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_INaCa__K_mCai = CHASTE_CONST(0.0035899999999999999); // millimolar + const double var_INaCa__K_mCao = CHASTE_CONST(1.3); // millimolar + const double var_INaCa__K_mNai = CHASTE_CONST(12.289999999999999); // millimolar + const double var_INaCa__K_mNao = CHASTE_CONST(87.5); // millimolar + const double var_INaCa__Kd_act = CHASTE_CONST(0.00025599999999999999); // millimolar + const double var_INaCa__Ka_SL = 1 / (1 + CHASTE_MATH::Pow(var_INaCa__Kd_act, 3) / CHASTE_MATH::Pow(var_chaste_interface__Ca_buffer__Ca_SL, 3)); // dimensionless + const double var_INaCa__Ka_jct = 1 / (1 + CHASTE_MATH::Pow(var_INaCa__Kd_act, 3) / CHASTE_MATH::Pow(var_chaste_interface__Ca_buffer__Ca_jct, 3)); // dimensionless + const double var_INaCa__Q10_NCX = CHASTE_CONST(1.5700000000000001); // dimensionless + const double var_INaCa__eta = CHASTE_CONST(0.34999999999999998); // dimensionless + const double var_INaCa__ksat = CHASTE_CONST(0.27000000000000002); // dimensionless + const double var_INa__openProb = CHASTE_MATH::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 = CHASTE_CONST(0.89000000000000001); // dimensionless + const double var_INab__Fx_NaBk_jct = CHASTE_CONST(0.11); // dimensionless + const double var_INab__G_NaBk = CHASTE_CONST(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_ICaL_f_gate__tau_f = 1 / (CHASTE_CONST(0.02) + CHASTE_CONST(0.019699999999999999) * CHASTE_MATH::Exp(-CHASTE_CONST(0.23877882250000002) * CHASTE_MATH::Pow((1 + CHASTE_CONST(0.068965517241379309) * var_chaste_interface__cell__V), 2))); // millisecond + const double var_IKr_Rr_gate__Rr = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.4732142857142858) + CHASTE_CONST(0.044642857142857144) * var_chaste_interface__cell__V)); // dimensionless + const double var_INa_h_gate__alpha_h = ((var_chaste_interface__cell__V < -40) ? (CHASTE_CONST(0.13500000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(11.764705882352942) + CHASTE_CONST(0.14705882352941177) * NV_Ith_S(mParameters, 16) - CHASTE_CONST(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 * CHASTE_MATH::Exp(CHASTE_CONST(0.34999999999999998) * var_chaste_interface__cell__V - CHASTE_CONST(0.34999999999999998) * NV_Ith_S(mParameters, 16)) + CHASTE_CONST(3.5600000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.079000000000000001) * var_chaste_interface__cell__V - CHASTE_CONST(0.079000000000000001) * NV_Ith_S(mParameters, 16))) : (CHASTE_CONST(7.6923076923076916) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.96036036036036043) + CHASTE_CONST(0.0900900900900901) * NV_Ith_S(mParameters, 16) - CHASTE_CONST(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__alpha_j = ((var_chaste_interface__cell__V < -40) ? ((CHASTE_CONST(37.780000000000001) + var_chaste_interface__cell__V) * (-127140 * CHASTE_MATH::Exp(CHASTE_CONST(0.24440000000000001) * var_chaste_interface__cell__V - CHASTE_CONST(0.24440000000000001) * NV_Ith_S(mParameters, 16)) - CHASTE_CONST(3.4740000000000003e-5) * CHASTE_MATH::Exp(CHASTE_CONST(0.043909999999999998) * NV_Ith_S(mParameters, 16) - CHASTE_CONST(0.043909999999999998) * var_chaste_interface__cell__V)) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(24.640530000000002) + CHASTE_CONST(0.311) * var_chaste_interface__cell__V - CHASTE_CONST(0.311) * NV_Ith_S(mParameters, 16)))) : (0)); // per_millisecond + const double var_INa_j_gate__beta_j = ((var_chaste_interface__cell__V < -40) ? (CHASTE_CONST(0.1212) * CHASTE_MATH::Exp(CHASTE_CONST(0.01052) * NV_Ith_S(mParameters, 16) - CHASTE_CONST(0.01052) * var_chaste_interface__cell__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(5.5312920000000005) + CHASTE_CONST(0.13780000000000001) * NV_Ith_S(mParameters, 16) - CHASTE_CONST(0.13780000000000001) * var_chaste_interface__cell__V))) : (CHASTE_CONST(0.29999999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(2.5349999999999999e-7) * NV_Ith_S(mParameters, 16) - CHASTE_CONST(2.5349999999999999e-7) * var_chaste_interface__cell__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.2000000000000002) + CHASTE_CONST(0.10000000000000001) * NV_Ith_S(mParameters, 16) - CHASTE_CONST(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_cell__i_Stim_converted = CHASTE_STIM(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_model_parameters__Cm_per_area = CHASTE_CONST(1.9999999999999999e-6); // farad_per_cm2 + const double var_IK1__G_K1 = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::Sqrt(NV_Ith_S(mParameters, 8)) * NV_Ith_S(mParameters, 18); // milliS_per_microF + const double var_IKr__G_IKr = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::Sqrt(NV_Ith_S(mParameters, 8)) * NV_Ith_S(mParameters, 19); // milliS_per_microF + const double var_ICaL__Q_CaL = CHASTE_MATH::Pow(var_ICaL__Q10_CaL, (-31 + CHASTE_CONST(0.10000000000000001) * NV_Ith_S(mParameters, 23))); // dimensionless + const double var_ICaL__temp = CHASTE_CONST(0.45000000000000001) * CHASTE_MATH::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 * CHASTE_MATH::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 + CHASTE_MATH::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 * CHASTE_MATH::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 + CHASTE_MATH::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) * CHASTE_MATH::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 + CHASTE_MATH::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 * CHASTE_MATH::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 + CHASTE_MATH::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 * CHASTE_MATH::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 + CHASTE_MATH::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_ICaL__i_CaL_converted = CHASTE_CAP() * var_ICaL__i_CaL; // uA_per_cm2 + const double var_ICap__Q_SLCaP = CHASTE_MATH::Pow(var_ICap__Q10_SLCaP, (-31 + CHASTE_CONST(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 + CHASTE_MATH::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 + CHASTE_MATH::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_ICap__i_Cap_converted = CHASTE_CAP() * var_ICap__i_Cap; // uA_per_cm2 + const double var_IKs__E_Ks = NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23) * CHASTE_MATH::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 = CHASTE_MATH::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 = CHASTE_MATH::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_IKs__i_Ks_converted = CHASTE_CAP() * var_IKs__i_Ks; // uA_per_cm2 + const double var_INaCa__Q_NCX = CHASTE_MATH::Pow(var_INaCa__Q10_NCX, (-31 + CHASTE_CONST(0.10000000000000001) * NV_Ith_S(mParameters, 23))); // dimensionless + const double var_INaCa__temp_SL = (CHASTE_MATH::Pow(var_chaste_interface__Na_buffer__Na_SL, var_INaCa__HNa) * NV_Ith_S(mParameters, 6) * CHASTE_MATH::Exp(var_INaCa__eta * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23))) - CHASTE_MATH::Pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * var_chaste_interface__Ca_buffer__Ca_SL * CHASTE_MATH::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 * CHASTE_MATH::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 / (CHASTE_MATH::Pow(var_chaste_interface__Na_buffer__Na_SL, var_INaCa__HNa) * var_INaCa__K_mCao + CHASTE_MATH::Pow(var_chaste_interface__Na_buffer__Na_SL, var_INaCa__HNa) * NV_Ith_S(mParameters, 6) + CHASTE_MATH::Pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * var_chaste_interface__Ca_buffer__Ca_SL + CHASTE_MATH::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 + CHASTE_MATH::Pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * (1 + CHASTE_MATH::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 = (CHASTE_MATH::Pow(var_chaste_interface__Na_buffer__Na_jct, var_INaCa__HNa) * NV_Ith_S(mParameters, 6) * CHASTE_MATH::Exp(var_INaCa__eta * var_chaste_interface__cell__V * NV_Ith_S(mParameters, 10) / (NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23))) - CHASTE_MATH::Pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * var_chaste_interface__Ca_buffer__Ca_jct * CHASTE_MATH::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 * CHASTE_MATH::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 / (CHASTE_MATH::Pow(var_chaste_interface__Na_buffer__Na_jct, var_INaCa__HNa) * var_INaCa__K_mCao + CHASTE_MATH::Pow(var_chaste_interface__Na_buffer__Na_jct, var_INaCa__HNa) * NV_Ith_S(mParameters, 6) + CHASTE_MATH::Pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * var_chaste_interface__Ca_buffer__Ca_jct + CHASTE_MATH::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 + CHASTE_MATH::Pow(NV_Ith_S(mParameters, 9), var_INaCa__HNa) * (1 + CHASTE_MATH::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_INaCa__i_NaCa_converted = CHASTE_CAP() * 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__cell_radius = CHASTE_CONST(10.25); // micrometre + const double var_model_parameters__Cm = CHASTE_CONST(2.0e-8) * CHASTE_CONST(CHASTE_MATH::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_reversal_potentials__E_Ca_SL = CHASTE_CONST(0.5) * NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23) * CHASTE_MATH::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_reversal_potentials__E_Ca_jct = CHASTE_CONST(0.5) * NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23) * CHASTE_MATH::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_ICab__i_Cab_converted = CHASTE_CAP() * var_ICab__i_Cab; // uA_per_cm2 + const double var_reversal_potentials__E_Cl = -NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23) * CHASTE_MATH::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_IClb__i_Clb_converted = CHASTE_CAP() * var_IClb__i_Clb; // uA_per_cm2 + const double var_reversal_potentials__E_K = NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23) * CHASTE_MATH::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 = CHASTE_CONST(1.02) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__cell__V - CHASTE_CONST(0.23849999999999999) * var_reversal_potentials__E_K)); // per_millisecond + const double var_IK1_K1_gate__beta_K1 = (CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__cell__V - CHASTE_CONST(0.061749999999999999) * var_reversal_potentials__E_K) + CHASTE_CONST(0.49124000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__cell__V - CHASTE_CONST(0.080320000000000003) * var_reversal_potentials__E_K)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(0.51429999999999998) * var_reversal_potentials__E_K - CHASTE_CONST(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_IK1__i_K1_converted = CHASTE_CAP() * 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_IKr__i_Kr_converted = CHASTE_CAP() * 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_Itof__i_tof_converted = CHASTE_CAP() * var_Itof__i_tof; // uA_per_cm2 + const double var_Itos__i_tos = (-var_reversal_potentials__E_K + var_chaste_interface__cell__V) * (CHASTE_CONST(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 = CHASTE_CAP() * 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) * CHASTE_MATH::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_reversal_potentials__E_Na_jct = NV_Ith_S(mParameters, 11) * NV_Ith_S(mParameters, 23) * CHASTE_MATH::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_INa__i_Na_converted = CHASTE_CAP() * 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_INab__i_Nab_converted = CHASTE_CAP() * var_INab__i_Nab; // uA_per_cm2 #if CHASTE_SUNDIALS_VERSION >= 60000 N_Vector dqs = N_VNew_Serial(23, CvodeContextManager::Instance()->GetSundialsContext()); @@ -2147,4 +2149,5 @@ extern "C" } } + #endif // CHASTE_CVODE diff --git a/chaste_codegen/data/tests/chaste_reference_models/Cvode_with_jacobian/dynamic_Shannon2004.hpp b/chaste_codegen/data/tests/chaste_reference_models/Cvode_with_jacobian/dynamic_Shannon2004.hpp index 739ac6c6a..2f3586b03 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/Cvode_with_jacobian/dynamic_Shannon2004.hpp +++ b/chaste_codegen/data/tests/chaste_reference_models/Cvode_with_jacobian/dynamic_Shannon2004.hpp @@ -18,7 +18,11 @@ #include #include "AbstractDynamicallyLoadableEntity.hpp" #include "AbstractStimulusFunction.hpp" +#if USING_DEVICE_COMPILER +#include "StimulusEvaluatorCuda.hpp" +#endif #include "AbstractCvodeCell.hpp" +#include "HostDeviceMacros.hpp" class Dynamicshannon_wang_puglisi_weber_bers_2004FromCellMLCvode : public AbstractCvodeCell, public AbstractDynamicallyLoadableEntity { @@ -41,6 +45,10 @@ class Dynamicshannon_wang_puglisi_weber_bers_2004FromCellMLCvode : public Abstra 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: + static constexpr unsigned TOTAL_SIZE = 45u; + static constexpr unsigned NNZ = 178u; + static inline const int sparse_rowptr[] = { 0, 20, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 63, 68, 73, 85, 96, 98, 100, 102, 107, 117, 128, 130, 132, 134, 136, 138, 140, 143, 145, 147, 150, 152, 154, 158, 162, 166, 170, 174, 178 }; + static inline const int sparse_colind[] = { 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 19, 20, 23, 25, 26, 1, 24, 25, 32, 33, 34, 35, 36, 37, 38, 0, 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, 7, 0, 8, 0, 9, 0, 10, 0, 11, 0, 12, 0, 13, 14, 25, 15, 26, 16, 17, 18, 24, 26, 16, 17, 18, 24, 26, 16, 17, 18, 24, 26, 0, 2, 3, 4, 12, 13, 14, 19, 20, 21, 23, 25, 0, 2, 3, 4, 12, 13, 15, 19, 20, 22, 26, 19, 21, 20, 22, 19, 23, 1, 18, 24, 26, 31, 0, 1, 12, 13, 14, 19, 25, 26, 27, 29, 0, 12, 13, 15, 18, 20, 24, 25, 26, 28, 30, 25, 27, 26, 28, 25, 29, 26, 30, 24, 31, 1, 32, 1, 33, 34, 33, 34, 1, 35, 1, 36, 37, 36, 37, 1, 38, 1, 39, 40, 41, 25, 39, 40, 41, 26, 39, 40, 41, 1, 42, 43, 44, 25, 42, 43, 44, 26, 42, 43, 44 }; boost::shared_ptr UseCellMLDefaultStimulus(); double GetIntracellularCalciumConcentration(); @@ -49,8 +57,19 @@ const bool is_probability[45] = {false, false, true, true, true, false, false, f 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); + N_Vector ComputeDerivedQuantities(double var_chaste_interface__environment__time, const N_Vector & rY); +#if USING_DEVICE_COMPILER + template + DEVICE + static void EvaluateYDerivativesDevice(ValueType var_chaste_interface__environment__time, const ValueType* rY, ValueType* rDY, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType* mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim); + template + DEVICE + static void EvaluateAnalyticJacobianDevice(ValueType var_chaste_interface__environment__time, const ValueType *rY, ValueType *rDY, ValueType *rJacobian, ValueType *rTmp1, ValueType *rTmp2, ValueType *rTmp3, const unsigned nvars, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType *mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim); + template + DEVICE + static void EvaluateSparseAnalyticJacobianDevice(ValueType var_chaste_interface__environment__time, const ValueType *rY, ValueType *rDY, ValueType *rJacobian, ValueType *rTmp1, ValueType *rTmp2, ValueType *rTmp3, const unsigned nvars, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType *mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim); +#endif }; // Needs to be included last @@ -87,4 +106,10 @@ namespace boost } #endif // DYNAMICSHANNON_WANG_PUGLISI_WEBER_BERS_2004FROMCELLMLCVODE_HPP_ + + + +#if USING_DEVICE_COMPILER + #include "dynamic_Shannon2004Kernels.hpp" +#endif #endif // CHASTE_CVODE \ No newline at end of file diff --git a/chaste_codegen/data/tests/chaste_reference_models/Cvode_with_jacobian/hodgkin_huxley_squid_axon_model_1952_modified.cpp b/chaste_codegen/data/tests/chaste_reference_models/Cvode_with_jacobian/hodgkin_huxley_squid_axon_model_1952_modified.cpp index f37e178d1..b3d8c2d6b 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/Cvode_with_jacobian/hodgkin_huxley_squid_axon_model_1952_modified.cpp +++ b/chaste_codegen/data/tests/chaste_reference_models/Cvode_with_jacobian/hodgkin_huxley_squid_axon_model_1952_modified.cpp @@ -22,6 +22,8 @@ #include "HeartConfig.hpp" #include "IsNan.hpp" #include "MathsCustomFunctions.hpp" +#include "ChasteMathDeviceNamespaces.hpp" +#include "ChasteCpuMacros.hpp" #if CHASTE_SUNDIALS_VERSION >= 60000 #include "CvodeContextManager.hpp" @@ -35,7 +37,7 @@ { // 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_duration = CHASTE_CONST(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( @@ -67,7 +69,7 @@ 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, 2) = CHASTE_CONST(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] } @@ -124,7 +126,7 @@ made_new_cvode_vector = true; rY = MakeNVector(*pStateVariables); } - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -134,12 +136,12 @@ // 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__E_L = CHASTE_CONST(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_potassium_channel__i_K = CHASTE_MATH::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_sodium_channel__i_Na = CHASTE_MATH::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; @@ -155,7 +157,7 @@ { // Inputs: // Time units: millisecond - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : NV_Ith_S(rY, 0)); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -166,22 +168,22 @@ // 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__B = -CHASTE_CONST(0.10000000000000001); // per_millivolt + const double var_potassium_channel_n_gate__A = -CHASTE_CONST(0.01) / var_potassium_channel_n_gate__B; // per_millisecond + const double var_potassium_channel_n_gate__beta_n = CHASTE_CONST(0.125) * CHASTE_MATH::Exp(CHASTE_CONST(0.9375) + CHASTE_CONST(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_potassium_channel_n_gate__alpha_n = (((var_potassium_channel_n_gate__U >= -CHASTE_CONST(9.9999999999999995e-8)) && (var_potassium_channel_n_gate__U <= CHASTE_CONST(9.9999999999999995e-8))) ? ((1 - CHASTE_CONST(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 + CHASTE_MATH::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 var_sodium_channel_h_gate__alpha_h = CHASTE_CONST(0.070000000000000007) * CHASTE_MATH::Exp(-CHASTE_CONST(3.75) - CHASTE_CONST(0.050000000000000003) * var_chaste_interface__membrane__V); // per_millisecond + const double var_sodium_channel_h_gate__beta_h = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(4.5) - CHASTE_CONST(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__B = -CHASTE_CONST(0.10000000000000001); // per_millivolt + const double var_sodium_channel_m_gate__A = -CHASTE_CONST(0.10000000000000001) / var_sodium_channel_m_gate__B; // per_millisecond + const double var_sodium_channel_m_gate__beta_m = 4 * CHASTE_MATH::Exp(-CHASTE_CONST(4.166666666666667) - CHASTE_CONST(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 var_sodium_channel_m_gate__alpha_m = (((var_sodium_channel_m_gate__U >= -CHASTE_CONST(9.9999999999999995e-8)) && (var_sodium_channel_m_gate__U <= CHASTE_CONST(9.9999999999999995e-8))) ? ((1 - CHASTE_CONST(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 + CHASTE_MATH::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) @@ -191,13 +193,13 @@ 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__E_L = CHASTE_CONST(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_membrane__i_Stim = CHASTE_STIM(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_potassium_channel__i_K = CHASTE_MATH::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_sodium_channel__i_Na = CHASTE_MATH::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 } @@ -209,7 +211,7 @@ 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)); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -218,43 +220,43 @@ 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_x1 = CHASTE_MATH::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_x3 = CHASTE_CONST(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_x5 = (var_x4 >= -CHASTE_CONST(9.9999999999999995e-8)) && (var_x4 <= CHASTE_CONST(9.9999999999999995e-8)); + const double var_x6 = CHASTE_MATH::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_x9 = CHASTE_MATH::Exp(-CHASTE_CONST(4.166666666666667) - CHASTE_CONST(0.055555555555555552) * var_chaste_interface__membrane__V); + const double var_x10 = CHASTE_MATH::Exp(-CHASTE_CONST(3.75) - CHASTE_CONST(0.050000000000000003) * var_chaste_interface__membrane__V); + const double var_x11 = CHASTE_MATH::Exp(-CHASTE_CONST(4.5) - CHASTE_CONST(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_x13 = CHASTE_CONST(6.5) + var_x3; + const double var_x14 = (var_x13 >= -CHASTE_CONST(9.9999999999999995e-8)) && (var_x13 <= CHASTE_CONST(9.9999999999999995e-8)); + const double var_x15 = CHASTE_MATH::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); + const double var_x18 = CHASTE_MATH::Exp(CHASTE_CONST(0.9375) + CHASTE_CONST(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, 0) = mSetVoltageDerivativeToZero ? 0.0 : (var_x0 * (-NV_Ith_S(mParameters, 2) - var_x1 * var_chaste_interface__sodium_channel_h_gate__h - CHASTE_MATH::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) ? (CHASTE_CONST(0.050000000000000003)) : (-CHASTE_CONST(0.10000000000000001) * var_x8 - CHASTE_CONST(0.10000000000000001) * var_x4 * var_x6 / CHASTE_MATH::Pow(var_x7, 2))) + CHASTE_CONST(0.22222222222222221) * var_x9 * var_chaste_interface__sodium_channel_m_gate__m; + IJth(rJacobian, 2, 0) = -CHASTE_CONST(0.050000000000000003) * var_x10 * (CHASTE_CONST(0.070000000000000007) - CHASTE_CONST(0.070000000000000007) * var_chaste_interface__sodium_channel_h_gate__h) - CHASTE_CONST(0.10000000000000001) * var_x11 * var_chaste_interface__sodium_channel_h_gate__h / CHASTE_MATH::Pow(var_x12, 2); + IJth(rJacobian, 3, 0) = (1 - var_chaste_interface__potassium_channel_n_gate__n) * ((var_x14) ? (CHASTE_CONST(0.0050000000000000001)) : (-CHASTE_CONST(0.01) * var_x17 - CHASTE_CONST(0.01) * var_x13 * var_x15 / CHASTE_MATH::Pow(var_x16, 2))) - CHASTE_CONST(0.0015625000000000001) * var_x18 * var_chaste_interface__potassium_channel_n_gate__n; + IJth(rJacobian, 0, 1) = mSetVoltageDerivativeToZero ? 0.0 : (-3 * var_x2 * CHASTE_MATH::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) ? (CHASTE_CONST(3.5) + CHASTE_CONST(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; + IJth(rJacobian, 2, 2) = -1 / var_x12 - CHASTE_CONST(0.070000000000000007) * var_x10; + IJth(rJacobian, 0, 3) = mSetVoltageDerivativeToZero ? 0.0 : (-4 * var_x0 * CHASTE_MATH::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) ? (CHASTE_CONST(0.42499999999999999) + CHASTE_CONST(0.0050000000000000001) * var_chaste_interface__membrane__V) : (-CHASTE_CONST(0.099999999999999992) * var_x13 * var_x17)) - CHASTE_CONST(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)); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -265,13 +267,13 @@ // 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__E_L = CHASTE_CONST(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_membrane__i_Stim = CHASTE_STIM(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_potassium_channel__i_K = CHASTE_MATH::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_sodium_channel__i_Na = CHASTE_MATH::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()); @@ -356,4 +358,5 @@ void OdeSystemInformation #include "AbstractStimulusFunction.hpp" +#if USING_DEVICE_COMPILER +#include "StimulusEvaluatorCuda.hpp" +#endif #include "AbstractCvodeCell.hpp" +#include "HostDeviceMacros.hpp" class Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvode : public AbstractCvodeCell { @@ -38,6 +42,10 @@ class Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvode : public const bool is_concentration[4] = {false, false, false, false}; const bool is_probability[4] = {false, false, false, false}; public: + static constexpr unsigned TOTAL_SIZE = 4u; + static constexpr unsigned NNZ = 10u; + static inline const int sparse_rowptr[] = { 0, 4, 6, 8, 10 }; + static inline const int sparse_colind[] = { 0, 1, 2, 3, 0, 1, 0, 2, 0, 3 }; boost::shared_ptr UseCellMLDefaultStimulus(); Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvode(boost::shared_ptr pOdeSolver /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus); @@ -45,8 +53,19 @@ const bool is_probability[4] = {false, false, false, false}; 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); + N_Vector ComputeDerivedQuantities(double var_chaste_interface__environment__time, const N_Vector & rY); +#if USING_DEVICE_COMPILER + template + DEVICE + static void EvaluateYDerivativesDevice(ValueType var_chaste_interface__environment__time, const ValueType* rY, ValueType* rDY, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType* mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim); + template + DEVICE + static void EvaluateAnalyticJacobianDevice(ValueType var_chaste_interface__environment__time, const ValueType *rY, ValueType *rDY, ValueType *rJacobian, ValueType *rTmp1, ValueType *rTmp2, ValueType *rTmp3, const unsigned nvars, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType *mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim); + template + DEVICE + static void EvaluateSparseAnalyticJacobianDevice(ValueType var_chaste_interface__environment__time, const ValueType *rY, ValueType *rDY, ValueType *rJacobian, ValueType *rTmp1, ValueType *rTmp2, ValueType *rTmp3, const unsigned nvars, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType *mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim); +#endif }; // Needs to be included last @@ -83,4 +102,10 @@ namespace boost } #endif // CELLHODGKIN_HUXLEY_SQUID_AXON_MODEL_1952_MODIFIEDFROMCELLMLCVODE_HPP_ + + + +#if USING_DEVICE_COMPILER + #include "hodgkin_huxley_squid_axon_model_1952_modifiedKernels.hpp" +#endif #endif // CHASTE_CVODE \ No newline at end of file diff --git a/chaste_codegen/data/tests/chaste_reference_models/GRL1/dynamic_demir_model_1994.cpp b/chaste_codegen/data/tests/chaste_reference_models/GRL1/dynamic_demir_model_1994.cpp index 4be991895..b519d575d 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/GRL1/dynamic_demir_model_1994.cpp +++ b/chaste_codegen/data/tests/chaste_reference_models/GRL1/dynamic_demir_model_1994.cpp @@ -21,6 +21,8 @@ #include "HeartConfig.hpp" #include "IsNan.hpp" #include "MathsCustomFunctions.hpp" +#include "ChasteMathDeviceNamespaces.hpp" +#include "ChasteCpuMacros.hpp" @@ -41,12 +43,12 @@ 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] + this->mParameters[0] = CHASTE_CONST(0.021149999999999999); // (var_L_type_Ca_channel__g_Ca_L) [microS] + this->mParameters[1] = CHASTE_CONST(5.5000000000000002e-5); // (var_membrane__Cm) [microF] + this->mParameters[2] = CHASTE_CONST(0.0069300000000000004); // (var_delayed_rectifying_potassium_current__g_K_max) [microS] + this->mParameters[3] = CHASTE_CONST(0.0034399999999999999); // (var_sodium_current__P_Na) [mul_per_second] + this->mParameters[4] = CHASTE_CONST(0.0128821); // (var_hyperpolarisation_activated_current__g_f_K) [microS] + this->mParameters[5] = CHASTE_CONST(0.0067478); // (var_hyperpolarisation_activated_current__g_f_Na) [microS] } Dynamicdemir_model_1994FromCellMLGRL1::~Dynamicdemir_model_1994FromCellMLGRL1() @@ -93,7 +95,7 @@ // 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -128,47 +130,47 @@ 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_L_type_Ca_channel__E_Ca_L = CHASTE_CONST(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_T_type_Ca_channel__g_Ca_T = CHASTE_CONST(0.02521); // microS + const double var_calcium_pump_current__i_Ca_P_max = CHASTE_CONST(0.02869); // nanoA + const double var_cleft_space_equations__K_b = CHASTE_CONST(5.4000000000000004); // millimolar + const double var_delayed_rectifying_potassium_current__g_K = CHASTE_MATH::Pow(var_cleft_space_equations__K_b, CHASTE_CONST(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 / (CHASTE_CONST(0.00040000000000000002) + var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i); // nanoA + const double var_linear_background_current__g_B_Ca = CHASTE_CONST(3.6399999999999997e-5); // microS + const double var_linear_background_current__g_B_K = CHASTE_CONST(6.9400000000000006e-5); // microS + const double var_linear_background_current__g_B_Na = CHASTE_CONST(0.00016000000000000001); // microS + const double var_membrane__F = CHASTE_CONST(96485.341499999995); // coulomb_per_mole + const double var_membrane__R = CHASTE_CONST(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_L_type_Ca_channel_d_gate__d_L_infinity = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.3500000000000001) - CHASTE_CONST(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) * (CHASTE_CONST(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 = CHASTE_CONST(0.001) * CHASTE_CAP() * 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_K = CHASTE_MATH::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 = CHASTE_MATH::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_hyperpolarisation_activated_current__i_f_converted = CHASTE_CONST(0.001) * CHASTE_CAP() * var_hyperpolarisation_activated_current__i_f / mParameters[1]; // uA_per_cm2 + const double var_reversal_potentials__E_Ca = CHASTE_CONST(0.5) * var_membrane__R * var_membrane__T * CHASTE_MATH::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_reversal_potentials__E_K = var_membrane__R * var_membrane__T * CHASTE_MATH::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_delayed_rectifying_potassium_current__i_K_converted = CHASTE_CONST(0.001) * CHASTE_CAP() * 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_reversal_potentials__E_Na = var_membrane__R * var_membrane__T * CHASTE_MATH::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 var_sodium_calcium_pump__K_NaCa = CHASTE_CONST(1.2480000000000001e-5); // nanoA + const double var_sodium_calcium_pump__d_NaCa = CHASTE_CONST(0.0001); // dimensionless + const double var_sodium_calcium_pump__gamma = CHASTE_CONST(0.5); // dimensionless + const double var_sodium_calcium_pump__i_NaCa = (CHASTE_MATH::Pow(var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i, 3) * var_chaste_interface__cleft_space_equations__Ca_c * CHASTE_MATH::Exp(CHASTE_CONST(0.037429999999999998) * var_chaste_interface__membrane__V * var_sodium_calcium_pump__gamma) - CHASTE_MATH::Pow(var_chaste_interface__cleft_space_equations__Na_c, 3) * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i * CHASTE_MATH::Exp(CHASTE_CONST(0.037429999999999998) * (-1 + var_sodium_calcium_pump__gamma) * var_chaste_interface__membrane__V)) * var_sodium_calcium_pump__K_NaCa / (1 + (CHASTE_MATH::Pow(var_chaste_interface__cleft_space_equations__Na_c, 3) * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i + CHASTE_MATH::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 = CHASTE_MATH::Pow(var_membrane__F, 2) * CHASTE_MATH::Pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + CHASTE_MATH::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 + CHASTE_MATH::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 = CHASTE_CONST(0.001) * CHASTE_CAP() * var_sodium_current__i_Na / mParameters[1]; // uA_per_cm2 + const double var_sodium_potassium_pump__K_m_K = CHASTE_CONST(0.621); // millimolar + const double var_sodium_potassium_pump__K_m_Na = CHASTE_CONST(5.46); // millimolar + const double var_sodium_potassium_pump__i_NaK_max = CHASTE_CONST(0.21920000000000001); // nanoA + const double var_sodium_potassium_pump__i_NaK = CHASTE_CONST(1.6000000000000001) * CHASTE_MATH::Pow(var_chaste_interface__cleft_space_equations__K_c, 2) * CHASTE_MATH::Pow(var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i, 3) * var_sodium_potassium_pump__i_NaK_max / ((CHASTE_CONST(1.5) + CHASTE_MATH::Exp(-CHASTE_CONST(1.5) - CHASTE_CONST(0.025000000000000001) * var_chaste_interface__membrane__V)) * CHASTE_MATH::Pow((var_chaste_interface__cleft_space_equations__K_c + var_sodium_potassium_pump__K_m_K), 2) * CHASTE_MATH::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] + CHASTE_CONST(0.001) * CHASTE_CAP() * var_T_type_Ca_channel__i_Ca_T + CHASTE_CONST(0.001) * CHASTE_CAP() * var_calcium_pump_current__i_Ca_P + CHASTE_CONST(0.001) * CHASTE_CAP() * var_linear_background_current__i_B + CHASTE_CONST(0.001) * CHASTE_CAP() * var_sodium_calcium_pump__i_NaCa + CHASTE_CONST(0.001) * CHASTE_CAP() * 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)); @@ -182,7 +184,7 @@ const double delta = 1e-8; double d_dt_chaste_interface_var_membrane__V; - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -219,44 +221,44 @@ // Mathematics - const double var_L_type_Ca_channel__E_Ca_L = 46.399999999999999; // millivolt + const double var_L_type_Ca_channel__E_Ca_L = CHASTE_CONST(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_T_type_Ca_channel__g_Ca_T = CHASTE_CONST(0.02521); // microS + const double var_calcium_pump_current__i_Ca_P_max = CHASTE_CONST(0.02869); // nanoA + const double var_cleft_space_equations__K_b = CHASTE_CONST(5.4000000000000004); // millimolar + const double var_delayed_rectifying_potassium_current__g_K = CHASTE_MATH::Pow(var_cleft_space_equations__K_b, CHASTE_CONST(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 / (CHASTE_CONST(0.00040000000000000002) + var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i); // nanoA + const double var_linear_background_current__g_B_Ca = CHASTE_CONST(3.6399999999999997e-5); // microS + const double var_linear_background_current__g_B_K = CHASTE_CONST(6.9400000000000006e-5); // microS + const double var_linear_background_current__g_B_Na = CHASTE_CONST(0.00016000000000000001); // microS + const double var_membrane__F = CHASTE_CONST(96485.341499999995); // coulomb_per_mole + const double var_membrane__R = CHASTE_CONST(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_d_gate__d_L_infinity = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.3500000000000001) - CHASTE_CONST(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) * (CHASTE_CONST(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_K = CHASTE_MATH::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 = CHASTE_MATH::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_reversal_potentials__E_Ca = CHASTE_CONST(0.5) * var_membrane__R * var_membrane__T * CHASTE_MATH::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_reversal_potentials__E_K = var_membrane__R * var_membrane__T * CHASTE_MATH::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_reversal_potentials__E_Na = var_membrane__R * var_membrane__T * CHASTE_MATH::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_sodium_calcium_pump__K_NaCa = CHASTE_CONST(1.2480000000000001e-5); // nanoA + const double var_sodium_calcium_pump__d_NaCa = CHASTE_CONST(0.0001); // dimensionless + const double var_sodium_calcium_pump__gamma = CHASTE_CONST(0.5); // dimensionless + const double var_sodium_calcium_pump__i_NaCa = (CHASTE_MATH::Pow(var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i, 3) * var_chaste_interface__cleft_space_equations__Ca_c * CHASTE_MATH::Exp(CHASTE_CONST(0.037429999999999998) * var_chaste_interface__membrane__V * var_sodium_calcium_pump__gamma) - CHASTE_MATH::Pow(var_chaste_interface__cleft_space_equations__Na_c, 3) * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i * CHASTE_MATH::Exp(CHASTE_CONST(0.037429999999999998) * (-1 + var_sodium_calcium_pump__gamma) * var_chaste_interface__membrane__V)) * var_sodium_calcium_pump__K_NaCa / (1 + (CHASTE_MATH::Pow(var_chaste_interface__cleft_space_equations__Na_c, 3) * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i + CHASTE_MATH::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 = CHASTE_MATH::Pow(var_membrane__F, 2) * CHASTE_MATH::Pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + CHASTE_MATH::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 + CHASTE_MATH::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 = CHASTE_CONST(0.621); // millimolar + const double var_sodium_potassium_pump__K_m_Na = CHASTE_CONST(5.46); // millimolar + const double var_sodium_potassium_pump__i_NaK_max = CHASTE_CONST(0.21920000000000001); // nanoA + const double var_sodium_potassium_pump__i_NaK = CHASTE_CONST(1.6000000000000001) * CHASTE_MATH::Pow(var_chaste_interface__cleft_space_equations__K_c, 2) * CHASTE_MATH::Pow(var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i, 3) * var_sodium_potassium_pump__i_NaK_max / ((CHASTE_CONST(1.5) + CHASTE_MATH::Exp(-CHASTE_CONST(1.5) - CHASTE_CONST(0.025000000000000001) * var_chaste_interface__membrane__V)) * CHASTE_MATH::Pow((var_chaste_interface__cleft_space_equations__K_c + var_sodium_potassium_pump__K_m_K), 2) * CHASTE_MATH::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 + d_dt_chaste_interface_var_membrane__V = CHASTE_CONST(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; @@ -276,7 +278,7 @@ std::vector& rY = rGetStateVariables(); const double delta = 1e-8; - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -333,155 +335,155 @@ // 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_L_type_Ca_channel__E_Ca_L = CHASTE_CONST(46.399999999999999); // millivolt + const double var_SR_Ca_uptake_and_release__alpha_rel = CHASTE_CONST(0.5); // nanoA_per_millimolar + const double var_SR_Ca_uptake_and_release__alpha_up = CHASTE_CONST(0.080000000000000002); // nanoA + const double var_SR_Ca_uptake_and_release__beta_up = CHASTE_CONST(0.071999999999999995); // nanoA + const double var_SR_Ca_uptake_and_release__i_rel = CHASTE_MATH::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 / CHASTE_MATH::Pow((CHASTE_CONST(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__k_cyca = CHASTE_CONST(5.0000000000000002e-5); // millimolar + const double var_SR_Ca_uptake_and_release__k_rel = CHASTE_CONST(0.0040000000000000001); // millimolar + const double var_SR_Ca_uptake_and_release__k_xcs = CHASTE_CONST(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 d_dt_chaste_interface_var_SR_Ca_uptake_and_release__Ca_Calse = CHASTE_CONST(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_T_type_Ca_channel__g_Ca_T = CHASTE_CONST(0.02521); // microS + const double var_calcium_pump_current__i_Ca_P_max = CHASTE_CONST(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__K_b = CHASTE_CONST(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_cleft_space_equations__Vol = CHASTE_CONST(3.4970000000000001e-6); // microLitre + const double var_cleft_space_equations__V_c = CHASTE_CONST(0.13600000000000001) * var_cleft_space_equations__Vol; // microLitre + const double var_cleft_space_equations__tau_p = CHASTE_CONST(0.01); // second + const double var_delayed_rectifying_potassium_current__g_K = CHASTE_MATH::Pow(var_cleft_space_equations__K_b, CHASTE_CONST(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_SR_Ca_uptake_and_release__r_inact = 40 + 240 * CHASTE_MATH::Pow(var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i, 4) / CHASTE_MATH::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 = -CHASTE_CONST(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 = CHASTE_CONST(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 / (CHASTE_CONST(0.00040000000000000002) + var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i); // nanoA + const double var_intracellular_concentrations_and_buffer_equations__Mg_i = CHASTE_CONST(2.5); // millimolar + const double var_intracellular_concentrations_and_buffer_equations__V_i = CHASTE_CONST(0.46500000000000002) * var_cleft_space_equations__Vol; // microLitre + const double var_SR_Ca_uptake_and_release__V_rel = CHASTE_CONST(0.0012960000000000001) * var_intracellular_concentrations_and_buffer_equations__V_i; // microLitre + const double var_SR_Ca_uptake_and_release__V_up = CHASTE_CONST(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 d_dt_chaste_interface_var_intracellular_concentrations_and_buffer_equations__Ca_Calmod = CHASTE_CONST(0.001) * var_intracellular_concentrations_and_buffer_equations__Ca_Calmod_orig_deriv; // 1 / millisecond + const double var_intracellular_concentrations_and_buffer_equations__F_C = CHASTE_CONST(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 d_dt_chaste_interface_var_intracellular_concentrations_and_buffer_equations__Ca_Trop = CHASTE_CONST(0.001) * var_intracellular_concentrations_and_buffer_equations__Ca_Trop_orig_deriv; // 1 / millisecond + const double var_intracellular_concentrations_and_buffer_equations__F_TC = CHASTE_CONST(0.031) * var_intracellular_concentrations_and_buffer_equations__phi_TC; // millimolar_per_second + const double var_intracellular_concentrations_and_buffer_equations__phi_TMgC = -CHASTE_CONST(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 d_dt_chaste_interface_var_intracellular_concentrations_and_buffer_equations__Ca_Mg_Trop = CHASTE_CONST(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 = CHASTE_CONST(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 d_dt_chaste_interface_var_intracellular_concentrations_and_buffer_equations__Mg_Mg_Trop = CHASTE_CONST(0.001) * var_intracellular_concentrations_and_buffer_equations__Mg_Mg_Trop_orig_deriv; // 1 / millisecond + const double var_linear_background_current__g_B_Ca = CHASTE_CONST(3.6399999999999997e-5); // microS + const double var_linear_background_current__g_B_K = CHASTE_CONST(6.9400000000000006e-5); // microS + const double var_linear_background_current__g_B_Na = CHASTE_CONST(0.00016000000000000001); // microS + const double var_membrane__F = CHASTE_CONST(96485.341499999995); // coulomb_per_mole + const double var_SR_Ca_uptake_and_release__i_tr = CHASTE_CONST(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 = -CHASTE_CONST(11.48) * var_SR_Ca_uptake_and_release__phi_Calse + CHASTE_CONST(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 = CHASTE_CONST(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 = CHASTE_CONST(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 = CHASTE_CONST(0.001) * var_SR_Ca_uptake_and_release__Ca_up_orig_deriv; // millimolar / millisecond + const double var_membrane__R = CHASTE_CONST(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__alpha_d_L = -CHASTE_CONST(28.390000000000001) * (35 + var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(-14 - CHASTE_CONST(0.40000000000000002) * var_chaste_interface__membrane__V)) - CHASTE_CONST(84.900000000000006) * var_chaste_interface__membrane__V / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.20799999999999999) * var_chaste_interface__membrane__V)); // per_second + const double var_L_type_Ca_channel_d_gate__beta_d_L = CHASTE_CONST(11.43) * (-5 + var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(-2 + CHASTE_CONST(0.40000000000000002) * var_chaste_interface__membrane__V)); // per_second + const double var_L_type_Ca_channel_d_gate__d_L_infinity = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.3500000000000001) - CHASTE_CONST(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) * (CHASTE_CONST(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 d_dt_chaste_interface_var_L_type_Ca_channel_d_gate__d_L = CHASTE_CONST(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 = CHASTE_CONST(3.75) * (28 + var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(7 + CHASTE_CONST(0.25) * var_chaste_interface__membrane__V)); // per_second + const double var_L_type_Ca_channel_f_gate__beta_f_L = 30 / (1 + CHASTE_MATH::Exp(-7 - CHASTE_CONST(0.25) * var_chaste_interface__membrane__V)); // per_second + const double var_L_type_Ca_channel_f_gate__f_L_infinity = 1 / (1 + CHASTE_MATH::Exp(6 + CHASTE_CONST(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 d_dt_chaste_interface_var_L_type_Ca_channel_f_gate__f_L = CHASTE_CONST(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 * CHASTE_MATH::Exp(-CHASTE_CONST(3.2000000000000002) + CHASTE_CONST(0.080000000000000002) * var_chaste_interface__membrane__V) + 240 * CHASTE_MATH::Pow(var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i, 4) / CHASTE_MATH::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 = CHASTE_CONST(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 = CHASTE_CONST(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 d_dt_chaste_interface_var_SR_Ca_uptake_and_release__F2 = CHASTE_CONST(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__alpha_d_T = 1068 * CHASTE_MATH::Exp(CHASTE_CONST(0.87666666666666671) + CHASTE_CONST(0.033333333333333333) * var_chaste_interface__membrane__V); // per_second + const double var_T_type_Ca_channel_d_gate__beta_d_T = 1068 * CHASTE_MATH::Exp(-CHASTE_CONST(0.87666666666666671) - CHASTE_CONST(0.033333333333333333) * var_chaste_interface__membrane__V); // per_second + const double var_T_type_Ca_channel_d_gate__d_T_infinity = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(4.3833333333333337) - CHASTE_CONST(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 d_dt_chaste_interface_var_T_type_Ca_channel_d_gate__d_T = CHASTE_CONST(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 = CHASTE_CONST(15.300000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(0.74069627851140463) - CHASTE_CONST(0.012004801920768308) * var_chaste_interface__membrane__V); // per_second + const double var_T_type_Ca_channel_f_gate__beta_f_T = 15 * CHASTE_MATH::Exp(CHASTE_CONST(4.0117035110533159) + CHASTE_CONST(0.065019505851755519) * var_chaste_interface__membrane__V); // per_second + const double var_T_type_Ca_channel_f_gate__f_T_infinity = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(11.017857142857144) + CHASTE_CONST(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 d_dt_chaste_interface_var_T_type_Ca_channel_f_gate__f_T = CHASTE_CONST(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 + CHASTE_MATH::Exp(-CHASTE_CONST(0.68918918918918914) - CHASTE_CONST(0.13513513513513511) * var_chaste_interface__membrane__V)); // dimensionless + const double var_delayed_rectifying_potassium_current_P_a_gate__tau_P_a = 1 / (17 * CHASTE_MATH::Exp(CHASTE_CONST(0.039800000000000002) * var_chaste_interface__membrane__V) + CHASTE_CONST(2.1099999999999999) * CHASTE_MATH::Exp(-CHASTE_CONST(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 d_dt_chaste_interface_var_delayed_rectifying_potassium_current_P_a_gate__P_a = CHASTE_CONST(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 * CHASTE_MATH::Exp(-CHASTE_CONST(0.0183) * var_chaste_interface__membrane__V); // per_second + const double var_delayed_rectifying_potassium_current_P_i_gate__beta_P_i = 656 * CHASTE_MATH::Exp(CHASTE_CONST(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 d_dt_chaste_interface_var_delayed_rectifying_potassium_current_P_i_gate__P_i = CHASTE_CONST(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 = CHASTE_MATH::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 = CHASTE_MATH::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 / (CHASTE_CONST(1.6483000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(2.2219482120838472) - CHASTE_CONST(0.041101520756267988) * var_chaste_interface__membrane__V) + CHASTE_CONST(14.01055) / (CHASTE_CONST(0.69999999999999996) + CHASTE_MATH::Exp(-CHASTE_CONST(10.909090909090908) - CHASTE_CONST(0.18181818181818182) * var_chaste_interface__membrane__V))); // second + const double var_hyperpolarisation_activated_current_y_gate__y_infinity = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(8.0222222222222221) + CHASTE_CONST(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 d_dt_chaste_interface_var_hyperpolarisation_activated_current_y_gate__y = CHASTE_CONST(0.001) * var_hyperpolarisation_activated_current_y_gate__y_orig_deriv; // 1 / millisecond + const double var_reversal_potentials__E_Ca = CHASTE_CONST(0.5) * var_membrane__R * var_membrane__T * CHASTE_MATH::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_reversal_potentials__E_K = var_membrane__R * var_membrane__T * CHASTE_MATH::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_reversal_potentials__E_Na = var_membrane__R * var_membrane__T * CHASTE_MATH::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_calcium_pump__K_NaCa = CHASTE_CONST(1.2480000000000001e-5); // nanoA + const double var_sodium_calcium_pump__d_NaCa = CHASTE_CONST(0.0001); // dimensionless + const double var_sodium_calcium_pump__gamma = CHASTE_CONST(0.5); // dimensionless + const double var_sodium_calcium_pump__i_NaCa = (CHASTE_MATH::Pow(var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i, 3) * var_chaste_interface__cleft_space_equations__Ca_c * CHASTE_MATH::Exp(CHASTE_CONST(0.037429999999999998) * var_chaste_interface__membrane__V * var_sodium_calcium_pump__gamma) - CHASTE_MATH::Pow(var_chaste_interface__cleft_space_equations__Na_c, 3) * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i * CHASTE_MATH::Exp(CHASTE_CONST(0.037429999999999998) * (-1 + var_sodium_calcium_pump__gamma) * var_chaste_interface__membrane__V)) * var_sodium_calcium_pump__K_NaCa / (1 + (CHASTE_MATH::Pow(var_chaste_interface__cleft_space_equations__Na_c, 3) * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i + CHASTE_MATH::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 + CHASTE_CONST(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 = CHASTE_CONST(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 + CHASTE_CONST(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 = CHASTE_CONST(0.001) * var_intracellular_concentrations_and_buffer_equations__Ca_i_orig_deriv; // millimolar / millisecond + const double var_sodium_current_h_gate__alpha_h1 = 165 * CHASTE_MATH::Exp(-CHASTE_CONST(8.0396825396825395) - CHASTE_CONST(0.079365079365079361) * var_chaste_interface__membrane__V); // per_second + const double var_sodium_current_h_gate__beta_h1 = 12360 / (1 + 320 * CHASTE_MATH::Exp(-CHASTE_CONST(8.0396825396825395) - CHASTE_CONST(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 d_dt_chaste_interface_var_sodium_current_h_gate__h1 = CHASTE_CONST(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 d_dt_chaste_interface_var_sodium_current_h_gate__h2 = CHASTE_CONST(0.001) * var_sodium_current_h_gate__h2_orig_deriv; // 1 / millisecond + const double var_sodium_current_m_gate__alpha_m = -824 * (CHASTE_CONST(51.899999999999999) + var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(5.8314606741573032) - CHASTE_CONST(0.11235955056179775) * var_chaste_interface__membrane__V)); // per_second + const double var_sodium_current_m_gate__beta_m = 32960 * CHASTE_MATH::Exp(-CHASTE_CONST(5.8314606741573032) - CHASTE_CONST(0.11235955056179775) * var_chaste_interface__membrane__V); // per_second + const double var_sodium_current__i_Na = CHASTE_MATH::Pow(var_membrane__F, 2) * CHASTE_MATH::Pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + CHASTE_MATH::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 + CHASTE_MATH::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__tau_m = CHASTE_CONST(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 d_dt_chaste_interface_var_sodium_current_m_gate__m = CHASTE_CONST(0.001) * var_sodium_current_m_gate__m_orig_deriv; // 1 / millisecond + const double var_sodium_potassium_pump__K_m_K = CHASTE_CONST(0.621); // millimolar + const double var_sodium_potassium_pump__K_m_Na = CHASTE_CONST(5.46); // millimolar + const double var_sodium_potassium_pump__i_NaK_max = CHASTE_CONST(0.21920000000000001); // nanoA + const double var_sodium_potassium_pump__i_NaK = CHASTE_CONST(1.6000000000000001) * CHASTE_MATH::Pow(var_chaste_interface__cleft_space_equations__K_c, 2) * CHASTE_MATH::Pow(var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i, 3) * var_sodium_potassium_pump__i_NaK_max / ((CHASTE_CONST(1.5) + CHASTE_MATH::Exp(-CHASTE_CONST(1.5) - CHASTE_CONST(0.025000000000000001) * var_chaste_interface__membrane__V)) * CHASTE_MATH::Pow((var_chaste_interface__cleft_space_equations__K_c + var_sodium_potassium_pump__K_m_K), 2) * CHASTE_MATH::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 d_dt_chaste_interface_var_cleft_space_equations__K_c = CHASTE_CONST(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 d_dt_chaste_interface_var_cleft_space_equations__Na_c = CHASTE_CONST(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 d_dt_chaste_interface_var_intracellular_concentrations_and_buffer_equations__K_i = CHASTE_CONST(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 + const double d_dt_chaste_interface_var_intracellular_concentrations_and_buffer_equations__Na_i = CHASTE_CONST(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); @@ -803,7 +805,7 @@ 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -840,44 +842,44 @@ // Mathematics - const double var_L_type_Ca_channel__E_Ca_L = 46.399999999999999; // millivolt + const double var_L_type_Ca_channel__E_Ca_L = CHASTE_CONST(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_T_type_Ca_channel__g_Ca_T = CHASTE_CONST(0.02521); // microS + const double var_calcium_pump_current__i_Ca_P_max = CHASTE_CONST(0.02869); // nanoA + const double var_cleft_space_equations__K_b = CHASTE_CONST(5.4000000000000004); // millimolar + const double var_delayed_rectifying_potassium_current__g_K = CHASTE_MATH::Pow(var_cleft_space_equations__K_b, CHASTE_CONST(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 / (CHASTE_CONST(0.00040000000000000002) + var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i); // nanoA + const double var_linear_background_current__g_B_Ca = CHASTE_CONST(3.6399999999999997e-5); // microS + const double var_linear_background_current__g_B_K = CHASTE_CONST(6.9400000000000006e-5); // microS + const double var_linear_background_current__g_B_Na = CHASTE_CONST(0.00016000000000000001); // microS + const double var_membrane__F = CHASTE_CONST(96485.341499999995); // coulomb_per_mole + const double var_membrane__R = CHASTE_CONST(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_d_gate__d_L_infinity = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.3500000000000001) - CHASTE_CONST(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) * (CHASTE_CONST(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_K = CHASTE_MATH::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 = CHASTE_MATH::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_reversal_potentials__E_Ca = CHASTE_CONST(0.5) * var_membrane__R * var_membrane__T * CHASTE_MATH::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_reversal_potentials__E_K = var_membrane__R * var_membrane__T * CHASTE_MATH::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_reversal_potentials__E_Na = var_membrane__R * var_membrane__T * CHASTE_MATH::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_sodium_calcium_pump__K_NaCa = CHASTE_CONST(1.2480000000000001e-5); // nanoA + const double var_sodium_calcium_pump__d_NaCa = CHASTE_CONST(0.0001); // dimensionless + const double var_sodium_calcium_pump__gamma = CHASTE_CONST(0.5); // dimensionless + const double var_sodium_calcium_pump__i_NaCa = (CHASTE_MATH::Pow(var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i, 3) * var_chaste_interface__cleft_space_equations__Ca_c * CHASTE_MATH::Exp(CHASTE_CONST(0.037429999999999998) * var_chaste_interface__membrane__V * var_sodium_calcium_pump__gamma) - CHASTE_MATH::Pow(var_chaste_interface__cleft_space_equations__Na_c, 3) * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i * CHASTE_MATH::Exp(CHASTE_CONST(0.037429999999999998) * (-1 + var_sodium_calcium_pump__gamma) * var_chaste_interface__membrane__V)) * var_sodium_calcium_pump__K_NaCa / (1 + (CHASTE_MATH::Pow(var_chaste_interface__cleft_space_equations__Na_c, 3) * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i + CHASTE_MATH::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 = CHASTE_MATH::Pow(var_membrane__F, 2) * CHASTE_MATH::Pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + CHASTE_MATH::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 + CHASTE_MATH::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 = CHASTE_CONST(0.621); // millimolar + const double var_sodium_potassium_pump__K_m_Na = CHASTE_CONST(5.46); // millimolar + const double var_sodium_potassium_pump__i_NaK_max = CHASTE_CONST(0.21920000000000001); // nanoA + const double var_sodium_potassium_pump__i_NaK = CHASTE_CONST(1.6000000000000001) * CHASTE_MATH::Pow(var_chaste_interface__cleft_space_equations__K_c, 2) * CHASTE_MATH::Pow(var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i, 3) * var_sodium_potassium_pump__i_NaK_max / ((CHASTE_CONST(1.5) + CHASTE_MATH::Exp(-CHASTE_CONST(1.5) - CHASTE_CONST(0.025000000000000001) * var_chaste_interface__membrane__V)) * CHASTE_MATH::Pow((var_chaste_interface__cleft_space_equations__K_c + var_sodium_potassium_pump__K_m_K), 2) * CHASTE_MATH::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 + d_dt_chaste_interface_var_membrane__V = CHASTE_CONST(0.001) * var_membrane__V_orig_deriv; // millivolt / millisecond return d_dt_chaste_interface_var_membrane__V; } @@ -887,7 +889,7 @@ double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -921,59 +923,59 @@ // Units: millimolar; Initial value: 5.389014 - const double var_x0 = pow(var_chaste_interface__hyperpolarisation_activated_current_y_gate__y, 2); + const double var_x0 = CHASTE_MATH::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_x3 = CHASTE_CONST(0.16666666666666666) * var_chaste_interface__membrane__V; + const double var_x4 = CHASTE_MATH::Exp(-CHASTE_CONST(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_x9 = CHASTE_MATH::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_x11 = CHASTE_MATH::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_x13 = 1 + CHASTE_CONST(0.0001) * var_x10 + CHASTE_CONST(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_x15 = CHASTE_CONST(0.018714999999999999) * var_chaste_interface__membrane__V; + const double var_x16 = CHASTE_MATH::Exp(-var_x15); const double var_x17 = var_x10 * var_x16; - const double var_x18 = exp(var_x15); + const double var_x18 = CHASTE_MATH::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_x20 = var_x14 * (CHASTE_CONST(0.018714999999999999) * var_x17 + CHASTE_CONST(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_x23 = CHASTE_MATH::Pow(var_x5, (-2)); + const double var_x24 = CHASTE_CONST(46.399999999999999) - var_chaste_interface__membrane__V; + const double var_x25 = CHASTE_MATH::Exp(-CHASTE_CONST(1.5) - CHASTE_CONST(0.025000000000000001) * var_chaste_interface__membrane__V); + const double var_x26 = CHASTE_CONST(0.621) + var_chaste_interface__cleft_space_equations__K_c; + const double var_x27 = CHASTE_MATH::Pow(var_x26, (-2)); + const double var_x28 = CHASTE_MATH::Pow(var_chaste_interface__cleft_space_equations__K_c, 2); + const double var_x29 = 1 + CHASTE_CONST(0.18315018315018314) * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i; + const double var_x30 = CHASTE_MATH::Pow(var_x29, (-3)); + const double var_x31 = CHASTE_MATH::Pow((1 + CHASTE_CONST(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_x33 = CHASTE_CONST(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_x36 = CHASTE_MATH::Exp(var_x33 - 1 * CHASTE_MATH::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_x39 = CHASTE_MATH::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_x42 = CHASTE_MATH::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_x44 = CHASTE_CONST(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_x48 = CHASTE_MATH::Pow(var_x40, (-2)); const double var_x49 = 1 / mParameters[1]; - const double var_x50 = 0.001 * var_x49; + const double var_x50 = CHASTE_CONST(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); + partialF = var_x50 * (-CHASTE_CONST(0.00026580000000000001) - var_x1 - var_x2 - CHASTE_CONST(0.02521) * var_x8 - CHASTE_CONST(1.2480000000000001e-5) * var_x20 - CHASTE_CONST(135.20454067538472) * var_x47 - CHASTE_CONST(2.7046577588354044) * var_x22 - CHASTE_CONST(2.3940879178437715e-5) * var_x32 + (-var_x7 - CHASTE_CONST(0.095000000000000001) * var_x6) * mParameters[0] - var_x38 * var_x44 + CHASTE_CONST(0.015833333333333335) * var_x23 * var_x24 * var_x4 * mParameters[0] + CHASTE_CONST(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 { @@ -988,7 +990,7 @@ 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -1023,45 +1025,45 @@ // 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_L_type_Ca_channel__E_Ca_L = CHASTE_CONST(46.399999999999999); // millivolt + const double var_SR_Ca_uptake_and_release__alpha_rel = CHASTE_CONST(0.5); // nanoA_per_millimolar + const double var_SR_Ca_uptake_and_release__alpha_up = CHASTE_CONST(0.080000000000000002); // nanoA + const double var_SR_Ca_uptake_and_release__beta_up = CHASTE_CONST(0.071999999999999995); // nanoA + const double var_SR_Ca_uptake_and_release__i_rel = CHASTE_MATH::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 / CHASTE_MATH::Pow((CHASTE_CONST(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__k_cyca = CHASTE_CONST(5.0000000000000002e-5); // millimolar + const double var_SR_Ca_uptake_and_release__k_xcs = CHASTE_CONST(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_T_type_Ca_channel__g_Ca_T = CHASTE_CONST(0.02521); // microS + const double var_calcium_pump_current__i_Ca_P_max = CHASTE_CONST(0.02869); // nanoA + const double var_cleft_space_equations__Vol = CHASTE_CONST(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_calcium_pump_current__i_Ca_P = var_calcium_pump_current__i_Ca_P_max * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i / (CHASTE_CONST(0.00040000000000000002) + var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i); // nanoA + const double var_intracellular_concentrations_and_buffer_equations__V_i = CHASTE_CONST(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__F_C = CHASTE_CONST(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__F_TC = CHASTE_CONST(0.031) * var_intracellular_concentrations_and_buffer_equations__phi_TC; // millimolar_per_second + const double var_intracellular_concentrations_and_buffer_equations__phi_TMgC = -CHASTE_CONST(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 = CHASTE_CONST(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_linear_background_current__g_B_Ca = CHASTE_CONST(3.6399999999999997e-5); // microS + const double var_membrane__F = CHASTE_CONST(96485.341499999995); // coulomb_per_mole + const double var_membrane__R = CHASTE_CONST(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_d_gate__d_L_infinity = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.3500000000000001) - CHASTE_CONST(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) * (CHASTE_CONST(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_reversal_potentials__E_Ca = CHASTE_CONST(0.5) * var_membrane__R * var_membrane__T * CHASTE_MATH::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 + const double var_sodium_calcium_pump__K_NaCa = CHASTE_CONST(1.2480000000000001e-5); // nanoA + const double var_sodium_calcium_pump__d_NaCa = CHASTE_CONST(0.0001); // dimensionless + const double var_sodium_calcium_pump__gamma = CHASTE_CONST(0.5); // dimensionless + const double var_sodium_calcium_pump__i_NaCa = (CHASTE_MATH::Pow(var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i, 3) * var_chaste_interface__cleft_space_equations__Ca_c * CHASTE_MATH::Exp(CHASTE_CONST(0.037429999999999998) * var_chaste_interface__membrane__V * var_sodium_calcium_pump__gamma) - CHASTE_MATH::Pow(var_chaste_interface__cleft_space_equations__Na_c, 3) * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i * CHASTE_MATH::Exp(CHASTE_CONST(0.037429999999999998) * (-1 + var_sodium_calcium_pump__gamma) * var_chaste_interface__membrane__V)) * var_sodium_calcium_pump__K_NaCa / (1 + (CHASTE_MATH::Pow(var_chaste_interface__cleft_space_equations__Na_c, 3) * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i + CHASTE_MATH::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 + CHASTE_CONST(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 = CHASTE_CONST(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; } @@ -1071,7 +1073,7 @@ double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -1093,33 +1095,33 @@ // Units: millimolar; Initial value: 16.95311 - const double var_x9 = pow(var_chaste_interface__cleft_space_equations__Na_c, 3); + const double var_x9 = CHASTE_MATH::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_x11 = CHASTE_MATH::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_x13 = 1 + CHASTE_CONST(0.0001) * var_x10 + CHASTE_CONST(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_x15 = CHASTE_CONST(0.018714999999999999) * var_chaste_interface__membrane__V; + const double var_x16 = CHASTE_MATH::Exp(-var_x15); const double var_x17 = var_x10 * var_x16; - const double var_x18 = exp(var_x15); + const double var_x18 = CHASTE_MATH::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_x51 = CHASTE_CONST(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_x54 = CHASTE_MATH::Pow(var_x51, (-2)); const double var_x57 = var_x16 * var_x9; - const double var_x58 = pow(var_x13, (-2)); + const double var_x58 = CHASTE_MATH::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_x104 = CHASTE_CONST(9.5000000000000005e-5) + CHASTE_CONST(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; + const double var_x106 = CHASTE_MATH::Pow(var_x104, (-2)); + const double var_x107 = CHASTE_CONST(0.080000000000000002) * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i - CHASTE_CONST(1.4727272727272728e-7) * var_chaste_interface__SR_Ca_uptake_and_release__Ca_up; + const double var_x108 = CHASTE_CONST(7.9543493648916639e-12) * var_x60; + const double var_x109 = CHASTE_CONST(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; + partialF = -CHASTE_CONST(21.173500000000001) + CHASTE_CONST(11.609999999999999) * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_Calmod + CHASTE_CONST(1.5654999999999999) * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_Trop + CHASTE_CONST(7.9980000000000002) * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_Mg_Trop + CHASTE_CONST(7.9980000000000002) * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Mg_Mg_Trop - CHASTE_CONST(9.1430401954624137e-5) * var_x52 - CHASTE_CONST(0.00025494709502857897) * var_x105 - CHASTE_CONST(1.5494105166262771e-6) * var_x53 - var_x108 * var_x9 - var_x109 * var_x57 + CHASTE_CONST(9.1430401954624137e-5) * var_x54 * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i + CHASTE_CONST(0.0031868386878572369) * var_x106 * var_x107; } else { @@ -1134,19 +1136,19 @@ 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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__alpha_m = -824 * (CHASTE_CONST(51.899999999999999) + var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(5.8314606741573032) - CHASTE_CONST(0.11235955056179775) * var_chaste_interface__membrane__V)); // per_second + const double var_sodium_current_m_gate__beta_m = 32960 * CHASTE_MATH::Exp(-CHASTE_CONST(5.8314606741573032) - CHASTE_CONST(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__tau_m = CHASTE_CONST(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 d_dt_chaste_interface_var_sodium_current_m_gate__m = CHASTE_CONST(0.001) * var_sodium_current_m_gate__m_orig_deriv; // 1 / millisecond return d_dt_chaste_interface_var_sodium_current_m_gate__m; } @@ -1156,19 +1158,19 @@ double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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_x119 = CHASTE_MATH::Exp(-CHASTE_CONST(5.8314606741573032) - CHASTE_CONST(0.11235955056179775) * var_chaste_interface__membrane__V); + const double var_x120 = CHASTE_CONST(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; + const double var_x129 = CHASTE_CONST(1.5e-5) + var_x125; + const double var_x130 = CHASTE_CONST(0.001) / var_x129; partialF = -var_x130; } @@ -1185,19 +1187,19 @@ 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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__alpha_h1 = 165 * CHASTE_MATH::Exp(-CHASTE_CONST(8.0396825396825395) - CHASTE_CONST(0.079365079365079361) * var_chaste_interface__membrane__V); // per_second + const double var_sodium_current_h_gate__beta_h1 = 12360 / (1 + 320 * CHASTE_MATH::Exp(-CHASTE_CONST(8.0396825396825395) - CHASTE_CONST(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 + const double d_dt_chaste_interface_var_sodium_current_h_gate__h1 = CHASTE_CONST(0.001) * var_sodium_current_h_gate__h1_orig_deriv; // 1 / millisecond return d_dt_chaste_interface_var_sodium_current_h_gate__h1; } @@ -1207,14 +1209,14 @@ double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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_x131 = CHASTE_MATH::Exp(-CHASTE_CONST(8.0396825396825395) - CHASTE_CONST(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; + partialF = -CHASTE_CONST(0.16500000000000001) * var_x131 - CHASTE_CONST(12.359999999999999) * var_x132; } else { @@ -1229,21 +1231,21 @@ 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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__alpha_h1 = 165 * CHASTE_MATH::Exp(-CHASTE_CONST(8.0396825396825395) - CHASTE_CONST(0.079365079365079361) * var_chaste_interface__membrane__V); // per_second + const double var_sodium_current_h_gate__beta_h1 = 12360 / (1 + 320 * CHASTE_MATH::Exp(-CHASTE_CONST(8.0396825396825395) - CHASTE_CONST(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 + const double d_dt_chaste_interface_var_sodium_current_h_gate__h2 = CHASTE_CONST(0.001) * var_sodium_current_h_gate__h2_orig_deriv; // 1 / millisecond return d_dt_chaste_interface_var_sodium_current_h_gate__h2; } @@ -1253,14 +1255,14 @@ double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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_x131 = CHASTE_MATH::Exp(-CHASTE_CONST(8.0396825396825395) - CHASTE_CONST(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; + partialF = -CHASTE_CONST(0.61799999999999999) * var_x132 - CHASTE_CONST(0.0082500000000000004) * var_x131; } else { @@ -1275,19 +1277,19 @@ 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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__alpha_d_L = -CHASTE_CONST(28.390000000000001) * (35 + var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(-14 - CHASTE_CONST(0.40000000000000002) * var_chaste_interface__membrane__V)) - CHASTE_CONST(84.900000000000006) * var_chaste_interface__membrane__V / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.20799999999999999) * var_chaste_interface__membrane__V)); // per_second + const double var_L_type_Ca_channel_d_gate__beta_d_L = CHASTE_CONST(11.43) * (-5 + var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(-2 + CHASTE_CONST(0.40000000000000002) * var_chaste_interface__membrane__V)); // per_second + const double var_L_type_Ca_channel_d_gate__d_L_infinity = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.3500000000000001) - CHASTE_CONST(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 + const double d_dt_chaste_interface_var_L_type_Ca_channel_d_gate__d_L = CHASTE_CONST(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; } @@ -1297,23 +1299,23 @@ double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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_x139 = CHASTE_MATH::Exp(-14 - CHASTE_CONST(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_x143 = CHASTE_MATH::Exp(-CHASTE_CONST(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_x147 = CHASTE_MATH::Exp(-2 + CHASTE_CONST(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; + partialF = CHASTE_CONST(0.028390000000000002) * var_x141 * var_x150 + CHASTE_CONST(0.084900000000000003) * var_x145 * var_chaste_interface__membrane__V - CHASTE_CONST(0.011429999999999999) * var_x149 * var_x151; } else { @@ -1328,19 +1330,19 @@ 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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__alpha_f_L = CHASTE_CONST(3.75) * (28 + var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(7 + CHASTE_CONST(0.25) * var_chaste_interface__membrane__V)); // per_second + const double var_L_type_Ca_channel_f_gate__beta_f_L = 30 / (1 + CHASTE_MATH::Exp(-7 - CHASTE_CONST(0.25) * var_chaste_interface__membrane__V)); // per_second + const double var_L_type_Ca_channel_f_gate__f_L_infinity = 1 / (1 + CHASTE_MATH::Exp(6 + CHASTE_CONST(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 d_dt_chaste_interface_var_L_type_Ca_channel_f_gate__f_L = CHASTE_CONST(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; } @@ -1350,20 +1352,20 @@ double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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_x154 = 7 + CHASTE_CONST(0.25) * var_chaste_interface__membrane__V; + const double var_x155 = CHASTE_MATH::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_x159 = CHASTE_MATH::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; + partialF = -CHASTE_CONST(0.029999999999999999) * var_x162 - CHASTE_CONST(0.0037499999999999999) * var_x157 * var_x161; } else { @@ -1378,19 +1380,19 @@ 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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__alpha_d_T = 1068 * CHASTE_MATH::Exp(CHASTE_CONST(0.87666666666666671) + CHASTE_CONST(0.033333333333333333) * var_chaste_interface__membrane__V); // per_second + const double var_T_type_Ca_channel_d_gate__beta_d_T = 1068 * CHASTE_MATH::Exp(-CHASTE_CONST(0.87666666666666671) - CHASTE_CONST(0.033333333333333333) * var_chaste_interface__membrane__V); // per_second + const double var_T_type_Ca_channel_d_gate__d_T_infinity = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(4.3833333333333337) - CHASTE_CONST(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 d_dt_chaste_interface_var_T_type_Ca_channel_d_gate__d_T = CHASTE_CONST(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; } @@ -1400,15 +1402,15 @@ double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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); + const double var_x165 = CHASTE_CONST(0.87666666666666671) + CHASTE_CONST(0.033333333333333333) * var_chaste_interface__membrane__V; + const double var_x166 = CHASTE_MATH::Exp(-var_x165); + const double var_x167 = CHASTE_MATH::Exp(var_x165); - partialF = -1.0680000000000001 * var_x166 - 1.0680000000000001 * var_x167; + partialF = -CHASTE_CONST(1.0680000000000001) * var_x166 - CHASTE_CONST(1.0680000000000001) * var_x167; } else { @@ -1423,19 +1425,19 @@ 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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__alpha_f_T = CHASTE_CONST(15.300000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(0.74069627851140463) - CHASTE_CONST(0.012004801920768308) * var_chaste_interface__membrane__V); // per_second + const double var_T_type_Ca_channel_f_gate__beta_f_T = 15 * CHASTE_MATH::Exp(CHASTE_CONST(4.0117035110533159) + CHASTE_CONST(0.065019505851755519) * var_chaste_interface__membrane__V); // per_second + const double var_T_type_Ca_channel_f_gate__f_T_infinity = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(11.017857142857144) + CHASTE_CONST(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 d_dt_chaste_interface_var_T_type_Ca_channel_f_gate__f_T = CHASTE_CONST(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; } @@ -1445,14 +1447,14 @@ double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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); + const double var_x170 = CHASTE_MATH::Exp(-CHASTE_CONST(0.74069627851140463) - CHASTE_CONST(0.012004801920768308) * var_chaste_interface__membrane__V); + const double var_x171 = CHASTE_MATH::Exp(CHASTE_CONST(4.0117035110533159) + CHASTE_CONST(0.065019505851755519) * var_chaste_interface__membrane__V); - partialF = -0.015300000000000001 * var_x170 - 0.014999999999999999 * var_x171; + partialF = -CHASTE_CONST(0.015300000000000001) * var_x170 - CHASTE_CONST(0.014999999999999999) * var_x171; } else { @@ -1467,17 +1469,17 @@ 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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_infinity = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.68918918918918914) - CHASTE_CONST(0.13513513513513511) * var_chaste_interface__membrane__V)); // dimensionless + const double var_delayed_rectifying_potassium_current_P_a_gate__tau_P_a = 1 / (17 * CHASTE_MATH::Exp(CHASTE_CONST(0.039800000000000002) * var_chaste_interface__membrane__V) + CHASTE_CONST(2.1099999999999999) * CHASTE_MATH::Exp(-CHASTE_CONST(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 d_dt_chaste_interface_var_delayed_rectifying_potassium_current_P_a_gate__P_a = CHASTE_CONST(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; } @@ -1487,14 +1489,14 @@ double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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); + const double var_x172 = CHASTE_MATH::Exp(-CHASTE_CONST(0.050999999999999997) * var_chaste_interface__membrane__V); + const double var_x173 = CHASTE_MATH::Exp(CHASTE_CONST(0.039800000000000002) * var_chaste_interface__membrane__V); - partialF = -0.0021099999999999999 * var_x172 - 0.017000000000000001 * var_x173; + partialF = -CHASTE_CONST(0.0021099999999999999) * var_x172 - CHASTE_CONST(0.017000000000000001) * var_x173; } else { @@ -1509,17 +1511,17 @@ 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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__alpha_P_i = 100 * CHASTE_MATH::Exp(-CHASTE_CONST(0.0183) * var_chaste_interface__membrane__V); // per_second + const double var_delayed_rectifying_potassium_current_P_i_gate__beta_P_i = 656 * CHASTE_MATH::Exp(CHASTE_CONST(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 d_dt_chaste_interface_var_delayed_rectifying_potassium_current_P_i_gate__P_i = CHASTE_CONST(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; } @@ -1529,14 +1531,14 @@ double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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); + const double var_x176 = CHASTE_MATH::Exp(-CHASTE_CONST(0.0183) * var_chaste_interface__membrane__V); + const double var_x177 = CHASTE_MATH::Exp(CHASTE_CONST(0.0094199999999999996) * var_chaste_interface__membrane__V); - partialF = -0.65600000000000003 * var_x177 - 0.10000000000000001 * var_x176; + partialF = -CHASTE_CONST(0.65600000000000003) * var_x177 - CHASTE_CONST(0.10000000000000001) * var_x176; } else { @@ -1551,17 +1553,17 @@ 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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__tau_y = 1 / (CHASTE_CONST(1.6483000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(2.2219482120838472) - CHASTE_CONST(0.041101520756267988) * var_chaste_interface__membrane__V) + CHASTE_CONST(14.01055) / (CHASTE_CONST(0.69999999999999996) + CHASTE_MATH::Exp(-CHASTE_CONST(10.909090909090908) - CHASTE_CONST(0.18181818181818182) * var_chaste_interface__membrane__V))); // second + const double var_hyperpolarisation_activated_current_y_gate__y_infinity = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(8.0222222222222221) + CHASTE_CONST(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 d_dt_chaste_interface_var_hyperpolarisation_activated_current_y_gate__y = CHASTE_CONST(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; } @@ -1571,16 +1573,16 @@ double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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_x180 = CHASTE_MATH::Exp(-CHASTE_CONST(2.2219482120838472) - CHASTE_CONST(0.041101520756267988) * var_chaste_interface__membrane__V); + const double var_x181 = CHASTE_MATH::Exp(-CHASTE_CONST(10.909090909090908) - CHASTE_CONST(0.18181818181818182) * var_chaste_interface__membrane__V); + const double var_x182 = CHASTE_CONST(0.69999999999999996) + var_x181; const double var_x183 = 1 / var_x182; - partialF = -0.0016483000000000001 * var_x180 - 0.01401055 * var_x183; + partialF = -CHASTE_CONST(0.0016483000000000001) * var_x180 - CHASTE_CONST(0.01401055) * var_x183; } else { @@ -1595,7 +1597,7 @@ 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -1618,26 +1620,26 @@ // 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_cleft_space_equations__Vol = CHASTE_CONST(3.4970000000000001e-6); // microLitre + const double var_intracellular_concentrations_and_buffer_equations__V_i = CHASTE_CONST(0.46500000000000002) * var_cleft_space_equations__Vol; // microLitre + const double var_linear_background_current__g_B_Na = CHASTE_CONST(0.00016000000000000001); // microS + const double var_membrane__F = CHASTE_CONST(96485.341499999995); // coulomb_per_mole + const double var_membrane__R = CHASTE_CONST(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_hyperpolarisation_activated_current__i_f_Na = CHASTE_MATH::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 * CHASTE_MATH::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_sodium_calcium_pump__K_NaCa = CHASTE_CONST(1.2480000000000001e-5); // nanoA + const double var_sodium_calcium_pump__d_NaCa = CHASTE_CONST(0.0001); // dimensionless + const double var_sodium_calcium_pump__gamma = CHASTE_CONST(0.5); // dimensionless + const double var_sodium_calcium_pump__i_NaCa = (CHASTE_MATH::Pow(var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i, 3) * var_chaste_interface__cleft_space_equations__Ca_c * CHASTE_MATH::Exp(CHASTE_CONST(0.037429999999999998) * var_chaste_interface__membrane__V * var_sodium_calcium_pump__gamma) - CHASTE_MATH::Pow(var_chaste_interface__cleft_space_equations__Na_c, 3) * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i * CHASTE_MATH::Exp(CHASTE_CONST(0.037429999999999998) * (-1 + var_sodium_calcium_pump__gamma) * var_chaste_interface__membrane__V)) * var_sodium_calcium_pump__K_NaCa / (1 + (CHASTE_MATH::Pow(var_chaste_interface__cleft_space_equations__Na_c, 3) * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i + CHASTE_MATH::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 = CHASTE_MATH::Pow(var_membrane__F, 2) * CHASTE_MATH::Pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + CHASTE_MATH::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 + CHASTE_MATH::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 = CHASTE_CONST(0.621); // millimolar + const double var_sodium_potassium_pump__K_m_Na = CHASTE_CONST(5.46); // millimolar + const double var_sodium_potassium_pump__i_NaK_max = CHASTE_CONST(0.21920000000000001); // nanoA + const double var_sodium_potassium_pump__i_NaK = CHASTE_CONST(1.6000000000000001) * CHASTE_MATH::Pow(var_chaste_interface__cleft_space_equations__K_c, 2) * CHASTE_MATH::Pow(var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i, 3) * var_sodium_potassium_pump__i_NaK_max / ((CHASTE_CONST(1.5) + CHASTE_MATH::Exp(-CHASTE_CONST(1.5) - CHASTE_CONST(0.025000000000000001) * var_chaste_interface__membrane__V)) * CHASTE_MATH::Pow((var_chaste_interface__cleft_space_equations__K_c + var_sodium_potassium_pump__K_m_K), 2) * CHASTE_MATH::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 + const double d_dt_chaste_interface_var_intracellular_concentrations_and_buffer_equations__Na_i = CHASTE_CONST(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; } @@ -1647,7 +1649,7 @@ double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -1667,47 +1669,47 @@ // Units: millimolar; Initial value: 5.389014 - const double var_x9 = pow(var_chaste_interface__cleft_space_equations__Na_c, 3); + const double var_x9 = CHASTE_MATH::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_x11 = CHASTE_MATH::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_x13 = 1 + CHASTE_CONST(0.0001) * var_x10 + CHASTE_CONST(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_x15 = CHASTE_CONST(0.018714999999999999) * var_chaste_interface__membrane__V; + const double var_x16 = CHASTE_MATH::Exp(-var_x15); const double var_x17 = var_x10 * var_x16; - const double var_x18 = exp(var_x15); + const double var_x18 = CHASTE_MATH::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_x25 = CHASTE_MATH::Exp(-CHASTE_CONST(1.5) - CHASTE_CONST(0.025000000000000001) * var_chaste_interface__membrane__V); + const double var_x26 = CHASTE_CONST(0.621) + var_chaste_interface__cleft_space_equations__K_c; + const double var_x27 = CHASTE_MATH::Pow(var_x26, (-2)); + const double var_x28 = CHASTE_MATH::Pow(var_chaste_interface__cleft_space_equations__K_c, 2); + const double var_x29 = 1 + CHASTE_CONST(0.18315018315018314) * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i; + const double var_x30 = CHASTE_MATH::Pow(var_x29, (-3)); + const double var_x33 = CHASTE_CONST(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_x36 = CHASTE_MATH::Exp(var_x33 - 1 * CHASTE_MATH::Log(var_x35)); + const double var_x39 = CHASTE_MATH::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_x42 = CHASTE_MATH::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_x58 = CHASTE_MATH::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_x81 = CHASTE_MATH::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_x84 = 1 / (CHASTE_CONST(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; + const double var_x87 = CHASTE_MATH::Pow(var_x29, (-4)); + const double var_x191 = CHASTE_CONST(7.1589144284024978e-7) * var_x14; + const double var_x192 = CHASTE_CONST(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; + partialF = -CHASTE_CONST(0.00012359906637920097) * var_x86 - CHASTE_CONST(2.7242382709912566e-5) * var_x34 - var_x191 * var_x83 - var_x192 * var_x35 + CHASTE_CONST(7.158914428402498e-11) * var_x58 * var_x59 * var_x81 * var_chaste_interface__cleft_space_equations__Ca_c + CHASTE_CONST(2.2637191644542304e-5) * var_x11 * var_x27 * var_x28 * var_x84 * var_x87; } else { @@ -1722,7 +1724,7 @@ 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -1739,24 +1741,24 @@ // 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_cleft_space_equations__K_b = CHASTE_CONST(5.4000000000000004); // millimolar + const double var_cleft_space_equations__Vol = CHASTE_CONST(3.4970000000000001e-6); // microLitre + const double var_delayed_rectifying_potassium_current__g_K = CHASTE_MATH::Pow(var_cleft_space_equations__K_b, CHASTE_CONST(0.58999999999999997)) * mParameters[2]; // microS + const double var_intracellular_concentrations_and_buffer_equations__V_i = CHASTE_CONST(0.46500000000000002) * var_cleft_space_equations__Vol; // microLitre + const double var_linear_background_current__g_B_K = CHASTE_CONST(6.9400000000000006e-5); // microS + const double var_membrane__F = CHASTE_CONST(96485.341499999995); // coulomb_per_mole + const double var_membrane__R = CHASTE_CONST(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_hyperpolarisation_activated_current__i_f_K = CHASTE_MATH::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 * CHASTE_MATH::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_sodium_potassium_pump__K_m_K = CHASTE_CONST(0.621); // millimolar + const double var_sodium_potassium_pump__K_m_Na = CHASTE_CONST(5.46); // millimolar + const double var_sodium_potassium_pump__i_NaK_max = CHASTE_CONST(0.21920000000000001); // nanoA + const double var_sodium_potassium_pump__i_NaK = CHASTE_CONST(1.6000000000000001) * CHASTE_MATH::Pow(var_chaste_interface__cleft_space_equations__K_c, 2) * CHASTE_MATH::Pow(var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i, 3) * var_sodium_potassium_pump__i_NaK_max / ((CHASTE_CONST(1.5) + CHASTE_MATH::Exp(-CHASTE_CONST(1.5) - CHASTE_CONST(0.025000000000000001) * var_chaste_interface__membrane__V)) * CHASTE_MATH::Pow((var_chaste_interface__cleft_space_equations__K_c + var_sodium_potassium_pump__K_m_K), 2) * CHASTE_MATH::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 + const double d_dt_chaste_interface_var_intracellular_concentrations_and_buffer_equations__K_i = CHASTE_CONST(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; } @@ -1777,9 +1779,9 @@ 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; + const double var_x196 = CHASTE_CONST(0.46050826103455306) * var_x22; - partialF = -1.1816383500424576e-5 * var_x73 - var_x196 * var_x73; + partialF = -CHASTE_CONST(1.1816383500424576e-5) * var_x73 - var_x196 * var_x73; } else { @@ -1803,7 +1805,7 @@ // 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 + const double d_dt_chaste_interface_var_intracellular_concentrations_and_buffer_equations__Ca_Calmod = CHASTE_CONST(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; } @@ -1819,7 +1821,7 @@ const double var_x198 = 129 * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i; - partialF = -0.307 - var_x198; + partialF = -CHASTE_CONST(0.307) - var_x198; } else { @@ -1843,7 +1845,7 @@ // 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 + const double d_dt_chaste_interface_var_intracellular_concentrations_and_buffer_equations__Ca_Trop = CHASTE_CONST(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; } @@ -1858,7 +1860,7 @@ - partialF = -0.252 - 50.5 * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i; + partialF = -CHASTE_CONST(0.252) - CHASTE_CONST(50.5) * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i; } else { @@ -1882,9 +1884,9 @@ // 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__phi_TMgC = -CHASTE_CONST(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 d_dt_chaste_interface_var_intracellular_concentrations_and_buffer_equations__Ca_Mg_Trop = CHASTE_CONST(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; } @@ -1900,7 +1902,7 @@ const double var_x198 = 129 * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i; - partialF = -0.0042500000000000003 - var_x198; + partialF = -CHASTE_CONST(0.0042500000000000003) - var_x198; } else { @@ -1922,10 +1924,10 @@ // Mathematics - const double var_intracellular_concentrations_and_buffer_equations__Mg_i = 2.5; // millimolar + const double var_intracellular_concentrations_and_buffer_equations__Mg_i = CHASTE_CONST(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 + const double d_dt_chaste_interface_var_intracellular_concentrations_and_buffer_equations__Mg_Mg_Trop = CHASTE_CONST(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; } @@ -1938,7 +1940,7 @@ - partialF = -3.6539999999999999; + partialF = -CHASTE_CONST(3.6539999999999999); } else { @@ -1953,7 +1955,7 @@ 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -1977,27 +1979,27 @@ // 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_cleft_space_equations__Vol = CHASTE_CONST(3.4970000000000001e-6); // microLitre + const double var_cleft_space_equations__V_c = CHASTE_CONST(0.13600000000000001) * var_cleft_space_equations__Vol; // microLitre + const double var_cleft_space_equations__tau_p = CHASTE_CONST(0.01); // second + const double var_linear_background_current__g_B_Na = CHASTE_CONST(0.00016000000000000001); // microS + const double var_membrane__F = CHASTE_CONST(96485.341499999995); // coulomb_per_mole + const double var_membrane__R = CHASTE_CONST(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_hyperpolarisation_activated_current__i_f_Na = CHASTE_MATH::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 * CHASTE_MATH::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_sodium_calcium_pump__K_NaCa = CHASTE_CONST(1.2480000000000001e-5); // nanoA + const double var_sodium_calcium_pump__d_NaCa = CHASTE_CONST(0.0001); // dimensionless + const double var_sodium_calcium_pump__gamma = CHASTE_CONST(0.5); // dimensionless + const double var_sodium_calcium_pump__i_NaCa = (CHASTE_MATH::Pow(var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i, 3) * var_chaste_interface__cleft_space_equations__Ca_c * CHASTE_MATH::Exp(CHASTE_CONST(0.037429999999999998) * var_chaste_interface__membrane__V * var_sodium_calcium_pump__gamma) - CHASTE_MATH::Pow(var_chaste_interface__cleft_space_equations__Na_c, 3) * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i * CHASTE_MATH::Exp(CHASTE_CONST(0.037429999999999998) * (-1 + var_sodium_calcium_pump__gamma) * var_chaste_interface__membrane__V)) * var_sodium_calcium_pump__K_NaCa / (1 + (CHASTE_MATH::Pow(var_chaste_interface__cleft_space_equations__Na_c, 3) * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i + CHASTE_MATH::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 = CHASTE_MATH::Pow(var_membrane__F, 2) * CHASTE_MATH::Pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + CHASTE_MATH::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 + CHASTE_MATH::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 = CHASTE_CONST(0.621); // millimolar + const double var_sodium_potassium_pump__K_m_Na = CHASTE_CONST(5.46); // millimolar + const double var_sodium_potassium_pump__i_NaK_max = CHASTE_CONST(0.21920000000000001); // nanoA + const double var_sodium_potassium_pump__i_NaK = CHASTE_CONST(1.6000000000000001) * CHASTE_MATH::Pow(var_chaste_interface__cleft_space_equations__K_c, 2) * CHASTE_MATH::Pow(var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i, 3) * var_sodium_potassium_pump__i_NaK_max / ((CHASTE_CONST(1.5) + CHASTE_MATH::Exp(-CHASTE_CONST(1.5) - CHASTE_CONST(0.025000000000000001) * var_chaste_interface__membrane__V)) * CHASTE_MATH::Pow((var_chaste_interface__cleft_space_equations__K_c + var_sodium_potassium_pump__K_m_K), 2) * CHASTE_MATH::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 + const double d_dt_chaste_interface_var_cleft_space_equations__Na_c = CHASTE_CONST(0.001) * var_cleft_space_equations__Na_c_orig_deriv; // millimolar / millisecond return d_dt_chaste_interface_var_cleft_space_equations__Na_c; } @@ -2007,7 +2009,7 @@ double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -2025,40 +2027,40 @@ // Units: millimolar; Initial value: 2.00474 - const double var_x9 = pow(var_chaste_interface__cleft_space_equations__Na_c, 3); + const double var_x9 = CHASTE_MATH::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_x11 = CHASTE_MATH::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_x13 = 1 + CHASTE_CONST(0.0001) * var_x10 + CHASTE_CONST(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_x15 = CHASTE_CONST(0.018714999999999999) * var_chaste_interface__membrane__V; + const double var_x16 = CHASTE_MATH::Exp(-var_x15); const double var_x17 = var_x10 * var_x16; - const double var_x18 = exp(var_x15); + const double var_x18 = CHASTE_MATH::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_x33 = CHASTE_CONST(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_x36 = CHASTE_MATH::Exp(var_x33 - 1 * CHASTE_MATH::Log(var_x35)); const double var_x37 = -1 + var_x36; - const double var_x39 = exp(var_x33); + const double var_x39 = CHASTE_MATH::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_x42 = CHASTE_MATH::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_x58 = CHASTE_MATH::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_x91 = CHASTE_MATH::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; + const double var_x204 = CHASTE_CONST(2.447717065593501e-6) * var_x14; + const double var_x205 = CHASTE_CONST(2.4477170655935014e-10) * var_x60; + const double var_x206 = CHASTE_CONST(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; + partialF = -CHASTE_CONST(0.099999999999999992) - var_x206 - CHASTE_CONST(9.3144911471392233e-5) * var_x90 - var_x204 * var_x92 - var_x205 * var_x91 + CHASTE_CONST(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 { @@ -2073,7 +2075,7 @@ 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -2094,30 +2096,30 @@ // Mathematics - const double var_L_type_Ca_channel__E_Ca_L = 46.399999999999999; // millivolt + const double var_L_type_Ca_channel__E_Ca_L = CHASTE_CONST(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_T_type_Ca_channel__g_Ca_T = CHASTE_CONST(0.02521); // microS + const double var_calcium_pump_current__i_Ca_P_max = CHASTE_CONST(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_cleft_space_equations__Vol = CHASTE_CONST(3.4970000000000001e-6); // microLitre + const double var_cleft_space_equations__V_c = CHASTE_CONST(0.13600000000000001) * var_cleft_space_equations__Vol; // microLitre + const double var_cleft_space_equations__tau_p = CHASTE_CONST(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 / (CHASTE_CONST(0.00040000000000000002) + var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i); // nanoA + const double var_linear_background_current__g_B_Ca = CHASTE_CONST(3.6399999999999997e-5); // microS + const double var_membrane__F = CHASTE_CONST(96485.341499999995); // coulomb_per_mole + const double var_membrane__R = CHASTE_CONST(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_d_gate__d_L_infinity = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.3500000000000001) - CHASTE_CONST(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) * (CHASTE_CONST(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_reversal_potentials__E_Ca = CHASTE_CONST(0.5) * var_membrane__R * var_membrane__T * CHASTE_MATH::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 + const double var_sodium_calcium_pump__K_NaCa = CHASTE_CONST(1.2480000000000001e-5); // nanoA + const double var_sodium_calcium_pump__d_NaCa = CHASTE_CONST(0.0001); // dimensionless + const double var_sodium_calcium_pump__gamma = CHASTE_CONST(0.5); // dimensionless + const double var_sodium_calcium_pump__i_NaCa = (CHASTE_MATH::Pow(var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i, 3) * var_chaste_interface__cleft_space_equations__Ca_c * CHASTE_MATH::Exp(CHASTE_CONST(0.037429999999999998) * var_chaste_interface__membrane__V * var_sodium_calcium_pump__gamma) - CHASTE_MATH::Pow(var_chaste_interface__cleft_space_equations__Na_c, 3) * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i * CHASTE_MATH::Exp(CHASTE_CONST(0.037429999999999998) * (-1 + var_sodium_calcium_pump__gamma) * var_chaste_interface__membrane__V)) * var_sodium_calcium_pump__K_NaCa / (1 + (CHASTE_MATH::Pow(var_chaste_interface__cleft_space_equations__Na_c, 3) * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i + CHASTE_MATH::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 + CHASTE_CONST(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 = CHASTE_CONST(0.001) * var_cleft_space_equations__Ca_c_orig_deriv; // millimolar / millisecond return d_dt_chaste_interface_var_cleft_space_equations__Ca_c; } @@ -2127,7 +2129,7 @@ double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -2139,24 +2141,24 @@ // Units: millimolar; Initial value: 2.00474 - const double var_x9 = pow(var_chaste_interface__cleft_space_equations__Na_c, 3); + const double var_x9 = CHASTE_MATH::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_x11 = CHASTE_MATH::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_x13 = 1 + CHASTE_CONST(0.0001) * var_x10 + CHASTE_CONST(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_x15 = CHASTE_CONST(0.018714999999999999) * var_chaste_interface__membrane__V; + const double var_x16 = CHASTE_MATH::Exp(-var_x15); const double var_x17 = var_x10 * var_x16; - const double var_x18 = exp(var_x15); + const double var_x18 = CHASTE_MATH::Exp(var_x15); const double var_x19 = var_x12 * var_x18; - const double var_x58 = pow(var_x13, (-2)); + const double var_x58 = CHASTE_MATH::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; + const double var_x208 = CHASTE_CONST(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; + partialF = -CHASTE_CONST(0.099999999999999992) - CHASTE_CONST(5.2976168399354324e-6) * var_x93 - var_x208 * var_x94 + CHASTE_CONST(2.7196856284372237e-11) * var_x11 * var_x58 * var_x59; } else { @@ -2171,7 +2173,7 @@ 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -2188,25 +2190,25 @@ // 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_cleft_space_equations__K_b = CHASTE_CONST(5.4000000000000004); // millimolar + const double var_cleft_space_equations__Vol = CHASTE_CONST(3.4970000000000001e-6); // microLitre + const double var_cleft_space_equations__V_c = CHASTE_CONST(0.13600000000000001) * var_cleft_space_equations__Vol; // microLitre + const double var_cleft_space_equations__tau_p = CHASTE_CONST(0.01); // second + const double var_delayed_rectifying_potassium_current__g_K = CHASTE_MATH::Pow(var_cleft_space_equations__K_b, CHASTE_CONST(0.58999999999999997)) * mParameters[2]; // microS + const double var_linear_background_current__g_B_K = CHASTE_CONST(6.9400000000000006e-5); // microS + const double var_membrane__F = CHASTE_CONST(96485.341499999995); // coulomb_per_mole + const double var_membrane__R = CHASTE_CONST(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_hyperpolarisation_activated_current__i_f_K = CHASTE_MATH::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 * CHASTE_MATH::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_sodium_potassium_pump__K_m_K = CHASTE_CONST(0.621); // millimolar + const double var_sodium_potassium_pump__K_m_Na = CHASTE_CONST(5.46); // millimolar + const double var_sodium_potassium_pump__i_NaK_max = CHASTE_CONST(0.21920000000000001); // nanoA + const double var_sodium_potassium_pump__i_NaK = CHASTE_CONST(1.6000000000000001) * CHASTE_MATH::Pow(var_chaste_interface__cleft_space_equations__K_c, 2) * CHASTE_MATH::Pow(var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i, 3) * var_sodium_potassium_pump__i_NaK_max / ((CHASTE_CONST(1.5) + CHASTE_MATH::Exp(-CHASTE_CONST(1.5) - CHASTE_CONST(0.025000000000000001) * var_chaste_interface__membrane__V)) * CHASTE_MATH::Pow((var_chaste_interface__cleft_space_equations__K_c + var_sodium_potassium_pump__K_m_K), 2) * CHASTE_MATH::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 d_dt_chaste_interface_var_cleft_space_equations__K_c = CHASTE_CONST(0.001) * var_cleft_space_equations__K_c_orig_deriv; // millimolar / millisecond return d_dt_chaste_interface_var_cleft_space_equations__K_c; } @@ -2216,7 +2218,7 @@ double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -2228,23 +2230,23 @@ // 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_x11 = CHASTE_MATH::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_x25 = CHASTE_MATH::Exp(-CHASTE_CONST(1.5) - CHASTE_CONST(0.025000000000000001) * var_chaste_interface__membrane__V); + const double var_x26 = CHASTE_CONST(0.621) + var_chaste_interface__cleft_space_equations__K_c; + const double var_x27 = CHASTE_MATH::Pow(var_x26, (-2)); + const double var_x28 = CHASTE_MATH::Pow(var_chaste_interface__cleft_space_equations__K_c, 2); + const double var_x29 = 1 + CHASTE_CONST(0.18315018315018314) * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Na_i; + const double var_x30 = CHASTE_MATH::Pow(var_x29, (-3)); + const double var_x84 = 1 / (CHASTE_CONST(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_x98 = CHASTE_MATH::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; + const double var_x211 = CHASTE_CONST(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; + partialF = -CHASTE_CONST(0.099999999999999992) - CHASTE_CONST(4.040160535071638e-5) * var_x95 - var_x211 * var_x95 - CHASTE_CONST(0.00018782211067427598) * var_x100 * var_x96 + CHASTE_CONST(0.00018782211067427598) * var_x11 * var_x28 * var_x30 * var_x84 * var_x98; } else { @@ -2268,21 +2270,21 @@ // 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__alpha_up = CHASTE_CONST(0.080000000000000002); // nanoA + const double var_SR_Ca_uptake_and_release__beta_up = CHASTE_CONST(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__k_cyca = CHASTE_CONST(5.0000000000000002e-5); // millimolar + const double var_SR_Ca_uptake_and_release__k_xcs = CHASTE_CONST(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_cleft_space_equations__Vol = CHASTE_CONST(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 + const double var_intracellular_concentrations_and_buffer_equations__V_i = CHASTE_CONST(0.46500000000000002) * var_cleft_space_equations__Vol; // microLitre + const double var_SR_Ca_uptake_and_release__V_up = CHASTE_CONST(0.01166) * var_intracellular_concentrations_and_buffer_equations__V_i; // microLitre + const double var_membrane__F = CHASTE_CONST(96485.341499999995); // coulomb_per_mole + const double var_SR_Ca_uptake_and_release__i_tr = CHASTE_CONST(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 = CHASTE_CONST(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 = CHASTE_CONST(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; } @@ -2298,13 +2300,13 @@ // 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_x104 = CHASTE_CONST(9.5000000000000005e-5) + CHASTE_CONST(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_x106 = CHASTE_MATH::Pow(var_x104, (-2)); + const double var_x107 = CHASTE_CONST(0.080000000000000002) * var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i - CHASTE_CONST(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; + partialF = -CHASTE_CONST(0.015581177937052042) - CHASTE_CONST(4.0251665946738841e-8) * var_x105 - CHASTE_CONST(5.5905091592692838e-7) * var_x113; } else { @@ -2330,17 +2332,17 @@ // 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__alpha_rel = CHASTE_CONST(0.5); // nanoA_per_millimolar + const double var_SR_Ca_uptake_and_release__i_rel = CHASTE_MATH::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 / CHASTE_MATH::Pow((CHASTE_CONST(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 + const double var_cleft_space_equations__Vol = CHASTE_CONST(3.4970000000000001e-6); // microLitre + const double var_intracellular_concentrations_and_buffer_equations__V_i = CHASTE_CONST(0.46500000000000002) * var_cleft_space_equations__Vol; // microLitre + const double var_SR_Ca_uptake_and_release__V_rel = CHASTE_CONST(0.0012960000000000001) * var_intracellular_concentrations_and_buffer_equations__V_i; // microLitre + const double var_SR_Ca_uptake_and_release__V_up = CHASTE_CONST(0.01166) * var_intracellular_concentrations_and_buffer_equations__V_i; // microLitre + const double var_membrane__F = CHASTE_CONST(96485.341499999995); // coulomb_per_mole + const double var_SR_Ca_uptake_and_release__i_tr = CHASTE_CONST(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 = -CHASTE_CONST(11.48) * var_SR_Ca_uptake_and_release__phi_Calse + CHASTE_CONST(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 = CHASTE_CONST(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; } @@ -2356,12 +2358,12 @@ // 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_x114 = CHASTE_CONST(0.25) + var_chaste_interface__SR_Ca_uptake_and_release__F2; + const double var_x115 = CHASTE_MATH::Pow(var_x114, (-2)); + const double var_x116 = CHASTE_MATH::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; + partialF = -CHASTE_CONST(8.979782511378108) + CHASTE_CONST(8.8396000000000008) * var_chaste_interface__SR_Ca_uptake_and_release__Ca_Calse - CHASTE_CONST(1.2294902345128229) * var_x117; } else { @@ -2385,7 +2387,7 @@ // 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 + const double d_dt_chaste_interface_var_SR_Ca_uptake_and_release__Ca_Calse = CHASTE_CONST(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; } @@ -2400,7 +2402,7 @@ - partialF = -0.64100000000000001 - 0.77000000000000002 * var_chaste_interface__SR_Ca_uptake_and_release__Ca_rel; + partialF = -CHASTE_CONST(0.64100000000000001) - CHASTE_CONST(0.77000000000000002) * var_chaste_interface__SR_Ca_uptake_and_release__Ca_rel; } else { @@ -2415,7 +2417,7 @@ 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -2426,10 +2428,10 @@ // 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 + const double var_SR_Ca_uptake_and_release__k_rel = CHASTE_CONST(0.0040000000000000001); // millimolar + const double var_SR_Ca_uptake_and_release__r_act = 240 * CHASTE_MATH::Exp(-CHASTE_CONST(3.2000000000000002) + CHASTE_CONST(0.080000000000000002) * var_chaste_interface__membrane__V) + 240 * CHASTE_MATH::Pow(var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i, 4) / CHASTE_MATH::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 = CHASTE_CONST(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 = CHASTE_CONST(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; } @@ -2439,18 +2441,18 @@ double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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; + const double var_x213 = CHASTE_MATH::Exp(-CHASTE_CONST(3.2000000000000002) + CHASTE_CONST(0.080000000000000002) * var_chaste_interface__membrane__V); + const double var_x215 = CHASTE_CONST(0.0040000000000000001) + var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i; + const double var_x216 = CHASTE_MATH::Pow(var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i, 4); + const double var_x217 = CHASTE_MATH::Pow(var_x215, (-4)); + const double var_x219 = CHASTE_CONST(0.23999999999999999) * var_x216 * var_x217; + const double var_x220 = var_x219 + CHASTE_CONST(0.23999999999999999) * var_x213; partialF = -var_x220; } @@ -2467,7 +2469,7 @@ 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -2478,11 +2480,11 @@ // 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__k_rel = CHASTE_CONST(0.0040000000000000001); // millimolar + const double var_SR_Ca_uptake_and_release__r_inact = 40 + 240 * CHASTE_MATH::Pow(var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i, 4) / CHASTE_MATH::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 * CHASTE_MATH::Exp(-CHASTE_CONST(3.2000000000000002) + CHASTE_CONST(0.080000000000000002) * var_chaste_interface__membrane__V) + 240 * CHASTE_MATH::Pow(var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i, 4) / CHASTE_MATH::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 + const double d_dt_chaste_interface_var_SR_Ca_uptake_and_release__F2 = CHASTE_CONST(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; } @@ -2496,11 +2498,11 @@ // 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; + const double var_x215 = CHASTE_CONST(0.0040000000000000001) + var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i; + const double var_x216 = CHASTE_MATH::Pow(var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i, 4); + const double var_x217 = CHASTE_MATH::Pow(var_x215, (-4)); + const double var_x219 = CHASTE_CONST(0.23999999999999999) * var_x216 * var_x217; + const double var_x222 = CHASTE_CONST(0.040000000000000001) + var_x219; partialF = -var_x222; } @@ -2526,10 +2528,10 @@ // 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 + const double var_SR_Ca_uptake_and_release__k_rel = CHASTE_CONST(0.0040000000000000001); // millimolar + const double var_SR_Ca_uptake_and_release__r_inact = 40 + 240 * CHASTE_MATH::Pow(var_chaste_interface__intracellular_concentrations_and_buffer_equations__Ca_i, 4) / CHASTE_MATH::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 = -CHASTE_CONST(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 = CHASTE_CONST(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; } @@ -2542,7 +2544,7 @@ - partialF = -0.00095999999999999992; + partialF = -CHASTE_CONST(0.00095999999999999992); } else { @@ -2559,7 +2561,7 @@ { // Inputs: // Time units: millisecond - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -2587,25 +2589,25 @@ // 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_L_type_Ca_channel__E_Ca_L = CHASTE_CONST(46.399999999999999); // millivolt + const double var_cleft_space_equations__K_b = CHASTE_CONST(5.4000000000000004); // millimolar + const double var_delayed_rectifying_potassium_current__g_K = CHASTE_MATH::Pow(var_cleft_space_equations__K_b, CHASTE_CONST(0.58999999999999997)) * mParameters[2]; // microS + const double var_membrane__F = CHASTE_CONST(96485.341499999995); // coulomb_per_mole + const double var_membrane__R = CHASTE_CONST(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_L_type_Ca_channel_d_gate__d_L_infinity = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.3500000000000001) - CHASTE_CONST(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) * (CHASTE_CONST(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 = CHASTE_CONST(0.001) * CHASTE_CAP() * var_L_type_Ca_channel__i_Ca_L / mParameters[1]; // uA_per_cm2 + const double var_hyperpolarisation_activated_current__i_f_K = CHASTE_MATH::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 = CHASTE_MATH::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_hyperpolarisation_activated_current__i_f_converted = CHASTE_CONST(0.001) * CHASTE_CAP() * var_hyperpolarisation_activated_current__i_f / mParameters[1]; // uA_per_cm2 + const double var_reversal_potentials__E_K = var_membrane__R * var_membrane__T * CHASTE_MATH::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 + const double var_delayed_rectifying_potassium_current__i_K_converted = CHASTE_CONST(0.001) * CHASTE_CAP() * 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 * CHASTE_MATH::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 = CHASTE_MATH::Pow(var_membrane__F, 2) * CHASTE_MATH::Pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + CHASTE_MATH::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 + CHASTE_MATH::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 = CHASTE_CONST(0.001) * CHASTE_CAP() * 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; diff --git a/chaste_codegen/data/tests/chaste_reference_models/GRL1/dynamic_demir_model_1994.hpp b/chaste_codegen/data/tests/chaste_reference_models/GRL1/dynamic_demir_model_1994.hpp index 0e9c0c7a2..fdcc3cea0 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/GRL1/dynamic_demir_model_1994.hpp +++ b/chaste_codegen/data/tests/chaste_reference_models/GRL1/dynamic_demir_model_1994.hpp @@ -17,6 +17,9 @@ #include #include "AbstractDynamicallyLoadableEntity.hpp" #include "AbstractStimulusFunction.hpp" +#if USING_DEVICE_COMPILER +#include "StimulusEvaluatorCuda.hpp" +#endif #include "AbstractGeneralizedRushLarsenCardiacCell.hpp" class Dynamicdemir_model_1994FromCellMLGRL1 : public AbstractGeneralizedRushLarsenCardiacCell, public AbstractDynamicallyLoadableEntity diff --git a/chaste_codegen/data/tests/chaste_reference_models/GRL1/hodgkin_huxley_squid_axon_model_1952_modified.cpp b/chaste_codegen/data/tests/chaste_reference_models/GRL1/hodgkin_huxley_squid_axon_model_1952_modified.cpp index 93d90713f..a650d192b 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/GRL1/hodgkin_huxley_squid_axon_model_1952_modified.cpp +++ b/chaste_codegen/data/tests/chaste_reference_models/GRL1/hodgkin_huxley_squid_axon_model_1952_modified.cpp @@ -21,6 +21,8 @@ #include "HeartConfig.hpp" #include "IsNan.hpp" #include "MathsCustomFunctions.hpp" +#include "ChasteMathDeviceNamespaces.hpp" +#include "ChasteCpuMacros.hpp" @@ -30,7 +32,7 @@ { // 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_duration = CHASTE_CONST(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( @@ -59,7 +61,7 @@ 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[2] = CHASTE_CONST(0.29999999999999999); // (var_leakage_current__g_L) [milliS_per_cm2] this->mParameters[3] = 36; // (var_potassium_channel__g_K) [milliS_per_cm2] } @@ -107,7 +109,7 @@ // 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -117,12 +119,12 @@ // 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__E_L = CHASTE_CONST(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_potassium_channel__i_K = CHASTE_MATH::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_sodium_channel__i_Na = CHASTE_MATH::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; @@ -137,7 +139,7 @@ const double delta = 1e-8; double d_dt_chaste_interface_var_membrane__V; - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -149,13 +151,13 @@ // 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__E_L = CHASTE_CONST(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_membrane__i_Stim = CHASTE_STIM(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_potassium_channel__i_K = CHASTE_MATH::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_sodium_channel__i_Na = CHASTE_MATH::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; @@ -176,7 +178,7 @@ std::vector& rY = rGetStateVariables(); const double delta = 1e-8; - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -187,22 +189,22 @@ // 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__B = -CHASTE_CONST(0.10000000000000001); // per_millivolt + const double var_potassium_channel_n_gate__A = -CHASTE_CONST(0.01) / var_potassium_channel_n_gate__B; // per_millisecond + const double var_potassium_channel_n_gate__beta_n = CHASTE_CONST(0.125) * CHASTE_MATH::Exp(CHASTE_CONST(0.9375) + CHASTE_CONST(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_potassium_channel_n_gate__alpha_n = (((var_potassium_channel_n_gate__U >= -CHASTE_CONST(9.9999999999999995e-8)) && (var_potassium_channel_n_gate__U <= CHASTE_CONST(9.9999999999999995e-8))) ? ((1 - CHASTE_CONST(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 + CHASTE_MATH::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 var_sodium_channel_h_gate__alpha_h = CHASTE_CONST(0.070000000000000007) * CHASTE_MATH::Exp(-CHASTE_CONST(3.75) - CHASTE_CONST(0.050000000000000003) * var_chaste_interface__membrane__V); // per_millisecond + const double var_sodium_channel_h_gate__beta_h = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(4.5) - CHASTE_CONST(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__B = -CHASTE_CONST(0.10000000000000001); // per_millivolt + const double var_sodium_channel_m_gate__A = -CHASTE_CONST(0.10000000000000001) / var_sodium_channel_m_gate__B; // per_millisecond + const double var_sodium_channel_m_gate__beta_m = 4 * CHASTE_MATH::Exp(-CHASTE_CONST(4.166666666666667) - CHASTE_CONST(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 var_sodium_channel_m_gate__alpha_m = (((var_sodium_channel_m_gate__U >= -CHASTE_CONST(9.9999999999999995e-8)) && (var_sodium_channel_m_gate__U <= CHASTE_CONST(9.9999999999999995e-8))) ? ((1 - CHASTE_CONST(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 + CHASTE_MATH::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; @@ -249,7 +251,7 @@ 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -261,13 +263,13 @@ // 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__E_L = CHASTE_CONST(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_membrane__i_Stim = CHASTE_STIM(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_potassium_channel__i_K = CHASTE_MATH::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_sodium_channel__i_Na = CHASTE_MATH::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; @@ -287,9 +289,9 @@ const double var_x0 = 1 / mParameters[0]; - const double var_x1 = pow(var_chaste_interface__sodium_channel_m_gate__m, 3) * mParameters[1]; + const double var_x1 = CHASTE_MATH::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]); + partialF = var_x0 * (-mParameters[2] - var_x1 * var_chaste_interface__sodium_channel_h_gate__h - CHASTE_MATH::Pow(var_chaste_interface__potassium_channel_n_gate__n, 4) * mParameters[3]); } else { @@ -304,19 +306,19 @@ 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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__B = -CHASTE_CONST(0.10000000000000001); // per_millivolt + const double var_sodium_channel_m_gate__A = -CHASTE_CONST(0.10000000000000001) / var_sodium_channel_m_gate__B; // per_millisecond + const double var_sodium_channel_m_gate__beta_m = 4 * CHASTE_MATH::Exp(-CHASTE_CONST(4.166666666666667) - CHASTE_CONST(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 var_sodium_channel_m_gate__alpha_m = (((var_sodium_channel_m_gate__U >= -CHASTE_CONST(9.9999999999999995e-8)) && (var_sodium_channel_m_gate__U <= CHASTE_CONST(9.9999999999999995e-8))) ? ((1 - CHASTE_CONST(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 + CHASTE_MATH::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; @@ -327,19 +329,19 @@ double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_THIS(mFixedVoltage) : rY[0]); // Units: millivolt; Initial value: -75.0 - const double var_x3 = 0.10000000000000001 * var_chaste_interface__membrane__V; + const double var_x3 = CHASTE_CONST(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_x5 = (var_x4 >= -CHASTE_CONST(9.9999999999999995e-8)) && (var_x4 <= CHASTE_CONST(9.9999999999999995e-8)); + const double var_x6 = CHASTE_MATH::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_x9 = CHASTE_MATH::Exp(-CHASTE_CONST(4.166666666666667) - CHASTE_CONST(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; + partialF = -((var_x5) ? (CHASTE_CONST(3.5) + CHASTE_CONST(0.050000000000000003) * var_chaste_interface__membrane__V) : (-var_x4 * var_x8)) - 4 * var_x9; } else { @@ -354,15 +356,15 @@ 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 var_sodium_channel_h_gate__alpha_h = CHASTE_CONST(0.070000000000000007) * CHASTE_MATH::Exp(-CHASTE_CONST(3.75) - CHASTE_CONST(0.050000000000000003) * var_chaste_interface__membrane__V); // per_millisecond + const double var_sodium_channel_h_gate__beta_h = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(4.5) - CHASTE_CONST(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; @@ -373,15 +375,15 @@ double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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_x10 = CHASTE_MATH::Exp(-CHASTE_CONST(3.75) - CHASTE_CONST(0.050000000000000003) * var_chaste_interface__membrane__V); + const double var_x11 = CHASTE_MATH::Exp(-CHASTE_CONST(4.5) - CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V); const double var_x12 = 1 + var_x11; - partialF = -1 / var_x12 - 0.070000000000000007 * var_x10; + partialF = -1 / var_x12 - CHASTE_CONST(0.070000000000000007) * var_x10; } else { @@ -396,19 +398,19 @@ 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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__B = -CHASTE_CONST(0.10000000000000001); // per_millivolt + const double var_potassium_channel_n_gate__A = -CHASTE_CONST(0.01) / var_potassium_channel_n_gate__B; // per_millisecond + const double var_potassium_channel_n_gate__beta_n = CHASTE_CONST(0.125) * CHASTE_MATH::Exp(CHASTE_CONST(0.9375) + CHASTE_CONST(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_potassium_channel_n_gate__alpha_n = (((var_potassium_channel_n_gate__U >= -CHASTE_CONST(9.9999999999999995e-8)) && (var_potassium_channel_n_gate__U <= CHASTE_CONST(9.9999999999999995e-8))) ? ((1 - CHASTE_CONST(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 + CHASTE_MATH::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; @@ -419,19 +421,19 @@ double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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_x3 = CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V; + const double var_x13 = CHASTE_CONST(6.5) + var_x3; + const double var_x14 = (var_x13 >= -CHASTE_CONST(9.9999999999999995e-8)) && (var_x13 <= CHASTE_CONST(9.9999999999999995e-8)); + const double var_x15 = CHASTE_MATH::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); + const double var_x18 = CHASTE_MATH::Exp(CHASTE_CONST(0.9375) + CHASTE_CONST(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; + partialF = -((var_x14) ? (CHASTE_CONST(0.42499999999999999) + CHASTE_CONST(0.0050000000000000001) * var_chaste_interface__membrane__V) : (-CHASTE_CONST(0.099999999999999992) * var_x13 * var_x17)) - CHASTE_CONST(0.125) * var_x18; } else { @@ -448,7 +450,7 @@ { // Inputs: // Time units: millisecond - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -459,13 +461,13 @@ // 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__E_L = CHASTE_CONST(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_membrane__i_Stim = CHASTE_STIM(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_potassium_channel__i_K = CHASTE_MATH::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_sodium_channel__i_Na = CHASTE_MATH::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; diff --git a/chaste_codegen/data/tests/chaste_reference_models/GRL1/hodgkin_huxley_squid_axon_model_1952_modified.hpp b/chaste_codegen/data/tests/chaste_reference_models/GRL1/hodgkin_huxley_squid_axon_model_1952_modified.hpp index 8616dfcf7..85c8a6bd2 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/GRL1/hodgkin_huxley_squid_axon_model_1952_modified.hpp +++ b/chaste_codegen/data/tests/chaste_reference_models/GRL1/hodgkin_huxley_squid_axon_model_1952_modified.hpp @@ -16,6 +16,9 @@ #include "ChasteSerialization.hpp" #include #include "AbstractStimulusFunction.hpp" +#if USING_DEVICE_COMPILER +#include "StimulusEvaluatorCuda.hpp" +#endif #include "AbstractGeneralizedRushLarsenCardiacCell.hpp" class Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL1 : public AbstractGeneralizedRushLarsenCardiacCell diff --git a/chaste_codegen/data/tests/chaste_reference_models/GRL1Opt/beeler_reuter_model_1977.cpp b/chaste_codegen/data/tests/chaste_reference_models/GRL1Opt/beeler_reuter_model_1977.cpp index 164285d9f..42462fed9 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/GRL1Opt/beeler_reuter_model_1977.cpp +++ b/chaste_codegen/data/tests/chaste_reference_models/GRL1Opt/beeler_reuter_model_1977.cpp @@ -21,6 +21,8 @@ #include "HeartConfig.hpp" #include "IsNan.hpp" #include "MathsCustomFunctions.hpp" +#include "ChasteMathDeviceNamespaces.hpp" +#include "ChasteCpuMacros.hpp" @@ -143,7 +145,7 @@ class Cellbeeler_reuter_model_1977FromCellMLGRL1Opt_LookupTables : public Abstra for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(1.4000000000000001 + 0.040000000000000001 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(CHASTE_CONST(1.4000000000000001) + CHASTE_CONST(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); @@ -154,7 +156,7 @@ class Cellbeeler_reuter_model_1977FromCellMLGRL1Opt_LookupTables : public Abstra for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return -1 + exp(3.0800000000000001 + 0.040000000000000001 * var_chaste_interface__membrane__V); + return -1 + CHASTE_MATH::Exp(CHASTE_CONST(3.0800000000000001) + CHASTE_CONST(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); @@ -165,7 +167,7 @@ class Cellbeeler_reuter_model_1977FromCellMLGRL1Opt_LookupTables : public Abstra for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 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)) + (((0.92000000000000004 + 0.040000000000000001 * 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)))); + return 4 * (-1 + CHASTE_MATH::Exp(CHASTE_CONST(3.3999999999999999) + CHASTE_CONST(0.040000000000000001) * var_chaste_interface__membrane__V)) / (CHASTE_MATH::Exp(CHASTE_CONST(2.1200000000000001) + CHASTE_CONST(0.040000000000000001) * var_chaste_interface__membrane__V) + CHASTE_MATH::Exp(CHASTE_CONST(4.2400000000000002) + CHASTE_CONST(0.080000000000000002) * var_chaste_interface__membrane__V)) + (((CHASTE_CONST(0.92000000000000004) + CHASTE_CONST(0.040000000000000001) * var_chaste_interface__membrane__V >= -CHASTE_CONST(9.9999999999999995e-8)) && (CHASTE_CONST(0.92000000000000004) + CHASTE_CONST(0.040000000000000001) * var_chaste_interface__membrane__V <= CHASTE_CONST(9.9999999999999995e-8))) ? (CHASTE_CONST(7.3000000000000007) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V) : (-5 * (CHASTE_CONST(0.92000000000000004) + CHASTE_CONST(0.040000000000000001) * var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.92000000000000004) - CHASTE_CONST(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); @@ -176,7 +178,7 @@ class Cellbeeler_reuter_model_1977FromCellMLGRL1Opt_LookupTables : public Abstra 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); + return 1 + CHASTE_MATH::Exp(CHASTE_CONST(0.35997120230381568) - CHASTE_CONST(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); @@ -187,7 +189,7 @@ class Cellbeeler_reuter_model_1977FromCellMLGRL1Opt_LookupTables : public Abstra 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); + return CHASTE_MATH::Exp(CHASTE_CONST(0.050000000000000003) - CHASTE_CONST(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); @@ -198,7 +200,7 @@ class Cellbeeler_reuter_model_1977FromCellMLGRL1Opt_LookupTables : public Abstra 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); + return 1 + CHASTE_MATH::Exp(CHASTE_CONST(2.2000000000000002) + CHASTE_CONST(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); @@ -209,7 +211,7 @@ class Cellbeeler_reuter_model_1977FromCellMLGRL1Opt_LookupTables : public Abstra 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); + return CHASTE_MATH::Exp(-CHASTE_CONST(0.74576271186440679) - CHASTE_CONST(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); @@ -220,7 +222,7 @@ class Cellbeeler_reuter_model_1977FromCellMLGRL1Opt_LookupTables : public Abstra 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); + return 1 + CHASTE_MATH::Exp(CHASTE_CONST(4.197901049475262) + CHASTE_CONST(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); @@ -231,7 +233,7 @@ class Cellbeeler_reuter_model_1977FromCellMLGRL1Opt_LookupTables : public Abstra 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); + return CHASTE_MATH::Exp(-CHASTE_CONST(0.224) - CHASTE_CONST(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); @@ -242,7 +244,7 @@ class Cellbeeler_reuter_model_1977FromCellMLGRL1Opt_LookupTables : public Abstra 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); + return 1 + CHASTE_MATH::Exp(-6 - CHASTE_CONST(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); @@ -253,7 +255,7 @@ class Cellbeeler_reuter_model_1977FromCellMLGRL1Opt_LookupTables : public Abstra 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); + return CHASTE_MATH::Exp(-CHASTE_CONST(0.59999999999999998) - CHASTE_CONST(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); @@ -264,7 +266,7 @@ class Cellbeeler_reuter_model_1977FromCellMLGRL1Opt_LookupTables : public Abstra 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)))); + return (((CHASTE_CONST(4.7000000000000002) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V >= -CHASTE_CONST(9.9999999999999995e-8)) && (CHASTE_CONST(4.7000000000000002) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V <= CHASTE_CONST(9.9999999999999995e-8))) ? (CHASTE_CONST(33.5) + CHASTE_CONST(0.5) * var_chaste_interface__membrane__V) : (-10 * (CHASTE_CONST(4.7000000000000002) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(4.7000000000000002) - CHASTE_CONST(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); @@ -286,7 +288,7 @@ class Cellbeeler_reuter_model_1977FromCellMLGRL1Opt_LookupTables : public Abstra for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(-4.032 - 0.056000000000000001 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(-CHASTE_CONST(4.032) - CHASTE_CONST(0.056000000000000001) * 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); @@ -297,7 +299,7 @@ class Cellbeeler_reuter_model_1977FromCellMLGRL1Opt_LookupTables : public Abstra for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 + exp(2.8571428571428572 + 0.057142857142857141 * var_chaste_interface__membrane__V); + return 1 + CHASTE_MATH::Exp(CHASTE_CONST(2.8571428571428572) + CHASTE_CONST(0.057142857142857141) * 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); @@ -308,7 +310,7 @@ class Cellbeeler_reuter_model_1977FromCellMLGRL1Opt_LookupTables : public Abstra for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(4.1322314049586781 + 0.082644628099173556 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(CHASTE_CONST(4.1322314049586781) + CHASTE_CONST(0.082644628099173556) * 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); @@ -319,7 +321,7 @@ class Cellbeeler_reuter_model_1977FromCellMLGRL1Opt_LookupTables : public Abstra for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 + exp(-0.80000000000000004 - 0.040000000000000001 * var_chaste_interface__membrane__V); + return 1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.80000000000000004) - CHASTE_CONST(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); @@ -330,7 +332,7 @@ class Cellbeeler_reuter_model_1977FromCellMLGRL1Opt_LookupTables : public Abstra for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(-1.1997600479904018 - 0.059988002399520089 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(-CHASTE_CONST(1.1997600479904018) - CHASTE_CONST(0.059988002399520089) * 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); @@ -363,7 +365,7 @@ std::shared_ptr Cell 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__IstimAmplitude_converted = CHASTE_CONST(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 @@ -394,13 +396,13 @@ std::shared_ptr Cell // 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[0] = CHASTE_CONST(0.00089999999999999998); // (var_slow_inward_current__g_s) [mS_per_mm2] + this->mParameters[1] = CHASTE_CONST(0.01); // (var_membrane__C) [uF_per_mm2] + this->mParameters[2] = CHASTE_CONST(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[5] = CHASTE_CONST(0.0035000000000000001); // (var_time_independent_outward_current__G_K1) [uA_per_mm2] + this->mParameters[6] = CHASTE_CONST(0.0080000000000000002); // (var_time_dependent_outward_current__G_Kr) [uA_per_mm2] this->mParameters[7] = 50; // (var_sodium_current__E_Na) [mV] } @@ -452,7 +454,7 @@ std::shared_ptr Cell // 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -477,10 +479,10 @@ std::shared_ptr Cell // 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_slow_inward_current__i_s_converted = CHASTE_CONST(100.00000000000001) * (-CHASTE_CONST(7.6990712032745758) + CHASTE_CONST(13.028700000000001) * CHASTE_MATH::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 = CHASTE_CONST(100.00000000000001) * (CHASTE_CONST(3.0000000000000001e-5) + CHASTE_MATH::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 = CHASTE_CONST(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 = CHASTE_CONST(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; @@ -495,7 +497,7 @@ std::shared_ptr Cell const double delta = 1e-8; double d_dt_chaste_interface_var_membrane__V; - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -522,8 +524,8 @@ std::shared_ptr Cell 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 + const double var_slow_inward_current__i_s = (-CHASTE_CONST(7.6990712032745758) + CHASTE_CONST(13.028700000000001) * CHASTE_MATH::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 - CHASTE_CONST(0.0099999999999999985) * CHASTE_STIM(var_chaste_interface__environment__time) - (CHASTE_CONST(3.0000000000000001e-5) + CHASTE_MATH::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; @@ -543,7 +545,7 @@ std::shared_ptr Cell std::vector& rY = rGetStateVariables(); const double delta = 1e-8; - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -570,18 +572,18 @@ std::shared_ptr Cell 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_slow_inward_current_d_gate__d = CHASTE_CONST(0.095000000000000001) * (1 - var_chaste_interface__slow_inward_current_d_gate__d) * _lt_0_row[4] / (_lt_0_row[3]) - CHASTE_CONST(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 = CHASTE_CONST(0.012) * (1 - var_chaste_interface__slow_inward_current_f_gate__f) * _lt_0_row[8] / (_lt_0_row[7]) - CHASTE_CONST(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 = (-CHASTE_CONST(7.6990712032745758) + CHASTE_CONST(13.028700000000001) * CHASTE_MATH::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 = CHASTE_CONST(7.0000000000000007e-6) - CHASTE_CONST(0.070000000000000007) * var_chaste_interface__slow_inward_current__Cai - CHASTE_CONST(0.01) * var_slow_inward_current__i_s; // concentration_units / ms + const double var_sodium_current_h_gate__alpha_h = CHASTE_CONST(0.126) * CHASTE_MATH::Exp(-CHASTE_CONST(19.25) + CHASTE_CONST(0.25) * mParameters[4] - CHASTE_CONST(0.25) * var_chaste_interface__membrane__V); // per_ms + const double var_sodium_current_h_gate__beta_h = CHASTE_CONST(1.7) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.845) + CHASTE_CONST(0.082000000000000003) * mParameters[4] - CHASTE_CONST(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 + CHASTE_CONST(0.01) * mParameters[3] + (1 - CHASTE_CONST(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 = CHASTE_CONST(0.055) * CHASTE_MATH::Exp(-CHASTE_CONST(19.5) + CHASTE_CONST(0.25) * mParameters[4] - CHASTE_CONST(0.25) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(15.600000000000001) + CHASTE_CONST(0.20000000000000001) * mParameters[4] - CHASTE_CONST(0.20000000000000001) * var_chaste_interface__membrane__V)); // per_ms + const double var_sodium_current_j_gate__beta_j = CHASTE_CONST(0.29999999999999999) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.2000000000000002) + CHASTE_CONST(0.10000000000000001) * mParameters[4] - CHASTE_CONST(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 + CHASTE_CONST(0.01) * mParameters[3] + (1 - CHASTE_CONST(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 + const double d_dt_chaste_interface_var_time_dependent_outward_current_x1_gate__x1 = CHASTE_CONST(0.00050000000000000001) * (1 - var_chaste_interface__time_dependent_outward_current_x1_gate__x1) * _lt_0_row[14] / (_lt_0_row[13]) - CHASTE_CONST(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); @@ -675,7 +677,7 @@ std::shared_ptr Cell 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -702,8 +704,8 @@ std::shared_ptr Cell 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 + const double var_slow_inward_current__i_s = (-CHASTE_CONST(7.6990712032745758) + CHASTE_CONST(13.028700000000001) * CHASTE_MATH::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 - CHASTE_CONST(0.0099999999999999985) * CHASTE_STIM(var_chaste_interface__environment__time) - (CHASTE_CONST(3.0000000000000001e-5) + CHASTE_MATH::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; } @@ -713,7 +715,7 @@ std::shared_ptr Cell double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -731,27 +733,27 @@ std::shared_ptr Cell 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_x1 = CHASTE_CONST(0.040000000000000001) * var_chaste_interface__membrane__V; + const double var_x2 = CHASTE_MATH::Exp(CHASTE_CONST(2.1200000000000001) + var_x1); + const double var_x3 = CHASTE_MATH::Exp(CHASTE_CONST(4.2400000000000002) + CHASTE_CONST(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_x5 = CHASTE_MATH::Exp(CHASTE_CONST(3.3999999999999999) + var_x1); + const double var_x6 = CHASTE_CONST(0.16) * var_x5 / var_x4; + const double var_x7 = 4 * (-1 + var_x5) * (-CHASTE_CONST(0.040000000000000001) * var_x2 - CHASTE_CONST(0.080000000000000002) * var_x3) / CHASTE_MATH::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_x10 = CHASTE_MATH::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_x12 = CHASTE_MATH::Exp(CHASTE_CONST(3.0800000000000001) + var_x1); + const double var_x13 = 1 / CHASTE_MATH::Exp(CHASTE_CONST(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_x16 = CHASTE_CONST(3.0000000000000001e-5) + var_x9 + var_x11 * var_chaste_interface__sodium_current_h_gate__h + CHASTE_CONST(0.040000000000000001) * var_x12 * var_x14 * var_chaste_interface__time_dependent_outward_current_x1_gate__x1 - CHASTE_CONST(0.040000000000000001) * var_x13 * var_x15 * mParameters[6] * var_chaste_interface__time_dependent_outward_current_x1_gate__x1; + const double var_x17 = CHASTE_CONST(0.92000000000000004) + var_x1; + const double var_x18 = CHASTE_MATH::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]))); + partialF = (((var_x17 >= -CHASTE_CONST(9.9999999999999995e-8)) && (var_x17 <= CHASTE_CONST(9.9999999999999995e-8))) ? (var_x0 * (-var_x16 + (-CHASTE_CONST(0.10000000000000001) - var_x6 - var_x7) * mParameters[5])) : (var_x0 * (-var_x16 + (-var_x6 - var_x7 + CHASTE_CONST(0.20000000000000001) / var_x19 + CHASTE_CONST(0.20000000000000001) * var_x17 * var_x18 / CHASTE_MATH::Pow(var_x19, 2)) * mParameters[5]))); } else { @@ -766,7 +768,7 @@ std::shared_ptr Cell 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -778,8 +780,8 @@ std::shared_ptr Cell // 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 + const double var_slow_inward_current__i_s = (-CHASTE_CONST(7.6990712032745758) + CHASTE_CONST(13.028700000000001) * CHASTE_MATH::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 = CHASTE_CONST(7.0000000000000007e-6) - CHASTE_CONST(0.070000000000000007) * var_chaste_interface__slow_inward_current__Cai - CHASTE_CONST(0.01) * var_slow_inward_current__i_s; // concentration_units / ms return d_dt_chaste_interface_var_slow_inward_current__Cai; } @@ -802,7 +804,7 @@ std::shared_ptr Cell 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; + partialF = -CHASTE_CONST(0.070000000000000007) - CHASTE_CONST(0.13028700000000001) * var_x20; } else { @@ -817,7 +819,7 @@ std::shared_ptr Cell 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -842,7 +844,7 @@ std::shared_ptr Cell double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_THIS(mFixedVoltage) : rY[0]); // Units: mV; Initial value: -84.624 @@ -855,15 +857,15 @@ std::shared_ptr Cell 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_x28 = CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V; + const double var_x29 = CHASTE_CONST(4.7000000000000002) + var_x28; + const double var_x30 = (var_x29 >= -CHASTE_CONST(9.9999999999999995e-8)) && (var_x29 <= CHASTE_CONST(9.9999999999999995e-8)); + const double var_x31 = CHASTE_MATH::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)); + partialF = ((var_x30) ? (-CHASTE_CONST(33.5) - var_x35 - CHASTE_CONST(0.5) * var_chaste_interface__membrane__V) : (-var_x35 + 10 * var_x29 * var_x33)); } else { @@ -878,7 +880,7 @@ std::shared_ptr Cell 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -886,9 +888,9 @@ std::shared_ptr Cell // 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 + const double var_sodium_current_h_gate__alpha_h = CHASTE_CONST(0.126) * CHASTE_MATH::Exp(-CHASTE_CONST(19.25) + CHASTE_CONST(0.25) * mParameters[4] - CHASTE_CONST(0.25) * var_chaste_interface__membrane__V); // per_ms + const double var_sodium_current_h_gate__beta_h = CHASTE_CONST(1.7) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.845) + CHASTE_CONST(0.082000000000000003) * mParameters[4] - CHASTE_CONST(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 + CHASTE_CONST(0.01) * mParameters[3] + (1 - CHASTE_CONST(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; } @@ -898,18 +900,18 @@ std::shared_ptr Cell double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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_x36 = CHASTE_CONST(0.25) * var_chaste_interface__membrane__V - CHASTE_CONST(0.25) * mParameters[4]; + const double var_x37 = CHASTE_MATH::Exp(-CHASTE_CONST(19.25) - var_x36); + const double var_x38 = CHASTE_CONST(0.126) * var_x37; + const double var_x39 = CHASTE_MATH::Exp(-CHASTE_CONST(1.845) + CHASTE_CONST(0.082000000000000003) * mParameters[4] - CHASTE_CONST(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; + const double var_x42 = var_x38 + CHASTE_CONST(1.7) * var_x41; partialF = -var_x42; } @@ -926,7 +928,7 @@ std::shared_ptr Cell 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -934,9 +936,9 @@ std::shared_ptr Cell // 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 + const double var_sodium_current_j_gate__alpha_j = CHASTE_CONST(0.055) * CHASTE_MATH::Exp(-CHASTE_CONST(19.5) + CHASTE_CONST(0.25) * mParameters[4] - CHASTE_CONST(0.25) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(15.600000000000001) + CHASTE_CONST(0.20000000000000001) * mParameters[4] - CHASTE_CONST(0.20000000000000001) * var_chaste_interface__membrane__V)); // per_ms + const double var_sodium_current_j_gate__beta_j = CHASTE_CONST(0.29999999999999999) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.2000000000000002) + CHASTE_CONST(0.10000000000000001) * mParameters[4] - CHASTE_CONST(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 + CHASTE_CONST(0.01) * mParameters[3] + (1 - CHASTE_CONST(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; } @@ -946,23 +948,23 @@ std::shared_ptr Cell double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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_x28 = CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V; + const double var_x36 = CHASTE_CONST(0.25) * var_chaste_interface__membrane__V - CHASTE_CONST(0.25) * mParameters[4]; + const double var_x48 = CHASTE_MATH::Exp(-CHASTE_CONST(3.2000000000000002) - var_x28 + CHASTE_CONST(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_x51 = CHASTE_MATH::Exp(-CHASTE_CONST(15.600000000000001) + CHASTE_CONST(0.20000000000000001) * mParameters[4] - CHASTE_CONST(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_x54 = CHASTE_MATH::Exp(-CHASTE_CONST(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; + const double var_x56 = CHASTE_CONST(0.055) * var_x55; + const double var_x57 = var_x56 + CHASTE_CONST(0.29999999999999999) * var_x50; partialF = -var_x57; } @@ -979,7 +981,7 @@ std::shared_ptr Cell 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -994,7 +996,7 @@ std::shared_ptr Cell 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_d_gate__d = CHASTE_CONST(0.095000000000000001) * (1 - var_chaste_interface__slow_inward_current_d_gate__d) * _lt_0_row[4] / (_lt_0_row[3]) - CHASTE_CONST(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; } @@ -1004,7 +1006,7 @@ std::shared_ptr Cell double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_THIS(mFixedVoltage) : rY[0]); // Units: mV; Initial value: -84.624 @@ -1016,16 +1018,16 @@ std::shared_ptr Cell // 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_x61 = CHASTE_MATH::Exp(CHASTE_CONST(2.2000000000000002) + CHASTE_CONST(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_x66 = CHASTE_MATH::Exp(CHASTE_CONST(0.35997120230381568) - CHASTE_CONST(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; + partialF = -CHASTE_CONST(0.070000000000000007) * var_x64 - CHASTE_CONST(0.095000000000000001) * var_x69; } else { @@ -1040,7 +1042,7 @@ std::shared_ptr Cell 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -1055,7 +1057,7 @@ std::shared_ptr Cell 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 + const double d_dt_chaste_interface_var_slow_inward_current_f_gate__f = CHASTE_CONST(0.012) * (1 - var_chaste_interface__slow_inward_current_f_gate__f) * _lt_0_row[8] / (_lt_0_row[7]) - CHASTE_CONST(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; } @@ -1065,7 +1067,7 @@ std::shared_ptr Cell double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_THIS(mFixedVoltage) : rY[0]); // Units: mV; Initial value: -84.624 @@ -1077,16 +1079,16 @@ std::shared_ptr Cell // 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_x71 = CHASTE_MATH::Exp(CHASTE_CONST(4.197901049475262) + CHASTE_CONST(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_x75 = CHASTE_MATH::Exp(-6 - CHASTE_CONST(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; + partialF = -CHASTE_CONST(0.012) * var_x74 - CHASTE_CONST(0.0064999999999999997) * var_x77 * var_x78; } else { @@ -1101,7 +1103,7 @@ std::shared_ptr Cell 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -1116,7 +1118,7 @@ std::shared_ptr Cell 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 + const double d_dt_chaste_interface_var_time_dependent_outward_current_x1_gate__x1 = CHASTE_CONST(0.00050000000000000001) * (1 - var_chaste_interface__time_dependent_outward_current_x1_gate__x1) * _lt_0_row[14] / (_lt_0_row[13]) - CHASTE_CONST(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; } @@ -1126,7 +1128,7 @@ std::shared_ptr Cell double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_THIS(mFixedVoltage) : rY[0]); // Units: mV; Initial value: -84.624 @@ -1138,16 +1140,16 @@ std::shared_ptr Cell // 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_x79 = CHASTE_MATH::Exp(-CHASTE_CONST(0.80000000000000004) - CHASTE_CONST(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_x84 = CHASTE_MATH::Exp(CHASTE_CONST(2.8571428571428572) + CHASTE_CONST(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; + partialF = -CHASTE_CONST(0.00050000000000000001) * var_x87 - CHASTE_CONST(0.0012999999999999999) * var_x82; } else { @@ -1164,7 +1166,7 @@ std::shared_ptr Cell { // Inputs: // Time units: millisecond - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -1190,28 +1192,28 @@ std::shared_ptr Cell 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__E_s = CHASTE_CONST(7.6990712032745758) - CHASTE_CONST(13.028700000000001) * CHASTE_MATH::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_slow_inward_current__i_s_converted = CHASTE_CONST(100.00000000000001) * var_slow_inward_current__i_s; // uA_per_cm2 + const double var_sodium_current__g_Nac = CHASTE_CONST(3.0000000000000001e-5); // mS_per_mm2 + const double var_sodium_current_h_gate__alpha_h = CHASTE_CONST(0.126) * CHASTE_MATH::Exp(-CHASTE_CONST(19.25) + CHASTE_CONST(0.25) * mParameters[4] - CHASTE_CONST(0.25) * var_chaste_interface__membrane__V); // per_ms + const double var_sodium_current_h_gate__beta_h = CHASTE_CONST(1.7) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.845) + CHASTE_CONST(0.082000000000000003) * mParameters[4] - CHASTE_CONST(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__alpha_j = CHASTE_CONST(0.055) * CHASTE_MATH::Exp(-CHASTE_CONST(19.5) + CHASTE_CONST(0.25) * mParameters[4] - CHASTE_CONST(0.25) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(15.600000000000001) + CHASTE_CONST(0.20000000000000001) * mParameters[4] - CHASTE_CONST(0.20000000000000001) * var_chaste_interface__membrane__V)); // per_ms + const double var_sodium_current_j_gate__beta_j = CHASTE_CONST(0.29999999999999999) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.2000000000000002) + CHASTE_CONST(0.10000000000000001) * mParameters[4] - CHASTE_CONST(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_sodium_current__i_Na = (-mParameters[7] + var_chaste_interface__membrane__V) * (CHASTE_MATH::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 = CHASTE_CONST(100.00000000000001) * var_sodium_current__i_Na; // uA_per_cm2 + const double var_stimulus_protocol__Istim_converted = -CHASTE_STIM(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_dependent_outward_current__i_x1_converted = CHASTE_CONST(100.00000000000001) * var_time_dependent_outward_current__i_x1; // uA_per_cm2 + const double var_time_independent_outward_current__B = -CHASTE_CONST(0.040000000000000001); // per_mV + const double var_time_independent_outward_current__A = -CHASTE_CONST(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 + const double var_time_independent_outward_current__temp_current = (((var_time_independent_outward_current__U >= -CHASTE_CONST(9.9999999999999995e-8)) && (var_time_independent_outward_current__U <= CHASTE_CONST(9.9999999999999995e-8))) ? ((1 - CHASTE_CONST(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 + CHASTE_MATH::Exp(var_time_independent_outward_current__U)))); // dimensionless + const double var_time_independent_outward_current__i_K1 = (4 * (-1 + CHASTE_MATH::Exp(CHASTE_CONST(3.3999999999999999) + CHASTE_CONST(0.040000000000000001) * var_chaste_interface__membrane__V)) / (CHASTE_MATH::Exp(CHASTE_CONST(2.1200000000000001) + CHASTE_CONST(0.040000000000000001) * var_chaste_interface__membrane__V) + CHASTE_MATH::Exp(CHASTE_CONST(4.2400000000000002) + CHASTE_CONST(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 = CHASTE_CONST(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; diff --git a/chaste_codegen/data/tests/chaste_reference_models/GRL1Opt/beeler_reuter_model_1977.hpp b/chaste_codegen/data/tests/chaste_reference_models/GRL1Opt/beeler_reuter_model_1977.hpp index a8897e424..a43012872 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/GRL1Opt/beeler_reuter_model_1977.hpp +++ b/chaste_codegen/data/tests/chaste_reference_models/GRL1Opt/beeler_reuter_model_1977.hpp @@ -16,6 +16,9 @@ #include "ChasteSerialization.hpp" #include #include "AbstractStimulusFunction.hpp" +#if USING_DEVICE_COMPILER +#include "StimulusEvaluatorCuda.hpp" +#endif #include "AbstractGeneralizedRushLarsenCardiacCell.hpp" class Cellbeeler_reuter_model_1977FromCellMLGRL1Opt : public AbstractGeneralizedRushLarsenCardiacCell diff --git a/chaste_codegen/data/tests/chaste_reference_models/GRL1Opt/dynamic_matsuoka_model_2003.cpp b/chaste_codegen/data/tests/chaste_reference_models/GRL1Opt/dynamic_matsuoka_model_2003.cpp index 357d7df8f..cc6e72223 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/GRL1Opt/dynamic_matsuoka_model_2003.cpp +++ b/chaste_codegen/data/tests/chaste_reference_models/GRL1Opt/dynamic_matsuoka_model_2003.cpp @@ -21,6 +21,8 @@ #include "HeartConfig.hpp" #include "IsNan.hpp" #include "MathsCustomFunctions.hpp" +#include "ChasteMathDeviceNamespaces.hpp" +#include "ChasteCpuMacros.hpp" #include "ModelFactory.hpp" @@ -149,7 +151,7 @@ class Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables : public Abstract for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return exp(-0.074870384603595908 * var_chaste_interface__membrane__Vm); + return CHASTE_MATH::Exp(-CHASTE_CONST(0.074870384603595908) * 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); @@ -171,7 +173,7 @@ class Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables : public Abstract for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return 1 - exp(-0.074870384603595908 * var_chaste_interface__membrane__Vm); + return 1 - CHASTE_MATH::Exp(-CHASTE_CONST(0.074870384603595908) * 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); @@ -193,7 +195,7 @@ class Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables : public Abstract for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return exp(-0.037435192301797954 * var_chaste_interface__membrane__Vm); + return CHASTE_MATH::Exp(-CHASTE_CONST(0.037435192301797954) * 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); @@ -215,7 +217,7 @@ class Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables : public Abstract for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return 1 - exp(-0.037435192301797954 * var_chaste_interface__membrane__Vm); + return 1 - CHASTE_MATH::Exp(-CHASTE_CONST(0.037435192301797954) * 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); @@ -237,7 +239,7 @@ class Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables : public Abstract for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return exp(-0.030696857687474322 * var_chaste_interface__membrane__Vm); + return CHASTE_MATH::Exp(-CHASTE_CONST(0.030696857687474322) * 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); @@ -248,7 +250,7 @@ class Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables : public Abstract for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return exp(0.011979261536575346 * var_chaste_interface__membrane__Vm); + return CHASTE_MATH::Exp(CHASTE_CONST(0.011979261536575346) * 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); @@ -259,7 +261,7 @@ class Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables : public Abstract for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return exp(-0.025455930765222609 * var_chaste_interface__membrane__Vm); + return CHASTE_MATH::Exp(-CHASTE_CONST(0.025455930765222609) * 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); @@ -270,7 +272,7 @@ class Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables : public Abstract for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return 1 - exp(-0.23076923076923078 - 0.076923076923076927 * var_chaste_interface__membrane__Vm); + return 1 - CHASTE_MATH::Exp(-CHASTE_CONST(0.23076923076923078) - CHASTE_CONST(0.076923076923076927) * 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); @@ -292,7 +294,7 @@ class Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables : public Abstract for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return 58 * exp(0.015384615384615385 * var_chaste_interface__membrane__Vm) + 250000 * exp(0.1111111111111111 * var_chaste_interface__membrane__Vm); + return 58 * CHASTE_MATH::Exp(CHASTE_CONST(0.015384615384615385) * var_chaste_interface__membrane__Vm) + 250000 * CHASTE_MATH::Exp(CHASTE_CONST(0.1111111111111111) * 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); @@ -303,7 +305,7 @@ class Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables : public Abstract for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return 66 * exp(-0.015384615384615385 * var_chaste_interface__membrane__Vm) + 1800 * exp(-0.071428571428571425 * var_chaste_interface__membrane__Vm); + return 66 * CHASTE_MATH::Exp(-CHASTE_CONST(0.015384615384615385) * var_chaste_interface__membrane__Vm) + 1800 * CHASTE_MATH::Exp(-CHASTE_CONST(0.071428571428571425) * 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); @@ -314,7 +316,7 @@ class Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables : public Abstract for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return 1 / (11 * exp(0.01 * var_chaste_interface__membrane__Vm) + 2200000 * exp(0.13513513513513511 * var_chaste_interface__membrane__Vm)); + return 1 / (11 * CHASTE_MATH::Exp(CHASTE_CONST(0.01) * var_chaste_interface__membrane__Vm) + 2200000 * CHASTE_MATH::Exp(CHASTE_CONST(0.13513513513513511) * 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); @@ -325,7 +327,7 @@ class Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables : public Abstract for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return 1 / (480 * exp(0.14285714285714285 * var_chaste_interface__membrane__Vm) + 2.2000000000000002 * exp(0.015384615384615385 * var_chaste_interface__membrane__Vm)); + return 1 / (480 * CHASTE_MATH::Exp(CHASTE_CONST(0.14285714285714285) * var_chaste_interface__membrane__Vm) + CHASTE_CONST(2.2000000000000002) * CHASTE_MATH::Exp(CHASTE_CONST(0.015384615384615385) * 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); @@ -336,7 +338,7 @@ class Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables : public Abstract for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return 1 / (2 * exp(-0.01 * var_chaste_interface__membrane__Vm) + 0.0018 * exp(-0.13513513513513511 * var_chaste_interface__membrane__Vm)); + return 1 / (2 * CHASTE_MATH::Exp(-CHASTE_CONST(0.01) * var_chaste_interface__membrane__Vm) + CHASTE_CONST(0.0018) * CHASTE_MATH::Exp(-CHASTE_CONST(0.13513513513513511) * 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); @@ -347,7 +349,7 @@ class Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables : public Abstract for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return 1 / (1.5 * exp(-0.015384615384615385 * var_chaste_interface__membrane__Vm) + 0.27000000000000002 * exp(-0.16949152542372881 * var_chaste_interface__membrane__Vm)); + return 1 / (CHASTE_CONST(1.5) * CHASTE_MATH::Exp(-CHASTE_CONST(0.015384615384615385) * var_chaste_interface__membrane__Vm) + CHASTE_CONST(0.27000000000000002) * CHASTE_MATH::Exp(-CHASTE_CONST(0.16949152542372881) * 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); @@ -358,7 +360,7 @@ class Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables : public Abstract for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return 0.019 * exp(-0.17857142857142858 * var_chaste_interface__membrane__Vm) + 0.81999999999999995 * exp(-0.0040000000000000001 * var_chaste_interface__membrane__Vm); + return CHASTE_CONST(0.019) * CHASTE_MATH::Exp(-CHASTE_CONST(0.17857142857142858) * var_chaste_interface__membrane__Vm) + CHASTE_CONST(0.81999999999999995) * CHASTE_MATH::Exp(-CHASTE_CONST(0.0040000000000000001) * 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); @@ -369,7 +371,7 @@ class Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables : public Abstract for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return 1.5 * exp(0.0001 * var_chaste_interface__membrane__Vm) + 40 * exp(0.15873015873015872 * var_chaste_interface__membrane__Vm); + return CHASTE_CONST(1.5) * CHASTE_MATH::Exp(CHASTE_CONST(0.0001) * var_chaste_interface__membrane__Vm) + 40 * CHASTE_MATH::Exp(CHASTE_CONST(0.15873015873015872) * 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); @@ -380,7 +382,7 @@ class Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables : public Abstract for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return 30 * exp(0.00033333333333333332 * var_chaste_interface__membrane__Vm) + 62000 * exp(0.099009900990099015 * var_chaste_interface__membrane__Vm); + return 30 * CHASTE_MATH::Exp(CHASTE_CONST(0.00033333333333333332) * var_chaste_interface__membrane__Vm) + 62000 * CHASTE_MATH::Exp(CHASTE_CONST(0.099009900990099015) * 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); @@ -391,7 +393,7 @@ class Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables : public Abstract for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return 1.2 * exp(-0.040000000000000001 * var_chaste_interface__membrane__Vm) + 0.00059999999999999995 * exp(-0.14925373134328357 * var_chaste_interface__membrane__Vm); + return CHASTE_CONST(1.2) * CHASTE_MATH::Exp(-CHASTE_CONST(0.040000000000000001) * var_chaste_interface__membrane__Vm) + CHASTE_CONST(0.00059999999999999995) * CHASTE_MATH::Exp(-CHASTE_CONST(0.14925373134328357) * 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); @@ -402,7 +404,7 @@ class Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables : public Abstract for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return 1 / (160 * exp(0.035714285714285712 * var_chaste_interface__membrane__Vm) + 200 * exp(0.001 * var_chaste_interface__membrane__Vm)) + 0.00040000000000000002 / exp(0.050000000000000003 * var_chaste_interface__membrane__Vm); + return 1 / (160 * CHASTE_MATH::Exp(CHASTE_CONST(0.035714285714285712) * var_chaste_interface__membrane__Vm) + 200 * CHASTE_MATH::Exp(CHASTE_CONST(0.001) * var_chaste_interface__membrane__Vm)) + CHASTE_CONST(0.00040000000000000002) / CHASTE_MATH::Exp(CHASTE_CONST(0.050000000000000003) * 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); @@ -413,7 +415,7 @@ class Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables : public Abstract for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return 5 * exp(-0.0033333333333333335 * var_chaste_interface__membrane__Vm) + 20 * exp(-0.086956521739130432 * var_chaste_interface__membrane__Vm); + return 5 * CHASTE_MATH::Exp(-CHASTE_CONST(0.0033333333333333335) * var_chaste_interface__membrane__Vm) + 20 * CHASTE_MATH::Exp(-CHASTE_CONST(0.086956521739130432) * 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); @@ -424,7 +426,7 @@ class Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables : public Abstract for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return 1 / (1600 * exp(0.035714285714285712 * var_chaste_interface__membrane__Vm) + 2000 * exp(0.001 * var_chaste_interface__membrane__Vm)) + 0.0001 / exp(0.050000000000000003 * var_chaste_interface__membrane__Vm); + return 1 / (1600 * CHASTE_MATH::Exp(CHASTE_CONST(0.035714285714285712) * var_chaste_interface__membrane__Vm) + 2000 * CHASTE_MATH::Exp(CHASTE_CONST(0.001) * var_chaste_interface__membrane__Vm)) + CHASTE_CONST(0.0001) / CHASTE_MATH::Exp(CHASTE_CONST(0.050000000000000003) * 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); @@ -435,7 +437,7 @@ class Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables : public Abstract for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return 20 * exp(-0.0033333333333333335 * var_chaste_interface__membrane__Vm) + 200 * exp(-0.076923076923076927 * var_chaste_interface__membrane__Vm); + return 20 * CHASTE_MATH::Exp(-CHASTE_CONST(0.0033333333333333335) * var_chaste_interface__membrane__Vm) + 200 * CHASTE_MATH::Exp(-CHASTE_CONST(0.076923076923076927) * 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); @@ -446,7 +448,7 @@ class Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables : public Abstract for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return 2.5 * exp(0.0033333333333333335 * var_chaste_interface__membrane__Vm) + 10 * exp(0.058823529411764705 * var_chaste_interface__membrane__Vm); + return CHASTE_CONST(2.5) * CHASTE_MATH::Exp(CHASTE_CONST(0.0033333333333333335) * var_chaste_interface__membrane__Vm) + 10 * CHASTE_MATH::Exp(CHASTE_CONST(0.058823529411764705) * 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); @@ -457,7 +459,7 @@ class Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables : public Abstract for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return 2 * exp(-0.0066666666666666671 * var_chaste_interface__membrane__Vm) + 0.34999999999999998 * exp(-0.058823529411764705 * var_chaste_interface__membrane__Vm); + return 2 * CHASTE_MATH::Exp(-CHASTE_CONST(0.0066666666666666671) * var_chaste_interface__membrane__Vm) + CHASTE_CONST(0.34999999999999998) * CHASTE_MATH::Exp(-CHASTE_CONST(0.058823529411764705) * 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); @@ -468,7 +470,7 @@ class Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables : public Abstract for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return 85 * exp(-0.095238095238095233 * var_chaste_interface__membrane__Vm) + 370 * exp(-0.016129032258064516 * var_chaste_interface__membrane__Vm); + return 85 * CHASTE_MATH::Exp(-CHASTE_CONST(0.095238095238095233) * var_chaste_interface__membrane__Vm) + 370 * CHASTE_MATH::Exp(-CHASTE_CONST(0.016129032258064516) * 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); @@ -479,7 +481,7 @@ class Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables : public Abstract for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return 260 * exp(0.01 * var_chaste_interface__membrane__Vm) + 1450 * exp(0.050000000000000003 * var_chaste_interface__membrane__Vm); + return 260 * CHASTE_MATH::Exp(CHASTE_CONST(0.01) * var_chaste_interface__membrane__Vm) + 1450 * CHASTE_MATH::Exp(CHASTE_CONST(0.050000000000000003) * 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); @@ -490,7 +492,7 @@ class Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables : public Abstract for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return exp(0.011979261536575346 * var_chaste_interface__membrane__Vm); + return CHASTE_MATH::Exp(CHASTE_CONST(0.011979261536575346) * 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); @@ -501,7 +503,7 @@ class Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables : public Abstract for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return exp(-0.025455930765222609 * var_chaste_interface__membrane__Vm); + return CHASTE_MATH::Exp(-CHASTE_CONST(0.025455930765222609) * 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); @@ -512,7 +514,7 @@ class Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables : public Abstract for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return 8000 * exp(0.01 * var_chaste_interface__membrane__Vm) + 9000000000.0 * exp(0.20000000000000001 * var_chaste_interface__membrane__Vm); + return 8000 * CHASTE_MATH::Exp(CHASTE_CONST(0.01) * var_chaste_interface__membrane__Vm) + CHASTE_CONST(9000000000.0) * CHASTE_MATH::Exp(CHASTE_CONST(0.20000000000000001) * 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); @@ -523,7 +525,7 @@ class Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables : public Abstract for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return 4000 * exp(-0.01 * var_chaste_interface__membrane__Vm) + 0.014 * exp(-0.20000000000000001 * var_chaste_interface__membrane__Vm); + return 4000 * CHASTE_MATH::Exp(-CHASTE_CONST(0.01) * var_chaste_interface__membrane__Vm) + CHASTE_CONST(0.014) * CHASTE_MATH::Exp(-CHASTE_CONST(0.20000000000000001) * 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); @@ -534,7 +536,7 @@ class Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables : public Abstract for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return 1 / (1300 * exp(0.050000000000000003 * var_chaste_interface__membrane__Vm) + 0.040000000000000001 * exp(0.00125 * var_chaste_interface__membrane__Vm)); + return 1 / (1300 * CHASTE_MATH::Exp(CHASTE_CONST(0.050000000000000003) * var_chaste_interface__membrane__Vm) + CHASTE_CONST(0.040000000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.00125) * 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); @@ -545,7 +547,7 @@ class Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables : public Abstract for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return 1.25 / exp(-0.0025000000000000001 * var_chaste_interface__membrane__Vm); + return CHASTE_CONST(1.25) / CHASTE_MATH::Exp(-CHASTE_CONST(0.0025000000000000001) * 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); @@ -556,7 +558,7 @@ class Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables : public Abstract for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return 1 / (26 * exp(0.058823529411764705 * var_chaste_interface__membrane__Vm) + 0.02 * exp(0.00125 * var_chaste_interface__membrane__Vm)); + return 1 / (26 * CHASTE_MATH::Exp(CHASTE_CONST(0.058823529411764705) * var_chaste_interface__membrane__Vm) + CHASTE_CONST(0.02) * CHASTE_MATH::Exp(CHASTE_CONST(0.00125) * 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); @@ -567,7 +569,7 @@ class Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables : public Abstract for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return 1 / (5 * exp(-0.0025000000000000001 * var_chaste_interface__membrane__Vm) + 0.0001027 * exp(-0.125 * var_chaste_interface__membrane__Vm)); + return 1 / (5 * CHASTE_MATH::Exp(-CHASTE_CONST(0.0025000000000000001) * var_chaste_interface__membrane__Vm) + CHASTE_CONST(0.0001027) * CHASTE_MATH::Exp(-CHASTE_CONST(0.125) * 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); @@ -578,7 +580,7 @@ class Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables : public Abstract for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return 1 / (0.25 * exp(-0.02 * var_chaste_interface__membrane__Vm) + 0.1027 * exp(-0.125 * var_chaste_interface__membrane__Vm)); + return 1 / (CHASTE_CONST(0.25) * CHASTE_MATH::Exp(-CHASTE_CONST(0.02) * var_chaste_interface__membrane__Vm) + CHASTE_CONST(0.1027) * CHASTE_MATH::Exp(-CHASTE_CONST(0.125) * 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); @@ -589,7 +591,7 @@ class Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables : public Abstract for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return 11 * exp(-0.035714285714285712 * var_chaste_interface__membrane__Vm) + 0.20000000000000001 * exp(-0.0025000000000000001 * var_chaste_interface__membrane__Vm); + return 11 * CHASTE_MATH::Exp(-CHASTE_CONST(0.035714285714285712) * var_chaste_interface__membrane__Vm) + CHASTE_CONST(0.20000000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(0.0025000000000000001) * 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); @@ -600,7 +602,7 @@ class Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables : public Abstract for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return 4.4000000000000004 * exp(0.0625 * var_chaste_interface__membrane__Vm) + 0.20000000000000001 * exp(0.002 * var_chaste_interface__membrane__Vm); + return CHASTE_CONST(4.4000000000000004) * CHASTE_MATH::Exp(CHASTE_CONST(0.0625) * var_chaste_interface__membrane__Vm) + CHASTE_CONST(0.20000000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.002) * 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); @@ -611,7 +613,7 @@ class Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables : public Abstract for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return 1 + 0.051334999999999999 * exp(-1.1946902654867255 - 0.088495575221238937 * var_chaste_interface__membrane__Vm); + return 1 + CHASTE_CONST(0.051334999999999999) * CHASTE_MATH::Exp(-CHASTE_CONST(1.1946902654867255) - CHASTE_CONST(0.088495575221238937) * 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); @@ -622,7 +624,7 @@ class Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables : public Abstract for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return exp(-1.1946902654867255 - 0.088495575221238937 * var_chaste_interface__membrane__Vm); + return CHASTE_MATH::Exp(-CHASTE_CONST(1.1946902654867255) - CHASTE_CONST(0.088495575221238937) * 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); @@ -633,7 +635,7 @@ class Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables : public Abstract for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return 1 + 0.067083000000000004 * exp(1.1946902654867255 + 0.088495575221238937 * var_chaste_interface__membrane__Vm); + return 1 + CHASTE_CONST(0.067083000000000004) * CHASTE_MATH::Exp(CHASTE_CONST(1.1946902654867255) + CHASTE_CONST(0.088495575221238937) * 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); @@ -644,7 +646,7 @@ class Dynamicmatsuoka_model_2003FromCellMLGRL1Opt_LookupTables : public Abstract for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__Vm) { - return exp(1.1946902654867255 + 0.088495575221238937 * var_chaste_interface__membrane__Vm); + return CHASTE_MATH::Exp(CHASTE_CONST(1.1946902654867255) + CHASTE_CONST(0.088495575221238937) * 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); @@ -677,7 +679,7 @@ std::shared_ptr Dynami 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_amplitude_converted = -4000 * CHASTE_CAP() / 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 @@ -710,17 +712,17 @@ std::shared_ptr Dynami 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[5] = CHASTE_CONST(1.8); // (var_external_ion_concentrations__Cao) [millimolar] + this->mParameters[6] = CHASTE_CONST(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] + this->mParameters[11] = CHASTE_CONST(1.1459999999999999); // (var_time_independent_potassium_current__P_K1_0) [nanoS_per_picoF] + this->mParameters[12] = CHASTE_CONST(0.0086400000000000001); // (var_rapid_time_dependent_potassium_current__P_Kr) [nanoS_per_picoF] + this->mParameters[13] = CHASTE_CONST(5.04); // (var_slow_time_dependent_potassium_current__P_Ks_K) [picoA_per_millimolar] + this->mParameters[14] = CHASTE_CONST(6.8099999999999996); // (var_sodium_calcium_exchanger__P_NaCa) [picoA_per_picoF] + this->mParameters[15] = CHASTE_CONST(0.033000000000000002); // (var_transient_outward_current__P_to_K) [picoA_per_millimolar] } Dynamicmatsuoka_model_2003FromCellMLGRL1Opt::~Dynamicmatsuoka_model_2003FromCellMLGRL1Opt() @@ -771,7 +773,7 @@ std::shared_ptr Dynami // 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]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -826,19 +828,19 @@ std::shared_ptr Dynami // 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_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 + CHASTE_CONST(2.7439999999999993) / CHASTE_MATH::Pow(var_chaste_interface__ATP_production__ATPi, 3)); // dimensionless + const double var_internal_ion_concentrations__Cai = -CHASTE_CONST(0.026190000000000001) + CHASTE_CONST(0.5) * CHASTE_MATH::Sqrt(CHASTE_MATH::Pow((CHASTE_CONST(0.052380000000000003) - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + CHASTE_CONST(0.0095200000000000007) * var_chaste_interface__internal_ion_concentrations__Ca_Total) + CHASTE_CONST(0.5) * var_chaste_interface__internal_ion_concentrations__Ca_Total; // millimolar + const double var_background_lCa_current__p_open = 1 / (1 + CHASTE_CONST(1.7279999999999996e-9) / CHASTE_MATH::Pow(var_internal_ion_concentrations__Cai, 3)); // dimensionless + const double var_constant_field_equations__CF_Ca = ((var_chaste_interface__membrane__Vm == 0) ? (-mParameters[5]) : (CHASTE_CONST(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) : (CHASTE_CONST(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]) : (CHASTE_CONST(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 = CHASTE_CONST(26.712831923985377) * CHASTE_MATH::Log(mParameters[6] / var_chaste_interface__internal_ion_concentrations__Ki); // millivolt + const double var_time_independent_potassium_current__lambda = 3 * (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4319999999999999) + CHASTE_CONST(0.064000000000000001) * var_chaste_interface__membrane__Vm - CHASTE_CONST(0.064000000000000001) * var_time_independent_potassium_current__E_K)) * CHASTE_MATH::Exp(CHASTE_CONST(0.47999999999999998) + CHASTE_CONST(0.048000000000000001) * var_time_independent_potassium_current__E_K - CHASTE_CONST(0.048000000000000001) * var_chaste_interface__membrane__Vm) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.1000000000000001) + CHASTE_CONST(0.029999999999999999) * var_chaste_interface__membrane__Vm - CHASTE_CONST(0.029999999999999999) * var_time_independent_potassium_current__E_K)); // per_millisecond + const double var_time_independent_potassium_current__mu = CHASTE_CONST(0.75) * CHASTE_MATH::Exp(-CHASTE_CONST(0.35000000000000003) + CHASTE_CONST(0.035000000000000003) * var_chaste_interface__membrane__Vm - CHASTE_CONST(0.035000000000000003) * var_time_independent_potassium_current__E_K) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.1000000000000001) + CHASTE_CONST(0.014999999999999999) * var_chaste_interface__membrane__Vm - CHASTE_CONST(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 var_membrane__i_tot = CHASTE_CONST(0.38500000000000001) * var_constant_field_equations__CF_Na + CHASTE_CONST(0.040000000000000001) * var_constant_field_equations__CF_Ca + CHASTE_CONST(0.15400000000000003) * var_constant_field_equations__CF_K + 21 * (-CHASTE_CONST(0.040000000000000001) * (1 - var_chaste_interface__sodium_potassium_pump_y_gate__y) / (1 + CHASTE_CONST(90.050628437051003) * CHASTE_MATH::Pow((1 / (mParameters[7] * _lt_0_row[4])), CHASTE_CONST(1.0600000000000001)) * (1 + CHASTE_CONST(4.560221410801109) * CHASTE_MATH::Pow(mParameters[6], CHASTE_CONST(1.1200000000000001)))) + CHASTE_CONST(0.37) * var_chaste_interface__sodium_potassium_pump_y_gate__y / ((1 + CHASTE_CONST(0.094) / var_chaste_interface__ATP_production__ATPi) * (1 + CHASTE_CONST(4.4045579125871104) * CHASTE_MATH::Pow((1 / var_chaste_interface__internal_ion_concentrations__Nai), CHASTE_CONST(1.0600000000000001)) * (1 + CHASTE_CONST(0.020000293738509214) * CHASTE_MATH::Pow(var_chaste_interface__internal_ion_concentrations__Ki, CHASTE_CONST(1.1200000000000001)))))) * mParameters[9] + CHASTE_CONST(0.11) * var_background_lCa_current__p_open * var_constant_field_equations__CF_K + CHASTE_CONST(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 + CHASTE_CONST(669.921875) * (1 + CHASTE_CONST(724.63768115942037) * var_internal_ion_concentrations__Cai) / CHASTE_MATH::Pow(var_chaste_interface__internal_ion_concentrations__Nai, 3)) - (1 - var_chaste_interface__sodium_calcium_exchanger_y_gate__y) * _lt_0_row[6] / (1 + CHASTE_CONST(669921.875) * (1 + CHASTE_CONST(0.7246376811594204) * mParameters[5]) / CHASTE_MATH::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 + CHASTE_CONST(0.2016) * CHASTE_MATH::Pow(var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1, 2) * (CHASTE_CONST(0.10000000000000001) + CHASTE_CONST(0.90000000000000002) * var_chaste_interface__slow_time_dependent_potassium_current_y2_gate__y2) * var_constant_field_equations__CF_Na + CHASTE_CONST(0.00036499999999999998) * mParameters[8] * var_L_type_Ca_channel__p_open_CaL * var_constant_field_equations__CF_K + CHASTE_CONST(1.8499999999999999e-5) * mParameters[8] * var_L_type_Ca_channel__p_open_CaL * var_constant_field_equations__CF_Na + CHASTE_CONST(0.00297) * CHASTE_MATH::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 + CHASTE_CONST(44.047040000000003) * CHASTE_MATH::Pow(mParameters[6], CHASTE_CONST(0.23999999999999999)) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__Vm) / (1 + CHASTE_CONST(99.999999999999986) * CHASTE_MATH::Pow(var_chaste_interface__ATP_production__ATPi, 2)) + CHASTE_MATH::Pow(var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1, 2) * (CHASTE_CONST(0.10000000000000001) + CHASTE_CONST(0.90000000000000002) * var_chaste_interface__slow_time_dependent_potassium_current_y2_gate__y2) * var_constant_field_equations__CF_K * mParameters[13] + CHASTE_MATH::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 + CHASTE_CONST(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 + CHASTE_CONST(0.71370912277944121) * CHASTE_MATH::Pow(mParameters[6], CHASTE_CONST(0.20000000000000001)) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__Vm) * (CHASTE_CONST(0.40000000000000002) * var_chaste_interface__rapid_time_dependent_potassium_current_y2_gate__y2 + CHASTE_CONST(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 + CHASTE_CONST(0.50938071193859957) * CHASTE_MATH::Pow(mParameters[6], CHASTE_CONST(0.40000000000000002)) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__Vm) * (CHASTE_MATH::Pow(var_time_independent_potassium_current__fO, 4) + 2 * CHASTE_MATH::Pow(var_time_independent_potassium_current__fB, 2) * CHASTE_MATH::Pow(var_time_independent_potassium_current__fO, 2) + CHASTE_CONST(2.6666666666666665) * CHASTE_MATH::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)) ? (CHASTE_CONST(0.0010924717003124302) * CHASTE_MATH::Pow(mParameters[6], CHASTE_CONST(0.16)) * var_constant_field_equations__CF_K) : (CHASTE_CONST(8.3986538766456042e-5) * CHASTE_MATH::Pow(mParameters[6], CHASTE_CONST(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 = CHASTE_CAP() * 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)); @@ -852,7 +854,7 @@ std::shared_ptr Dynami const double delta = 1e-8; double d_dt_chaste_interface_var_membrane__Vm; - double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -909,47 +911,47 @@ std::shared_ptr Dynami 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__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 + CHASTE_CONST(2.7439999999999993) / CHASTE_MATH::Pow(var_chaste_interface__ATP_production__ATPi, 3)); // dimensionless + const double var_internal_ion_concentrations__Cai = -CHASTE_CONST(0.026190000000000001) + CHASTE_CONST(0.5) * CHASTE_MATH::Sqrt(CHASTE_MATH::Pow((CHASTE_CONST(0.052380000000000003) - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + CHASTE_CONST(0.0095200000000000007) * var_chaste_interface__internal_ion_concentrations__Ca_Total) + CHASTE_CONST(0.5) * var_chaste_interface__internal_ion_concentrations__Ca_Total; // millimolar + const double var_background_lCa_current__p_open = 1 / (1 + CHASTE_CONST(1.7279999999999996e-9) / CHASTE_MATH::Pow(var_internal_ion_concentrations__Cai, 3)); // dimensionless + const double var_constant_field_equations__CF_Ca = ((var_chaste_interface__membrane__Vm == 0) ? (-mParameters[5]) : (CHASTE_CONST(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_background_Cab_current__i_Cab = CHASTE_CONST(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) : (CHASTE_CONST(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 = CHASTE_CONST(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)) ? (CHASTE_CONST(0.0010924717003124302) * CHASTE_MATH::Pow(mParameters[6], CHASTE_CONST(0.16)) * var_constant_field_equations__CF_K) : (CHASTE_CONST(8.3986538766456042e-5) * CHASTE_MATH::Pow(mParameters[6], CHASTE_CONST(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 = CHASTE_CONST(0.15400000000000003) * var_constant_field_equations__CF_K; // picoA + const double var_background_lCa_current__i_lCa_K = CHASTE_CONST(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]) : (CHASTE_CONST(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 = CHASTE_CONST(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 = CHASTE_CONST(0.38500000000000001) * var_constant_field_equations__CF_Na; // picoA + const double var_background_lCa_current__i_lCa_Na = CHASTE_CONST(0.11) * var_background_lCa_current__p_open * var_constant_field_equations__CF_Na; // picoA + const double var_membrane__i_ext = 1 * CHASTE_STIM(var_chaste_interface__environment__time) * mParameters[9] / CHASTE_CAP(); // picoA + const double var_slow_time_dependent_potassium_current__i_Ks_K = CHASTE_MATH::Pow(var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1, 2) * (CHASTE_CONST(0.10000000000000001) + CHASTE_CONST(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 = CHASTE_CONST(0.2016) * CHASTE_MATH::Pow(var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1, 2) * (CHASTE_CONST(0.10000000000000001) + CHASTE_CONST(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__p_E1Na = 1 / (1 + CHASTE_CONST(669.921875) * (1 + CHASTE_CONST(724.63768115942037) * var_internal_ion_concentrations__Cai) / CHASTE_MATH::Pow(var_chaste_interface__internal_ion_concentrations__Nai, 3)); // dimensionless + const double var_sodium_calcium_exchanger__p_E2Na = 1 / (1 + CHASTE_CONST(669921.875) * (1 + CHASTE_CONST(0.7246376811594204) * mParameters[5]) / CHASTE_MATH::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_K = CHASTE_CONST(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_sodium_potassium_pump__k1 = CHASTE_CONST(0.37) / (1 + CHASTE_CONST(0.094) / var_chaste_interface__ATP_production__ATPi); // per_millisecond + const double var_sodium_potassium_pump__p_E1Na = 1 / (1 + CHASTE_CONST(4.4045579125871104) * CHASTE_MATH::Pow((1 / var_chaste_interface__internal_ion_concentrations__Nai), CHASTE_CONST(1.0600000000000001)) * (1 + CHASTE_CONST(0.020000293738509214) * CHASTE_MATH::Pow(var_chaste_interface__internal_ion_concentrations__Ki, CHASTE_CONST(1.1200000000000001)))); // dimensionless + const double var_sodium_potassium_pump__p_E2Na = 1 / (1 + CHASTE_CONST(90.050628437051003) * CHASTE_MATH::Pow((1 / var_sodium_potassium_pump__Nao_Eff), CHASTE_CONST(1.0600000000000001)) * (1 + CHASTE_CONST(4.560221410801109) * CHASTE_MATH::Pow(mParameters[6], CHASTE_CONST(1.1200000000000001)))); // dimensionless + const double var_sodium_potassium_pump__i_NaK = 21 * (-CHASTE_CONST(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 = CHASTE_CONST(26.712831923985377) * CHASTE_MATH::Log(mParameters[6] / var_chaste_interface__internal_ion_concentrations__Ki); // millivolt + const double var_background_KATP_current__i_KATP = CHASTE_CONST(44.047040000000003) * CHASTE_MATH::Pow(mParameters[6], CHASTE_CONST(0.23999999999999999)) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__Vm) / (1 + CHASTE_CONST(99.999999999999986) * CHASTE_MATH::Pow(var_chaste_interface__ATP_production__ATPi, 2)); // picoA + const double var_rapid_time_dependent_potassium_current__i_Kr = CHASTE_CONST(0.71370912277944121) * CHASTE_MATH::Pow(mParameters[6], CHASTE_CONST(0.20000000000000001)) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__Vm) * (CHASTE_CONST(0.40000000000000002) * var_chaste_interface__rapid_time_dependent_potassium_current_y2_gate__y2 + CHASTE_CONST(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 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4319999999999999) + CHASTE_CONST(0.064000000000000001) * var_chaste_interface__membrane__Vm - CHASTE_CONST(0.064000000000000001) * var_time_independent_potassium_current__E_K)) * CHASTE_MATH::Exp(CHASTE_CONST(0.47999999999999998) + CHASTE_CONST(0.048000000000000001) * var_time_independent_potassium_current__E_K - CHASTE_CONST(0.048000000000000001) * var_chaste_interface__membrane__Vm) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.1000000000000001) + CHASTE_CONST(0.029999999999999999) * var_chaste_interface__membrane__Vm - CHASTE_CONST(0.029999999999999999) * var_time_independent_potassium_current__E_K)); // per_millisecond + const double var_time_independent_potassium_current__mu = CHASTE_CONST(0.75) * CHASTE_MATH::Exp(-CHASTE_CONST(0.35000000000000003) + CHASTE_CONST(0.035000000000000003) * var_chaste_interface__membrane__Vm - CHASTE_CONST(0.035000000000000003) * var_time_independent_potassium_current__E_K) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.1000000000000001) + CHASTE_CONST(0.014999999999999999) * var_chaste_interface__membrane__Vm - CHASTE_CONST(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 + const double var_time_independent_potassium_current__i_K1 = CHASTE_CONST(0.50938071193859957) * CHASTE_MATH::Pow(mParameters[6], CHASTE_CONST(0.40000000000000002)) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__Vm) * (CHASTE_MATH::Pow(var_time_independent_potassium_current__fO, 4) + 2 * CHASTE_MATH::Pow(var_time_independent_potassium_current__fB, 2) * CHASTE_MATH::Pow(var_time_independent_potassium_current__fO, 2) + CHASTE_CONST(2.6666666666666665) * CHASTE_MATH::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 = CHASTE_MATH::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 = CHASTE_CONST(0.00297) * CHASTE_MATH::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; @@ -970,7 +972,7 @@ std::shared_ptr Dynami std::vector& rY = rGetStateVariables(); const double delta = 1e-8; - double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -1055,113 +1057,113 @@ std::shared_ptr Dynami 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_Ca_concentrations_in_SR__Carel = -CHASTE_CONST(5.4000000000000004) + CHASTE_CONST(0.5) * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total + CHASTE_CONST(5.4000000000000004) * CHASTE_MATH::Sqrt(CHASTE_MATH::Pow((1 - CHASTE_CONST(0.092592592592592587) * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total), 2) + CHASTE_CONST(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__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 + CHASTE_CONST(2.7439999999999993) / CHASTE_MATH::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 d_dt_chaste_interface_var_NL_model__X = CHASTE_CONST(1.1488559970494261) - CHASTE_CONST(1.2) * var_chaste_interface__NL_model__X; // micrometre / millisecond + const double var_NL_model__Q_a = -CHASTE_CONST(0.0038999999999999998) * var_chaste_interface__NL_model__pCaCB + CHASTE_CONST(0.0038999999999999998) * var_chaste_interface__NL_model__pCa * CHASTE_MATH::Exp(-CHASTE_CONST(0.86212130841993795)); // per_millisecond + const double var_NL_model__Q_d2 = CHASTE_CONST(0.027) * CHASTE_MATH::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 var_SR_calcium_pump__k2 = 1 / (1 + CHASTE_CONST(0.10000000000000001) / var_chaste_interface__ATP_production__ATPi); // per_millisecond + const double var_SR_calcium_pump__p_E1Ca = 1 / (1 + CHASTE_CONST(0.080000000000000002) / var_chaste_interface__Ca_concentrations_in_SR__Caup); // dimensionless + const double var_internal_ion_concentrations__Cai = -CHASTE_CONST(0.026190000000000001) + CHASTE_CONST(0.5) * CHASTE_MATH::Sqrt(CHASTE_MATH::Pow((CHASTE_CONST(0.052380000000000003) - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + CHASTE_CONST(0.0095200000000000007) * var_chaste_interface__internal_ion_concentrations__Ca_Total) + CHASTE_CONST(0.5) * var_chaste_interface__internal_ion_concentrations__Ca_Total; // millimolar + const double var_NL_model__Q_b = -CHASTE_CONST(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 var_NL_model__Q_r = CHASTE_CONST(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 = -CHASTE_CONST(0.12) * var_chaste_interface__NL_model__pCB - CHASTE_CONST(0.027) * CHASTE_MATH::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 var_SR_calcium_pump__p_E2Ca = 1 / (1 + CHASTE_CONST(0.00080000000000000004) / var_internal_ion_concentrations__Cai); // dimensionless + const double var_SR_calcium_pump__i_SR_U = (CHASTE_CONST(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) * (CHASTE_CONST(0.01) - CHASTE_CONST(0.01) * var_SR_calcium_pump__p_E2Ca + var_SR_calcium_pump__k2 * var_SR_calcium_pump__p_E2Ca) - (1 - CHASTE_CONST(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 + CHASTE_CONST(1.7279999999999996e-9) / CHASTE_MATH::Pow(var_internal_ion_concentrations__Cai, 3)); // dimensionless + const double d_dt_chaste_interface_var_Ca_concentrations_in_SR__Ca_Total = CHASTE_CONST(3.2387883511406234e-5) * var_SR_T_current__i_SR_T - CHASTE_CONST(3.2387883511406234e-5) * var_RyR_channel__i_RyR; // millimolar / millisecond + const double d_dt_chaste_interface_var_Ca_concentrations_in_SR__Caup = -CHASTE_CONST(1.2955153404562494e-5) * var_SR_L_current__i_SR_L - CHASTE_CONST(1.2955153404562494e-5) * var_SR_T_current__i_SR_T - CHASTE_CONST(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 d_dt_chaste_interface_var_L_type_Ca_channel_voltage_dependent_gate__p_AI_CaL = CHASTE_CONST(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 - (CHASTE_CONST(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_L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL = CHASTE_CONST(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 - (CHASTE_CONST(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 = CHASTE_CONST(0.040000000000000001) / (1 + CHASTE_CONST(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 = (CHASTE_CONST(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_constant_field_equations__CF_Ca = ((var_chaste_interface__membrane__Vm == 0) ? (-mParameters[5]) : (CHASTE_CONST(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_L_type_Ca_channel_Ca_dependent_gate__iCaL = CHASTE_CONST(0.067599999999999993) * var_constant_field_equations__CF_Ca; // picoA + const double var_L_type_Ca_channel_Ca_dependent_gate__Cacm = -CHASTE_CONST(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 = CHASTE_CONST(0.34999999999999998) * var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U + CHASTE_CONST(0.0041999999999999997) * var_L_type_Ca_channel_Ca_dependent_gate__p_CCa - (CHASTE_CONST(0.14299999999999999) + CHASTE_CONST(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 = CHASTE_CONST(6.9539999999999997) * (1 - var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL) * var_internal_ion_concentrations__Cai + CHASTE_CONST(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 = CHASTE_CONST(0.14299999999999999) * var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_C + CHASTE_CONST(2.0019999999999998) * var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa - (CHASTE_CONST(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 = CHASTE_CONST(0.00029999999999999997) * var_L_type_Ca_channel_Ca_dependent_gate__p_CCa - CHASTE_CONST(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 * CHASTE_MATH::Pow(var_internal_ion_concentrations__Cai, 2) / CHASTE_MATH::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 = -(CHASTE_CONST(0.00084900000000000004) + var_RyR_channel__k1) * var_chaste_interface__RyR_channel__p_close_RyR + CHASTE_CONST(0.000377) * CHASTE_MATH::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 - CHASTE_CONST(0.080000000000000002) * var_chaste_interface__RyR_channel__p_open_RyR / (1 + CHASTE_CONST(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 var_background_Cab_current__i_Cab = CHASTE_CONST(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) : (CHASTE_CONST(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 = CHASTE_CONST(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)) ? (CHASTE_CONST(0.0010924717003124302) * CHASTE_MATH::Pow(mParameters[6], CHASTE_CONST(0.16)) * var_constant_field_equations__CF_K) : (CHASTE_CONST(8.3986538766456042e-5) * CHASTE_MATH::Pow(mParameters[6], CHASTE_CONST(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 = CHASTE_CONST(0.15400000000000003) * var_constant_field_equations__CF_K; // picoA + const double var_background_lCa_current__i_lCa_K = CHASTE_CONST(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]) : (CHASTE_CONST(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 = CHASTE_CONST(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 = CHASTE_CONST(0.38500000000000001) * var_constant_field_equations__CF_Na; // picoA + const double var_background_lCa_current__i_lCa_Na = CHASTE_CONST(0.11) * var_background_lCa_current__p_open * var_constant_field_equations__CF_Na; // picoA + const double var_membrane__i_ext = 1 * CHASTE_STIM(var_chaste_interface__environment__time) * mParameters[9] / CHASTE_CAP(); // 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 d_dt_chaste_interface_var_slow_time_dependent_potassium_current_y2_gate__y2 = -CHASTE_CONST(0.004444) * var_chaste_interface__slow_time_dependent_potassium_current_y2_gate__y2 + CHASTE_CONST(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 = CHASTE_MATH::Pow(var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1, 2) * (CHASTE_CONST(0.10000000000000001) + CHASTE_CONST(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 = CHASTE_CONST(0.2016) * CHASTE_MATH::Pow(var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1, 2) * (CHASTE_CONST(0.10000000000000001) + CHASTE_CONST(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__p_E1Na = 1 / (1 + CHASTE_CONST(669.921875) * (1 + CHASTE_CONST(724.63768115942037) * var_internal_ion_concentrations__Cai) / CHASTE_MATH::Pow(var_chaste_interface__internal_ion_concentrations__Nai, 3)); // dimensionless + const double var_sodium_calcium_exchanger__p_E2Na = 1 / (1 + CHASTE_CONST(669921.875) * (1 + CHASTE_CONST(0.7246376811594204) * mParameters[5]) / CHASTE_MATH::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 + CHASTE_CONST(1.3799999999999999) * (1 + CHASTE_CONST(1.4927113702623908e-6) * CHASTE_MATH::Pow(mParameters[7], 3)) / mParameters[5]) + var_sodium_calcium_exchanger__k2 * var_sodium_calcium_exchanger__p_E2Na) - (1 / (1 + CHASTE_CONST(0.0013799999999999999) * (1 + CHASTE_CONST(0.0014927113702623907) * CHASTE_MATH::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_internal_ion_concentrations__Ca_Total = CHASTE_CONST(0.070000000000000007) * var_NL_model__Q_d2 + CHASTE_CONST(0.070000000000000007) * var_NL_model__Q_r + CHASTE_CONST(6.4775767022812476e-7) * var_RyR_channel__i_RyR + CHASTE_CONST(6.4775767022812476e-7) * var_SR_L_current__i_SR_L + CHASTE_CONST(6.4775767022812476e-7) * var_SR_calcium_pump__i_SR_U + CHASTE_CONST(1.2955153404562495e-6) * var_sodium_calcium_exchanger__i_NaCa - CHASTE_CONST(0.070000000000000007) * var_NL_model__Q_b - CHASTE_CONST(6.4775767022812476e-7) * var_L_type_Ca_channel__i_CaL_Ca - CHASTE_CONST(6.4775767022812476e-7) * var_T_type_Ca_channel__i_Ca_T - CHASTE_CONST(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_voltage_dependent_gate__k_RP_RI = CHASTE_CONST(0.01) / (1 + CHASTE_CONST(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 = CHASTE_CONST(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 d_dt_chaste_interface_var_sodium_current_voltage_dependent_gate__p_AP_Na = CHASTE_CONST(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 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 - (CHASTE_CONST(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 = (CHASTE_CONST(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_sodium_potassium_pump__k1 = CHASTE_CONST(0.37) / (1 + CHASTE_CONST(0.094) / var_chaste_interface__ATP_production__ATPi); // per_millisecond + const double var_sodium_potassium_pump__p_E1Na = 1 / (1 + CHASTE_CONST(4.4045579125871104) * CHASTE_MATH::Pow((1 / var_chaste_interface__internal_ion_concentrations__Nai), CHASTE_CONST(1.0600000000000001)) * (1 + CHASTE_CONST(0.020000293738509214) * CHASTE_MATH::Pow(var_chaste_interface__internal_ion_concentrations__Ki, CHASTE_CONST(1.1200000000000001)))); // dimensionless + const double var_sodium_potassium_pump__p_E2Na = 1 / (1 + CHASTE_CONST(90.050628437051003) * CHASTE_MATH::Pow((1 / var_sodium_potassium_pump__Nao_Eff), CHASTE_CONST(1.0600000000000001)) * (1 + CHASTE_CONST(4.560221410801109) * CHASTE_MATH::Pow(mParameters[6], CHASTE_CONST(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) * (CHASTE_CONST(0.040000000000000001) * var_sodium_potassium_pump__p_E2Na + CHASTE_CONST(0.16500000000000001) / (1 + CHASTE_CONST(0.21928759810465578) * CHASTE_MATH::Pow((1 / mParameters[6]), CHASTE_CONST(1.1200000000000001)) * (1 + CHASTE_CONST(0.011104864200909382) * CHASTE_MATH::Pow(var_sodium_potassium_pump__Nao_Eff, CHASTE_CONST(1.0600000000000001))))) - (CHASTE_CONST(0.01) / (1 + CHASTE_CONST(49.999265664512095) * CHASTE_MATH::Pow((1 / var_chaste_interface__internal_ion_concentrations__Ki), CHASTE_CONST(1.1200000000000001)) * (1 + CHASTE_CONST(0.22703754152993499) * CHASTE_MATH::Pow(var_chaste_interface__internal_ion_concentrations__Nai, CHASTE_CONST(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 * (-CHASTE_CONST(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 = CHASTE_CONST(0.014999999999999999) + CHASTE_CONST(3.2387883511406238e-7) * var_SR_calcium_pump__i_SR_U - CHASTE_CONST(0.0030000000000000001) * var_chaste_interface__ATP_production__ATPi - CHASTE_CONST(0.028000000000000004) * var_chaste_interface__NL_model__pCaCB - CHASTE_CONST(1.2955153404562495e-6) * var_sodium_potassium_pump__i_NaK; // millimolar / millisecond + const double var_time_independent_potassium_current__E_K = CHASTE_CONST(26.712831923985377) * CHASTE_MATH::Log(mParameters[6] / var_chaste_interface__internal_ion_concentrations__Ki); // millivolt + const double var_background_KATP_current__i_KATP = CHASTE_CONST(44.047040000000003) * CHASTE_MATH::Pow(mParameters[6], CHASTE_CONST(0.23999999999999999)) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__Vm) / (1 + CHASTE_CONST(99.999999999999986) * CHASTE_MATH::Pow(var_chaste_interface__ATP_production__ATPi, 2)); // picoA + const double var_rapid_time_dependent_potassium_current__i_Kr = CHASTE_CONST(0.71370912277944121) * CHASTE_MATH::Pow(mParameters[6], CHASTE_CONST(0.20000000000000001)) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__Vm) * (CHASTE_CONST(0.40000000000000002) * var_chaste_interface__rapid_time_dependent_potassium_current_y2_gate__y2 + CHASTE_CONST(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 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4319999999999999) + CHASTE_CONST(0.064000000000000001) * var_chaste_interface__membrane__Vm - CHASTE_CONST(0.064000000000000001) * var_time_independent_potassium_current__E_K)) * CHASTE_MATH::Exp(CHASTE_CONST(0.47999999999999998) + CHASTE_CONST(0.048000000000000001) * var_time_independent_potassium_current__E_K - CHASTE_CONST(0.048000000000000001) * var_chaste_interface__membrane__Vm) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.1000000000000001) + CHASTE_CONST(0.029999999999999999) * var_chaste_interface__membrane__Vm - CHASTE_CONST(0.029999999999999999) * var_time_independent_potassium_current__E_K)); // per_millisecond + const double var_time_independent_potassium_current__mu = CHASTE_CONST(0.75) * CHASTE_MATH::Exp(-CHASTE_CONST(0.35000000000000003) + CHASTE_CONST(0.035000000000000003) * var_chaste_interface__membrane__Vm - CHASTE_CONST(0.035000000000000003) * var_time_independent_potassium_current__E_K) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.1000000000000001) + CHASTE_CONST(0.014999999999999999) * var_chaste_interface__membrane__Vm - CHASTE_CONST(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_time_independent_potassium_current_y_gate__y = (1 - var_chaste_interface__time_independent_potassium_current_y_gate__y) / (7 * CHASTE_MATH::Exp(-CHASTE_CONST(0.32333333333333331) + CHASTE_CONST(0.0033333333333333335) * var_chaste_interface__membrane__Vm - CHASTE_CONST(0.0033333333333333335) * var_time_independent_potassium_current__E_K) + 8000 * CHASTE_MATH::Exp(-CHASTE_CONST(11.411764705882353) + CHASTE_CONST(0.11764705882352941) * var_chaste_interface__membrane__Vm - CHASTE_CONST(0.11764705882352941) * var_time_independent_potassium_current__E_K)) - CHASTE_MATH::Pow(var_time_independent_potassium_current__fO, 4) * var_chaste_interface__time_independent_potassium_current_y_gate__y / (CHASTE_CONST(0.00013999999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(10.659340659340661) + CHASTE_CONST(0.10989010989010989) * var_time_independent_potassium_current__E_K - CHASTE_CONST(0.10989010989010989) * var_chaste_interface__membrane__Vm) + CHASTE_CONST(0.20000000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.19400000000000001) + CHASTE_CONST(0.002) * var_time_independent_potassium_current__E_K - CHASTE_CONST(0.002) * var_chaste_interface__membrane__Vm)); // 1 / millisecond + const double var_time_independent_potassium_current__i_K1 = CHASTE_CONST(0.50938071193859957) * CHASTE_MATH::Pow(mParameters[6], CHASTE_CONST(0.40000000000000002)) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__Vm) * (CHASTE_MATH::Pow(var_time_independent_potassium_current__fO, 4) + 2 * CHASTE_MATH::Pow(var_time_independent_potassium_current__fB, 2) * CHASTE_MATH::Pow(var_time_independent_potassium_current__fO, 2) + CHASTE_CONST(2.6666666666666665) * CHASTE_MATH::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 + const double d_dt_chaste_interface_var_transient_outward_current_y2_gate__y2 = CHASTE_CONST(0.0038) * (1 - var_chaste_interface__transient_outward_current_y2_gate__y2) * _lt_0_row[38] / (_lt_0_row[37]) - CHASTE_CONST(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 = CHASTE_MATH::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 = -CHASTE_CONST(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 = CHASTE_CONST(0.00297) * CHASTE_MATH::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 = -CHASTE_CONST(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); @@ -1603,7 +1605,7 @@ std::shared_ptr Dynami 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]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -1660,47 +1662,47 @@ std::shared_ptr Dynami 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__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 + CHASTE_CONST(2.7439999999999993) / CHASTE_MATH::Pow(var_chaste_interface__ATP_production__ATPi, 3)); // dimensionless + const double var_internal_ion_concentrations__Cai = -CHASTE_CONST(0.026190000000000001) + CHASTE_CONST(0.5) * CHASTE_MATH::Sqrt(CHASTE_MATH::Pow((CHASTE_CONST(0.052380000000000003) - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + CHASTE_CONST(0.0095200000000000007) * var_chaste_interface__internal_ion_concentrations__Ca_Total) + CHASTE_CONST(0.5) * var_chaste_interface__internal_ion_concentrations__Ca_Total; // millimolar + const double var_background_lCa_current__p_open = 1 / (1 + CHASTE_CONST(1.7279999999999996e-9) / CHASTE_MATH::Pow(var_internal_ion_concentrations__Cai, 3)); // dimensionless + const double var_constant_field_equations__CF_Ca = ((var_chaste_interface__membrane__Vm == 0) ? (-mParameters[5]) : (CHASTE_CONST(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_background_Cab_current__i_Cab = CHASTE_CONST(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) : (CHASTE_CONST(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 = CHASTE_CONST(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)) ? (CHASTE_CONST(0.0010924717003124302) * CHASTE_MATH::Pow(mParameters[6], CHASTE_CONST(0.16)) * var_constant_field_equations__CF_K) : (CHASTE_CONST(8.3986538766456042e-5) * CHASTE_MATH::Pow(mParameters[6], CHASTE_CONST(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 = CHASTE_CONST(0.15400000000000003) * var_constant_field_equations__CF_K; // picoA + const double var_background_lCa_current__i_lCa_K = CHASTE_CONST(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]) : (CHASTE_CONST(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 = CHASTE_CONST(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 = CHASTE_CONST(0.38500000000000001) * var_constant_field_equations__CF_Na; // picoA + const double var_background_lCa_current__i_lCa_Na = CHASTE_CONST(0.11) * var_background_lCa_current__p_open * var_constant_field_equations__CF_Na; // picoA + const double var_membrane__i_ext = 1 * CHASTE_STIM(var_chaste_interface__environment__time) * mParameters[9] / CHASTE_CAP(); // picoA + const double var_slow_time_dependent_potassium_current__i_Ks_K = CHASTE_MATH::Pow(var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1, 2) * (CHASTE_CONST(0.10000000000000001) + CHASTE_CONST(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 = CHASTE_CONST(0.2016) * CHASTE_MATH::Pow(var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1, 2) * (CHASTE_CONST(0.10000000000000001) + CHASTE_CONST(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__p_E1Na = 1 / (1 + CHASTE_CONST(669.921875) * (1 + CHASTE_CONST(724.63768115942037) * var_internal_ion_concentrations__Cai) / CHASTE_MATH::Pow(var_chaste_interface__internal_ion_concentrations__Nai, 3)); // dimensionless + const double var_sodium_calcium_exchanger__p_E2Na = 1 / (1 + CHASTE_CONST(669921.875) * (1 + CHASTE_CONST(0.7246376811594204) * mParameters[5]) / CHASTE_MATH::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_K = CHASTE_CONST(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_sodium_potassium_pump__k1 = CHASTE_CONST(0.37) / (1 + CHASTE_CONST(0.094) / var_chaste_interface__ATP_production__ATPi); // per_millisecond + const double var_sodium_potassium_pump__p_E1Na = 1 / (1 + CHASTE_CONST(4.4045579125871104) * CHASTE_MATH::Pow((1 / var_chaste_interface__internal_ion_concentrations__Nai), CHASTE_CONST(1.0600000000000001)) * (1 + CHASTE_CONST(0.020000293738509214) * CHASTE_MATH::Pow(var_chaste_interface__internal_ion_concentrations__Ki, CHASTE_CONST(1.1200000000000001)))); // dimensionless + const double var_sodium_potassium_pump__p_E2Na = 1 / (1 + CHASTE_CONST(90.050628437051003) * CHASTE_MATH::Pow((1 / var_sodium_potassium_pump__Nao_Eff), CHASTE_CONST(1.0600000000000001)) * (1 + CHASTE_CONST(4.560221410801109) * CHASTE_MATH::Pow(mParameters[6], CHASTE_CONST(1.1200000000000001)))); // dimensionless + const double var_sodium_potassium_pump__i_NaK = 21 * (-CHASTE_CONST(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 = CHASTE_CONST(26.712831923985377) * CHASTE_MATH::Log(mParameters[6] / var_chaste_interface__internal_ion_concentrations__Ki); // millivolt + const double var_background_KATP_current__i_KATP = CHASTE_CONST(44.047040000000003) * CHASTE_MATH::Pow(mParameters[6], CHASTE_CONST(0.23999999999999999)) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__Vm) / (1 + CHASTE_CONST(99.999999999999986) * CHASTE_MATH::Pow(var_chaste_interface__ATP_production__ATPi, 2)); // picoA + const double var_rapid_time_dependent_potassium_current__i_Kr = CHASTE_CONST(0.71370912277944121) * CHASTE_MATH::Pow(mParameters[6], CHASTE_CONST(0.20000000000000001)) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__Vm) * (CHASTE_CONST(0.40000000000000002) * var_chaste_interface__rapid_time_dependent_potassium_current_y2_gate__y2 + CHASTE_CONST(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 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4319999999999999) + CHASTE_CONST(0.064000000000000001) * var_chaste_interface__membrane__Vm - CHASTE_CONST(0.064000000000000001) * var_time_independent_potassium_current__E_K)) * CHASTE_MATH::Exp(CHASTE_CONST(0.47999999999999998) + CHASTE_CONST(0.048000000000000001) * var_time_independent_potassium_current__E_K - CHASTE_CONST(0.048000000000000001) * var_chaste_interface__membrane__Vm) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.1000000000000001) + CHASTE_CONST(0.029999999999999999) * var_chaste_interface__membrane__Vm - CHASTE_CONST(0.029999999999999999) * var_time_independent_potassium_current__E_K)); // per_millisecond + const double var_time_independent_potassium_current__mu = CHASTE_CONST(0.75) * CHASTE_MATH::Exp(-CHASTE_CONST(0.35000000000000003) + CHASTE_CONST(0.035000000000000003) * var_chaste_interface__membrane__Vm - CHASTE_CONST(0.035000000000000003) * var_time_independent_potassium_current__E_K) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.1000000000000001) + CHASTE_CONST(0.014999999999999999) * var_chaste_interface__membrane__Vm - CHASTE_CONST(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 + const double var_time_independent_potassium_current__i_K1 = CHASTE_CONST(0.50938071193859957) * CHASTE_MATH::Pow(mParameters[6], CHASTE_CONST(0.40000000000000002)) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__Vm) * (CHASTE_MATH::Pow(var_time_independent_potassium_current__fO, 4) + 2 * CHASTE_MATH::Pow(var_time_independent_potassium_current__fB, 2) * CHASTE_MATH::Pow(var_time_independent_potassium_current__fO, 2) + CHASTE_CONST(2.6666666666666665) * CHASTE_MATH::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 = CHASTE_MATH::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 = CHASTE_CONST(0.00297) * CHASTE_MATH::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; @@ -1711,7 +1713,7 @@ std::shared_ptr Dynami double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -1769,57 +1771,57 @@ std::shared_ptr Dynami 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_x2 = CHASTE_CONST(0.037435192301797954) * var_chaste_interface__membrane__Vm; + const double var_x3 = CHASTE_MATH::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_x8 = CHASTE_CONST(0.037435192301797954) * var_x7; + const double var_x9 = CHASTE_CONST(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_x11 = var_x3 * var_x9 / CHASTE_MATH::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_x13 = CHASTE_CONST(0.074870384603595908) * var_chaste_interface__membrane__Vm; + const double var_x14 = CHASTE_MATH::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_x17 = -CHASTE_CONST(0.052380000000000003) + var_chaste_interface__internal_ion_concentrations__Ca_Total; + const double var_x18 = CHASTE_MATH::Sqrt(CHASTE_MATH::Pow(var_x17, 2) + CHASTE_CONST(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_x20 = -CHASTE_CONST(0.026190000000000001) - var_x19 + CHASTE_CONST(0.5) * var_x18 + CHASTE_CONST(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_x22 = CHASTE_CONST(0.0056055744906903715) * var_chaste_interface__membrane__Vm; + const double var_x23 = ((var_x1) ? (0) : (CHASTE_CONST(0.074870384603595908) * var_x21 + var_x16 * var_x19 * var_x22 - var_x14 * var_x20 * var_x22 / CHASTE_MATH::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_x28 = 1 + CHASTE_CONST(1.3823999999999997e-8) / CHASTE_MATH::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_x30 = CHASTE_CONST(0.11) * var_x29; + const double var_x31 = CHASTE_MATH::Pow(var_chaste_interface__ATP_production__ATPi, 2); + const double var_x32 = CHASTE_MATH::Pow(mParameters[6], CHASTE_CONST(0.23999999999999999)); + const double var_x33 = var_x32 / (1 + CHASTE_CONST(99.999999999999986) * var_x31); + const double var_x34 = CHASTE_MATH::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_x36 = -CHASTE_CONST(17.978260869565219) + CHASTE_CONST(362.31884057971018) * var_x18 + CHASTE_CONST(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_x39 = var_x38 / (1 + CHASTE_CONST(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_x41 = CHASTE_MATH::Pow(mParameters[7], 3); + const double var_x42 = _lt_0_row[6] / (1 + CHASTE_CONST(669921.875) * (1 + CHASTE_CONST(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_x44 = -CHASTE_CONST(0.011979261536575346) * var_x40 - CHASTE_CONST(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_x47 = CHASTE_MATH::Pow(var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1, 2); + const double var_x48 = CHASTE_CONST(0.10000000000000001) + CHASTE_CONST(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_x50 = CHASTE_CONST(0.2016) * var_x49; + const double var_x51 = CHASTE_MATH::Pow(var_chaste_interface__transient_outward_current_y1_gate__y1, 3); + const double var_x52 = CHASTE_CONST(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; @@ -1829,107 +1831,107 @@ std::shared_ptr Dynami 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_x62 = CHASTE_CONST(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_x65 = CHASTE_MATH::Pow((1 / (var_x64 * mParameters[7])), CHASTE_CONST(1.0600000000000001)); + const double var_x66 = 1 + CHASTE_CONST(4.560221410801109) * CHASTE_MATH::Pow(mParameters[6], CHASTE_CONST(1.1200000000000001)); const double var_x67 = var_x65 * var_x66; - const double var_x68 = pow((0.011104864200909382 + var_x67), (-2)); + const double var_x68 = CHASTE_MATH::Pow((CHASTE_CONST(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_x71 = CHASTE_CONST(0.40000000000000002) * var_chaste_interface__rapid_time_dependent_potassium_current_y2_gate__y2 + CHASTE_CONST(0.59999999999999998) * var_chaste_interface__rapid_time_dependent_potassium_current_y1_gate__y1; + const double var_x72 = CHASTE_CONST(0.71370912277944121) * var_x71; + const double var_x73 = CHASTE_MATH::Pow(mParameters[6], CHASTE_CONST(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_x75 = CHASTE_MATH::Pow(mParameters[6], CHASTE_CONST(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_x77 = CHASTE_MATH::Log(var_x76 * mParameters[6]); + const double var_x78 = CHASTE_MATH::Exp(-CHASTE_CONST(2.4319999999999999) + CHASTE_CONST(0.064000000000000001) * var_chaste_interface__membrane__Vm - CHASTE_CONST(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_x80 = CHASTE_MATH::Pow(var_x79, 4); + const double var_x81 = CHASTE_MATH::Exp(-CHASTE_CONST(2.1000000000000001) + CHASTE_CONST(0.029999999999999999) * var_chaste_interface__membrane__Vm - CHASTE_CONST(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_x83 = CHASTE_MATH::Pow(var_x82, (-4)); + const double var_x84 = CHASTE_MATH::Exp(-CHASTE_CONST(2.1000000000000001) + CHASTE_CONST(0.014999999999999999) * var_chaste_interface__membrane__Vm - CHASTE_CONST(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_x87 = CHASTE_MATH::Exp(-CHASTE_CONST(0.35000000000000003) + CHASTE_CONST(0.035000000000000003) * var_chaste_interface__membrane__Vm - CHASTE_CONST(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_x89 = CHASTE_MATH::Exp(CHASTE_CONST(0.47999999999999998) + CHASTE_CONST(1.282215932351298) * var_x77 - CHASTE_CONST(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_x92 = var_x91 + CHASTE_CONST(0.25) * var_x88; + const double var_x93 = CHASTE_MATH::Pow(var_x92, (-4)); + const double var_x94 = CHASTE_MATH::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_x98 = CHASTE_MATH::Pow(var_x85, (-2)); + const double var_x99 = CHASTE_MATH::Pow(var_x89, 2); + const double var_x100 = CHASTE_MATH::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_x102 = CHASTE_MATH::Pow(var_x82, (-2)); + const double var_x103 = CHASTE_MATH::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_x106 = CHASTE_MATH::Pow(var_x79, 3); + const double var_x107 = CHASTE_MATH::Pow(var_x82, (-3)); + const double var_x108 = CHASTE_MATH::Pow(var_x89, 3); + const double var_x109 = CHASTE_MATH::Pow(var_x92, (-3)); + const double var_x110 = 1 / (CHASTE_CONST(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_x113 = var_x75 * (var_x97 + CHASTE_CONST(0.125) * var_x105 + 2 * var_x112) * mParameters[11]; + const double var_x114 = CHASTE_CONST(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_x118 = CHASTE_MATH::Pow(var_chaste_interface__ATP_production__ATPi, (-3)); + const double var_x119 = 1 / (1 + CHASTE_CONST(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_x125 = CHASTE_CONST(0.00036499999999999998) * var_x124; + const double var_x126 = CHASTE_CONST(1.8499999999999999e-5) * var_x124; + const double var_x127 = CHASTE_CONST(0.12) * var_x81; + const double var_x128 = CHASTE_MATH::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_x131 = CHASTE_MATH::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_x135 = CHASTE_CONST(0.014999999999999999) * var_x132 + CHASTE_CONST(0.192) * var_x91 - CHASTE_CONST(0.25600000000000001) * var_x133 - CHASTE_CONST(0.035000000000000003) * var_x88 + var_x127 * var_x134; + const double var_x136 = var_x100 * var_x104 * var_x84 * var_x93 * var_x99 / CHASTE_MATH::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_x139 = CHASTE_CONST(0.01125) * var_x132 + CHASTE_CONST(0.089999999999999997) * var_x138 + CHASTE_CONST(0.14400000000000002) * var_x91 - CHASTE_CONST(0.192) * var_x133 - CHASTE_CONST(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_x144 = -CHASTE_CONST(0.0032499999999999994) * var_x105 - CHASTE_CONST(0.0037499999999999999) * var_x136 - CHASTE_CONST(0.192) * var_x96 - CHASTE_CONST(0.218) * var_x112 - var_x127 * var_x130 - CHASTE_CONST(0.0074999999999999997) * var_x137 * var_x81 - CHASTE_CONST(0.029999999999999999) * var_x132 * var_x142 - CHASTE_CONST(0.17999999999999999) * var_x106 * var_x140 * var_x143 * var_x88 + var_x131 * var_x135 * var_x80 * var_x83 * var_x94 + CHASTE_CONST(0.25600000000000001) * var_x106 * var_x78 * var_x83 * var_x93 * var_x94 + CHASTE_CONST(0.125) * var_x100 * var_x102 * var_x103 * var_x131 * var_x135 * var_x98 * var_x99 + CHASTE_CONST(0.016) * var_x100 * var_x102 * var_x78 * var_x79 * var_x93 * var_x98 * var_x99 + CHASTE_CONST(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 + CHASTE_CONST(0.38400000000000001) * var_x103 * var_x107 * var_x108 * var_x109 * var_x110 * var_x78 * var_x86 * var_x87; + const double var_x145 = -CHASTE_CONST(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_x147 = CHASTE_CONST(0.50938071193859957) * var_x146; + const double var_x148 = CHASTE_MATH::Pow(mParameters[6], CHASTE_CONST(0.16)); + const double var_x149 = CHASTE_CONST(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_x154 = CHASTE_CONST(0.076923076923076927) * var_chaste_interface__membrane__Vm; + const double var_x155 = CHASTE_MATH::Exp(-CHASTE_CONST(0.23076923076923078) - var_x154); const double var_x156 = 1 - var_x155; - const double var_x157 = 8.3986538766456042e-5 / var_x156; + const double var_x157 = CHASTE_CONST(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))); + const double var_x160 = ((var_x150) ? (var_x149 * var_x26) : (var_x153 * var_x157 + var_x159 * var_x26 - CHASTE_CONST(6.4605029820350801e-6) * var_x153 * var_x155 * var_x158 / CHASTE_MATH::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]); + partialF = var_x0 * (-var_x122 - var_x160 - var_x55 - var_x58 - var_x61 - CHASTE_CONST(0.38500000000000001) * var_x12 - CHASTE_CONST(0.040000000000000001) * var_x23 - CHASTE_CONST(0.0003035235018269044) * var_x70 - CHASTE_CONST(44.047040000000003) * var_x33 - CHASTE_CONST(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 { @@ -1944,7 +1946,7 @@ std::shared_ptr Dynami 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]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -1989,27 +1991,27 @@ std::shared_ptr Dynami 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_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 + CHASTE_CONST(2.7439999999999993) / CHASTE_MATH::Pow(var_chaste_interface__ATP_production__ATPi, 3)); // dimensionless + const double var_internal_ion_concentrations__Cai = -CHASTE_CONST(0.026190000000000001) + CHASTE_CONST(0.5) * CHASTE_MATH::Sqrt(CHASTE_MATH::Pow((CHASTE_CONST(0.052380000000000003) - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + CHASTE_CONST(0.0095200000000000007) * var_chaste_interface__internal_ion_concentrations__Ca_Total) + CHASTE_CONST(0.5) * var_chaste_interface__internal_ion_concentrations__Ca_Total; // millimolar + const double var_background_lCa_current__p_open = 1 / (1 + CHASTE_CONST(1.7279999999999996e-9) / CHASTE_MATH::Pow(var_internal_ion_concentrations__Cai, 3)); // dimensionless + const double var_constant_field_equations__CF_Na = ((var_chaste_interface__membrane__Vm == 0) ? (-mParameters[7]) : (CHASTE_CONST(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 = CHASTE_CONST(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 = CHASTE_CONST(0.38500000000000001) * var_constant_field_equations__CF_Na; // picoA + const double var_background_lCa_current__i_lCa_Na = CHASTE_CONST(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 = CHASTE_CONST(0.2016) * CHASTE_MATH::Pow(var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1, 2) * (CHASTE_CONST(0.10000000000000001) + CHASTE_CONST(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__p_E1Na = 1 / (1 + CHASTE_CONST(669.921875) * (1 + CHASTE_CONST(724.63768115942037) * var_internal_ion_concentrations__Cai) / CHASTE_MATH::Pow(var_chaste_interface__internal_ion_concentrations__Nai, 3)); // dimensionless + const double var_sodium_calcium_exchanger__p_E2Na = 1 / (1 + CHASTE_CONST(669921.875) * (1 + CHASTE_CONST(0.7246376811594204) * mParameters[5]) / CHASTE_MATH::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 + const double var_sodium_potassium_pump__k1 = CHASTE_CONST(0.37) / (1 + CHASTE_CONST(0.094) / var_chaste_interface__ATP_production__ATPi); // per_millisecond + const double var_sodium_potassium_pump__p_E1Na = 1 / (1 + CHASTE_CONST(4.4045579125871104) * CHASTE_MATH::Pow((1 / var_chaste_interface__internal_ion_concentrations__Nai), CHASTE_CONST(1.0600000000000001)) * (1 + CHASTE_CONST(0.020000293738509214) * CHASTE_MATH::Pow(var_chaste_interface__internal_ion_concentrations__Ki, CHASTE_CONST(1.1200000000000001)))); // dimensionless + const double var_sodium_potassium_pump__p_E2Na = 1 / (1 + CHASTE_CONST(90.050628437051003) * CHASTE_MATH::Pow((1 / var_sodium_potassium_pump__Nao_Eff), CHASTE_CONST(1.0600000000000001)) * (1 + CHASTE_CONST(4.560221410801109) * CHASTE_MATH::Pow(mParameters[6], CHASTE_CONST(1.1200000000000001)))); // dimensionless + const double var_sodium_potassium_pump__i_NaK = 21 * (-CHASTE_CONST(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 = CHASTE_CONST(0.00297) * CHASTE_MATH::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 = -CHASTE_CONST(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; } @@ -2019,7 +2021,7 @@ std::shared_ptr Dynami double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -2064,29 +2066,29 @@ std::shared_ptr Dynami 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_x2 = CHASTE_CONST(0.037435192301797954) * var_chaste_interface__membrane__Vm; + const double var_x3 = CHASTE_MATH::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_x17 = -CHASTE_CONST(0.052380000000000003) + var_chaste_interface__internal_ion_concentrations__Ca_Total; + const double var_x18 = CHASTE_MATH::Sqrt(CHASTE_MATH::Pow(var_x17, 2) + CHASTE_CONST(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_x28 = 1 + CHASTE_CONST(1.3823999999999997e-8) / CHASTE_MATH::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_x34 = CHASTE_MATH::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_x36 = -CHASTE_CONST(17.978260869565219) + CHASTE_CONST(362.31884057971018) * var_x18 + CHASTE_CONST(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_x47 = CHASTE_MATH::Pow(var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1, 2); + const double var_x48 = CHASTE_CONST(0.10000000000000001) + CHASTE_CONST(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_x51 = CHASTE_MATH::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_x118 = CHASTE_MATH::Pow(var_chaste_interface__ATP_production__ATPi, (-3)); + const double var_x119 = 1 / (1 + CHASTE_CONST(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; @@ -2094,29 +2096,29 @@ std::shared_ptr Dynami 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_x164 = CHASTE_MATH::Pow(var_x163, CHASTE_CONST(1.0600000000000001)); + const double var_x165 = var_x164 * (1 + CHASTE_CONST(0.020000293738509214) * CHASTE_MATH::Pow(var_chaste_interface__internal_ion_concentrations__Ki, CHASTE_CONST(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_x167 = 1 + CHASTE_CONST(0.094) * var_x166; const double var_x168 = 1 / var_x167; - const double var_x169 = pow((0.22703754152993499 + var_x165), (-2)); + const double var_x169 = CHASTE_MATH::Pow((CHASTE_CONST(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_x174 = CHASTE_MATH::Pow((CHASTE_CONST(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_x176 = var_x175 * var_x36 / CHASTE_MATH::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_x252 = CHASTE_CONST(1.4250668745018745e-7) * var_x29; + const double var_x253 = CHASTE_CONST(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_x255 = CHASTE_CONST(2.6117589263597991e-7) * var_x49; + const double var_x257 = CHASTE_CONST(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]; + partialF = (-CHASTE_CONST(7.2675557857281787e-6) * var_x173 - CHASTE_CONST(4.9877340607565601e-7) * var_x161 - CHASTE_CONST(1.7404474311435562e-8) * var_x258 - CHASTE_CONST(1.2955153404562495e-6) * var_x162 - var_x161 * var_x252 - var_x161 * var_x254 - var_x161 * var_x255 - var_x161 * var_x257) * mParameters[4]; } else { @@ -2131,7 +2133,7 @@ std::shared_ptr Dynami 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]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -2182,32 +2184,32 @@ std::shared_ptr Dynami 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_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 + CHASTE_CONST(2.7439999999999993) / CHASTE_MATH::Pow(var_chaste_interface__ATP_production__ATPi, 3)); // dimensionless + const double var_internal_ion_concentrations__Cai = -CHASTE_CONST(0.026190000000000001) + CHASTE_CONST(0.5) * CHASTE_MATH::Sqrt(CHASTE_MATH::Pow((CHASTE_CONST(0.052380000000000003) - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + CHASTE_CONST(0.0095200000000000007) * var_chaste_interface__internal_ion_concentrations__Ca_Total) + CHASTE_CONST(0.5) * var_chaste_interface__internal_ion_concentrations__Ca_Total; // millimolar + const double var_background_lCa_current__p_open = 1 / (1 + CHASTE_CONST(1.7279999999999996e-9) / CHASTE_MATH::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) : (CHASTE_CONST(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 = CHASTE_CONST(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)) ? (CHASTE_CONST(0.0010924717003124302) * CHASTE_MATH::Pow(mParameters[6], CHASTE_CONST(0.16)) * var_constant_field_equations__CF_K) : (CHASTE_CONST(8.3986538766456042e-5) * CHASTE_MATH::Pow(mParameters[6], CHASTE_CONST(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 = CHASTE_CONST(0.15400000000000003) * var_constant_field_equations__CF_K; // picoA + const double var_background_lCa_current__i_lCa_K = CHASTE_CONST(0.11) * var_background_lCa_current__p_open * var_constant_field_equations__CF_K; // picoA + const double var_membrane__i_ext = 1 * CHASTE_STIM(var_chaste_interface__environment__time) * mParameters[9] / CHASTE_CAP(); // picoA + const double var_slow_time_dependent_potassium_current__i_Ks_K = CHASTE_MATH::Pow(var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1, 2) * (CHASTE_CONST(0.10000000000000001) + CHASTE_CONST(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 = CHASTE_CONST(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_sodium_potassium_pump__k1 = CHASTE_CONST(0.37) / (1 + CHASTE_CONST(0.094) / var_chaste_interface__ATP_production__ATPi); // per_millisecond + const double var_sodium_potassium_pump__p_E1Na = 1 / (1 + CHASTE_CONST(4.4045579125871104) * CHASTE_MATH::Pow((1 / var_chaste_interface__internal_ion_concentrations__Nai), CHASTE_CONST(1.0600000000000001)) * (1 + CHASTE_CONST(0.020000293738509214) * CHASTE_MATH::Pow(var_chaste_interface__internal_ion_concentrations__Ki, CHASTE_CONST(1.1200000000000001)))); // dimensionless + const double var_sodium_potassium_pump__p_E2Na = 1 / (1 + CHASTE_CONST(90.050628437051003) * CHASTE_MATH::Pow((1 / var_sodium_potassium_pump__Nao_Eff), CHASTE_CONST(1.0600000000000001)) * (1 + CHASTE_CONST(4.560221410801109) * CHASTE_MATH::Pow(mParameters[6], CHASTE_CONST(1.1200000000000001)))); // dimensionless + const double var_sodium_potassium_pump__i_NaK = 21 * (-CHASTE_CONST(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 = CHASTE_CONST(26.712831923985377) * CHASTE_MATH::Log(mParameters[6] / var_chaste_interface__internal_ion_concentrations__Ki); // millivolt + const double var_background_KATP_current__i_KATP = CHASTE_CONST(44.047040000000003) * CHASTE_MATH::Pow(mParameters[6], CHASTE_CONST(0.23999999999999999)) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__Vm) / (1 + CHASTE_CONST(99.999999999999986) * CHASTE_MATH::Pow(var_chaste_interface__ATP_production__ATPi, 2)); // picoA + const double var_rapid_time_dependent_potassium_current__i_Kr = CHASTE_CONST(0.71370912277944121) * CHASTE_MATH::Pow(mParameters[6], CHASTE_CONST(0.20000000000000001)) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__Vm) * (CHASTE_CONST(0.40000000000000002) * var_chaste_interface__rapid_time_dependent_potassium_current_y2_gate__y2 + CHASTE_CONST(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 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4319999999999999) + CHASTE_CONST(0.064000000000000001) * var_chaste_interface__membrane__Vm - CHASTE_CONST(0.064000000000000001) * var_time_independent_potassium_current__E_K)) * CHASTE_MATH::Exp(CHASTE_CONST(0.47999999999999998) + CHASTE_CONST(0.048000000000000001) * var_time_independent_potassium_current__E_K - CHASTE_CONST(0.048000000000000001) * var_chaste_interface__membrane__Vm) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.1000000000000001) + CHASTE_CONST(0.029999999999999999) * var_chaste_interface__membrane__Vm - CHASTE_CONST(0.029999999999999999) * var_time_independent_potassium_current__E_K)); // per_millisecond + const double var_time_independent_potassium_current__mu = CHASTE_CONST(0.75) * CHASTE_MATH::Exp(-CHASTE_CONST(0.35000000000000003) + CHASTE_CONST(0.035000000000000003) * var_chaste_interface__membrane__Vm - CHASTE_CONST(0.035000000000000003) * var_time_independent_potassium_current__E_K) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.1000000000000001) + CHASTE_CONST(0.014999999999999999) * var_chaste_interface__membrane__Vm - CHASTE_CONST(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 + const double var_time_independent_potassium_current__i_K1 = CHASTE_CONST(0.50938071193859957) * CHASTE_MATH::Pow(mParameters[6], CHASTE_CONST(0.40000000000000002)) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__Vm) * (CHASTE_MATH::Pow(var_time_independent_potassium_current__fO, 4) + 2 * CHASTE_MATH::Pow(var_time_independent_potassium_current__fB, 2) * CHASTE_MATH::Pow(var_time_independent_potassium_current__fO, 2) + CHASTE_CONST(2.6666666666666665) * CHASTE_MATH::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 = CHASTE_MATH::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 = -CHASTE_CONST(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; } @@ -2217,7 +2219,7 @@ std::shared_ptr Dynami double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -2261,109 +2263,109 @@ std::shared_ptr Dynami 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_x2 = CHASTE_CONST(0.037435192301797954) * var_chaste_interface__membrane__Vm; + const double var_x3 = CHASTE_MATH::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_x17 = -CHASTE_CONST(0.052380000000000003) + var_chaste_interface__internal_ion_concentrations__Ca_Total; + const double var_x18 = CHASTE_MATH::Sqrt(CHASTE_MATH::Pow(var_x17, 2) + CHASTE_CONST(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_x28 = 1 + CHASTE_CONST(1.3823999999999997e-8) / CHASTE_MATH::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_x31 = CHASTE_MATH::Pow(var_chaste_interface__ATP_production__ATPi, 2); + const double var_x32 = CHASTE_MATH::Pow(mParameters[6], CHASTE_CONST(0.23999999999999999)); + const double var_x33 = var_x32 / (1 + CHASTE_CONST(99.999999999999986) * var_x31); + const double var_x47 = CHASTE_MATH::Pow(var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1, 2); + const double var_x48 = CHASTE_CONST(0.10000000000000001) + CHASTE_CONST(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_x51 = CHASTE_MATH::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_x71 = CHASTE_CONST(0.40000000000000002) * var_chaste_interface__rapid_time_dependent_potassium_current_y2_gate__y2 + CHASTE_CONST(0.59999999999999998) * var_chaste_interface__rapid_time_dependent_potassium_current_y1_gate__y1; + const double var_x73 = CHASTE_MATH::Pow(mParameters[6], CHASTE_CONST(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_x75 = CHASTE_MATH::Pow(mParameters[6], CHASTE_CONST(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_x77 = CHASTE_MATH::Log(var_x76 * mParameters[6]); + const double var_x78 = CHASTE_MATH::Exp(-CHASTE_CONST(2.4319999999999999) + CHASTE_CONST(0.064000000000000001) * var_chaste_interface__membrane__Vm - CHASTE_CONST(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_x80 = CHASTE_MATH::Pow(var_x79, 4); + const double var_x81 = CHASTE_MATH::Exp(-CHASTE_CONST(2.1000000000000001) + CHASTE_CONST(0.029999999999999999) * var_chaste_interface__membrane__Vm - CHASTE_CONST(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_x83 = CHASTE_MATH::Pow(var_x82, (-4)); + const double var_x84 = CHASTE_MATH::Exp(-CHASTE_CONST(2.1000000000000001) + CHASTE_CONST(0.014999999999999999) * var_chaste_interface__membrane__Vm - CHASTE_CONST(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_x87 = CHASTE_MATH::Exp(-CHASTE_CONST(0.35000000000000003) + CHASTE_CONST(0.035000000000000003) * var_chaste_interface__membrane__Vm - CHASTE_CONST(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_x89 = CHASTE_MATH::Exp(CHASTE_CONST(0.47999999999999998) + CHASTE_CONST(1.282215932351298) * var_x77 - CHASTE_CONST(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_x92 = var_x91 + CHASTE_CONST(0.25) * var_x88; + const double var_x93 = CHASTE_MATH::Pow(var_x92, (-4)); + const double var_x94 = CHASTE_MATH::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_x98 = CHASTE_MATH::Pow(var_x85, (-2)); + const double var_x99 = CHASTE_MATH::Pow(var_x89, 2); + const double var_x100 = CHASTE_MATH::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_x102 = CHASTE_MATH::Pow(var_x82, (-2)); + const double var_x103 = CHASTE_MATH::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_x106 = CHASTE_MATH::Pow(var_x79, 3); + const double var_x107 = CHASTE_MATH::Pow(var_x82, (-3)); + const double var_x108 = CHASTE_MATH::Pow(var_x89, 3); + const double var_x109 = CHASTE_MATH::Pow(var_x92, (-3)); + const double var_x110 = 1 / (CHASTE_CONST(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_x113 = var_x75 * (var_x97 + CHASTE_CONST(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_x118 = CHASTE_MATH::Pow(var_chaste_interface__ATP_production__ATPi, (-3)); + const double var_x119 = 1 / (1 + CHASTE_CONST(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_x128 = CHASTE_MATH::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_x131 = CHASTE_MATH::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_x136 = var_x100 * var_x104 * var_x84 * var_x93 * var_x99 / CHASTE_MATH::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_x145 = -CHASTE_CONST(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_x148 = CHASTE_MATH::Pow(mParameters[6], CHASTE_CONST(0.16)); + const double var_x149 = CHASTE_CONST(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_x154 = CHASTE_CONST(0.076923076923076927) * var_chaste_interface__membrane__Vm; + const double var_x155 = CHASTE_MATH::Exp(-CHASTE_CONST(0.23076923076923078) - var_x154); const double var_x156 = 1 - var_x155; - const double var_x157 = 8.3986538766456042e-5 / var_x156; + const double var_x157 = CHASTE_CONST(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_x164 = CHASTE_MATH::Pow(var_x163, CHASTE_CONST(1.0600000000000001)); + const double var_x165 = var_x164 * (1 + CHASTE_CONST(0.020000293738509214) * CHASTE_MATH::Pow(var_chaste_interface__internal_ion_concentrations__Ki, CHASTE_CONST(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_x167 = 1 + CHASTE_CONST(0.094) * var_x166; const double var_x168 = 1 / var_x167; - const double var_x169 = pow((0.22703754152993499 + var_x165), (-2)); + const double var_x169 = CHASTE_MATH::Pow((CHASTE_CONST(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)); @@ -2377,22 +2379,22 @@ std::shared_ptr Dynami 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_x191 = CHASTE_CONST(0.40069247885978065) * var_x187 + CHASTE_CONST(3.2055398308782452) * var_x190 + CHASTE_CONST(5.1288637294051922) * var_x188 - CHASTE_CONST(6.8384849725402566) * var_x189 - CHASTE_CONST(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_x193 = CHASTE_CONST(0.30051935914483546) * var_x187 + CHASTE_CONST(2.4041548731586837) * var_x190 + CHASTE_CONST(3.8466477970538944) * var_x188 - CHASTE_CONST(5.1288637294051922) * var_x189 - CHASTE_CONST(0.70121183800461617) * var_x186; + const double var_x194 = -CHASTE_CONST(0.10017311971494516) * var_x136 * var_x76 - CHASTE_CONST(0.20034623942989033) * var_x137 * var_x192 - CHASTE_CONST(0.80138495771956131) * var_x142 * var_x187 - CHASTE_CONST(3.2055398308782452) * var_x130 * var_x192 - CHASTE_CONST(5.1288637294051922) * var_x76 * var_x96 - CHASTE_CONST(0.086816703752952459) * var_x105 * var_x76 - CHASTE_CONST(5.823397359428812) * var_x142 * var_x186 - CHASTE_CONST(4.8083097463173674) * var_x141 * var_x143 * var_x186 + var_x131 * var_x191 * var_x80 * var_x83 * var_x94 + CHASTE_CONST(6.8384849725402566) * var_x106 * var_x76 * var_x78 * var_x83 * var_x93 * var_x94 + CHASTE_CONST(0.125) * var_x100 * var_x102 * var_x103 * var_x131 * var_x191 * var_x98 * var_x99 + CHASTE_CONST(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 + CHASTE_CONST(0.42740531078376603) * var_x100 * var_x102 * var_x76 * var_x78 * var_x79 * var_x93 * var_x98 * var_x99 + CHASTE_CONST(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_x197 = CHASTE_MATH::Pow(var_chaste_interface__internal_ion_concentrations__Ki, CHASTE_CONST(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_x252 = CHASTE_CONST(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; + const double var_x269 = CHASTE_CONST(1.2955153404562495e-7) * var_x60; + const double var_x270 = CHASTE_CONST(6.5991052644898155e-7) * var_x146; + const double var_x271 = CHASTE_CONST(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]; + partialF = (-CHASTE_CONST(1.7628078977900349e-5) * var_x196 - CHASTE_CONST(2.4699248496712833e-5) * var_x185 - CHASTE_CONST(1.2955153404562495e-6) * var_x182 - CHASTE_CONST(1.2955153404562495e-6) * var_x183 - CHASTE_CONST(1.2955153404562495e-6) * var_x198 - CHASTE_CONST(0.0015243307837622452) * var_x181 - CHASTE_CONST(1.9950936243026244e-7) * var_x180 - CHASTE_CONST(1.0238719530354315e-7) * var_x260 - var_x180 * var_x252 - var_x180 * var_x269 - var_x180 * var_x271 - var_x194 * var_x270) * mParameters[4]; } else { @@ -2407,7 +2409,7 @@ std::shared_ptr Dynami 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]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -2456,29 +2458,29 @@ std::shared_ptr Dynami 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_Ca_concentrations_in_SR__Carel = -CHASTE_CONST(5.4000000000000004) + CHASTE_CONST(0.5) * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total + CHASTE_CONST(5.4000000000000004) * CHASTE_MATH::Sqrt(CHASTE_MATH::Pow((1 - CHASTE_CONST(0.092592592592592587) * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total), 2) + CHASTE_CONST(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 + CHASTE_CONST(2.7439999999999993) / CHASTE_MATH::Pow(var_chaste_interface__ATP_production__ATPi, 3)); // dimensionless + const double d_dt_chaste_interface_var_NL_model__X = CHASTE_CONST(1.1488559970494261) - CHASTE_CONST(1.2) * var_chaste_interface__NL_model__X; // micrometre / millisecond + const double var_NL_model__Q_d2 = CHASTE_CONST(0.027) * CHASTE_MATH::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 + CHASTE_CONST(0.10000000000000001) / var_chaste_interface__ATP_production__ATPi); // per_millisecond + const double var_SR_calcium_pump__p_E1Ca = 1 / (1 + CHASTE_CONST(0.080000000000000002) / var_chaste_interface__Ca_concentrations_in_SR__Caup); // dimensionless + const double var_internal_ion_concentrations__Cai = -CHASTE_CONST(0.026190000000000001) + CHASTE_CONST(0.5) * CHASTE_MATH::Sqrt(CHASTE_MATH::Pow((CHASTE_CONST(0.052380000000000003) - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + CHASTE_CONST(0.0095200000000000007) * var_chaste_interface__internal_ion_concentrations__Ca_Total) + CHASTE_CONST(0.5) * var_chaste_interface__internal_ion_concentrations__Ca_Total; // millimolar + const double var_NL_model__Q_b = -CHASTE_CONST(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 = CHASTE_CONST(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_SR_calcium_pump__p_E2Ca = 1 / (1 + CHASTE_CONST(0.00080000000000000004) / var_internal_ion_concentrations__Cai); // dimensionless + const double var_SR_calcium_pump__i_SR_U = (CHASTE_CONST(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]) : (CHASTE_CONST(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_background_Cab_current__i_Cab = CHASTE_CONST(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__p_E1Na = 1 / (1 + CHASTE_CONST(669.921875) * (1 + CHASTE_CONST(724.63768115942037) * var_internal_ion_concentrations__Cai) / CHASTE_MATH::Pow(var_chaste_interface__internal_ion_concentrations__Nai, 3)); // dimensionless + const double var_sodium_calcium_exchanger__p_E2Na = 1 / (1 + CHASTE_CONST(669921.875) * (1 + CHASTE_CONST(0.7246376811594204) * mParameters[5]) / CHASTE_MATH::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 + const double d_dt_chaste_interface_var_internal_ion_concentrations__Ca_Total = CHASTE_CONST(0.070000000000000007) * var_NL_model__Q_d2 + CHASTE_CONST(0.070000000000000007) * var_NL_model__Q_r + CHASTE_CONST(6.4775767022812476e-7) * var_RyR_channel__i_RyR + CHASTE_CONST(6.4775767022812476e-7) * var_SR_L_current__i_SR_L + CHASTE_CONST(6.4775767022812476e-7) * var_SR_calcium_pump__i_SR_U + CHASTE_CONST(1.2955153404562495e-6) * var_sodium_calcium_exchanger__i_NaCa - CHASTE_CONST(0.070000000000000007) * var_NL_model__Q_b - CHASTE_CONST(6.4775767022812476e-7) * var_L_type_Ca_channel__i_CaL_Ca - CHASTE_CONST(6.4775767022812476e-7) * var_T_type_Ca_channel__i_Ca_T - CHASTE_CONST(6.4775767022812476e-7) * var_background_Cab_current__i_Cab; // millimolar / millisecond return d_dt_chaste_interface_var_internal_ion_concentrations__Ca_Total; } @@ -2488,7 +2490,7 @@ std::shared_ptr Dynami double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -2531,53 +2533,53 @@ std::shared_ptr Dynami 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_x13 = CHASTE_CONST(0.074870384603595908) * var_chaste_interface__membrane__Vm; + const double var_x14 = CHASTE_MATH::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_x17 = -CHASTE_CONST(0.052380000000000003) + var_chaste_interface__internal_ion_concentrations__Ca_Total; + const double var_x18 = CHASTE_MATH::Sqrt(CHASTE_MATH::Pow(var_x17, 2) + CHASTE_CONST(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_x34 = CHASTE_MATH::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_x36 = -CHASTE_CONST(17.978260869565219) + CHASTE_CONST(362.31884057971018) * var_x18 + CHASTE_CONST(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_x118 = CHASTE_MATH::Pow(var_chaste_interface__ATP_production__ATPi, (-3)); + const double var_x119 = 1 / (1 + CHASTE_CONST(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_x174 = CHASTE_MATH::Pow((CHASTE_CONST(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_x199 = (-CHASTE_CONST(0.047620000000000003) + var_chaste_interface__internal_ion_concentrations__Ca_Total) / var_x18; + const double var_x200 = CHASTE_CONST(0.5) + CHASTE_CONST(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_x208 = CHASTE_CONST(362.31884057971018) + CHASTE_CONST(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_x278 = CHASTE_CONST(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_x280 = -CHASTE_CONST(3.2387883511406238e-7) - CHASTE_CONST(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_x283 = 1 + CHASTE_CONST(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_x285 = -CHASTE_CONST(0.026190000000000001) + CHASTE_CONST(0.5) * var_x18 + CHASTE_CONST(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_x287 = 1 + CHASTE_CONST(0.00080000000000000004) * var_x286; + const double var_x288 = CHASTE_MATH::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_x290 = var_x289 / CHASTE_MATH::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; + partialF = CHASTE_CONST(2.0728245447299993e-9) * var_x292 - CHASTE_CONST(1.9338304790483955e-9) * var_x263 - CHASTE_CONST(6.4775767022812476e-7) * var_x207 - CHASTE_CONST(2.591030680912499e-8) * var_x201 + var_x279 * (-CHASTE_CONST(1.3650000000000002) - CHASTE_CONST(1.3650000000000002) * var_x199) + var_x280 * var_x281 + var_x280 * mParameters[0] + (-CHASTE_CONST(54.600000000000009) - CHASTE_CONST(54.600000000000009) * var_x199) * var_chaste_interface__NL_model__pCB - var_x201 * var_x278; } else { @@ -2592,7 +2594,7 @@ std::shared_ptr Dynami 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]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -2621,17 +2623,17 @@ std::shared_ptr Dynami 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_SR_calcium_pump__k2 = 1 / (1 + CHASTE_CONST(0.10000000000000001) / var_chaste_interface__ATP_production__ATPi); // per_millisecond + const double var_SR_calcium_pump__p_E1Ca = 1 / (1 + CHASTE_CONST(0.080000000000000002) / var_chaste_interface__Ca_concentrations_in_SR__Caup); // dimensionless + const double var_internal_ion_concentrations__Cai = -CHASTE_CONST(0.026190000000000001) + CHASTE_CONST(0.5) * CHASTE_MATH::Sqrt(CHASTE_MATH::Pow((CHASTE_CONST(0.052380000000000003) - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + CHASTE_CONST(0.0095200000000000007) * var_chaste_interface__internal_ion_concentrations__Ca_Total) + CHASTE_CONST(0.5) * var_chaste_interface__internal_ion_concentrations__Ca_Total; // millimolar + const double var_SR_calcium_pump__p_E2Ca = 1 / (1 + CHASTE_CONST(0.00080000000000000004) / var_internal_ion_concentrations__Cai); // dimensionless + const double var_SR_calcium_pump__i_SR_U = (CHASTE_CONST(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 + const double var_sodium_potassium_pump__k1 = CHASTE_CONST(0.37) / (1 + CHASTE_CONST(0.094) / var_chaste_interface__ATP_production__ATPi); // per_millisecond + const double var_sodium_potassium_pump__p_E1Na = 1 / (1 + CHASTE_CONST(4.4045579125871104) * CHASTE_MATH::Pow((1 / var_chaste_interface__internal_ion_concentrations__Nai), CHASTE_CONST(1.0600000000000001)) * (1 + CHASTE_CONST(0.020000293738509214) * CHASTE_MATH::Pow(var_chaste_interface__internal_ion_concentrations__Ki, CHASTE_CONST(1.1200000000000001)))); // dimensionless + const double var_sodium_potassium_pump__p_E2Na = 1 / (1 + CHASTE_CONST(90.050628437051003) * CHASTE_MATH::Pow((1 / var_sodium_potassium_pump__Nao_Eff), CHASTE_CONST(1.0600000000000001)) * (1 + CHASTE_CONST(4.560221410801109) * CHASTE_MATH::Pow(mParameters[6], CHASTE_CONST(1.1200000000000001)))); // dimensionless + const double var_sodium_potassium_pump__i_NaK = 21 * (-CHASTE_CONST(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 = CHASTE_CONST(0.014999999999999999) + CHASTE_CONST(3.2387883511406238e-7) * var_SR_calcium_pump__i_SR_U - CHASTE_CONST(0.0030000000000000001) * var_chaste_interface__ATP_production__ATPi - CHASTE_CONST(0.028000000000000004) * var_chaste_interface__NL_model__pCaCB - CHASTE_CONST(1.2955153404562495e-6) * var_sodium_potassium_pump__i_NaK; // millimolar / millisecond return d_dt_chaste_interface_var_ATP_production__ATPi; } @@ -2656,28 +2658,28 @@ std::shared_ptr Dynami - 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_x17 = -CHASTE_CONST(0.052380000000000003) + var_chaste_interface__internal_ion_concentrations__Ca_Total; + const double var_x18 = CHASTE_MATH::Sqrt(CHASTE_MATH::Pow(var_x17, 2) + CHASTE_CONST(0.0095200000000000007) * var_chaste_interface__internal_ion_concentrations__Ca_Total); + const double var_x31 = CHASTE_MATH::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_x164 = CHASTE_MATH::Pow(var_x163, CHASTE_CONST(1.0600000000000001)); + const double var_x165 = var_x164 * (1 + CHASTE_CONST(0.020000293738509214) * CHASTE_MATH::Pow(var_chaste_interface__internal_ion_concentrations__Ki, CHASTE_CONST(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_x167 = 1 + CHASTE_CONST(0.094) * var_x166; + const double var_x210 = 1 / (1 + CHASTE_CONST(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_x212 = var_x210 * var_x211 * var_chaste_interface__sodium_potassium_pump_y_gate__y / CHASTE_MATH::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_x283 = 1 + CHASTE_CONST(0.10000000000000001) * var_x166; + const double var_x285 = -CHASTE_CONST(0.026190000000000001) + CHASTE_CONST(0.5) * var_x18 + CHASTE_CONST(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_x287 = 1 + CHASTE_CONST(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_x294 = var_x211 * var_x282 * var_x293 / CHASTE_MATH::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; + partialF = -CHASTE_CONST(0.0030000000000000001) - CHASTE_CONST(3.2387883511406238e-8) * var_x295 - CHASTE_CONST(9.4621849436243545e-7) * var_x213; } else { @@ -2692,7 +2694,7 @@ std::shared_ptr Dynami 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]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -2714,7 +2716,7 @@ std::shared_ptr Dynami 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 + const double d_dt_chaste_interface_var_sodium_current_voltage_dependent_gate__p_AP_Na = CHASTE_CONST(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; } @@ -2724,19 +2726,19 @@ std::shared_ptr Dynami double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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_x308 = CHASTE_MATH::Exp(-CHASTE_CONST(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_x311 = CHASTE_MATH::Exp(CHASTE_CONST(0.00125) * var_chaste_interface__membrane__Vm); + const double var_x312 = CHASTE_CONST(0.058823529411764705) * var_chaste_interface__membrane__Vm; + const double var_x313 = CHASTE_MATH::Exp(var_x312); + const double var_x320 = 1 / (26 * var_x313 + CHASTE_CONST(0.02) * var_x311); const double var_x321 = var_x320; - const double var_x322 = 1.25 * var_x309; + const double var_x322 = CHASTE_CONST(1.25) * var_x309; partialF = -var_x321 - var_x322; } @@ -2753,7 +2755,7 @@ std::shared_ptr Dynami 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]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -2777,9 +2779,9 @@ std::shared_ptr Dynami 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__k_RP_RI = CHASTE_CONST(0.01) / (1 + CHASTE_CONST(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 + const double d_dt_chaste_interface_var_sodium_current_voltage_dependent_gate__p_RP_Na = (CHASTE_CONST(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; } @@ -2789,17 +2791,17 @@ std::shared_ptr Dynami double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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_x316 = CHASTE_MATH::Exp(-CHASTE_CONST(0.125) * var_chaste_interface__membrane__Vm); + const double var_x317 = CHASTE_MATH::Exp(-CHASTE_CONST(0.02) * var_chaste_interface__membrane__Vm); + const double var_x323 = CHASTE_CONST(0.25) * var_x317 + CHASTE_CONST(0.1027) * var_x316; const double var_x324 = 1 / var_x323; - partialF = -0.01 - var_x324; + partialF = -CHASTE_CONST(0.01) - var_x324; } else { @@ -2814,7 +2816,7 @@ std::shared_ptr Dynami 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]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -2837,7 +2839,7 @@ std::shared_ptr Dynami 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 + 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 - (CHASTE_CONST(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; } @@ -2847,20 +2849,20 @@ std::shared_ptr Dynami double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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_x308 = CHASTE_MATH::Exp(-CHASTE_CONST(0.0025000000000000001) * var_chaste_interface__membrane__Vm); + const double var_x311 = CHASTE_MATH::Exp(CHASTE_CONST(0.00125) * var_chaste_interface__membrane__Vm); + const double var_x316 = CHASTE_MATH::Exp(-CHASTE_CONST(0.125) * var_chaste_interface__membrane__Vm); + const double var_x325 = 1 / (5 * var_x308 + CHASTE_CONST(0.0001027) * var_x316); + const double var_x326 = CHASTE_MATH::Exp(CHASTE_CONST(0.050000000000000003) * var_chaste_interface__membrane__Vm); + const double var_x327 = 1300 * var_x326 + CHASTE_CONST(0.040000000000000001) * var_x311; const double var_x337 = var_x325; - partialF = -8.7499999999999999e-5 - var_x337 - 1 / var_x327; + partialF = -CHASTE_CONST(8.7499999999999999e-5) - var_x337 - 1 / var_x327; } else { @@ -2875,7 +2877,7 @@ std::shared_ptr Dynami 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]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -2900,19 +2902,19 @@ std::shared_ptr Dynami double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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); + const double var_x339 = CHASTE_CONST(0.20000000000000001) * var_chaste_interface__membrane__Vm; + const double var_x340 = CHASTE_MATH::Exp(-var_x339); + const double var_x341 = CHASTE_CONST(0.01) * var_chaste_interface__membrane__Vm; + const double var_x342 = CHASTE_MATH::Exp(-var_x341); + const double var_x343 = CHASTE_MATH::Exp(var_x341); + const double var_x344 = CHASTE_MATH::Exp(var_x339); - partialF = -1 / (4000 * var_x342 + 0.014 * var_x340) - 1 / (8000 * var_x343 + 9000000000.0 * var_x344); + partialF = -1 / (4000 * var_x342 + CHASTE_CONST(0.014) * var_x340) - 1 / (8000 * var_x343 + CHASTE_CONST(9000000000.0) * var_x344); } else { @@ -2927,7 +2929,7 @@ std::shared_ptr Dynami 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]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -2948,7 +2950,7 @@ std::shared_ptr Dynami // 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 + const double d_dt_chaste_interface_var_L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL = CHASTE_CONST(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 - (CHASTE_CONST(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; } @@ -2958,18 +2960,18 @@ std::shared_ptr Dynami double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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_x345 = CHASTE_CONST(0.015384615384615385) * var_chaste_interface__membrane__Vm; + const double var_x346 = CHASTE_MATH::Exp(var_x345); + const double var_x347 = CHASTE_MATH::Exp(CHASTE_CONST(0.14285714285714285) * var_chaste_interface__membrane__Vm); + const double var_x354 = 1 / (480 * var_x347 + CHASTE_CONST(2.2000000000000002) * var_x346); const double var_x355 = var_x354; - partialF = -0.0040000000000000001 - var_x355; + partialF = -CHASTE_CONST(0.0040000000000000001) - var_x355; } else { @@ -2984,7 +2986,7 @@ std::shared_ptr Dynami 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]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -3008,8 +3010,8 @@ std::shared_ptr Dynami 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 + const double var_L_type_Ca_channel_voltage_dependent_gate__k_RP_RI = CHASTE_CONST(0.040000000000000001) / (1 + CHASTE_CONST(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 = (CHASTE_CONST(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; } @@ -3019,18 +3021,18 @@ std::shared_ptr Dynami double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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_x345 = CHASTE_CONST(0.015384615384615385) * var_chaste_interface__membrane__Vm; + const double var_x350 = CHASTE_MATH::Exp(-CHASTE_CONST(0.16949152542372881) * var_chaste_interface__membrane__Vm); + const double var_x351 = CHASTE_MATH::Exp(-var_x345); + const double var_x356 = CHASTE_CONST(1.5) * var_x351 + CHASTE_CONST(0.27000000000000002) * var_x350; const double var_x357 = 1 / var_x356; - partialF = -0.040000000000000001 - var_x357; + partialF = -CHASTE_CONST(0.040000000000000001) - var_x357; } else { @@ -3045,7 +3047,7 @@ std::shared_ptr Dynami 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]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -3067,7 +3069,7 @@ std::shared_ptr Dynami 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 + const double d_dt_chaste_interface_var_L_type_Ca_channel_voltage_dependent_gate__p_AI_CaL = CHASTE_CONST(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 - (CHASTE_CONST(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; } @@ -3077,22 +3079,22 @@ std::shared_ptr Dynami double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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_x341 = CHASTE_CONST(0.01) * var_chaste_interface__membrane__Vm; + const double var_x342 = CHASTE_MATH::Exp(-var_x341); + const double var_x343 = CHASTE_MATH::Exp(var_x341); + const double var_x358 = CHASTE_CONST(0.13513513513513511) * var_chaste_interface__membrane__Vm; + const double var_x359 = CHASTE_MATH::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_x362 = CHASTE_MATH::Exp(-var_x358); + const double var_x363 = 1 / (2 * var_x342 + CHASTE_CONST(0.0018) * var_x362); const double var_x374 = var_x363; - partialF = -0.001 - var_x374 - 1 / var_x360; + partialF = -CHASTE_CONST(0.001) - var_x374 - 1 / var_x360; } else { @@ -3107,7 +3109,7 @@ std::shared_ptr Dynami 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]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -3130,12 +3132,12 @@ std::shared_ptr Dynami 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 + const double var_internal_ion_concentrations__Cai = -CHASTE_CONST(0.026190000000000001) + CHASTE_CONST(0.5) * CHASTE_MATH::Sqrt(CHASTE_MATH::Pow((CHASTE_CONST(0.052380000000000003) - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + CHASTE_CONST(0.0095200000000000007) * var_chaste_interface__internal_ion_concentrations__Ca_Total) + CHASTE_CONST(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]) : (CHASTE_CONST(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 = CHASTE_CONST(0.067599999999999993) * var_constant_field_equations__CF_Ca; // picoA + const double var_L_type_Ca_channel_Ca_dependent_gate__Cacm = -CHASTE_CONST(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 = CHASTE_CONST(6.9539999999999997) * (1 - var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL) * var_internal_ion_concentrations__Cai + CHASTE_CONST(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 = CHASTE_CONST(0.14299999999999999) * var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_C + CHASTE_CONST(2.0019999999999998) * var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_UCa - (CHASTE_CONST(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; } @@ -3145,7 +3147,7 @@ std::shared_ptr Dynami double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -3155,23 +3157,23 @@ std::shared_ptr Dynami 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_x13 = CHASTE_CONST(0.074870384603595908) * var_chaste_interface__membrane__Vm; + const double var_x14 = CHASTE_MATH::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_x17 = -CHASTE_CONST(0.052380000000000003) + var_chaste_interface__internal_ion_concentrations__Ca_Total; + const double var_x18 = CHASTE_MATH::Sqrt(CHASTE_MATH::Pow(var_x17, 2) + CHASTE_CONST(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_x20 = -CHASTE_CONST(0.026190000000000001) - var_x19 + CHASTE_CONST(0.5) * var_x18 + CHASTE_CONST(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_x285 = -CHASTE_CONST(0.026190000000000001) + CHASTE_CONST(0.5) * var_x18 + CHASTE_CONST(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; + const double var_x378 = CHASTE_CONST(6.9539999999999997) * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL; + const double var_x382 = var_x378 * (var_x285 - CHASTE_CONST(0.020279999999999996) * var_x214); + const double var_x383 = var_x382 - CHASTE_CONST(6.9539999999999997) * var_x285 * var_x371; - partialF = -0.34999999999999998 - var_x383; + partialF = -CHASTE_CONST(0.34999999999999998) - var_x383; } else { @@ -3186,7 +3188,7 @@ std::shared_ptr Dynami 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]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -3210,12 +3212,12 @@ std::shared_ptr Dynami // 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 + const double var_internal_ion_concentrations__Cai = -CHASTE_CONST(0.026190000000000001) + CHASTE_CONST(0.5) * CHASTE_MATH::Sqrt(CHASTE_MATH::Pow((CHASTE_CONST(0.052380000000000003) - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + CHASTE_CONST(0.0095200000000000007) * var_chaste_interface__internal_ion_concentrations__Ca_Total) + CHASTE_CONST(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]) : (CHASTE_CONST(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 = CHASTE_CONST(0.067599999999999993) * var_constant_field_equations__CF_Ca; // picoA + const double var_L_type_Ca_channel_Ca_dependent_gate__Cacm = -CHASTE_CONST(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 = CHASTE_CONST(6.9539999999999997) * (1 - var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL) * var_internal_ion_concentrations__Cai + CHASTE_CONST(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 = CHASTE_CONST(0.00029999999999999997) * var_L_type_Ca_channel_Ca_dependent_gate__p_CCa - CHASTE_CONST(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; } @@ -3229,7 +3231,7 @@ std::shared_ptr Dynami - partialF = -2.3523000000000001; + partialF = -CHASTE_CONST(2.3523000000000001); } else { @@ -3244,7 +3246,7 @@ std::shared_ptr Dynami 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]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -3268,11 +3270,11 @@ std::shared_ptr Dynami // 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 + const double var_internal_ion_concentrations__Cai = -CHASTE_CONST(0.026190000000000001) + CHASTE_CONST(0.5) * CHASTE_MATH::Sqrt(CHASTE_MATH::Pow((CHASTE_CONST(0.052380000000000003) - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + CHASTE_CONST(0.0095200000000000007) * var_chaste_interface__internal_ion_concentrations__Ca_Total) + CHASTE_CONST(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]) : (CHASTE_CONST(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 = CHASTE_CONST(0.067599999999999993) * var_constant_field_equations__CF_Ca; // picoA + const double var_L_type_Ca_channel_Ca_dependent_gate__Cacm = -CHASTE_CONST(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 = CHASTE_CONST(0.34999999999999998) * var_chaste_interface__L_type_Ca_channel_Ca_dependent_gate__p_U + CHASTE_CONST(0.0041999999999999997) * var_L_type_Ca_channel_Ca_dependent_gate__p_CCa - (CHASTE_CONST(0.14299999999999999) + CHASTE_CONST(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; } @@ -3282,7 +3284,7 @@ std::shared_ptr Dynami double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -3292,21 +3294,21 @@ std::shared_ptr Dynami 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_x13 = CHASTE_CONST(0.074870384603595908) * var_chaste_interface__membrane__Vm; + const double var_x14 = CHASTE_MATH::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_x17 = -CHASTE_CONST(0.052380000000000003) + var_chaste_interface__internal_ion_concentrations__Ca_Total; + const double var_x18 = CHASTE_MATH::Sqrt(CHASTE_MATH::Pow(var_x17, 2) + CHASTE_CONST(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_x20 = -CHASTE_CONST(0.026190000000000001) - var_x19 + CHASTE_CONST(0.5) * var_x18 + CHASTE_CONST(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); + const double var_x285 = -CHASTE_CONST(0.026190000000000001) + CHASTE_CONST(0.5) * var_x18 + CHASTE_CONST(0.5) * var_chaste_interface__internal_ion_concentrations__Ca_Total; + const double var_x378 = CHASTE_CONST(6.9539999999999997) * var_chaste_interface__L_type_Ca_channel_voltage_dependent_gate__p_AP_CaL; + const double var_x382 = var_x378 * (var_x285 - CHASTE_CONST(0.020279999999999996) * var_x214); - partialF = -0.1472 - var_x382; + partialF = -CHASTE_CONST(0.1472) - var_x382; } else { @@ -3321,7 +3323,7 @@ std::shared_ptr Dynami 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]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -3346,16 +3348,16 @@ std::shared_ptr Dynami double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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); + const double var_x345 = CHASTE_CONST(0.015384615384615385) * var_chaste_interface__membrane__Vm; + const double var_x346 = CHASTE_MATH::Exp(var_x345); + const double var_x351 = CHASTE_MATH::Exp(-var_x345); + const double var_x384 = CHASTE_MATH::Exp(-CHASTE_CONST(0.071428571428571425) * var_chaste_interface__membrane__Vm); + const double var_x385 = CHASTE_MATH::Exp(CHASTE_CONST(0.1111111111111111) * var_chaste_interface__membrane__Vm); partialF = -1 / (58 * var_x346 + 250000 * var_x385) - 1 / (66 * var_x351 + 1800 * var_x384); } @@ -3372,7 +3374,7 @@ std::shared_ptr Dynami 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]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -3397,17 +3399,17 @@ std::shared_ptr Dynami double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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); + const double var_x386 = CHASTE_MATH::Exp(CHASTE_CONST(0.0001) * var_chaste_interface__membrane__Vm); + const double var_x387 = CHASTE_MATH::Exp(CHASTE_CONST(0.15873015873015872) * var_chaste_interface__membrane__Vm); + const double var_x388 = CHASTE_MATH::Exp(-CHASTE_CONST(0.17857142857142858) * var_chaste_interface__membrane__Vm); + const double var_x389 = CHASTE_MATH::Exp(-CHASTE_CONST(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); + partialF = -1 / (CHASTE_CONST(1.5) * var_x386 + 40 * var_x387) - 1 / (CHASTE_CONST(0.019) * var_x388 + CHASTE_CONST(0.81999999999999995) * var_x389); } else { @@ -3422,7 +3424,7 @@ std::shared_ptr Dynami 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]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -3447,17 +3449,17 @@ std::shared_ptr Dynami double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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); + const double var_x390 = CHASTE_MATH::Exp(-CHASTE_CONST(0.14925373134328357) * var_chaste_interface__membrane__Vm); + const double var_x391 = CHASTE_MATH::Exp(-CHASTE_CONST(0.040000000000000001) * var_chaste_interface__membrane__Vm); + const double var_x392 = CHASTE_MATH::Exp(CHASTE_CONST(0.00033333333333333332) * var_chaste_interface__membrane__Vm); + const double var_x393 = CHASTE_MATH::Exp(CHASTE_CONST(0.099009900990099015) * var_chaste_interface__membrane__Vm); - partialF = -1 / (30 * var_x392 + 62000 * var_x393) - 1 / (1.2 * var_x391 + 0.00059999999999999995 * var_x390); + partialF = -1 / (30 * var_x392 + 62000 * var_x393) - 1 / (CHASTE_CONST(1.2) * var_x391 + CHASTE_CONST(0.00059999999999999995) * var_x390); } else { @@ -3472,7 +3474,7 @@ std::shared_ptr Dynami 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]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -3482,11 +3484,11 @@ std::shared_ptr Dynami // 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__E_K = CHASTE_CONST(26.712831923985377) * CHASTE_MATH::Log(mParameters[6] / var_chaste_interface__internal_ion_concentrations__Ki); // millivolt + const double var_time_independent_potassium_current__lambda = 3 * (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4319999999999999) + CHASTE_CONST(0.064000000000000001) * var_chaste_interface__membrane__Vm - CHASTE_CONST(0.064000000000000001) * var_time_independent_potassium_current__E_K)) * CHASTE_MATH::Exp(CHASTE_CONST(0.47999999999999998) + CHASTE_CONST(0.048000000000000001) * var_time_independent_potassium_current__E_K - CHASTE_CONST(0.048000000000000001) * var_chaste_interface__membrane__Vm) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.1000000000000001) + CHASTE_CONST(0.029999999999999999) * var_chaste_interface__membrane__Vm - CHASTE_CONST(0.029999999999999999) * var_time_independent_potassium_current__E_K)); // per_millisecond + const double var_time_independent_potassium_current__mu = CHASTE_CONST(0.75) * CHASTE_MATH::Exp(-CHASTE_CONST(0.35000000000000003) + CHASTE_CONST(0.035000000000000003) * var_chaste_interface__membrane__Vm - CHASTE_CONST(0.035000000000000003) * var_time_independent_potassium_current__E_K) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.1000000000000001) + CHASTE_CONST(0.014999999999999999) * var_chaste_interface__membrane__Vm - CHASTE_CONST(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 + 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 * CHASTE_MATH::Exp(-CHASTE_CONST(0.32333333333333331) + CHASTE_CONST(0.0033333333333333335) * var_chaste_interface__membrane__Vm - CHASTE_CONST(0.0033333333333333335) * var_time_independent_potassium_current__E_K) + 8000 * CHASTE_MATH::Exp(-CHASTE_CONST(11.411764705882353) + CHASTE_CONST(0.11764705882352941) * var_chaste_interface__membrane__Vm - CHASTE_CONST(0.11764705882352941) * var_time_independent_potassium_current__E_K)) - CHASTE_MATH::Pow(var_time_independent_potassium_current__fO, 4) * var_chaste_interface__time_independent_potassium_current_y_gate__y / (CHASTE_CONST(0.00013999999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(10.659340659340661) + CHASTE_CONST(0.10989010989010989) * var_time_independent_potassium_current__E_K - CHASTE_CONST(0.10989010989010989) * var_chaste_interface__membrane__Vm) + CHASTE_CONST(0.20000000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.19400000000000001) + CHASTE_CONST(0.002) * var_time_independent_potassium_current__E_K - CHASTE_CONST(0.002) * var_chaste_interface__membrane__Vm)); // 1 / millisecond return d_dt_chaste_interface_var_time_independent_potassium_current_y_gate__y; } @@ -3496,7 +3498,7 @@ std::shared_ptr Dynami double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -3504,35 +3506,35 @@ std::shared_ptr Dynami 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_x77 = CHASTE_MATH::Log(var_x76 * mParameters[6]); + const double var_x78 = CHASTE_MATH::Exp(-CHASTE_CONST(2.4319999999999999) + CHASTE_CONST(0.064000000000000001) * var_chaste_interface__membrane__Vm - CHASTE_CONST(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_x80 = CHASTE_MATH::Pow(var_x79, 4); + const double var_x81 = CHASTE_MATH::Exp(-CHASTE_CONST(2.1000000000000001) + CHASTE_CONST(0.029999999999999999) * var_chaste_interface__membrane__Vm - CHASTE_CONST(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_x83 = CHASTE_MATH::Pow(var_x82, (-4)); + const double var_x84 = CHASTE_MATH::Exp(-CHASTE_CONST(2.1000000000000001) + CHASTE_CONST(0.014999999999999999) * var_chaste_interface__membrane__Vm - CHASTE_CONST(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_x87 = CHASTE_MATH::Exp(-CHASTE_CONST(0.35000000000000003) + CHASTE_CONST(0.035000000000000003) * var_chaste_interface__membrane__Vm - CHASTE_CONST(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_x89 = CHASTE_MATH::Exp(CHASTE_CONST(0.47999999999999998) + CHASTE_CONST(1.282215932351298) * var_x77 - CHASTE_CONST(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_x92 = var_x91 + CHASTE_CONST(0.25) * var_x88; + const double var_x93 = CHASTE_MATH::Pow(var_x92, (-4)); + const double var_x94 = CHASTE_MATH::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_x394 = CHASTE_CONST(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); + const double var_x396 = CHASTE_MATH::Exp(-CHASTE_CONST(0.32333333333333331) - var_x395 - CHASTE_CONST(0.08904277307995126) * var_x77); + const double var_x397 = CHASTE_MATH::Exp(-CHASTE_CONST(11.411764705882353) + CHASTE_CONST(0.11764705882352941) * var_chaste_interface__membrane__Vm - CHASTE_CONST(3.142686108704162) * var_x77); + const double var_x400 = CHASTE_MATH::Exp(CHASTE_CONST(10.659340659340661) + CHASTE_CONST(2.9354760356027887) * var_x77 - CHASTE_CONST(0.10989010989010989) * var_chaste_interface__membrane__Vm); + const double var_x401 = CHASTE_CONST(0.002) * var_chaste_interface__membrane__Vm; + const double var_x402 = CHASTE_MATH::Exp(CHASTE_CONST(0.19400000000000001) - var_x401 + CHASTE_CONST(0.053425663847970754) * var_x77); + const double var_x403 = 1 / (CHASTE_CONST(0.00013999999999999999) * var_x400 + CHASTE_CONST(0.20000000000000001) * var_x402); partialF = -1 / (7 * var_x396 + 8000 * var_x397) - var_x403 * var_x97; } @@ -3549,7 +3551,7 @@ std::shared_ptr Dynami 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]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -3574,22 +3576,22 @@ std::shared_ptr Dynami double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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_x326 = CHASTE_MATH::Exp(CHASTE_CONST(0.050000000000000003) * var_chaste_interface__membrane__Vm); + const double var_x394 = CHASTE_CONST(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); + const double var_x409 = CHASTE_CONST(0.035714285714285712) * var_chaste_interface__membrane__Vm; + const double var_x410 = CHASTE_MATH::Exp(var_x409); + const double var_x411 = CHASTE_MATH::Exp(CHASTE_CONST(0.001) * var_chaste_interface__membrane__Vm); + const double var_x413 = CHASTE_MATH::Exp(var_x395); + const double var_x414 = CHASTE_MATH::Exp(-CHASTE_CONST(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; + partialF = -1 / (5 * var_x413 + 20 * var_x414) - 1 / (160 * var_x410 + 200 * var_x411) - CHASTE_CONST(0.00040000000000000002) * var_x408; } else { @@ -3604,7 +3606,7 @@ std::shared_ptr Dynami 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]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -3629,23 +3631,23 @@ std::shared_ptr Dynami double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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_x154 = CHASTE_CONST(0.076923076923076927) * var_chaste_interface__membrane__Vm; + const double var_x326 = CHASTE_MATH::Exp(CHASTE_CONST(0.050000000000000003) * var_chaste_interface__membrane__Vm); + const double var_x394 = CHASTE_CONST(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); + const double var_x409 = CHASTE_CONST(0.035714285714285712) * var_chaste_interface__membrane__Vm; + const double var_x410 = CHASTE_MATH::Exp(var_x409); + const double var_x411 = CHASTE_MATH::Exp(CHASTE_CONST(0.001) * var_chaste_interface__membrane__Vm); + const double var_x413 = CHASTE_MATH::Exp(var_x395); + const double var_x415 = CHASTE_MATH::Exp(-var_x154); - partialF = -1 / (20 * var_x413 + 200 * var_x415) - 1 / (1600 * var_x410 + 2000 * var_x411) - 0.0001 * var_x408; + partialF = -1 / (20 * var_x413 + 200 * var_x415) - 1 / (1600 * var_x410 + 2000 * var_x411) - CHASTE_CONST(0.0001) * var_x408; } else { @@ -3660,7 +3662,7 @@ std::shared_ptr Dynami 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]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -3685,19 +3687,19 @@ std::shared_ptr Dynami double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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); + const double var_x312 = CHASTE_CONST(0.058823529411764705) * var_chaste_interface__membrane__Vm; + const double var_x313 = CHASTE_MATH::Exp(var_x312); + const double var_x394 = CHASTE_CONST(0.0033333333333333335) * var_chaste_interface__membrane__Vm; + const double var_x416 = CHASTE_MATH::Exp(-var_x312); + const double var_x417 = CHASTE_MATH::Exp(-CHASTE_CONST(0.0066666666666666671) * var_chaste_interface__membrane__Vm); + const double var_x418 = CHASTE_MATH::Exp(var_x394); - partialF = -1 / (2 * var_x417 + 0.34999999999999998 * var_x416) - 1 / (2.5 * var_x418 + 10 * var_x313); + partialF = -1 / (2 * var_x417 + CHASTE_CONST(0.34999999999999998) * var_x416) - 1 / (CHASTE_CONST(2.5) * var_x418 + 10 * var_x313); } else { @@ -3712,7 +3714,7 @@ std::shared_ptr Dynami 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]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -3737,16 +3739,16 @@ std::shared_ptr Dynami double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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); + const double var_x326 = CHASTE_MATH::Exp(CHASTE_CONST(0.050000000000000003) * var_chaste_interface__membrane__Vm); + const double var_x341 = CHASTE_CONST(0.01) * var_chaste_interface__membrane__Vm; + const double var_x343 = CHASTE_MATH::Exp(var_x341); + const double var_x419 = CHASTE_MATH::Exp(-CHASTE_CONST(0.095238095238095233) * var_chaste_interface__membrane__Vm); + const double var_x420 = CHASTE_MATH::Exp(-CHASTE_CONST(0.016129032258064516) * var_chaste_interface__membrane__Vm); partialF = -1 / (260 * var_x343 + 1450 * var_x326) - 1 / (85 * var_x419 + 370 * var_x420); } @@ -3771,8 +3773,8 @@ std::shared_ptr Dynami // 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 + const double var_internal_ion_concentrations__Cai = -CHASTE_CONST(0.026190000000000001) + CHASTE_CONST(0.5) * CHASTE_MATH::Sqrt(CHASTE_MATH::Pow((CHASTE_CONST(0.052380000000000003) - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + CHASTE_CONST(0.0095200000000000007) * var_chaste_interface__internal_ion_concentrations__Ca_Total) + CHASTE_CONST(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 = -CHASTE_CONST(0.004444) * var_chaste_interface__slow_time_dependent_potassium_current_y2_gate__y2 + CHASTE_CONST(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; } @@ -3787,10 +3789,10 @@ std::shared_ptr Dynami - 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_x17 = -CHASTE_CONST(0.052380000000000003) + var_chaste_interface__internal_ion_concentrations__Ca_Total; + const double var_x18 = CHASTE_MATH::Sqrt(CHASTE_MATH::Pow(var_x17, 2) + CHASTE_CONST(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; + partialF = CHASTE_CONST(0.092459000000000013) - CHASTE_CONST(1.8500000000000001) * var_x18 - CHASTE_CONST(1.8500000000000001) * var_chaste_interface__internal_ion_concentrations__Ca_Total; } else { @@ -3805,7 +3807,7 @@ std::shared_ptr Dynami 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]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -3830,19 +3832,19 @@ std::shared_ptr Dynami double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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); + const double var_x308 = CHASTE_MATH::Exp(-CHASTE_CONST(0.0025000000000000001) * var_chaste_interface__membrane__Vm); + const double var_x401 = CHASTE_CONST(0.002) * var_chaste_interface__membrane__Vm; + const double var_x409 = CHASTE_CONST(0.035714285714285712) * var_chaste_interface__membrane__Vm; + const double var_x421 = CHASTE_MATH::Exp(var_x401); + const double var_x422 = CHASTE_MATH::Exp(CHASTE_CONST(0.0625) * var_chaste_interface__membrane__Vm); + const double var_x423 = CHASTE_MATH::Exp(-var_x409); - partialF = -1 / (11 * var_x423 + 0.20000000000000001 * var_x308) - 1 / (4.4000000000000004 * var_x422 + 0.20000000000000001 * var_x421); + partialF = -1 / (11 * var_x423 + CHASTE_CONST(0.20000000000000001) * var_x308) - 1 / (CHASTE_CONST(4.4000000000000004) * var_x422 + CHASTE_CONST(0.20000000000000001) * var_x421); } else { @@ -3857,7 +3859,7 @@ std::shared_ptr Dynami 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]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -3872,7 +3874,7 @@ std::shared_ptr Dynami 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 + const double d_dt_chaste_interface_var_transient_outward_current_y2_gate__y2 = CHASTE_CONST(0.0038) * (1 - var_chaste_interface__transient_outward_current_y2_gate__y2) * _lt_0_row[38] / (_lt_0_row[37]) - CHASTE_CONST(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; } @@ -3882,20 +3884,20 @@ std::shared_ptr Dynami double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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_x424 = CHASTE_CONST(1.1946902654867255) + CHASTE_CONST(0.088495575221238937) * var_chaste_interface__membrane__Vm; + const double var_x425 = CHASTE_MATH::Exp(var_x424); + const double var_x426 = 1 + CHASTE_CONST(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_x429 = CHASTE_MATH::Exp(-var_x424); + const double var_x430 = 1 + CHASTE_CONST(0.051334999999999999) * var_x429; const double var_x431 = var_x429 / var_x430; - partialF = -0.0038 * var_x427 - 0.0038 * var_x431; + partialF = -CHASTE_CONST(0.0038) * var_x427 - CHASTE_CONST(0.0038) * var_x431; } else { @@ -3910,7 +3912,7 @@ std::shared_ptr Dynami 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]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -3929,12 +3931,12 @@ std::shared_ptr Dynami 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_internal_ion_concentrations__Cai = -CHASTE_CONST(0.026190000000000001) + CHASTE_CONST(0.5) * CHASTE_MATH::Sqrt(CHASTE_MATH::Pow((CHASTE_CONST(0.052380000000000003) - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + CHASTE_CONST(0.0095200000000000007) * var_chaste_interface__internal_ion_concentrations__Ca_Total) + CHASTE_CONST(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 + const double var_sodium_calcium_exchanger__p_E1Na = 1 / (1 + CHASTE_CONST(669.921875) * (1 + CHASTE_CONST(724.63768115942037) * var_internal_ion_concentrations__Cai) / CHASTE_MATH::Pow(var_chaste_interface__internal_ion_concentrations__Nai, 3)); // dimensionless + const double var_sodium_calcium_exchanger__p_E2Na = 1 / (1 + CHASTE_CONST(669921.875) * (1 + CHASTE_CONST(0.7246376811594204) * mParameters[5]) / CHASTE_MATH::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 + CHASTE_CONST(1.3799999999999999) * (1 + CHASTE_CONST(1.4927113702623908e-6) * CHASTE_MATH::Pow(mParameters[7], 3)) / mParameters[5]) + var_sodium_calcium_exchanger__k2 * var_sodium_calcium_exchanger__p_E2Na) - (1 / (1 + CHASTE_CONST(0.0013799999999999999) * (1 + CHASTE_CONST(0.0014927113702623907) * CHASTE_MATH::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; } @@ -3944,7 +3946,7 @@ std::shared_ptr Dynami double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -3960,23 +3962,23 @@ std::shared_ptr Dynami // 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_x17 = -CHASTE_CONST(0.052380000000000003) + var_chaste_interface__internal_ion_concentrations__Ca_Total; + const double var_x18 = CHASTE_MATH::Sqrt(CHASTE_MATH::Pow(var_x17, 2) + CHASTE_CONST(0.0095200000000000007) * var_chaste_interface__internal_ion_concentrations__Ca_Total); + const double var_x34 = CHASTE_MATH::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_x36 = -CHASTE_CONST(17.978260869565219) + CHASTE_CONST(362.31884057971018) * var_x18 + CHASTE_CONST(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_x39 = var_x38 / (1 + CHASTE_CONST(669.921875) * var_x37); + const double var_x41 = CHASTE_MATH::Pow(mParameters[7], 3); + const double var_x42 = _lt_0_row[6] / (1 + CHASTE_CONST(669921.875) * (1 + CHASTE_CONST(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_x285 = -CHASTE_CONST(0.026190000000000001) + CHASTE_CONST(0.5) * var_x18 + CHASTE_CONST(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; + const double var_x432 = 1 + CHASTE_CONST(0.0014927113702623907) * var_x34; + const double var_x433 = 1 + CHASTE_CONST(0.0013799999999999999) * var_x286 * var_x432; - partialF = -var_x249 - 1 / var_x433 - 1 / (1 + 1.3799999999999999 * (1 + 1.4927113702623908e-6 * var_x41) / mParameters[5]); + partialF = -var_x249 - 1 / var_x433 - 1 / (1 + CHASTE_CONST(1.3799999999999999) * (1 + CHASTE_CONST(1.4927113702623908e-6) * var_x41) / mParameters[5]); } else { @@ -3991,7 +3993,7 @@ std::shared_ptr Dynami 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]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -4013,10 +4015,10 @@ std::shared_ptr Dynami // 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 + const double var_sodium_potassium_pump__k1 = CHASTE_CONST(0.37) / (1 + CHASTE_CONST(0.094) / var_chaste_interface__ATP_production__ATPi); // per_millisecond + const double var_sodium_potassium_pump__p_E1Na = 1 / (1 + CHASTE_CONST(4.4045579125871104) * CHASTE_MATH::Pow((1 / var_chaste_interface__internal_ion_concentrations__Nai), CHASTE_CONST(1.0600000000000001)) * (1 + CHASTE_CONST(0.020000293738509214) * CHASTE_MATH::Pow(var_chaste_interface__internal_ion_concentrations__Ki, CHASTE_CONST(1.1200000000000001)))); // dimensionless + const double var_sodium_potassium_pump__p_E2Na = 1 / (1 + CHASTE_CONST(90.050628437051003) * CHASTE_MATH::Pow((1 / var_sodium_potassium_pump__Nao_Eff), CHASTE_CONST(1.0600000000000001)) * (1 + CHASTE_CONST(4.560221410801109) * CHASTE_MATH::Pow(mParameters[6], CHASTE_CONST(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) * (CHASTE_CONST(0.040000000000000001) * var_sodium_potassium_pump__p_E2Na + CHASTE_CONST(0.16500000000000001) / (1 + CHASTE_CONST(0.21928759810465578) * CHASTE_MATH::Pow((1 / mParameters[6]), CHASTE_CONST(1.1200000000000001)) * (1 + CHASTE_CONST(0.011104864200909382) * CHASTE_MATH::Pow(var_sodium_potassium_pump__Nao_Eff, CHASTE_CONST(1.0600000000000001))))) - (CHASTE_CONST(0.01) / (1 + CHASTE_CONST(49.999265664512095) * CHASTE_MATH::Pow((1 / var_chaste_interface__internal_ion_concentrations__Ki), CHASTE_CONST(1.1200000000000001)) * (1 + CHASTE_CONST(0.22703754152993499) * CHASTE_MATH::Pow(var_chaste_interface__internal_ion_concentrations__Nai, CHASTE_CONST(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; } @@ -4026,7 +4028,7 @@ std::shared_ptr Dynami double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -4045,26 +4047,26 @@ std::shared_ptr Dynami 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_x65 = CHASTE_MATH::Pow((1 / (var_x64 * mParameters[7])), CHASTE_CONST(1.0600000000000001)); + const double var_x66 = 1 + CHASTE_CONST(4.560221410801109) * CHASTE_MATH::Pow(mParameters[6], CHASTE_CONST(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_x164 = CHASTE_MATH::Pow(var_x163, CHASTE_CONST(1.0600000000000001)); + const double var_x165 = var_x164 * (1 + CHASTE_CONST(0.020000293738509214) * CHASTE_MATH::Pow(var_chaste_interface__internal_ion_concentrations__Ki, CHASTE_CONST(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_x167 = 1 + CHASTE_CONST(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_x210 = 1 / (1 + CHASTE_CONST(4.4045579125871104) * var_x165); + const double var_x250 = 1 / (1 + CHASTE_CONST(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)); + const double var_x435 = CHASTE_MATH::Pow((1 / mParameters[6]), CHASTE_CONST(1.1200000000000001)); + const double var_x436 = CHASTE_MATH::Pow((var_x64 * mParameters[7]), CHASTE_CONST(1.0600000000000001)); + const double var_x437 = 1 + CHASTE_CONST(0.21928759810465578) * var_x435 * (1 + CHASTE_CONST(0.011104864200909382) * var_x436); + const double var_x438 = CHASTE_MATH::Pow(var_x76, CHASTE_CONST(1.1200000000000001)); + const double var_x439 = var_x438 * (1 + CHASTE_CONST(0.22703754152993499) * CHASTE_MATH::Pow(var_chaste_interface__internal_ion_concentrations__Nai, CHASTE_CONST(1.0600000000000001))); - partialF = -0.37 * var_x251 - 0.01 / (1 + 49.999265664512095 * var_x439) - 0.040000000000000001 * var_x250 - 0.16500000000000001 / var_x437; + partialF = -CHASTE_CONST(0.37) * var_x251 - CHASTE_CONST(0.01) / (1 + CHASTE_CONST(49.999265664512095) * var_x439) - CHASTE_CONST(0.040000000000000001) * var_x250 - CHASTE_CONST(0.16500000000000001) / var_x437; } else { @@ -4091,11 +4093,11 @@ std::shared_ptr Dynami // 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 + const double var_SR_calcium_pump__k2 = 1 / (1 + CHASTE_CONST(0.10000000000000001) / var_chaste_interface__ATP_production__ATPi); // per_millisecond + const double var_SR_calcium_pump__p_E1Ca = 1 / (1 + CHASTE_CONST(0.080000000000000002) / var_chaste_interface__Ca_concentrations_in_SR__Caup); // dimensionless + const double var_internal_ion_concentrations__Cai = -CHASTE_CONST(0.026190000000000001) + CHASTE_CONST(0.5) * CHASTE_MATH::Sqrt(CHASTE_MATH::Pow((CHASTE_CONST(0.052380000000000003) - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + CHASTE_CONST(0.0095200000000000007) * var_chaste_interface__internal_ion_concentrations__Ca_Total) + CHASTE_CONST(0.5) * var_chaste_interface__internal_ion_concentrations__Ca_Total; // millimolar + const double var_SR_calcium_pump__p_E2Ca = 1 / (1 + CHASTE_CONST(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) * (CHASTE_CONST(0.01) - CHASTE_CONST(0.01) * var_SR_calcium_pump__p_E2Ca + var_SR_calcium_pump__k2 * var_SR_calcium_pump__p_E2Ca) - (1 - CHASTE_CONST(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; } @@ -4114,20 +4116,20 @@ std::shared_ptr Dynami - 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_x17 = -CHASTE_CONST(0.052380000000000003) + var_chaste_interface__internal_ion_concentrations__Ca_Total; + const double var_x18 = CHASTE_MATH::Sqrt(CHASTE_MATH::Pow(var_x17, 2) + CHASTE_CONST(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_x283 = 1 + CHASTE_CONST(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_x285 = -CHASTE_CONST(0.026190000000000001) + CHASTE_CONST(0.5) * var_x18 + CHASTE_CONST(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_x287 = 1 + CHASTE_CONST(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_x298 = 1 + CHASTE_CONST(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; + partialF = -CHASTE_CONST(1.01) + CHASTE_CONST(0.01) * var_x293 + CHASTE_CONST(0.98999999999999999) * var_x299 - var_x300; } else { @@ -4142,7 +4144,7 @@ std::shared_ptr Dynami 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]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -4173,13 +4175,13 @@ std::shared_ptr Dynami 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 + const double var_Ca_concentrations_in_SR__Carel = -CHASTE_CONST(5.4000000000000004) + CHASTE_CONST(0.5) * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total + CHASTE_CONST(5.4000000000000004) * CHASTE_MATH::Sqrt(CHASTE_MATH::Pow((1 - CHASTE_CONST(0.092592592592592587) * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total), 2) + CHASTE_CONST(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 + CHASTE_CONST(2.7439999999999993) / CHASTE_MATH::Pow(var_chaste_interface__ATP_production__ATPi, 3)); // dimensionless + const double var_internal_ion_concentrations__Cai = -CHASTE_CONST(0.026190000000000001) + CHASTE_CONST(0.5) * CHASTE_MATH::Sqrt(CHASTE_MATH::Pow((CHASTE_CONST(0.052380000000000003) - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + CHASTE_CONST(0.0095200000000000007) * var_chaste_interface__internal_ion_concentrations__Ca_Total) + CHASTE_CONST(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]) : (CHASTE_CONST(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 = CHASTE_CONST(0.067599999999999993) * var_constant_field_equations__CF_Ca; // picoA + const double var_RyR_channel__k1 = 280000 * CHASTE_MATH::Pow(var_internal_ion_concentrations__Cai, 2) / CHASTE_MATH::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 - CHASTE_CONST(0.080000000000000002) * var_chaste_interface__RyR_channel__p_open_RyR / (1 + CHASTE_CONST(0.35999999999999999) / var_Ca_concentrations_in_SR__Carel); // 1 / millisecond return d_dt_chaste_interface_var_RyR_channel__p_open_RyR; } @@ -4194,11 +4196,11 @@ std::shared_ptr Dynami - 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); + const double var_x301 = -1 + CHASTE_CONST(0.092592592592592587) * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total; + const double var_x302 = CHASTE_MATH::Sqrt(CHASTE_MATH::Pow(var_x301, 2) + CHASTE_CONST(0.027434842249657067) * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total); + const double var_x453 = 1 + CHASTE_CONST(0.35999999999999999) / (-CHASTE_CONST(5.4000000000000004) + CHASTE_CONST(0.5) * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total + CHASTE_CONST(5.4000000000000004) * var_x302); - partialF = -0.080000000000000002 / var_x453; + partialF = -CHASTE_CONST(0.080000000000000002) / var_x453; } else { @@ -4213,7 +4215,7 @@ std::shared_ptr Dynami 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]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -4244,13 +4246,13 @@ std::shared_ptr Dynami 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 + const double var_Ca_concentrations_in_SR__Carel = -CHASTE_CONST(5.4000000000000004) + CHASTE_CONST(0.5) * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total + CHASTE_CONST(5.4000000000000004) * CHASTE_MATH::Sqrt(CHASTE_MATH::Pow((1 - CHASTE_CONST(0.092592592592592587) * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total), 2) + CHASTE_CONST(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 + CHASTE_CONST(2.7439999999999993) / CHASTE_MATH::Pow(var_chaste_interface__ATP_production__ATPi, 3)); // dimensionless + const double var_internal_ion_concentrations__Cai = -CHASTE_CONST(0.026190000000000001) + CHASTE_CONST(0.5) * CHASTE_MATH::Sqrt(CHASTE_MATH::Pow((CHASTE_CONST(0.052380000000000003) - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + CHASTE_CONST(0.0095200000000000007) * var_chaste_interface__internal_ion_concentrations__Ca_Total) + CHASTE_CONST(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]) : (CHASTE_CONST(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 = CHASTE_CONST(0.067599999999999993) * var_constant_field_equations__CF_Ca; // picoA + const double var_RyR_channel__k1 = 280000 * CHASTE_MATH::Pow(var_internal_ion_concentrations__Cai, 2) / CHASTE_MATH::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 = -(CHASTE_CONST(0.00084900000000000004) + var_RyR_channel__k1) * var_chaste_interface__RyR_channel__p_close_RyR + CHASTE_CONST(0.000377) * CHASTE_MATH::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; } @@ -4260,7 +4262,7 @@ std::shared_ptr Dynami double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -4280,35 +4282,35 @@ std::shared_ptr Dynami 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_x13 = CHASTE_CONST(0.074870384603595908) * var_chaste_interface__membrane__Vm; + const double var_x14 = CHASTE_MATH::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_x17 = -CHASTE_CONST(0.052380000000000003) + var_chaste_interface__internal_ion_concentrations__Ca_Total; + const double var_x18 = CHASTE_MATH::Sqrt(CHASTE_MATH::Pow(var_x17, 2) + CHASTE_CONST(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_x20 = -CHASTE_CONST(0.026190000000000001) - var_x19 + CHASTE_CONST(0.5) * var_x18 + CHASTE_CONST(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_x118 = CHASTE_MATH::Pow(var_chaste_interface__ATP_production__ATPi, (-3)); + const double var_x119 = 1 / (1 + CHASTE_CONST(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_x288 = CHASTE_MATH::Pow(var_x27, 2); + const double var_x301 = -1 + CHASTE_CONST(0.092592592592592587) * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total; + const double var_x302 = CHASTE_MATH::Sqrt(CHASTE_MATH::Pow(var_x301, 2) + CHASTE_CONST(0.027434842249657067) * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total); + const double var_x441 = CHASTE_CONST(10.139999999999999) * var_chaste_interface__L_type_Ca_channel_ultra_slow_gate__y; + const double var_x444 = CHASTE_MATH::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; + const double var_x457 = CHASTE_MATH::Pow(var_x456, 2); + const double var_x458 = CHASTE_CONST(0.010993320000000001) * var_x457; - partialF = -0.00084900000000000004 + var_x455 - var_x454 - var_x458; + partialF = -CHASTE_CONST(0.00084900000000000004) + var_x455 - var_x454 - var_x458; } else { @@ -4335,11 +4337,11 @@ std::shared_ptr Dynami // 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_Ca_concentrations_in_SR__Carel = -CHASTE_CONST(5.4000000000000004) + CHASTE_CONST(0.5) * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total + CHASTE_CONST(5.4000000000000004) * CHASTE_MATH::Sqrt(CHASTE_MATH::Pow((1 - CHASTE_CONST(0.092592592592592587) * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total), 2) + CHASTE_CONST(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_internal_ion_concentrations__Cai = -CHASTE_CONST(0.026190000000000001) + CHASTE_CONST(0.5) * CHASTE_MATH::Sqrt(CHASTE_MATH::Pow((CHASTE_CONST(0.052380000000000003) - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + CHASTE_CONST(0.0095200000000000007) * var_chaste_interface__internal_ion_concentrations__Ca_Total) + CHASTE_CONST(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 + const double d_dt_chaste_interface_var_Ca_concentrations_in_SR__Ca_Total = CHASTE_CONST(3.2387883511406234e-5) * var_SR_T_current__i_SR_T - CHASTE_CONST(3.2387883511406234e-5) * var_RyR_channel__i_RyR; // millimolar / millisecond return d_dt_chaste_interface_var_Ca_concentrations_in_SR__Ca_Total; } @@ -4356,11 +4358,11 @@ std::shared_ptr Dynami - 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; + const double var_x301 = -1 + CHASTE_CONST(0.092592592592592587) * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total; + const double var_x302 = CHASTE_MATH::Sqrt(CHASTE_MATH::Pow(var_x301, 2) + CHASTE_CONST(0.027434842249657067) * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total); + const double var_x303 = (-CHASTE_CONST(0.078875171467764058) + CHASTE_CONST(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; + partialF = -CHASTE_CONST(0.0062508615177014034) - CHASTE_CONST(0.067509304391175154) * var_x303 + (-CHASTE_CONST(1.6193941755703117e-5) - CHASTE_CONST(0.00017489457096159366) * var_x303) * mParameters[1] * var_chaste_interface__RyR_channel__p_open_RyR; } else { @@ -4389,15 +4391,15 @@ std::shared_ptr Dynami // 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_Ca_concentrations_in_SR__Carel = -CHASTE_CONST(5.4000000000000004) + CHASTE_CONST(0.5) * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total + CHASTE_CONST(5.4000000000000004) * CHASTE_MATH::Sqrt(CHASTE_MATH::Pow((1 - CHASTE_CONST(0.092592592592592587) * var_chaste_interface__Ca_concentrations_in_SR__Ca_Total), 2) + CHASTE_CONST(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_calcium_pump__k2 = 1 / (1 + CHASTE_CONST(0.10000000000000001) / var_chaste_interface__ATP_production__ATPi); // per_millisecond + const double var_SR_calcium_pump__p_E1Ca = 1 / (1 + CHASTE_CONST(0.080000000000000002) / var_chaste_interface__Ca_concentrations_in_SR__Caup); // dimensionless + const double var_internal_ion_concentrations__Cai = -CHASTE_CONST(0.026190000000000001) + CHASTE_CONST(0.5) * CHASTE_MATH::Sqrt(CHASTE_MATH::Pow((CHASTE_CONST(0.052380000000000003) - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + CHASTE_CONST(0.0095200000000000007) * var_chaste_interface__internal_ion_concentrations__Ca_Total) + CHASTE_CONST(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 + const double var_SR_calcium_pump__p_E2Ca = 1 / (1 + CHASTE_CONST(0.00080000000000000004) / var_internal_ion_concentrations__Cai); // dimensionless + const double var_SR_calcium_pump__i_SR_U = (CHASTE_CONST(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 = -CHASTE_CONST(1.2955153404562494e-5) * var_SR_L_current__i_SR_L - CHASTE_CONST(1.2955153404562494e-5) * var_SR_T_current__i_SR_T - CHASTE_CONST(1.2955153404562494e-5) * var_SR_calcium_pump__i_SR_U; // millimolar / millisecond return d_dt_chaste_interface_var_Ca_concentrations_in_SR__Caup; } @@ -4414,11 +4416,11 @@ std::shared_ptr Dynami - 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_x298 = 1 + CHASTE_CONST(0.080000000000000002) / var_chaste_interface__Ca_concentrations_in_SR__Caup; + const double var_x304 = var_chaste_interface__SR_calcium_pump_y_gate__y / (CHASTE_MATH::Pow(var_x298, 2) * CHASTE_MATH::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; + partialF = -CHASTE_CONST(0.0050006892141611229) - CHASTE_CONST(1.2955153404562494e-5) * mParameters[0] - CHASTE_CONST(1.0364122723649996e-8) * var_x305; } else { @@ -4445,9 +4447,9 @@ std::shared_ptr Dynami // 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 var_NL_model__Q_a = -CHASTE_CONST(0.0038999999999999998) * var_chaste_interface__NL_model__pCaCB + CHASTE_CONST(0.0038999999999999998) * var_chaste_interface__NL_model__pCa * CHASTE_MATH::Exp(-CHASTE_CONST(0.86212130841993795)); // per_millisecond + const double var_internal_ion_concentrations__Cai = -CHASTE_CONST(0.026190000000000001) + CHASTE_CONST(0.5) * CHASTE_MATH::Sqrt(CHASTE_MATH::Pow((CHASTE_CONST(0.052380000000000003) - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + CHASTE_CONST(0.0095200000000000007) * var_chaste_interface__internal_ion_concentrations__Ca_Total) + CHASTE_CONST(0.5) * var_chaste_interface__internal_ion_concentrations__Ca_Total; // millimolar + const double var_NL_model__Q_b = -CHASTE_CONST(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; @@ -4463,12 +4465,12 @@ std::shared_ptr Dynami - 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; + const double var_x17 = -CHASTE_CONST(0.052380000000000003) + var_chaste_interface__internal_ion_concentrations__Ca_Total; + const double var_x18 = CHASTE_MATH::Sqrt(CHASTE_MATH::Pow(var_x17, 2) + CHASTE_CONST(0.0095200000000000007) * var_chaste_interface__internal_ion_concentrations__Ca_Total); + const double var_x459 = CHASTE_CONST(0.0038999999999999998) * CHASTE_MATH::Exp(-CHASTE_CONST(0.86212130841993795)); + const double var_x460 = CHASTE_CONST(19.5) * var_x18 + CHASTE_CONST(19.5) * var_chaste_interface__internal_ion_concentrations__Ca_Total; - partialF = 0.99141000000000001 - var_x459 - var_x460; + partialF = CHASTE_CONST(0.99141000000000001) - var_x459 - var_x460; } else { @@ -4497,11 +4499,11 @@ std::shared_ptr Dynami // 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__X = CHASTE_CONST(1.1488559970494261) - CHASTE_CONST(1.2) * var_chaste_interface__NL_model__X; // micrometre / millisecond + const double var_NL_model__Q_a = -CHASTE_CONST(0.0038999999999999998) * var_chaste_interface__NL_model__pCaCB + CHASTE_CONST(0.0038999999999999998) * var_chaste_interface__NL_model__pCa * CHASTE_MATH::Exp(-CHASTE_CONST(0.86212130841993795)); // per_millisecond + const double var_NL_model__Q_d2 = CHASTE_CONST(0.027) * CHASTE_MATH::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 = -CHASTE_CONST(0.026190000000000001) + CHASTE_CONST(0.5) * CHASTE_MATH::Sqrt(CHASTE_MATH::Pow((CHASTE_CONST(0.052380000000000003) - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + CHASTE_CONST(0.0095200000000000007) * var_chaste_interface__internal_ion_concentrations__Ca_Total) + CHASTE_CONST(0.5) * var_chaste_interface__internal_ion_concentrations__Ca_Total; // millimolar + const double var_NL_model__Q_r = CHASTE_CONST(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; @@ -4517,10 +4519,10 @@ std::shared_ptr Dynami - 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_x307 = CHASTE_MATH::Pow((CHASTE_CONST(0.95737999754118841) - var_chaste_interface__NL_model__X), 2); + const double var_x462 = CHASTE_CONST(0.038879999999999998) * var_x307; - partialF = -0.0339 - var_x462; + partialF = -CHASTE_CONST(0.0339) - var_x462; } else { @@ -4547,10 +4549,10 @@ std::shared_ptr Dynami // 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 + const double d_dt_chaste_interface_var_NL_model__X = CHASTE_CONST(1.1488559970494261) - CHASTE_CONST(1.2) * var_chaste_interface__NL_model__X; // micrometre / millisecond + const double var_internal_ion_concentrations__Cai = -CHASTE_CONST(0.026190000000000001) + CHASTE_CONST(0.5) * CHASTE_MATH::Sqrt(CHASTE_MATH::Pow((CHASTE_CONST(0.052380000000000003) - var_chaste_interface__internal_ion_concentrations__Ca_Total), 2) + CHASTE_CONST(0.0095200000000000007) * var_chaste_interface__internal_ion_concentrations__Ca_Total) + CHASTE_CONST(0.5) * var_chaste_interface__internal_ion_concentrations__Ca_Total; // millimolar + const double var_NL_model__Q_r = CHASTE_CONST(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 = -CHASTE_CONST(0.12) * var_chaste_interface__NL_model__pCB - CHASTE_CONST(0.027) * CHASTE_MATH::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; } @@ -4567,13 +4569,13 @@ std::shared_ptr Dynami - 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_x17 = -CHASTE_CONST(0.052380000000000003) + var_chaste_interface__internal_ion_concentrations__Ca_Total; + const double var_x18 = CHASTE_MATH::Sqrt(CHASTE_MATH::Pow(var_x17, 2) + CHASTE_CONST(0.0095200000000000007) * var_chaste_interface__internal_ion_concentrations__Ca_Total); + const double var_x307 = CHASTE_MATH::Pow((CHASTE_CONST(0.95737999754118841) - var_chaste_interface__NL_model__X), 2); + const double var_x462 = CHASTE_CONST(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; + partialF = CHASTE_CONST(40.736400000000003) - var_x462 - var_x463; } else { @@ -4594,7 +4596,7 @@ std::shared_ptr Dynami // 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 d_dt_chaste_interface_var_NL_model__X = CHASTE_CONST(1.1488559970494261) - CHASTE_CONST(1.2) * var_chaste_interface__NL_model__X; // micrometre / millisecond return d_dt_chaste_interface_var_NL_model__X; } @@ -4608,7 +4610,7 @@ std::shared_ptr Dynami - partialF = -1.2; + partialF = -CHASTE_CONST(1.2); } else { @@ -4625,7 +4627,7 @@ std::shared_ptr Dynami { // Inputs: // Time units: millisecond - double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -4673,69 +4675,69 @@ std::shared_ptr Dynami // 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__K_mCSQN = CHASTE_CONST(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_Ca_concentrations_in_SR__Carel = CHASTE_MATH::Sqrt(CHASTE_CONST(0.25) * CHASTE_MATH::Pow(var_Ca_concentrations_in_SR__b1, 2) + var_Ca_concentrations_in_SR__c1) - CHASTE_CONST(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 + CHASTE_CONST(2.7439999999999993) / CHASTE_MATH::Pow(var_chaste_interface__ATP_production__ATPi, 3)); // dimensionless + const double var_internal_ion_concentrations__CMDN_max = CHASTE_CONST(0.050000000000000003); // millimolar + const double var_internal_ion_concentrations__K_mCMDN = CHASTE_CONST(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_internal_ion_concentrations__Cai = CHASTE_MATH::Sqrt(CHASTE_CONST(0.25) * CHASTE_MATH::Pow(var_internal_ion_concentrations__b1, 2) + var_internal_ion_concentrations__c1) - CHASTE_CONST(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__Cm_converted = CHASTE_CONST(9.9999999999999995e-7) * mParameters[9]; // uF + const double var_membrane__F = CHASTE_CONST(96.486699999999999); // coulomb_per_millimole + const double var_membrane__R = CHASTE_CONST(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_constant_field_equations__CF_Ca = ((var_chaste_interface__membrane__Vm == 0) ? (-mParameters[5]) : (2 * (-mParameters[5] * CHASTE_MATH::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 - CHASTE_MATH::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_constant_field_equations__CF_K = ((var_chaste_interface__membrane__Vm == 0) ? (var_chaste_interface__internal_ion_concentrations__Ki) : ((-mParameters[6] * CHASTE_MATH::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 - CHASTE_MATH::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 = CHASTE_CONST(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] * CHASTE_MATH::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 - CHASTE_MATH::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 = CHASTE_CONST(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_L_type_Ca_channel__i_Ca_L_converted = CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * var_L_type_Ca_channel__i_Ca_L / var_membrane__Cm_converted; // uA_per_cm2 + const double var_membrane__i_ext_converted = CHASTE_STIM(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_rapid_time_dependent_potassium_current__g_Kr = CHASTE_CONST(0.71370912277944121) * CHASTE_MATH::Pow(mParameters[6], CHASTE_CONST(0.20000000000000001)) * mParameters[9] * mParameters[12]; // nanoS + const double var_slow_time_dependent_potassium_current__P_Ks_Na = CHASTE_CONST(0.2016); // picoA_per_millimolar + const double var_slow_time_dependent_potassium_current__i_Ks_K = CHASTE_MATH::Pow(var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1, 2) * (CHASTE_CONST(0.10000000000000001) + CHASTE_CONST(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 = CHASTE_MATH::Pow(var_chaste_interface__slow_time_dependent_potassium_current_y1_gate__y1, 2) * (CHASTE_CONST(0.10000000000000001) + CHASTE_CONST(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_slow_time_dependent_potassium_current__i_Ks_converted = CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * var_slow_time_dependent_potassium_current__i_Ks / var_membrane__Cm_converted; // uA_per_cm2 + const double var_sodium_calcium_exchanger__Km_Cai = CHASTE_CONST(0.0013799999999999999); // millimolar + const double var_sodium_calcium_exchanger__Km_Cao = CHASTE_CONST(1.3799999999999999); // millimolar + const double var_sodium_calcium_exchanger__Km_Nai = CHASTE_CONST(8.75); // millimolar + const double var_sodium_calcium_exchanger__Km_Nao = CHASTE_CONST(87.5); // millimolar + const double var_sodium_calcium_exchanger__Partition = CHASTE_CONST(0.32000000000000001); // dimensionless + const double var_sodium_calcium_exchanger__k1 = CHASTE_MATH::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 = CHASTE_MATH::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 + CHASTE_MATH::Pow(var_sodium_calcium_exchanger__Km_Nai, 3) * (1 + var_internal_ion_concentrations__Cai / var_sodium_calcium_exchanger__Km_Cai) / CHASTE_MATH::Pow(var_chaste_interface__internal_ion_concentrations__Nai, 3)); // dimensionless + const double var_sodium_calcium_exchanger__p_E2Na = 1 / (1 + CHASTE_MATH::Pow(var_sodium_calcium_exchanger__Km_Nao, 3) * (1 + mParameters[5] / var_sodium_calcium_exchanger__Km_Cao) / CHASTE_MATH::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_calcium_exchanger__i_NaCa_converted = CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * var_sodium_calcium_exchanger__i_NaCa / var_membrane__Cm_converted; // uA_per_cm2 + const double var_sodium_current__i_Na_K = CHASTE_CONST(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_sodium_current__i_Na_converted = CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * 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 * CHASTE_MATH::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) * (CHASTE_CONST(0.40000000000000002) * var_chaste_interface__rapid_time_dependent_potassium_current_y2_gate__y2 + CHASTE_CONST(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 = CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * var_rapid_time_dependent_potassium_current__i_Kr / var_membrane__Cm_converted; // uA_per_cm2 + const double var_time_independent_potassium_current__g_K1 = CHASTE_CONST(0.50938071193859957) * CHASTE_MATH::Pow(mParameters[6], CHASTE_CONST(0.40000000000000002)) * mParameters[9] * mParameters[11]; // nanoS + const double var_time_independent_potassium_current__lambda = 3 * (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4319999999999999) + CHASTE_CONST(0.064000000000000001) * var_chaste_interface__membrane__Vm - CHASTE_CONST(0.064000000000000001) * var_time_independent_potassium_current__E_K)) * CHASTE_MATH::Exp(CHASTE_CONST(0.47999999999999998) + CHASTE_CONST(0.048000000000000001) * var_time_independent_potassium_current__E_K - CHASTE_CONST(0.048000000000000001) * var_chaste_interface__membrane__Vm) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.1000000000000001) + CHASTE_CONST(0.029999999999999999) * var_chaste_interface__membrane__Vm - CHASTE_CONST(0.029999999999999999) * var_time_independent_potassium_current__E_K)); // per_millisecond + const double var_time_independent_potassium_current__mu = CHASTE_CONST(0.75) * CHASTE_MATH::Exp(-CHASTE_CONST(0.35000000000000003) + CHASTE_CONST(0.035000000000000003) * var_chaste_interface__membrane__Vm - CHASTE_CONST(0.035000000000000003) * var_time_independent_potassium_current__E_K) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.1000000000000001) + CHASTE_CONST(0.014999999999999999) * var_chaste_interface__membrane__Vm - CHASTE_CONST(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__fO2 = 2 * CHASTE_MATH::Pow(var_time_independent_potassium_current__fB, 2) * CHASTE_MATH::Pow(var_time_independent_potassium_current__fO, 2); // dimensionless + const double var_time_independent_potassium_current__fO3 = CHASTE_CONST(2.6666666666666665) * CHASTE_MATH::Pow(var_time_independent_potassium_current__fO, 3) * var_time_independent_potassium_current__fB; // dimensionless + const double var_time_independent_potassium_current__fO4 = CHASTE_MATH::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_time_independent_potassium_current__i_K1_converted = CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * var_time_independent_potassium_current__i_K1 / var_membrane__Cm_converted; // uA_per_cm2 + const double var_transient_outward_current__P_to_Na = CHASTE_CONST(0.00297); // picoA_per_millimolar + const double var_transient_outward_current__i_to_K = CHASTE_MATH::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 = CHASTE_MATH::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 + const double var_transient_outward_current__i_to_converted = CHASTE_CONST(9.9999999999999995e-7) * CHASTE_CAP() * 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; diff --git a/chaste_codegen/data/tests/chaste_reference_models/GRL1Opt/dynamic_matsuoka_model_2003.hpp b/chaste_codegen/data/tests/chaste_reference_models/GRL1Opt/dynamic_matsuoka_model_2003.hpp index ea268feec..6fab09609 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/GRL1Opt/dynamic_matsuoka_model_2003.hpp +++ b/chaste_codegen/data/tests/chaste_reference_models/GRL1Opt/dynamic_matsuoka_model_2003.hpp @@ -17,6 +17,9 @@ #include #include "AbstractDynamicallyLoadableEntity.hpp" #include "AbstractStimulusFunction.hpp" +#if USING_DEVICE_COMPILER +#include "StimulusEvaluatorCuda.hpp" +#endif #include "AbstractGeneralizedRushLarsenCardiacCell.hpp" class Dynamicmatsuoka_model_2003FromCellMLGRL1Opt : public AbstractGeneralizedRushLarsenCardiacCell, public AbstractDynamicallyLoadableEntity diff --git a/chaste_codegen/data/tests/chaste_reference_models/GRL2/dynamic_winslow_model_1999.cpp b/chaste_codegen/data/tests/chaste_reference_models/GRL2/dynamic_winslow_model_1999.cpp index b341b1892..f093f7d7b 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/GRL2/dynamic_winslow_model_1999.cpp +++ b/chaste_codegen/data/tests/chaste_reference_models/GRL2/dynamic_winslow_model_1999.cpp @@ -21,6 +21,8 @@ #include "HeartConfig.hpp" #include "IsNan.hpp" #include "MathsCustomFunctions.hpp" +#include "ChasteMathDeviceNamespaces.hpp" +#include "ChasteCpuMacros.hpp" @@ -29,7 +31,7 @@ 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_amplitude_converted = -CHASTE_CONST(21.126799999999999) * CHASTE_CAP(); // 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 @@ -66,16 +68,16 @@ 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[6] = CHASTE_CONST(0.00031250000000000001); // (var_L_type_Ca_current__P_Ca) [cm_per_second] + this->mParameters[7] = CHASTE_CONST(0.001); // (var_membrane__C_sc) [microF_per_cm2] + this->mParameters[8] = CHASTE_CONST(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] + this->mParameters[11] = CHASTE_CONST(2.7999999999999998); // (var_time_independent_potassium_current__g_K1) [milliS_per_microF] + this->mParameters[12] = CHASTE_CONST(0.0033999999999999998); // (var_rapid_activating_delayed_rectifiyer_K_current__g_Kr) [milliS_per_microF] + this->mParameters[13] = CHASTE_CONST(0.0027133999999999999); // (var_slow_activating_delayed_rectifiyer_K_current__g_Ks) [milliS_per_microF] + this->mParameters[14] = CHASTE_CONST(0.29999999999999999); // (var_Na_Ca_exchanger__K_NaCa) [microA_per_microF] + this->mParameters[15] = CHASTE_CONST(0.23815); // (var_transient_outward_potassium_current__g_to1) [milliS_per_microF] } Dynamicwinslow_model_1999FromCellMLGRL2::~Dynamicwinslow_model_1999FromCellMLGRL2() @@ -122,7 +124,7 @@ // 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -151,57 +153,57 @@ 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_L_type_Ca_current__P_K = CHASTE_CONST(5.7899999999999998e-7); // cm_per_second + const double var_L_type_Ca_current__i_Ca_half = -CHASTE_CONST(0.26500000000000001); // microA_per_microF + const double var_Na_Ca_exchanger__K_mCa = CHASTE_CONST(1.3799999999999999); // millimolar + const double var_Na_Ca_exchanger__K_mNa = CHASTE_CONST(87.5); // millimolar + const double var_Na_Ca_exchanger__K_sat = CHASTE_CONST(0.20000000000000001); // dimensionless + const double var_Na_Ca_exchanger__eta = CHASTE_CONST(0.34999999999999998); // dimensionless + const double var_calcium_background_current__g_Cab = CHASTE_CONST(0.00038420000000000001); // milliS_per_microF + const double var_membrane__F = CHASTE_CONST(96.485341500000004); // coulomb_per_millimole + const double var_membrane__R = CHASTE_CONST(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_plateau_potassium_current__g_Kp = CHASTE_CONST(0.0022160000000000001); // milliS_per_microF + const double var_plateau_potassium_current_Kp_gate__Kp_V = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.2521739130434781) - CHASTE_CONST(0.16722408026755853) * var_chaste_interface__membrane__V)); // dimensionless + const double var_rapid_activating_delayed_rectifiyer_K_current__R_V = 1 / (1 + CHASTE_CONST(1.4944999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(0.044600000000000001) * var_chaste_interface__membrane__V)); // dimensionless + const double var_sarcolemmal_calcium_pump__I_pCa = CHASTE_CONST(0.050000000000000003); // microA_per_microF + const double var_sarcolemmal_calcium_pump__K_mpCa = CHASTE_CONST(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_background_current__g_Nab = CHASTE_CONST(0.0030999999999999999); // milliS_per_microF + const double var_sodium_potassium_pump__I_NaK = CHASTE_CONST(0.69299999999999995); // microA_per_microF + const double var_sodium_potassium_pump__K_mKo = CHASTE_CONST(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_max = 4000 * CHASTE_MATH::Pow(var_membrane__F, 2) * (CHASTE_CONST(0.001) * CHASTE_MATH::Exp(2 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - CHASTE_CONST(0.34100000000000003) * mParameters[3]) * mParameters[6] * var_chaste_interface__membrane__V / ((-1 + CHASTE_MATH::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__i_Ca_converted = CHASTE_CAP() * 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__E_Ca = CHASTE_CONST(0.5) * var_membrane__R * var_membrane__T * CHASTE_MATH::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_L_type_Ca_current__i_Ca_K = CHASTE_MATH::Pow(var_membrane__F, 2) * (-mParameters[4] + var_chaste_interface__intracellular_ion_concentrations__Ki * CHASTE_MATH::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 + CHASTE_MATH::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 * CHASTE_MATH::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__f_Ko = CHASTE_CONST(0.5) * CHASTE_MATH::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_rapid_activating_delayed_rectifiyer_K_current__i_Kr_converted = CHASTE_CAP() * var_rapid_activating_delayed_rectifiyer_K_current__i_Kr; // uA_per_cm2 + const double var_Na_Ca_exchanger__i_NaCa = 5000 * (CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Nai, 3) * mParameters[3] * CHASTE_MATH::Exp(var_Na_Ca_exchanger__eta * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - CHASTE_MATH::Pow(mParameters[5], 3) * var_chaste_interface__intracellular_ion_concentrations__Cai * CHASTE_MATH::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 * CHASTE_MATH::Exp((-1 + var_Na_Ca_exchanger__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (CHASTE_MATH::Pow(var_Na_Ca_exchanger__K_mNa, 3) + CHASTE_MATH::Pow(mParameters[5], 3)) * (var_Na_Ca_exchanger__K_mCa + mParameters[3])); // microA_per_microF + const double var_Na_Ca_exchanger__i_NaCa_converted = CHASTE_CAP() * var_Na_Ca_exchanger__i_NaCa; // uA_per_cm2 + const double var_fast_sodium_current__E_Na = var_membrane__R * var_membrane__T * CHASTE_MATH::Log(mParameters[5] / var_chaste_interface__intracellular_ion_concentrations__Nai) / var_membrane__F; // millivolt + const double var_fast_sodium_current__i_Na = CHASTE_MATH::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 = CHASTE_CAP() * 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 * CHASTE_MATH::Log((mParameters[4] + CHASTE_CONST(0.018329999999999999) * mParameters[5]) / (var_chaste_interface__intracellular_ion_concentrations__Ki + CHASTE_CONST(0.018329999999999999) * var_chaste_interface__intracellular_ion_concentrations__Nai)) / var_membrane__F; // millivolt + const double var_slow_activating_delayed_rectifiyer_K_current__i_Ks = CHASTE_MATH::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 = CHASTE_CAP() * 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_sodium_potassium_pump__sigma = -CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(0.01485884101040119) * mParameters[5]); // dimensionless + const double var_sodium_potassium_pump__f_NaK = 1 / (1 + CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(0.10000000000000001) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) + CHASTE_CONST(0.036499999999999998) * var_sodium_potassium_pump__sigma * CHASTE_MATH::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 + CHASTE_MATH::Pow((var_sodium_potassium_pump__K_mNai / var_chaste_interface__intracellular_ion_concentrations__Nai), CHASTE_CONST(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_K1_gate__K1_infinity_V = 1 / (2 + CHASTE_MATH::Exp(CHASTE_CONST(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_time_independent_potassium_current__i_K1_converted = CHASTE_CAP() * 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 var_transient_outward_potassium_current__i_to1_converted = CHASTE_CAP() * var_transient_outward_potassium_current__i_to1; // uA_per_cm2 + const double var_chaste_interface__i_ionic = CHASTE_CAP() * var_L_type_Ca_current__i_Ca_K + CHASTE_CAP() * var_calcium_background_current__i_Ca_b + CHASTE_CAP() * var_plateau_potassium_current__i_Kp + CHASTE_CAP() * var_sarcolemmal_calcium_pump__i_p_Ca + CHASTE_CAP() * var_sodium_background_current__i_Na_b + CHASTE_CAP() * 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)); @@ -215,7 +217,7 @@ const double delta = 1e-8; const double yinit = rY[v_index]; - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -247,53 +249,53 @@ // 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_L_type_Ca_current__P_K = CHASTE_CONST(5.7899999999999998e-7); // cm_per_second + const double var_L_type_Ca_current__i_Ca_half = -CHASTE_CONST(0.26500000000000001); // microA_per_microF + const double var_Na_Ca_exchanger__K_mCa = CHASTE_CONST(1.3799999999999999); // millimolar + const double var_Na_Ca_exchanger__K_mNa = CHASTE_CONST(87.5); // millimolar + const double var_Na_Ca_exchanger__K_sat = CHASTE_CONST(0.20000000000000001); // dimensionless + const double var_Na_Ca_exchanger__eta = CHASTE_CONST(0.34999999999999998); // dimensionless + const double var_calcium_background_current__g_Cab = CHASTE_CONST(0.00038420000000000001); // milliS_per_microF + const double var_membrane__F = CHASTE_CONST(96.485341500000004); // coulomb_per_millimole + const double var_membrane__R = CHASTE_CONST(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_membrane__i_Stim_converted = CHASTE_STIM(var_chaste_interface__environment__time_converted); // uA_per_cm2 + const double var_membrane__i_Stim = var_membrane__i_Stim_converted / CHASTE_CAP(); // microA_per_microF + const double var_plateau_potassium_current__g_Kp = CHASTE_CONST(0.0022160000000000001); // milliS_per_microF + const double var_plateau_potassium_current_Kp_gate__Kp_V = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.2521739130434781) - CHASTE_CONST(0.16722408026755853) * var_chaste_interface__membrane__V)); // dimensionless + const double var_rapid_activating_delayed_rectifiyer_K_current__R_V = 1 / (1 + CHASTE_CONST(1.4944999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(0.044600000000000001) * var_chaste_interface__membrane__V)); // dimensionless + const double var_sarcolemmal_calcium_pump__I_pCa = CHASTE_CONST(0.050000000000000003); // microA_per_microF + const double var_sarcolemmal_calcium_pump__K_mpCa = CHASTE_CONST(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_background_current__g_Nab = CHASTE_CONST(0.0030999999999999999); // milliS_per_microF + const double var_sodium_potassium_pump__I_NaK = CHASTE_CONST(0.69299999999999995); // microA_per_microF + const double var_sodium_potassium_pump__K_mKo = CHASTE_CONST(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_max = 4000 * CHASTE_MATH::Pow(var_membrane__F, 2) * (CHASTE_CONST(0.001) * CHASTE_MATH::Exp(2 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - CHASTE_CONST(0.34100000000000003) * mParameters[3]) * mParameters[6] * var_chaste_interface__membrane__V / ((-1 + CHASTE_MATH::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__E_Ca = CHASTE_CONST(0.5) * var_membrane__R * var_membrane__T * CHASTE_MATH::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_L_type_Ca_current__i_Ca_K = CHASTE_MATH::Pow(var_membrane__F, 2) * (-mParameters[4] + var_chaste_interface__intracellular_ion_concentrations__Ki * CHASTE_MATH::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 + CHASTE_MATH::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 * CHASTE_MATH::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__f_Ko = CHASTE_CONST(0.5) * CHASTE_MATH::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_Na_Ca_exchanger__i_NaCa = 5000 * (CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Nai, 3) * mParameters[3] * CHASTE_MATH::Exp(var_Na_Ca_exchanger__eta * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - CHASTE_MATH::Pow(mParameters[5], 3) * var_chaste_interface__intracellular_ion_concentrations__Cai * CHASTE_MATH::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 * CHASTE_MATH::Exp((-1 + var_Na_Ca_exchanger__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (CHASTE_MATH::Pow(var_Na_Ca_exchanger__K_mNa, 3) + CHASTE_MATH::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 * CHASTE_MATH::Log(mParameters[5] / var_chaste_interface__intracellular_ion_concentrations__Nai) / var_membrane__F; // millivolt + const double var_fast_sodium_current__i_Na = CHASTE_MATH::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 * CHASTE_MATH::Log((mParameters[4] + CHASTE_CONST(0.018329999999999999) * mParameters[5]) / (var_chaste_interface__intracellular_ion_concentrations__Ki + CHASTE_CONST(0.018329999999999999) * var_chaste_interface__intracellular_ion_concentrations__Nai)) / var_membrane__F; // millivolt + const double var_slow_activating_delayed_rectifiyer_K_current__i_Ks = CHASTE_MATH::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_sodium_potassium_pump__sigma = -CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(0.01485884101040119) * mParameters[5]); // dimensionless + const double var_sodium_potassium_pump__f_NaK = 1 / (1 + CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(0.10000000000000001) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) + CHASTE_CONST(0.036499999999999998) * var_sodium_potassium_pump__sigma * CHASTE_MATH::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 + CHASTE_MATH::Pow((var_sodium_potassium_pump__K_mNai / var_chaste_interface__intracellular_ion_concentrations__Nai), CHASTE_CONST(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_K1_gate__K1_infinity_V = 1 / (2 + CHASTE_MATH::Exp(CHASTE_CONST(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 + d_dt_chaste_interface_var_membrane__V = CHASTE_CONST(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; @@ -329,7 +331,7 @@ mYInit = rY; double y_save; - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -399,194 +401,194 @@ // 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__P_K = CHASTE_CONST(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 d_dt_chaste_interface_var_L_type_Ca_current__O = CHASTE_CONST(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 d_dt_chaste_interface_var_L_type_Ca_current__O_Ca = CHASTE_CONST(0.001) * var_L_type_Ca_current__O_Ca_orig_deriv; // 1 / millisecond + const double var_L_type_Ca_current__i_Ca_half = -CHASTE_CONST(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_Na_Ca_exchanger__K_mCa = CHASTE_CONST(1.3799999999999999); // millimolar + const double var_Na_Ca_exchanger__K_mNa = CHASTE_CONST(87.5); // millimolar + const double var_Na_Ca_exchanger__K_sat = CHASTE_CONST(0.20000000000000001); // dimensionless + const double var_Na_Ca_exchanger__eta = CHASTE_CONST(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_a_plus = CHASTE_CONST(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_b_plus = CHASTE_CONST(4050000000.0); // millimolar3_per_second + const double var_RyR_channel__k_c_minus = CHASTE_CONST(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 d_dt_chaste_interface_var_RyR_channel__P_C2 = CHASTE_CONST(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__K_fb = CHASTE_CONST(0.00016799999999999999); // millimolar + const double var_SERCA2a_pump__K_rb = CHASTE_CONST(3.29); // millimolar + const double var_SERCA2a_pump__N_fb = CHASTE_CONST(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_SERCA2a_pump__Vmaxf = CHASTE_CONST(0.081299999999999997); // millimolar_per_second + const double var_SERCA2a_pump__Vmaxr = CHASTE_CONST(0.318); // millimolar_per_second + const double var_calcium_background_current__g_Cab = CHASTE_CONST(0.00038420000000000001); // milliS_per_microF + const double var_intracellular_Ca_fluxes__HTRPN_tot = CHASTE_CONST(0.14000000000000001); // dimensionless + const double var_intracellular_Ca_fluxes__LTRPN_tot = CHASTE_CONST(0.070000000000000007); // dimensionless + const double var_intracellular_Ca_fluxes__k_htrpn_minus = CHASTE_CONST(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_Ca_fluxes__tau_tr = CHASTE_CONST(0.00057470000000000004); // second + const double var_intracellular_Ca_fluxes__tau_xfer = CHASTE_CONST(0.026700000000000002); // second + const double var_intracellular_ion_concentrations__A_cap = CHASTE_CONST(0.00015339999999999999); // cm2 + const double var_intracellular_ion_concentrations__CMDN_tot = CHASTE_CONST(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_SERCA2a_pump__rb = CHASTE_MATH::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_L_type_Ca_current__gamma = CHASTE_CONST(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_RyR_channel__P_C1_orig_deriv = var_chaste_interface__RyR_channel__P_O1 * var_RyR_channel__k_a_minus - CHASTE_MATH::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 = CHASTE_CONST(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 + CHASTE_MATH::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 - CHASTE_MATH::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 = CHASTE_CONST(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 + CHASTE_MATH::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 = CHASTE_CONST(0.001) * var_RyR_channel__P_O2_orig_deriv; // 1 / millisecond + const double var_SERCA2a_pump__fb = CHASTE_MATH::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 d_dt_chaste_interface_var_intracellular_Ca_fluxes__HTRPNCa = CHASTE_CONST(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 d_dt_chaste_interface_var_intracellular_Ca_fluxes__LTRPNCa = CHASTE_CONST(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__K_mCMDN = CHASTE_CONST(0.0023800000000000002); // millimolar + const double var_intracellular_ion_concentrations__K_mCSQN = CHASTE_CONST(0.80000000000000004); // millimolar + const double var_intracellular_ion_concentrations__K_mEGTA = CHASTE_CONST(0.00014999999999999999); // millimolar + const double var_intracellular_ion_concentrations__V_JSR = CHASTE_CONST(1.6e-7); // micro_litre + const double var_intracellular_ion_concentrations__V_NSR = CHASTE_CONST(2.0999999999999998e-6); // micro_litre + const double var_intracellular_ion_concentrations__V_SS = CHASTE_CONST(1.2e-9); // micro_litre + const double var_intracellular_ion_concentrations__V_myo = CHASTE_CONST(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 d_dt_chaste_interface_var_intracellular_ion_concentrations__Ca_NSR = CHASTE_CONST(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 / CHASTE_MATH::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 d_dt_chaste_interface_var_intracellular_ion_concentrations__Ca_JSR = CHASTE_CONST(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 / CHASTE_MATH::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 / CHASTE_MATH::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 / CHASTE_MATH::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 / CHASTE_MATH::Pow((var_chaste_interface__intracellular_ion_concentrations__Cai + var_intracellular_ion_concentrations__K_mEGTA), 2)); // dimensionless + const double var_membrane__F = CHASTE_CONST(96.485341500000004); // coulomb_per_millimole + const double var_membrane__R = CHASTE_CONST(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 = 400 * CHASTE_MATH::Exp(CHASTE_CONST(0.20000000000000001) + CHASTE_CONST(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 = 50 * CHASTE_MATH::Exp(-CHASTE_CONST(0.15384615384615385) - CHASTE_CONST(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 d_dt_chaste_interface_var_L_type_Ca_current__C0 = CHASTE_CONST(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 d_dt_chaste_interface_var_L_type_Ca_current__C1 = CHASTE_CONST(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 + CHASTE_MATH::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 / CHASTE_MATH::Pow(var_L_type_Ca_current__b, 2); // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_current__C2 = CHASTE_CONST(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 + CHASTE_MATH::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 / CHASTE_MATH::Pow(var_L_type_Ca_current__b, 3); // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_current__C3 = CHASTE_CONST(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 + CHASTE_MATH::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 / CHASTE_MATH::Pow(var_L_type_Ca_current__b, 4); // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_current__C4 = CHASTE_CONST(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 d_dt_chaste_interface_var_L_type_Ca_current__C_Ca0 = CHASTE_CONST(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 d_dt_chaste_interface_var_L_type_Ca_current__C_Ca1 = CHASTE_CONST(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 / CHASTE_MATH::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 + CHASTE_MATH::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 = CHASTE_CONST(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 / CHASTE_MATH::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 + CHASTE_MATH::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 = CHASTE_CONST(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 / CHASTE_MATH::Pow(var_L_type_Ca_current__b, 4) + var_L_type_Ca_current__fprime) * var_chaste_interface__L_type_Ca_current__C_Ca4 + CHASTE_MATH::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 = CHASTE_CONST(0.001) * var_L_type_Ca_current__C_Ca4_orig_deriv; // 1 / millisecond + const double var_L_type_Ca_current_y_gate__tau_y = CHASTE_CONST(0.02) + CHASTE_CONST(0.59999999999999998) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(2.1052631578947367) + CHASTE_CONST(0.10526315789473684) * var_chaste_interface__membrane__V)); // second + const double var_L_type_Ca_current_y_gate__y_infinity = CHASTE_CONST(0.20000000000000001) + CHASTE_CONST(0.80000000000000004) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(2.5) + CHASTE_CONST(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 d_dt_chaste_interface_var_L_type_Ca_current_y_gate__y = CHASTE_CONST(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 * CHASTE_MATH::Exp(-CHASTE_CONST(11.764705882352942) + CHASTE_CONST(0.14705882352941177) * mParameters[10] - CHASTE_CONST(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 * CHASTE_MATH::Exp(CHASTE_CONST(0.079000000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.079000000000000001) * mParameters[10]) + 310000 * CHASTE_MATH::Exp(CHASTE_CONST(0.34999999999999998) * var_chaste_interface__membrane__V - CHASTE_CONST(0.34999999999999998) * mParameters[10])) : (CHASTE_CONST(7692.3076923076924) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.96036036036036043) + CHASTE_CONST(0.0900900900900901) * mParameters[10] - CHASTE_CONST(0.0900900900900901) * var_chaste_interface__membrane__V)))); // per_second + const double var_fast_sodium_current_h_gate__h_inf = CHASTE_CONST(0.01) * mParameters[9] + (1 - CHASTE_CONST(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 d_dt_chaste_interface_var_fast_sodium_current_h_gate__h = CHASTE_CONST(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 * (CHASTE_CONST(37.780000000000001) + var_chaste_interface__membrane__V) * (-127140 * CHASTE_MATH::Exp(CHASTE_CONST(0.24440000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.24440000000000001) * mParameters[10]) - CHASTE_CONST(3.4740000000000003e-5) * CHASTE_MATH::Exp(CHASTE_CONST(0.043909999999999998) * mParameters[10] - CHASTE_CONST(0.043909999999999998) * var_chaste_interface__membrane__V)) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(24.640530000000002) + CHASTE_CONST(0.311) * var_chaste_interface__membrane__V - CHASTE_CONST(0.311) * mParameters[10]))) : (0)); // per_second + const double var_fast_sodium_current_j_gate__beta_j = ((var_chaste_interface__membrane__V < -40) ? (CHASTE_CONST(121.2) * CHASTE_MATH::Exp(CHASTE_CONST(0.01052) * mParameters[10] - CHASTE_CONST(0.01052) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(5.5312920000000005) + CHASTE_CONST(0.13780000000000001) * mParameters[10] - CHASTE_CONST(0.13780000000000001) * var_chaste_interface__membrane__V))) : (300 * CHASTE_MATH::Exp(CHASTE_CONST(2.5349999999999999e-7) * mParameters[10] - CHASTE_CONST(2.5349999999999999e-7) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.2000000000000002) + CHASTE_CONST(0.10000000000000001) * mParameters[10] - CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V)))); // per_second + const double var_fast_sodium_current_j_gate__j_inf = CHASTE_CONST(0.01) * mParameters[9] + (1 - CHASTE_CONST(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 d_dt_chaste_interface_var_fast_sodium_current_j_gate__j = CHASTE_CONST(0.001) * var_fast_sodium_current_j_gate__j_orig_deriv; // 1 / millisecond + const double var_fast_sodium_current_m_gate__E0_m = CHASTE_CONST(47.130000000000003) + var_chaste_interface__membrane__V; // millivolt + const double var_fast_sodium_current_m_gate__alpha_m = ((CHASTE_MATH::Abs(var_fast_sodium_current_m_gate__E0_m) < CHASTE_CONST(1.0000000000000001e-5)) ? (1000 / (CHASTE_CONST(0.10000000000000001) - CHASTE_CONST(0.0050000000000000001) * var_fast_sodium_current_m_gate__E0_m)) : (320 * var_fast_sodium_current_m_gate__E0_m / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(0.10000000000000001) * var_fast_sodium_current_m_gate__E0_m)))); // per_second + const double var_fast_sodium_current_m_gate__beta_m = 80 * CHASTE_MATH::Exp(-CHASTE_CONST(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 d_dt_chaste_interface_var_fast_sodium_current_m_gate__m = CHASTE_CONST(0.001) * var_fast_sodium_current_m_gate__m_orig_deriv; // 1 / millisecond + const double var_plateau_potassium_current__g_Kp = CHASTE_CONST(0.0022160000000000001); // milliS_per_microF + const double var_plateau_potassium_current_Kp_gate__Kp_V = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.2521739130434781) - CHASTE_CONST(0.16722408026755853) * var_chaste_interface__membrane__V)); // dimensionless + const double var_rapid_activating_delayed_rectifiyer_K_current__R_V = 1 / (1 + CHASTE_CONST(1.4944999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(0.044600000000000001) * var_chaste_interface__membrane__V)); // dimensionless + const double var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__K12 = CHASTE_MATH::Exp(-CHASTE_CONST(5.4950000000000001) + CHASTE_CONST(0.1691) * var_chaste_interface__membrane__V); // dimensionless + const double var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__K21 = CHASTE_MATH::Exp(-CHASTE_CONST(7.6769999999999996) - CHASTE_CONST(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__tau_X_kr = CHASTE_CONST(0.001) / (var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__K12 + var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__K21) + CHASTE_CONST(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 d_dt_chaste_interface_var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr = CHASTE_CONST(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 = CHASTE_CONST(0.050000000000000003); // microA_per_microF + const double var_sarcolemmal_calcium_pump__K_mpCa = CHASTE_CONST(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_infinity = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.8161764705882353) - CHASTE_CONST(0.073529411764705885) * var_chaste_interface__membrane__V)); // dimensionless + const double var_slow_activating_delayed_rectifiyer_K_current_X_ks_gate__tau_X_ks = CHASTE_CONST(0.001) / (CHASTE_CONST(0.00013100000000000001) * (-10 + var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.68699999999999994) + CHASTE_CONST(0.068699999999999997) * var_chaste_interface__membrane__V)) + CHASTE_CONST(7.1899999999999999e-5) * (-10 + var_chaste_interface__membrane__V) / (1 - CHASTE_MATH::Exp(CHASTE_CONST(1.48) - CHASTE_CONST(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 d_dt_chaste_interface_var_slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks = CHASTE_CONST(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 = CHASTE_CONST(0.0030999999999999999); // milliS_per_microF + const double var_sodium_potassium_pump__I_NaK = CHASTE_CONST(0.69299999999999995); // microA_per_microF + const double var_sodium_potassium_pump__K_mKo = CHASTE_CONST(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_max = 4000 * CHASTE_MATH::Pow(var_membrane__F, 2) * (CHASTE_CONST(0.001) * CHASTE_MATH::Exp(2 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - CHASTE_CONST(0.34100000000000003) * mParameters[3]) * mParameters[6] * var_chaste_interface__membrane__V / ((-1 + CHASTE_MATH::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__E_Ca = CHASTE_CONST(0.5) * var_membrane__R * var_membrane__T * CHASTE_MATH::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_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 - CHASTE_CONST(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 = CHASTE_CONST(0.001) * var_intracellular_ion_concentrations__Ca_ss_orig_deriv; // millimolar / millisecond + const double var_L_type_Ca_current__i_Ca_K = CHASTE_MATH::Pow(var_membrane__F, 2) * (-mParameters[4] + var_chaste_interface__intracellular_ion_concentrations__Ki * CHASTE_MATH::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 + CHASTE_MATH::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 * CHASTE_MATH::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__f_Ko = CHASTE_CONST(0.5) * CHASTE_MATH::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_Na_Ca_exchanger__i_NaCa = 5000 * (CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Nai, 3) * mParameters[3] * CHASTE_MATH::Exp(var_Na_Ca_exchanger__eta * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - CHASTE_MATH::Pow(mParameters[5], 3) * var_chaste_interface__intracellular_ion_concentrations__Cai * CHASTE_MATH::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 * CHASTE_MATH::Exp((-1 + var_Na_Ca_exchanger__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (CHASTE_MATH::Pow(var_Na_Ca_exchanger__K_mNa, 3) + CHASTE_MATH::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 * CHASTE_MATH::Log(mParameters[5] / var_chaste_interface__intracellular_ion_concentrations__Nai) / var_membrane__F; // millivolt + const double var_fast_sodium_current__i_Na = CHASTE_MATH::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 + CHASTE_CONST(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 = CHASTE_CONST(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 * CHASTE_MATH::Log((mParameters[4] + CHASTE_CONST(0.018329999999999999) * mParameters[5]) / (var_chaste_interface__intracellular_ion_concentrations__Ki + CHASTE_CONST(0.018329999999999999) * var_chaste_interface__intracellular_ion_concentrations__Nai)) / var_membrane__F; // millivolt + const double var_slow_activating_delayed_rectifiyer_K_current__i_Ks = CHASTE_MATH::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_sodium_potassium_pump__sigma = -CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(0.01485884101040119) * mParameters[5]); // dimensionless + const double var_sodium_potassium_pump__f_NaK = 1 / (1 + CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(0.10000000000000001) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) + CHASTE_CONST(0.036499999999999998) * var_sodium_potassium_pump__sigma * CHASTE_MATH::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 + CHASTE_MATH::Pow((var_sodium_potassium_pump__K_mNai / var_chaste_interface__intracellular_ion_concentrations__Nai), CHASTE_CONST(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 d_dt_chaste_interface_var_intracellular_ion_concentrations__Nai = CHASTE_CONST(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_K1_gate__K1_infinity_V = 1 / (2 + CHASTE_MATH::Exp(CHASTE_CONST(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__alpha_X_to1 = CHASTE_CONST(45.159999999999997) * CHASTE_MATH::Exp(CHASTE_CONST(0.035770000000000003) * var_chaste_interface__membrane__V); // per_second + const double var_transient_outward_potassium_current_X_to1_gate__beta_X_to1 = CHASTE_CONST(98.900000000000006) * CHASTE_MATH::Exp(-CHASTE_CONST(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 d_dt_chaste_interface_var_transient_outward_potassium_current_X_to1_gate__X_to1 = CHASTE_CONST(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 d_dt_chaste_interface_var_intracellular_ion_concentrations__Ki = CHASTE_CONST(0.001) * var_intracellular_ion_concentrations__Ki_orig_deriv; // millimolar / millisecond + const double var_transient_outward_potassium_current_Y_to1_gate__alpha_Y_to1 = CHASTE_CONST(5.415) * CHASTE_MATH::Exp(-CHASTE_CONST(6.7000000000000002) - CHASTE_CONST(0.20000000000000001) * var_chaste_interface__membrane__V) / (1 + CHASTE_CONST(0.051334999999999999) * CHASTE_MATH::Exp(-CHASTE_CONST(6.7000000000000002) - CHASTE_CONST(0.20000000000000001) * var_chaste_interface__membrane__V)); // per_second + const double var_transient_outward_potassium_current_Y_to1_gate__beta_Y_to1 = CHASTE_CONST(5.415) * CHASTE_MATH::Exp(CHASTE_CONST(6.7000000000000002) + CHASTE_CONST(0.20000000000000001) * var_chaste_interface__membrane__V) / (1 + CHASTE_CONST(0.051334999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(6.7000000000000002) + CHASTE_CONST(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 + const double d_dt_chaste_interface_var_transient_outward_potassium_current_Y_to1_gate__Y_to1 = CHASTE_CONST(0.001) * var_transient_outward_potassium_current_Y_to1_gate__Y_to1_orig_deriv; // 1 / millisecond if (mSetVoltageDerivativeToZero) { @@ -594,10 +596,10 @@ } 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__i_Stim_converted = CHASTE_STIM(var_chaste_interface__environment__time_converted); // uA_per_cm2 + const double var_membrane__i_Stim = var_membrane__i_Stim_converted / CHASTE_CAP(); // 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 + d_dt_chaste_interface_var_membrane__V = CHASTE_CONST(0.001) * var_membrane__V_orig_deriv; // millivolt / millisecond } mEvalF[0] = d_dt_chaste_interface_var_membrane__V; @@ -927,7 +929,7 @@ double Dynamicwinslow_model_1999FromCellMLGRL2::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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -958,53 +960,53 @@ // 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_L_type_Ca_current__P_K = CHASTE_CONST(5.7899999999999998e-7); // cm_per_second + const double var_L_type_Ca_current__i_Ca_half = -CHASTE_CONST(0.26500000000000001); // microA_per_microF + const double var_Na_Ca_exchanger__K_mCa = CHASTE_CONST(1.3799999999999999); // millimolar + const double var_Na_Ca_exchanger__K_mNa = CHASTE_CONST(87.5); // millimolar + const double var_Na_Ca_exchanger__K_sat = CHASTE_CONST(0.20000000000000001); // dimensionless + const double var_Na_Ca_exchanger__eta = CHASTE_CONST(0.34999999999999998); // dimensionless + const double var_calcium_background_current__g_Cab = CHASTE_CONST(0.00038420000000000001); // milliS_per_microF + const double var_membrane__F = CHASTE_CONST(96.485341500000004); // coulomb_per_millimole + const double var_membrane__R = CHASTE_CONST(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_membrane__i_Stim_converted = CHASTE_STIM(var_chaste_interface__environment__time_converted); // uA_per_cm2 + const double var_membrane__i_Stim = var_membrane__i_Stim_converted / CHASTE_CAP(); // microA_per_microF + const double var_plateau_potassium_current__g_Kp = CHASTE_CONST(0.0022160000000000001); // milliS_per_microF + const double var_plateau_potassium_current_Kp_gate__Kp_V = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.2521739130434781) - CHASTE_CONST(0.16722408026755853) * var_chaste_interface__membrane__V)); // dimensionless + const double var_rapid_activating_delayed_rectifiyer_K_current__R_V = 1 / (1 + CHASTE_CONST(1.4944999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(0.044600000000000001) * var_chaste_interface__membrane__V)); // dimensionless + const double var_sarcolemmal_calcium_pump__I_pCa = CHASTE_CONST(0.050000000000000003); // microA_per_microF + const double var_sarcolemmal_calcium_pump__K_mpCa = CHASTE_CONST(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_background_current__g_Nab = CHASTE_CONST(0.0030999999999999999); // milliS_per_microF + const double var_sodium_potassium_pump__I_NaK = CHASTE_CONST(0.69299999999999995); // microA_per_microF + const double var_sodium_potassium_pump__K_mKo = CHASTE_CONST(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_max = 4000 * CHASTE_MATH::Pow(var_membrane__F, 2) * (CHASTE_CONST(0.001) * CHASTE_MATH::Exp(2 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - CHASTE_CONST(0.34100000000000003) * mParameters[3]) * mParameters[6] * var_chaste_interface__membrane__V / ((-1 + CHASTE_MATH::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__E_Ca = CHASTE_CONST(0.5) * var_membrane__R * var_membrane__T * CHASTE_MATH::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_L_type_Ca_current__i_Ca_K = CHASTE_MATH::Pow(var_membrane__F, 2) * (-mParameters[4] + var_chaste_interface__intracellular_ion_concentrations__Ki * CHASTE_MATH::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 + CHASTE_MATH::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 * CHASTE_MATH::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__f_Ko = CHASTE_CONST(0.5) * CHASTE_MATH::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_Na_Ca_exchanger__i_NaCa = 5000 * (CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Nai, 3) * mParameters[3] * CHASTE_MATH::Exp(var_Na_Ca_exchanger__eta * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - CHASTE_MATH::Pow(mParameters[5], 3) * var_chaste_interface__intracellular_ion_concentrations__Cai * CHASTE_MATH::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 * CHASTE_MATH::Exp((-1 + var_Na_Ca_exchanger__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (CHASTE_MATH::Pow(var_Na_Ca_exchanger__K_mNa, 3) + CHASTE_MATH::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 * CHASTE_MATH::Log(mParameters[5] / var_chaste_interface__intracellular_ion_concentrations__Nai) / var_membrane__F; // millivolt + const double var_fast_sodium_current__i_Na = CHASTE_MATH::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 * CHASTE_MATH::Log((mParameters[4] + CHASTE_CONST(0.018329999999999999) * mParameters[5]) / (var_chaste_interface__intracellular_ion_concentrations__Ki + CHASTE_CONST(0.018329999999999999) * var_chaste_interface__intracellular_ion_concentrations__Nai)) / var_membrane__F; // millivolt + const double var_slow_activating_delayed_rectifiyer_K_current__i_Ks = CHASTE_MATH::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_sodium_potassium_pump__sigma = -CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(0.01485884101040119) * mParameters[5]); // dimensionless + const double var_sodium_potassium_pump__f_NaK = 1 / (1 + CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(0.10000000000000001) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) + CHASTE_CONST(0.036499999999999998) * var_sodium_potassium_pump__sigma * CHASTE_MATH::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 + CHASTE_MATH::Pow((var_sodium_potassium_pump__K_mNai / var_chaste_interface__intracellular_ion_concentrations__Nai), CHASTE_CONST(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_K1_gate__K1_infinity_V = 1 / (2 + CHASTE_MATH::Exp(CHASTE_CONST(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 + d_dt_chaste_interface_var_membrane__V = CHASTE_CONST(0.001) * var_membrane__V_orig_deriv; // millivolt / millisecond return d_dt_chaste_interface_var_membrane__V; } @@ -1014,7 +1016,7 @@ double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -1044,92 +1046,92 @@ // Units: millimolar; Initial value: 157.8 - const double var_x0 = exp(1.2521739130434781 - 0.16722408026755853 * var_chaste_interface__membrane__V); + const double var_x0 = CHASTE_MATH::Exp(CHASTE_CONST(1.2521739130434781) - CHASTE_CONST(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_x3 = CHASTE_MATH::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_x8 = CHASTE_MATH::Log(var_x7); + const double var_x9 = -CHASTE_CONST(26.713760659695648) * var_x8 + var_chaste_interface__membrane__V; + const double var_x10 = var_x0 * var_x9 / CHASTE_MATH::Pow(var_x1, 2); + const double var_x11 = CHASTE_MATH::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_x14 = CHASTE_MATH::Exp(CHASTE_CONST(0.044600000000000001) * var_chaste_interface__membrane__V); + const double var_x15 = CHASTE_MATH::Sqrt(mParameters[4]); + const double var_x16 = var_x15 * mParameters[12] / (1 + CHASTE_CONST(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_x19 = CHASTE_MATH::Exp(CHASTE_CONST(0.056150836234118207) * var_chaste_interface__membrane__V - CHASTE_CONST(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_x23 = CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Nai, 3); + const double var_x24 = CHASTE_MATH::Exp(CHASTE_CONST(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_x26 = CHASTE_MATH::Exp(-CHASTE_CONST(0.024332029034784559) * var_chaste_interface__membrane__V); + const double var_x27 = CHASTE_MATH::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_x30 = 1 + CHASTE_CONST(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_x32 = 1 / (CHASTE_CONST(669921.875) + var_x27); + const double var_x33 = 1 / (CHASTE_CONST(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_x36 = var_x35 * (CHASTE_CONST(0.024332029034784559) * var_x29 + CHASTE_CONST(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_x38 = CHASTE_MATH::Pow(var_x37, CHASTE_CONST(1.5)); + const double var_x39 = 1 / (1 + CHASTE_CONST(31.622776601683793) * var_x38); + const double var_x40 = CHASTE_MATH::Exp(-CHASTE_CONST(0.0037433890822745476) * var_chaste_interface__membrane__V); + const double var_x41 = CHASTE_MATH::Exp(CHASTE_CONST(0.01485884101040119) * mParameters[5]); + const double var_x42 = CHASTE_CONST(0.037433890822745473) * var_chaste_interface__membrane__V; + const double var_x43 = CHASTE_MATH::Exp(-var_x42); + const double var_x44 = 1 + CHASTE_CONST(0.1245) * var_x40 + CHASTE_CONST(0.036499999999999998) * var_x43 * (-CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * var_x41); + const double var_x45 = CHASTE_MATH::Pow(var_x44, (-2)); + const double var_x46 = CHASTE_CONST(0.00046605194074318115) * var_x40 + CHASTE_CONST(0.037433890822745473) * var_x43 * (-CHASTE_CONST(0.0052142857142857138) + CHASTE_CONST(0.0052142857142857138) * var_x41); + const double var_x47 = 1 / (CHASTE_CONST(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_x52 = CHASTE_MATH::Exp(CHASTE_CONST(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_x55 = CHASTE_CONST(0.001) * var_x52 - CHASTE_CONST(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_x58 = 1 / (1 - CHASTE_CONST(54518.063995566983) * var_x57); + const double var_x59 = CHASTE_MATH::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_x65 = CHASTE_CONST(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_x71 = var_x26 * var_x34 * var_x70 / CHASTE_MATH::Pow(var_x30, 2); + const double var_x72 = CHASTE_MATH::Pow((1 + CHASTE_CONST(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_x74 = CHASTE_MATH::Pow((CHASTE_CONST(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_x78 = CHASTE_MATH::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_x80 = var_x63 * var_x75 * (CHASTE_CONST(4.0816465109550109) * var_x68 + CHASTE_CONST(54518.063995566983) * var_x56 - CHASTE_CONST(4081.6465109550109) * var_x79) / CHASTE_MATH::Pow((CHASTE_CONST(1.8342544226833014e-5) - var_x57), 2); + const double var_x81 = CHASTE_MATH::Pow(var_x60, (-2)); const double var_x82 = 1 / mParameters[7]; - const double var_x83 = 0.001 * var_x82; + const double var_x83 = CHASTE_CONST(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); + partialF = -var_x83 * (CHASTE_CONST(0.0034841999999999998) + var_x13 + var_x3 + var_x5 + CHASTE_CONST(0.5) * var_x17 + 5000 * var_x36 + CHASTE_CONST(0.0022160000000000001) * var_x2 + CHASTE_CONST(0.69299999999999995) * var_x49 + CHASTE_CONST(1.0816363254030779) * var_x69 + CHASTE_CONST(7.8283429051047759e-8) * var_x77 + CHASTE_CONST(0.00037056856187290968) * var_x10 + CHASTE_CONST(24.332029034784558) * var_x71 + CHASTE_CONST(7.035970683610309e-16) * var_x80 + CHASTE_CONST(14447.286958825252) * var_x66 + var_x18 * var_x22 + var_x51 * var_x65 - CHASTE_CONST(1081.636325403078) * var_x51 * var_x79 - CHASTE_CONST(0.014037709058529552) * var_x73 * mParameters[4] - CHASTE_CONST(7.8283429051047759e-8) * var_x51 * var_x58 * var_x59 * var_x63 * var_x81 * var_chaste_interface__membrane__V - CHASTE_CONST(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 { @@ -1144,7 +1146,7 @@ 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -1161,28 +1163,28 @@ // 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_Na_Ca_exchanger__K_mCa = CHASTE_CONST(1.3799999999999999); // millimolar + const double var_Na_Ca_exchanger__K_mNa = CHASTE_CONST(87.5); // millimolar + const double var_Na_Ca_exchanger__K_sat = CHASTE_CONST(0.20000000000000001); // dimensionless + const double var_Na_Ca_exchanger__eta = CHASTE_CONST(0.34999999999999998); // dimensionless + const double var_SERCA2a_pump__K_fb = CHASTE_CONST(0.00016799999999999999); // millimolar + const double var_SERCA2a_pump__K_rb = CHASTE_CONST(3.29); // millimolar + const double var_SERCA2a_pump__N_fb = CHASTE_CONST(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_SERCA2a_pump__Vmaxf = CHASTE_CONST(0.081299999999999997); // millimolar_per_second + const double var_SERCA2a_pump__Vmaxr = CHASTE_CONST(0.318); // millimolar_per_second + const double var_calcium_background_current__g_Cab = CHASTE_CONST(0.00038420000000000001); // milliS_per_microF + const double var_intracellular_Ca_fluxes__HTRPN_tot = CHASTE_CONST(0.14000000000000001); // dimensionless + const double var_intracellular_Ca_fluxes__LTRPN_tot = CHASTE_CONST(0.070000000000000007); // dimensionless + const double var_intracellular_Ca_fluxes__k_htrpn_minus = CHASTE_CONST(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_intracellular_Ca_fluxes__tau_xfer = CHASTE_CONST(0.026700000000000002); // second + const double var_intracellular_ion_concentrations__A_cap = CHASTE_CONST(0.00015339999999999999); // cm2 + const double var_intracellular_ion_concentrations__CMDN_tot = CHASTE_CONST(0.050000000000000003); // millimolar + const double var_SERCA2a_pump__rb = CHASTE_MATH::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 = CHASTE_MATH::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 @@ -1191,21 +1193,21 @@ 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_intracellular_ion_concentrations__K_mCMDN = CHASTE_CONST(0.0023800000000000002); // millimolar + const double var_intracellular_ion_concentrations__K_mEGTA = CHASTE_CONST(0.00014999999999999999); // millimolar + const double var_intracellular_ion_concentrations__V_myo = CHASTE_CONST(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 / CHASTE_MATH::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 / CHASTE_MATH::Pow((var_chaste_interface__intracellular_ion_concentrations__Cai + var_intracellular_ion_concentrations__K_mEGTA), 2)); // dimensionless + const double var_membrane__F = CHASTE_CONST(96.485341500000004); // coulomb_per_millimole + const double var_membrane__R = CHASTE_CONST(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_pCa = CHASTE_CONST(0.050000000000000003); // microA_per_microF + const double var_sarcolemmal_calcium_pump__K_mpCa = CHASTE_CONST(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__E_Ca = CHASTE_CONST(0.5) * var_membrane__R * var_membrane__T * CHASTE_MATH::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 + const double var_Na_Ca_exchanger__i_NaCa = 5000 * (CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Nai, 3) * mParameters[3] * CHASTE_MATH::Exp(var_Na_Ca_exchanger__eta * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - CHASTE_MATH::Pow(mParameters[5], 3) * var_chaste_interface__intracellular_ion_concentrations__Cai * CHASTE_MATH::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 * CHASTE_MATH::Exp((-1 + var_Na_Ca_exchanger__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (CHASTE_MATH::Pow(var_Na_Ca_exchanger__K_mNa, 3) + CHASTE_MATH::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 + CHASTE_CONST(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 = CHASTE_CONST(0.001) * var_intracellular_ion_concentrations__Cai_orig_deriv; // millimolar / millisecond return d_dt_chaste_interface_var_intracellular_ion_concentrations__Cai; } @@ -1215,7 +1217,7 @@ double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -1231,38 +1233,38 @@ // 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_x23 = CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Nai, 3); + const double var_x24 = CHASTE_MATH::Exp(CHASTE_CONST(0.013101861787960915) * var_chaste_interface__membrane__V); + const double var_x26 = CHASTE_MATH::Exp(-CHASTE_CONST(0.024332029034784559) * var_chaste_interface__membrane__V); + const double var_x27 = CHASTE_MATH::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_x30 = 1 + CHASTE_CONST(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_x32 = 1 / (CHASTE_CONST(669921.875) + var_x27); + const double var_x33 = 1 / (CHASTE_CONST(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_x84 = CHASTE_CONST(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_x87 = CHASTE_MATH::Pow(var_x84, (-2)); + const double var_x113 = CHASTE_CONST(0.0023800000000000002) + var_chaste_interface__intracellular_ion_concentrations__Cai; + const double var_x114 = 1 + CHASTE_CONST(0.00011900000000000002) / CHASTE_MATH::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_x116 = CHASTE_CONST(0.001) * var_x115; + const double var_x117 = CHASTE_CONST(0.0015381954438488301) * var_x85; + const double var_x118 = CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Cai, CHASTE_CONST(0.19999999999999996)); + const double var_x119 = CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Cai, CHASTE_CONST(1.2)); + const double var_x120 = CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Ca_NSR, 1); + const double var_x121 = 1 / (1 + CHASTE_CONST(33855.471141425078) * var_x119 + CHASTE_CONST(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; + const double var_x123 = CHASTE_MATH::Pow((CHASTE_CONST(2.9537323401073989e-5) + var_x119 + CHASTE_CONST(8.9779098483507565e-6) * var_x120), (-2)); + const double var_x124 = CHASTE_CONST(2752.4498037978587) * var_x119 - CHASTE_CONST(0.096656534954407292) * var_x120; + const double var_x125 = CHASTE_CONST(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)); + partialF = var_x116 * (-CHASTE_CONST(5637.4531835205999) - var_x117 + CHASTE_CONST(2800.0000000000005) * var_chaste_interface__intracellular_Ca_fluxes__HTRPNCa + CHASTE_CONST(2800.0000000000005) * var_chaste_interface__intracellular_Ca_fluxes__LTRPNCa - CHASTE_CONST(0.00015787156411954756) * var_x86 + CHASTE_CONST(0.0015381954438488301) * var_x87 * var_chaste_interface__intracellular_ion_concentrations__Cai - CHASTE_CONST(307.63908876976598) * var_x28 * var_x35 - CHASTE_CONST(3302.9397645574304) * var_x118 * var_x122 + CHASTE_CONST(3.5444788081288787e-5) * var_x118 * var_x123 * var_x124 * mParameters[1]) + CHASTE_CONST(2.3800000000000004e-7) * (CHASTE_CONST(2.8000000000000003) * var_chaste_interface__intracellular_Ca_fluxes__LTRPNCa + CHASTE_CONST(37.453183520599246) * var_chaste_interface__intracellular_ion_concentrations__Ca_ss + CHASTE_CONST(0.0092400000000000017) * var_chaste_interface__intracellular_Ca_fluxes__HTRPNCa + CHASTE_CONST(0.00015787156411954756) * CHASTE_MATH::Log(var_x86 * mParameters[3]) - CHASTE_CONST(37.453183520599246) * var_chaste_interface__intracellular_ion_concentrations__Cai - CHASTE_CONST(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) + CHASTE_CONST(307.63908876976598) * var_x31 * var_x32 * var_x33 * var_x70 * mParameters[14]) / (CHASTE_MATH::Pow(var_x113, 3) * CHASTE_MATH::Pow(var_x114, 2)); } else { @@ -1277,18 +1279,18 @@ 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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__E0_m = CHASTE_CONST(47.130000000000003) + var_chaste_interface__membrane__V; // millivolt + const double var_fast_sodium_current_m_gate__alpha_m = ((CHASTE_MATH::Abs(var_fast_sodium_current_m_gate__E0_m) < CHASTE_CONST(1.0000000000000001e-5)) ? (1000 / (CHASTE_CONST(0.10000000000000001) - CHASTE_CONST(0.0050000000000000001) * var_fast_sodium_current_m_gate__E0_m)) : (320 * var_fast_sodium_current_m_gate__E0_m / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(0.10000000000000001) * var_fast_sodium_current_m_gate__E0_m)))); // per_second + const double var_fast_sodium_current_m_gate__beta_m = 80 * CHASTE_MATH::Exp(-CHASTE_CONST(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 d_dt_chaste_interface_var_fast_sodium_current_m_gate__m = CHASTE_CONST(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; } @@ -1298,21 +1300,21 @@ double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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_x128 = CHASTE_MATH::Exp(-CHASTE_CONST(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_x131 = CHASTE_CONST(47.130000000000003) + var_chaste_interface__membrane__V; + const double var_x132 = (var_x130) && (CHASTE_MATH::Abs(var_x131) < CHASTE_CONST(1.0000000000000001e-5)); + const double var_x133 = CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V; + const double var_x134 = CHASTE_MATH::Exp(-CHASTE_CONST(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))); + partialF = CHASTE_CONST(0.001) * ((var_x132) ? (-var_x137 - 1000 / (-CHASTE_CONST(0.13565000000000002) - CHASTE_CONST(0.0050000000000000001) * var_chaste_interface__membrane__V)) : ((var_x130) ? (-var_x137 - var_x131 * var_x136) : (0))); } else { @@ -1327,19 +1329,19 @@ 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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__alpha_h = ((var_chaste_interface__membrane__V < -40) ? (135 * CHASTE_MATH::Exp(-CHASTE_CONST(11.764705882352942) + CHASTE_CONST(0.14705882352941177) * mParameters[10] - CHASTE_CONST(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 * CHASTE_MATH::Exp(CHASTE_CONST(0.079000000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.079000000000000001) * mParameters[10]) + 310000 * CHASTE_MATH::Exp(CHASTE_CONST(0.34999999999999998) * var_chaste_interface__membrane__V - CHASTE_CONST(0.34999999999999998) * mParameters[10])) : (CHASTE_CONST(7692.3076923076924) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.96036036036036043) + CHASTE_CONST(0.0900900900900901) * mParameters[10] - CHASTE_CONST(0.0900900900900901) * var_chaste_interface__membrane__V)))); // per_second + const double var_fast_sodium_current_h_gate__h_inf = CHASTE_CONST(0.01) * mParameters[9] + (1 - CHASTE_CONST(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 d_dt_chaste_interface_var_fast_sodium_current_h_gate__h = CHASTE_CONST(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; } @@ -1349,19 +1351,19 @@ double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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_x138 = CHASTE_MATH::Exp(-CHASTE_CONST(11.764705882352942) + CHASTE_CONST(0.14705882352941177) * mParameters[10] - CHASTE_CONST(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_x141 = CHASTE_MATH::Exp(CHASTE_CONST(0.079000000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.079000000000000001) * mParameters[10]); + const double var_x142 = CHASTE_MATH::Exp(CHASTE_CONST(0.34999999999999998) * var_chaste_interface__membrane__V - CHASTE_CONST(0.34999999999999998) * mParameters[10]); + const double var_x143 = CHASTE_MATH::Exp(-CHASTE_CONST(0.96036036036036043) + CHASTE_CONST(0.0900900900900901) * mParameters[10] - CHASTE_CONST(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; + const double var_x145 = ((var_x139) ? (3560 * var_x141 + 310000 * var_x142) : (CHASTE_CONST(7692.3076923076924) / var_x144)); + const double var_x146 = CHASTE_CONST(0.001) * var_x140 + CHASTE_CONST(0.001) * var_x145; partialF = -var_x146; } @@ -1378,19 +1380,19 @@ 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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__alpha_j = ((var_chaste_interface__membrane__V < -40) ? (1000 * (CHASTE_CONST(37.780000000000001) + var_chaste_interface__membrane__V) * (-127140 * CHASTE_MATH::Exp(CHASTE_CONST(0.24440000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.24440000000000001) * mParameters[10]) - CHASTE_CONST(3.4740000000000003e-5) * CHASTE_MATH::Exp(CHASTE_CONST(0.043909999999999998) * mParameters[10] - CHASTE_CONST(0.043909999999999998) * var_chaste_interface__membrane__V)) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(24.640530000000002) + CHASTE_CONST(0.311) * var_chaste_interface__membrane__V - CHASTE_CONST(0.311) * mParameters[10]))) : (0)); // per_second + const double var_fast_sodium_current_j_gate__beta_j = ((var_chaste_interface__membrane__V < -40) ? (CHASTE_CONST(121.2) * CHASTE_MATH::Exp(CHASTE_CONST(0.01052) * mParameters[10] - CHASTE_CONST(0.01052) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(5.5312920000000005) + CHASTE_CONST(0.13780000000000001) * mParameters[10] - CHASTE_CONST(0.13780000000000001) * var_chaste_interface__membrane__V))) : (300 * CHASTE_MATH::Exp(CHASTE_CONST(2.5349999999999999e-7) * mParameters[10] - CHASTE_CONST(2.5349999999999999e-7) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.2000000000000002) + CHASTE_CONST(0.10000000000000001) * mParameters[10] - CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V)))); // per_second + const double var_fast_sodium_current_j_gate__j_inf = CHASTE_CONST(0.01) * mParameters[9] + (1 - CHASTE_CONST(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 d_dt_chaste_interface_var_fast_sodium_current_j_gate__j = CHASTE_CONST(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; } @@ -1400,31 +1402,31 @@ double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_THIS(mFixedVoltage) : rY[0]); // Units: millivolt; Initial value: -96.1638 - const double var_x133 = 0.10000000000000001 * var_chaste_interface__membrane__V; + const double var_x133 = CHASTE_CONST(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_x153 = CHASTE_MATH::Exp(-CHASTE_CONST(5.5312920000000005) + CHASTE_CONST(0.13780000000000001) * mParameters[10] - CHASTE_CONST(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_x155 = CHASTE_MATH::Exp(CHASTE_CONST(0.01052) * mParameters[10] - CHASTE_CONST(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_x157 = CHASTE_MATH::Exp(-CHASTE_CONST(3.2000000000000002) - var_x133 + CHASTE_CONST(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_x159 = CHASTE_MATH::Exp(CHASTE_CONST(2.5349999999999999e-7) * mParameters[10] - CHASTE_CONST(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_x161 = ((var_x139) ? (CHASTE_CONST(121.2) * var_x156) : (300 * var_x160)); + const double var_x162 = CHASTE_CONST(37.780000000000001) + var_chaste_interface__membrane__V; + const double var_x163 = CHASTE_MATH::Exp(CHASTE_CONST(0.24440000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.24440000000000001) * mParameters[10]); + const double var_x164 = CHASTE_MATH::Exp(CHASTE_CONST(0.043909999999999998) * mParameters[10] - CHASTE_CONST(0.043909999999999998) * var_chaste_interface__membrane__V); + const double var_x165 = -127140 * var_x163 - CHASTE_CONST(3.4740000000000003e-5) * var_x164; + const double var_x166 = CHASTE_MATH::Exp(CHASTE_CONST(24.640530000000002) + CHASTE_CONST(0.311) * var_chaste_interface__membrane__V - CHASTE_CONST(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; + const double var_x171 = CHASTE_CONST(0.001) * var_x161 + CHASTE_CONST(0.001) * var_x170; partialF = -var_x171; } @@ -1441,20 +1443,20 @@ 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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__K12 = CHASTE_MATH::Exp(-CHASTE_CONST(5.4950000000000001) + CHASTE_CONST(0.1691) * var_chaste_interface__membrane__V); // dimensionless + const double var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__K21 = CHASTE_MATH::Exp(-CHASTE_CONST(7.6769999999999996) - CHASTE_CONST(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__tau_X_kr = CHASTE_CONST(0.001) / (var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__K12 + var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__K21) + CHASTE_CONST(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 d_dt_chaste_interface_var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr = CHASTE_CONST(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; } @@ -1464,17 +1466,17 @@ double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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_x176 = CHASTE_MATH::Exp(-CHASTE_CONST(7.6769999999999996) - CHASTE_CONST(0.012800000000000001) * var_chaste_interface__membrane__V); + const double var_x177 = CHASTE_MATH::Exp(-CHASTE_CONST(5.4950000000000001) + CHASTE_CONST(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); + const double var_x180 = 1 / (CHASTE_CONST(0.027) + CHASTE_CONST(0.001) * var_x179); - partialF = -0.001 * var_x180; + partialF = -CHASTE_CONST(0.001) * var_x180; } else { @@ -1489,17 +1491,17 @@ 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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_infinity = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.8161764705882353) - CHASTE_CONST(0.073529411764705885) * var_chaste_interface__membrane__V)); // dimensionless + const double var_slow_activating_delayed_rectifiyer_K_current_X_ks_gate__tau_X_ks = CHASTE_CONST(0.001) / (CHASTE_CONST(0.00013100000000000001) * (-10 + var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.68699999999999994) + CHASTE_CONST(0.068699999999999997) * var_chaste_interface__membrane__V)) + CHASTE_CONST(7.1899999999999999e-5) * (-10 + var_chaste_interface__membrane__V) / (1 - CHASTE_MATH::Exp(CHASTE_CONST(1.48) - CHASTE_CONST(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 d_dt_chaste_interface_var_slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks = CHASTE_CONST(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; } @@ -1509,19 +1511,19 @@ double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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_x185 = CHASTE_MATH::Exp(-CHASTE_CONST(0.68699999999999994) + CHASTE_CONST(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_x188 = CHASTE_MATH::Exp(CHASTE_CONST(1.48) - CHASTE_CONST(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; + partialF = -CHASTE_CONST(0.00013100000000000001) * var_x187 * var_x191 - CHASTE_CONST(7.1899999999999999e-5) * var_x190 * var_x191; } else { @@ -1536,17 +1538,17 @@ 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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__alpha_X_to1 = CHASTE_CONST(45.159999999999997) * CHASTE_MATH::Exp(CHASTE_CONST(0.035770000000000003) * var_chaste_interface__membrane__V); // per_second + const double var_transient_outward_potassium_current_X_to1_gate__beta_X_to1 = CHASTE_CONST(98.900000000000006) * CHASTE_MATH::Exp(-CHASTE_CONST(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 d_dt_chaste_interface_var_transient_outward_potassium_current_X_to1_gate__X_to1 = CHASTE_CONST(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; } @@ -1556,14 +1558,14 @@ double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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); + const double var_x192 = CHASTE_MATH::Exp(CHASTE_CONST(0.035770000000000003) * var_chaste_interface__membrane__V); + const double var_x193 = CHASTE_MATH::Exp(-CHASTE_CONST(0.062370000000000002) * var_chaste_interface__membrane__V); - partialF = -0.045159999999999999 * var_x192 - 0.098900000000000002 * var_x193; + partialF = -CHASTE_CONST(0.045159999999999999) * var_x192 - CHASTE_CONST(0.098900000000000002) * var_x193; } else { @@ -1578,17 +1580,17 @@ 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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__alpha_Y_to1 = CHASTE_CONST(5.415) * CHASTE_MATH::Exp(-CHASTE_CONST(6.7000000000000002) - CHASTE_CONST(0.20000000000000001) * var_chaste_interface__membrane__V) / (1 + CHASTE_CONST(0.051334999999999999) * CHASTE_MATH::Exp(-CHASTE_CONST(6.7000000000000002) - CHASTE_CONST(0.20000000000000001) * var_chaste_interface__membrane__V)); // per_second + const double var_transient_outward_potassium_current_Y_to1_gate__beta_Y_to1 = CHASTE_CONST(5.415) * CHASTE_MATH::Exp(CHASTE_CONST(6.7000000000000002) + CHASTE_CONST(0.20000000000000001) * var_chaste_interface__membrane__V) / (1 + CHASTE_CONST(0.051334999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(6.7000000000000002) + CHASTE_CONST(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 + const double d_dt_chaste_interface_var_transient_outward_potassium_current_Y_to1_gate__Y_to1 = CHASTE_CONST(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; } @@ -1598,20 +1600,20 @@ double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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_x194 = CHASTE_CONST(0.20000000000000001) * var_chaste_interface__membrane__V; + const double var_x195 = CHASTE_CONST(6.7000000000000002) + var_x194; + const double var_x196 = CHASTE_MATH::Exp(var_x195); + const double var_x197 = 1 + CHASTE_CONST(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_x200 = CHASTE_MATH::Exp(-var_x195); + const double var_x201 = 1 + CHASTE_CONST(0.051334999999999999) * var_x200; const double var_x202 = var_x200 / var_x201; - partialF = -0.0054149999999999997 * var_x198 - 0.0054149999999999997 * var_x202; + partialF = -CHASTE_CONST(0.0054149999999999997) * var_x198 - CHASTE_CONST(0.0054149999999999997) * var_x202; } else { @@ -1636,7 +1638,7 @@ 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 + const double d_dt_chaste_interface_var_L_type_Ca_current__O = CHASTE_CONST(0.001) * var_L_type_Ca_current__O_orig_deriv; // 1 / millisecond return d_dt_chaste_interface_var_L_type_Ca_current__O; } @@ -1674,7 +1676,7 @@ 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 + const double d_dt_chaste_interface_var_L_type_Ca_current__O_Ca = CHASTE_CONST(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; } @@ -1702,7 +1704,7 @@ 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -1716,11 +1718,11 @@ // 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__gamma = CHASTE_CONST(103.75) * var_chaste_interface__intracellular_ion_concentrations__Ca_ss; // per_second + const double var_L_type_Ca_current__alpha = 400 * CHASTE_MATH::Exp(CHASTE_CONST(0.20000000000000001) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V); // per_second + const double var_L_type_Ca_current__beta = 50 * CHASTE_MATH::Exp(-CHASTE_CONST(0.15384615384615385) - CHASTE_CONST(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 d_dt_chaste_interface_var_L_type_Ca_current__C0 = CHASTE_CONST(0.001) * var_L_type_Ca_current__C0_orig_deriv; // 1 / millisecond return d_dt_chaste_interface_var_L_type_Ca_current__C0; } @@ -1730,15 +1732,15 @@ double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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; + const double var_x205 = CHASTE_MATH::Exp(CHASTE_CONST(0.20000000000000001) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V); + const double var_x208 = CHASTE_CONST(1.6000000000000001) * var_x205; + const double var_x209 = CHASTE_CONST(0.10375) * var_chaste_interface__intracellular_ion_concentrations__Ca_ss; partialF = -var_x208 - var_x209; } @@ -1755,7 +1757,7 @@ 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -1773,11 +1775,11 @@ 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__gamma = CHASTE_CONST(103.75) * var_chaste_interface__intracellular_ion_concentrations__Ca_ss; // per_second + const double var_L_type_Ca_current__alpha = 400 * CHASTE_MATH::Exp(CHASTE_CONST(0.20000000000000001) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V); // per_second + const double var_L_type_Ca_current__beta = 50 * CHASTE_MATH::Exp(-CHASTE_CONST(0.15384615384615385) - CHASTE_CONST(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 + const double d_dt_chaste_interface_var_L_type_Ca_current__C1 = CHASTE_CONST(0.001) * var_L_type_Ca_current__C1_orig_deriv; // 1 / millisecond return d_dt_chaste_interface_var_L_type_Ca_current__C1; } @@ -1787,17 +1789,17 @@ double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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; + const double var_x203 = CHASTE_MATH::Exp(-CHASTE_CONST(0.15384615384615385) - CHASTE_CONST(0.076923076923076927) * var_chaste_interface__membrane__V); + const double var_x205 = CHASTE_MATH::Exp(CHASTE_CONST(0.20000000000000001) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V); + const double var_x210 = CHASTE_CONST(0.050000000000000003) * var_x203; + const double var_x214 = CHASTE_CONST(1.2) * var_x205; + const double var_x215 = CHASTE_CONST(0.20749999999999999) * var_chaste_interface__intracellular_ion_concentrations__Ca_ss; partialF = -var_x210 - var_x214 - var_x215; } @@ -1814,7 +1816,7 @@ 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -1832,11 +1834,11 @@ 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 + const double var_L_type_Ca_current__gamma = CHASTE_CONST(103.75) * var_chaste_interface__intracellular_ion_concentrations__Ca_ss; // per_second + const double var_L_type_Ca_current__alpha = 400 * CHASTE_MATH::Exp(CHASTE_CONST(0.20000000000000001) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V); // per_second + const double var_L_type_Ca_current__beta = 50 * CHASTE_MATH::Exp(-CHASTE_CONST(0.15384615384615385) - CHASTE_CONST(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 + CHASTE_MATH::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 / CHASTE_MATH::Pow(var_L_type_Ca_current__b, 2); // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_current__C2 = CHASTE_CONST(0.001) * var_L_type_Ca_current__C2_orig_deriv; // 1 / millisecond return d_dt_chaste_interface_var_L_type_Ca_current__C2; } @@ -1846,17 +1848,17 @@ double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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; + const double var_x203 = CHASTE_MATH::Exp(-CHASTE_CONST(0.15384615384615385) - CHASTE_CONST(0.076923076923076927) * var_chaste_interface__membrane__V); + const double var_x205 = CHASTE_MATH::Exp(CHASTE_CONST(0.20000000000000001) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V); + const double var_x216 = CHASTE_CONST(0.10000000000000001) * var_x203; + const double var_x220 = CHASTE_CONST(0.80000000000000004) * var_x205; + const double var_x221 = CHASTE_CONST(0.41499999999999998) * var_chaste_interface__intracellular_ion_concentrations__Ca_ss; partialF = -var_x216 - var_x220 - var_x221; } @@ -1873,7 +1875,7 @@ 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -1891,11 +1893,11 @@ 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 + const double var_L_type_Ca_current__gamma = CHASTE_CONST(103.75) * var_chaste_interface__intracellular_ion_concentrations__Ca_ss; // per_second + const double var_L_type_Ca_current__alpha = 400 * CHASTE_MATH::Exp(CHASTE_CONST(0.20000000000000001) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V); // per_second + const double var_L_type_Ca_current__beta = 50 * CHASTE_MATH::Exp(-CHASTE_CONST(0.15384615384615385) - CHASTE_CONST(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 + CHASTE_MATH::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 / CHASTE_MATH::Pow(var_L_type_Ca_current__b, 3); // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_current__C3 = CHASTE_CONST(0.001) * var_L_type_Ca_current__C3_orig_deriv; // 1 / millisecond return d_dt_chaste_interface_var_L_type_Ca_current__C3; } @@ -1905,17 +1907,17 @@ double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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; + const double var_x203 = CHASTE_MATH::Exp(-CHASTE_CONST(0.15384615384615385) - CHASTE_CONST(0.076923076923076927) * var_chaste_interface__membrane__V); + const double var_x205 = CHASTE_MATH::Exp(CHASTE_CONST(0.20000000000000001) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V); + const double var_x222 = CHASTE_CONST(0.14999999999999999) * var_x203; + const double var_x226 = CHASTE_CONST(0.40000000000000002) * var_x205; + const double var_x227 = CHASTE_CONST(0.82999999999999996) * var_chaste_interface__intracellular_ion_concentrations__Ca_ss; partialF = -var_x222 - var_x226 - var_x227; } @@ -1932,7 +1934,7 @@ 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -1952,11 +1954,11 @@ 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 + const double var_L_type_Ca_current__gamma = CHASTE_CONST(103.75) * var_chaste_interface__intracellular_ion_concentrations__Ca_ss; // per_second + const double var_L_type_Ca_current__alpha = 400 * CHASTE_MATH::Exp(CHASTE_CONST(0.20000000000000001) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V); // per_second + const double var_L_type_Ca_current__beta = 50 * CHASTE_MATH::Exp(-CHASTE_CONST(0.15384615384615385) - CHASTE_CONST(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 + CHASTE_MATH::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 / CHASTE_MATH::Pow(var_L_type_Ca_current__b, 4); // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_current__C4 = CHASTE_CONST(0.001) * var_L_type_Ca_current__C4_orig_deriv; // 1 / millisecond return d_dt_chaste_interface_var_L_type_Ca_current__C4; } @@ -1966,17 +1968,17 @@ double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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; + const double var_x203 = CHASTE_MATH::Exp(-CHASTE_CONST(0.15384615384615385) - CHASTE_CONST(0.076923076923076927) * var_chaste_interface__membrane__V); + const double var_x228 = CHASTE_CONST(0.20000000000000001) * var_x203; + const double var_x230 = CHASTE_CONST(1.6599999999999999) * var_chaste_interface__intracellular_ion_concentrations__Ca_ss; - partialF = -0.29999999999999999 - var_x228 - var_x230; + partialF = -CHASTE_CONST(0.29999999999999999) - var_x228 - var_x230; } else { @@ -1991,7 +1993,7 @@ 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -2007,13 +2009,13 @@ 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__gamma = CHASTE_CONST(103.75) * var_chaste_interface__intracellular_ion_concentrations__Ca_ss; // per_second + const double var_L_type_Ca_current__alpha = 400 * CHASTE_MATH::Exp(CHASTE_CONST(0.20000000000000001) + CHASTE_CONST(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 = 50 * CHASTE_MATH::Exp(-CHASTE_CONST(0.15384615384615385) - CHASTE_CONST(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 + const double d_dt_chaste_interface_var_L_type_Ca_current__C_Ca0 = CHASTE_CONST(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; } @@ -2023,14 +2025,14 @@ double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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; + const double var_x205 = CHASTE_MATH::Exp(CHASTE_CONST(0.20000000000000001) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V); + const double var_x234 = CHASTE_CONST(3.2000000000000002) * var_x205; - partialF = -0.01 - var_x234; + partialF = -CHASTE_CONST(0.01) - var_x234; } else { @@ -2045,7 +2047,7 @@ 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -2063,13 +2065,13 @@ 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__gamma = CHASTE_CONST(103.75) * var_chaste_interface__intracellular_ion_concentrations__Ca_ss; // per_second + const double var_L_type_Ca_current__alpha = 400 * CHASTE_MATH::Exp(CHASTE_CONST(0.20000000000000001) + CHASTE_CONST(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 = 50 * CHASTE_MATH::Exp(-CHASTE_CONST(0.15384615384615385) - CHASTE_CONST(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 + const double d_dt_chaste_interface_var_L_type_Ca_current__C_Ca1 = CHASTE_CONST(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; } @@ -2079,16 +2081,16 @@ double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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; + const double var_x203 = CHASTE_MATH::Exp(-CHASTE_CONST(0.15384615384615385) - CHASTE_CONST(0.076923076923076927) * var_chaste_interface__membrane__V); + const double var_x205 = CHASTE_MATH::Exp(CHASTE_CONST(0.20000000000000001) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V); + const double var_x235 = CHASTE_CONST(0.025000000000000001) * var_x203; + const double var_x237 = CHASTE_CONST(2.3999999999999999) * var_x205; - partialF = -0.0050000000000000001 - var_x235 - var_x237; + partialF = -CHASTE_CONST(0.0050000000000000001) - var_x235 - var_x237; } else { @@ -2103,7 +2105,7 @@ 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -2121,13 +2123,13 @@ 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__gamma = CHASTE_CONST(103.75) * var_chaste_interface__intracellular_ion_concentrations__Ca_ss; // per_second + const double var_L_type_Ca_current__alpha = 400 * CHASTE_MATH::Exp(CHASTE_CONST(0.20000000000000001) + CHASTE_CONST(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 = 50 * CHASTE_MATH::Exp(-CHASTE_CONST(0.15384615384615385) - CHASTE_CONST(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 + 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 / CHASTE_MATH::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 + CHASTE_MATH::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 = CHASTE_CONST(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; } @@ -2137,16 +2139,16 @@ double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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; + const double var_x203 = CHASTE_MATH::Exp(-CHASTE_CONST(0.15384615384615385) - CHASTE_CONST(0.076923076923076927) * var_chaste_interface__membrane__V); + const double var_x205 = CHASTE_MATH::Exp(CHASTE_CONST(0.20000000000000001) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V); + const double var_x208 = CHASTE_CONST(1.6000000000000001) * var_x205; + const double var_x210 = CHASTE_CONST(0.050000000000000003) * var_x203; - partialF = -0.0025000000000000001 - var_x208 - var_x210; + partialF = -CHASTE_CONST(0.0025000000000000001) - var_x208 - var_x210; } else { @@ -2161,7 +2163,7 @@ 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -2179,13 +2181,13 @@ 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__gamma = CHASTE_CONST(103.75) * var_chaste_interface__intracellular_ion_concentrations__Ca_ss; // per_second + const double var_L_type_Ca_current__alpha = 400 * CHASTE_MATH::Exp(CHASTE_CONST(0.20000000000000001) + CHASTE_CONST(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 = 50 * CHASTE_MATH::Exp(-CHASTE_CONST(0.15384615384615385) - CHASTE_CONST(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 + 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 / CHASTE_MATH::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 + CHASTE_MATH::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 = CHASTE_CONST(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; } @@ -2195,16 +2197,16 @@ double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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; + const double var_x203 = CHASTE_MATH::Exp(-CHASTE_CONST(0.15384615384615385) - CHASTE_CONST(0.076923076923076927) * var_chaste_interface__membrane__V); + const double var_x205 = CHASTE_MATH::Exp(CHASTE_CONST(0.20000000000000001) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V); + const double var_x220 = CHASTE_CONST(0.80000000000000004) * var_x205; + const double var_x238 = CHASTE_CONST(0.074999999999999997) * var_x203; - partialF = -0.00125 - var_x220 - var_x238; + partialF = -CHASTE_CONST(0.00125) - var_x220 - var_x238; } else { @@ -2219,7 +2221,7 @@ 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -2239,13 +2241,13 @@ 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__gamma = CHASTE_CONST(103.75) * var_chaste_interface__intracellular_ion_concentrations__Ca_ss; // per_second + const double var_L_type_Ca_current__alpha = 400 * CHASTE_MATH::Exp(CHASTE_CONST(0.20000000000000001) + CHASTE_CONST(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 = 50 * CHASTE_MATH::Exp(-CHASTE_CONST(0.15384615384615385) - CHASTE_CONST(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 + 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 / CHASTE_MATH::Pow(var_L_type_Ca_current__b, 4) + var_L_type_Ca_current__fprime) * var_chaste_interface__L_type_Ca_current__C_Ca4 + CHASTE_MATH::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 = CHASTE_CONST(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; } @@ -2255,14 +2257,14 @@ double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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; + const double var_x203 = CHASTE_MATH::Exp(-CHASTE_CONST(0.15384615384615385) - CHASTE_CONST(0.076923076923076927) * var_chaste_interface__membrane__V); + const double var_x216 = CHASTE_CONST(0.10000000000000001) * var_x203; - partialF = -0.0076249999999999998 - var_x216; + partialF = -CHASTE_CONST(0.0076249999999999998) - var_x216; } else { @@ -2277,17 +2279,17 @@ 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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__tau_y = CHASTE_CONST(0.02) + CHASTE_CONST(0.59999999999999998) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(2.1052631578947367) + CHASTE_CONST(0.10526315789473684) * var_chaste_interface__membrane__V)); // second + const double var_L_type_Ca_current_y_gate__y_infinity = CHASTE_CONST(0.20000000000000001) + CHASTE_CONST(0.80000000000000004) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(2.5) + CHASTE_CONST(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 d_dt_chaste_interface_var_L_type_Ca_current_y_gate__y = CHASTE_CONST(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; } @@ -2297,16 +2299,16 @@ double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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_x242 = CHASTE_MATH::Exp(CHASTE_CONST(2.1052631578947367) + CHASTE_CONST(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); + const double var_x245 = 1 / (CHASTE_CONST(0.02) + CHASTE_CONST(0.59999999999999998) * var_x244); - partialF = -0.001 * var_x245; + partialF = -CHASTE_CONST(0.001) * var_x245; } else { @@ -2335,15 +2337,15 @@ // 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_a_plus = CHASTE_CONST(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_b_plus = CHASTE_CONST(4050000000.0); // millimolar3_per_second + const double var_RyR_channel__k_c_minus = CHASTE_CONST(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 + 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 + CHASTE_MATH::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 - CHASTE_MATH::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 = CHASTE_CONST(0.001) * var_RyR_channel__P_O1_orig_deriv; // 1 / millisecond return d_dt_chaste_interface_var_RyR_channel__P_O1; } @@ -2357,10 +2359,10 @@ // Units: millimolar; Initial value: 0.00011 - const double var_x246 = pow(var_chaste_interface__intracellular_ion_concentrations__Ca_ss, 3); + const double var_x246 = CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Ca_ss, 3); const double var_x247 = 4050000 * var_x246; - partialF = -0.67600000000000005 - var_x247; + partialF = -CHASTE_CONST(0.67600000000000005) - var_x247; } else { @@ -2385,10 +2387,10 @@ // 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__k_b_plus = CHASTE_CONST(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 + const double var_RyR_channel__P_O2_orig_deriv = -var_chaste_interface__RyR_channel__P_O2 * var_RyR_channel__k_b_minus + CHASTE_MATH::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 = CHASTE_CONST(0.001) * var_RyR_channel__P_O2_orig_deriv; // 1 / millisecond return d_dt_chaste_interface_var_RyR_channel__P_O2; } @@ -2401,7 +2403,7 @@ - partialF = -1.9299999999999999; + partialF = -CHASTE_CONST(1.9299999999999999); } else { @@ -2426,10 +2428,10 @@ // 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_a_plus = CHASTE_CONST(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 + const double var_RyR_channel__P_C1_orig_deriv = var_chaste_interface__RyR_channel__P_O1 * var_RyR_channel__k_a_minus - CHASTE_MATH::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 = CHASTE_CONST(0.001) * var_RyR_channel__P_C1_orig_deriv; // 1 / millisecond return d_dt_chaste_interface_var_RyR_channel__P_C1; } @@ -2443,7 +2445,7 @@ // Units: millimolar; Initial value: 0.00011 - const double var_x248 = 12150000000.0 * pow(var_chaste_interface__intracellular_ion_concentrations__Ca_ss, 4); + const double var_x248 = CHASTE_CONST(12150000000.0) * CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Ca_ss, 4); partialF = -var_x248; } @@ -2467,10 +2469,10 @@ // Mathematics - const double var_RyR_channel__k_c_minus = 0.80000000000000004; // per_second + const double var_RyR_channel__k_c_minus = CHASTE_CONST(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 d_dt_chaste_interface_var_RyR_channel__P_C2 = CHASTE_CONST(0.001) * var_RyR_channel__P_C2_orig_deriv; // 1 / millisecond return d_dt_chaste_interface_var_RyR_channel__P_C2; } @@ -2483,7 +2485,7 @@ - partialF = -0.00080000000000000004; + partialF = -CHASTE_CONST(0.00080000000000000004); } else { @@ -2505,10 +2507,10 @@ // Mathematics - const double var_intracellular_Ca_fluxes__k_htrpn_minus = 0.066000000000000003; // per_second + const double var_intracellular_Ca_fluxes__k_htrpn_minus = CHASTE_CONST(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 + const double d_dt_chaste_interface_var_intracellular_Ca_fluxes__HTRPNCa = CHASTE_CONST(0.001) * var_intracellular_Ca_fluxes__HTRPNCa_orig_deriv; // millimolar / millisecond return d_dt_chaste_interface_var_intracellular_Ca_fluxes__HTRPNCa; } @@ -2523,7 +2525,7 @@ - partialF = -6.6000000000000005e-5 - 20 * var_chaste_interface__intracellular_ion_concentrations__Cai; + partialF = -CHASTE_CONST(6.6000000000000005e-5) - 20 * var_chaste_interface__intracellular_ion_concentrations__Cai; } else { @@ -2548,7 +2550,7 @@ 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 + const double d_dt_chaste_interface_var_intracellular_Ca_fluxes__LTRPNCa = CHASTE_CONST(0.001) * var_intracellular_Ca_fluxes__LTRPNCa_orig_deriv; // millimolar / millisecond return d_dt_chaste_interface_var_intracellular_Ca_fluxes__LTRPNCa; } @@ -2563,7 +2565,7 @@ - partialF = -0.040000000000000001 - 40 * var_chaste_interface__intracellular_ion_concentrations__Cai; + partialF = -CHASTE_CONST(0.040000000000000001) - 40 * var_chaste_interface__intracellular_ion_concentrations__Cai; } else { @@ -2578,7 +2580,7 @@ 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -2593,28 +2595,28 @@ // 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_Na_Ca_exchanger__K_mCa = CHASTE_CONST(1.3799999999999999); // millimolar + const double var_Na_Ca_exchanger__K_mNa = CHASTE_CONST(87.5); // millimolar + const double var_Na_Ca_exchanger__K_sat = CHASTE_CONST(0.20000000000000001); // dimensionless + const double var_Na_Ca_exchanger__eta = CHASTE_CONST(0.34999999999999998); // dimensionless + const double var_intracellular_ion_concentrations__A_cap = CHASTE_CONST(0.00015339999999999999); // cm2 + const double var_intracellular_ion_concentrations__V_myo = CHASTE_CONST(2.584e-5); // micro_litre + const double var_membrane__F = CHASTE_CONST(96.485341500000004); // coulomb_per_millimole + const double var_membrane__R = CHASTE_CONST(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_background_current__g_Nab = CHASTE_CONST(0.0030999999999999999); // milliS_per_microF + const double var_sodium_potassium_pump__I_NaK = CHASTE_CONST(0.69299999999999995); // microA_per_microF + const double var_sodium_potassium_pump__K_mKo = CHASTE_CONST(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_Na_Ca_exchanger__i_NaCa = 5000 * (CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Nai, 3) * mParameters[3] * CHASTE_MATH::Exp(var_Na_Ca_exchanger__eta * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - CHASTE_MATH::Pow(mParameters[5], 3) * var_chaste_interface__intracellular_ion_concentrations__Cai * CHASTE_MATH::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 * CHASTE_MATH::Exp((-1 + var_Na_Ca_exchanger__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (CHASTE_MATH::Pow(var_Na_Ca_exchanger__K_mNa, 3) + CHASTE_MATH::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 * CHASTE_MATH::Log(mParameters[5] / var_chaste_interface__intracellular_ion_concentrations__Nai) / var_membrane__F; // millivolt + const double var_fast_sodium_current__i_Na = CHASTE_MATH::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_sodium_potassium_pump__sigma = -CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(0.01485884101040119) * mParameters[5]); // dimensionless + const double var_sodium_potassium_pump__f_NaK = 1 / (1 + CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(0.10000000000000001) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) + CHASTE_CONST(0.036499999999999998) * var_sodium_potassium_pump__sigma * CHASTE_MATH::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 + CHASTE_MATH::Pow((var_sodium_potassium_pump__K_mNai / var_chaste_interface__intracellular_ion_concentrations__Nai), CHASTE_CONST(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 d_dt_chaste_interface_var_intracellular_ion_concentrations__Nai = CHASTE_CONST(0.001) * var_intracellular_ion_concentrations__Nai_orig_deriv; // millimolar / millisecond return d_dt_chaste_interface_var_intracellular_ion_concentrations__Nai; } @@ -2624,7 +2626,7 @@ double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -2636,35 +2638,35 @@ // Units: millimolar; Initial value: 10.0 - const double var_x11 = pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3); + const double var_x11 = CHASTE_MATH::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_x24 = CHASTE_MATH::Exp(CHASTE_CONST(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_x26 = CHASTE_MATH::Exp(-CHASTE_CONST(0.024332029034784559) * var_chaste_interface__membrane__V); + const double var_x27 = CHASTE_MATH::Pow(mParameters[5], 3); + const double var_x30 = 1 + CHASTE_CONST(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_x32 = 1 / (CHASTE_CONST(669921.875) + var_x27); + const double var_x33 = 1 / (CHASTE_CONST(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_x38 = CHASTE_MATH::Pow(var_x37, CHASTE_CONST(1.5)); + const double var_x40 = CHASTE_MATH::Exp(-CHASTE_CONST(0.0037433890822745476) * var_chaste_interface__membrane__V); + const double var_x41 = CHASTE_MATH::Exp(CHASTE_CONST(0.01485884101040119) * mParameters[5]); + const double var_x42 = CHASTE_CONST(0.037433890822745473) * var_chaste_interface__membrane__V; + const double var_x43 = CHASTE_MATH::Exp(-var_x42); + const double var_x44 = 1 + CHASTE_CONST(0.1245) * var_x40 + CHASTE_CONST(0.036499999999999998) * var_x43 * (-CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * var_x41); + const double var_x47 = 1 / (CHASTE_CONST(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_x104 = CHASTE_MATH::Pow((CHASTE_CONST(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); + const double var_x107 = var_x25 * var_x35 * CHASTE_MATH::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]; + partialF = (-CHASTE_CONST(5.0952821319166834e-6) * var_x37 - CHASTE_CONST(2.768751798927894) * var_x107 - CHASTE_CONST(6.0676044384883792e-6) * var_x106 - CHASTE_CONST(0.0016436393973924784) * var_x103) * mParameters[2]; } else { @@ -2679,7 +2681,7 @@ 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -2702,37 +2704,37 @@ // 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_L_type_Ca_current__P_K = CHASTE_CONST(5.7899999999999998e-7); // cm_per_second + const double var_L_type_Ca_current__i_Ca_half = -CHASTE_CONST(0.26500000000000001); // microA_per_microF + const double var_intracellular_ion_concentrations__A_cap = CHASTE_CONST(0.00015339999999999999); // cm2 + const double var_intracellular_ion_concentrations__V_myo = CHASTE_CONST(2.584e-5); // micro_litre + const double var_membrane__F = CHASTE_CONST(96.485341500000004); // coulomb_per_millimole + const double var_membrane__R = CHASTE_CONST(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_plateau_potassium_current__g_Kp = CHASTE_CONST(0.0022160000000000001); // milliS_per_microF + const double var_plateau_potassium_current_Kp_gate__Kp_V = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.2521739130434781) - CHASTE_CONST(0.16722408026755853) * var_chaste_interface__membrane__V)); // dimensionless + const double var_rapid_activating_delayed_rectifiyer_K_current__R_V = 1 / (1 + CHASTE_CONST(1.4944999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(0.044600000000000001) * var_chaste_interface__membrane__V)); // dimensionless + const double var_sodium_potassium_pump__I_NaK = CHASTE_CONST(0.69299999999999995); // microA_per_microF + const double var_sodium_potassium_pump__K_mKo = CHASTE_CONST(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_max = 4000 * CHASTE_MATH::Pow(var_membrane__F, 2) * (CHASTE_CONST(0.001) * CHASTE_MATH::Exp(2 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - CHASTE_CONST(0.34100000000000003) * mParameters[3]) * mParameters[6] * var_chaste_interface__membrane__V / ((-1 + CHASTE_MATH::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_L_type_Ca_current__i_Ca_K = CHASTE_MATH::Pow(var_membrane__F, 2) * (-mParameters[4] + var_chaste_interface__intracellular_ion_concentrations__Ki * CHASTE_MATH::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 + CHASTE_MATH::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 * CHASTE_MATH::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__f_Ko = CHASTE_CONST(0.5) * CHASTE_MATH::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_slow_activating_delayed_rectifiyer_K_current__E_Ks = var_membrane__R * var_membrane__T * CHASTE_MATH::Log((mParameters[4] + CHASTE_CONST(0.018329999999999999) * mParameters[5]) / (var_chaste_interface__intracellular_ion_concentrations__Ki + CHASTE_CONST(0.018329999999999999) * var_chaste_interface__intracellular_ion_concentrations__Nai)) / var_membrane__F; // millivolt + const double var_slow_activating_delayed_rectifiyer_K_current__i_Ks = CHASTE_MATH::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 = -CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(0.01485884101040119) * mParameters[5]); // dimensionless + const double var_sodium_potassium_pump__f_NaK = 1 / (1 + CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(0.10000000000000001) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) + CHASTE_CONST(0.036499999999999998) * var_sodium_potassium_pump__sigma * CHASTE_MATH::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 + CHASTE_MATH::Pow((var_sodium_potassium_pump__K_mNai / var_chaste_interface__intracellular_ion_concentrations__Nai), CHASTE_CONST(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_K1_gate__K1_infinity_V = 1 / (2 + CHASTE_MATH::Exp(CHASTE_CONST(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 + const double d_dt_chaste_interface_var_intracellular_ion_concentrations__Ki = CHASTE_CONST(0.001) * var_intracellular_ion_concentrations__Ki_orig_deriv; // millimolar / millisecond return d_dt_chaste_interface_var_intracellular_ion_concentrations__Ki; } @@ -2742,7 +2744,7 @@ double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -2764,41 +2766,41 @@ // Units: millimolar; Initial value: 157.8 - const double var_x0 = exp(1.2521739130434781 - 0.16722408026755853 * var_chaste_interface__membrane__V); + const double var_x0 = CHASTE_MATH::Exp(CHASTE_CONST(1.2521739130434781) - CHASTE_CONST(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_x3 = CHASTE_MATH::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_x8 = CHASTE_MATH::Log(var_x7); + const double var_x9 = -CHASTE_CONST(26.713760659695648) * var_x8 + var_chaste_interface__membrane__V; + const double var_x14 = CHASTE_MATH::Exp(CHASTE_CONST(0.044600000000000001) * var_chaste_interface__membrane__V); + const double var_x15 = CHASTE_MATH::Sqrt(mParameters[4]); + const double var_x16 = var_x15 * mParameters[12] / (1 + CHASTE_CONST(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_x19 = CHASTE_MATH::Exp(CHASTE_CONST(0.056150836234118207) * var_chaste_interface__membrane__V - CHASTE_CONST(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_x42 = CHASTE_CONST(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_x52 = CHASTE_MATH::Exp(CHASTE_CONST(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_x55 = CHASTE_CONST(0.001) * var_x52 - CHASTE_CONST(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_x58 = 1 / (1 - CHASTE_CONST(54518.063995566983) * var_x57); + const double var_x59 = CHASTE_MATH::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_x72 = CHASTE_MATH::Pow((1 + CHASTE_CONST(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_x95 = 1 / (var_chaste_interface__intracellular_ion_concentrations__Ki + CHASTE_CONST(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; @@ -2806,7 +2808,7 @@ 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]; + partialF = (-CHASTE_CONST(3.6423049046217326e-6) * var_x108 - CHASTE_CONST(1.28669728151281e-10) * var_x112 - CHASTE_CONST(0.00082181969869623921) * var_x110 - CHASTE_CONST(0.0016436393973924784) * var_x102 - CHASTE_CONST(0.0016436393973924784) * var_x109 - CHASTE_CONST(0.0016436393973924784) * var_x111 + CHASTE_CONST(2.3072931657732449e-5) * var_x19 * var_x20 * var_x6 * var_x72 * var_x9 * mParameters[4] * mParameters[11]) * mParameters[2]; } else { @@ -2821,7 +2823,7 @@ 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -2842,25 +2844,25 @@ // 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_intracellular_Ca_fluxes__tau_xfer = CHASTE_CONST(0.026700000000000002); // second + const double var_intracellular_ion_concentrations__A_cap = CHASTE_CONST(0.00015339999999999999); // cm2 + const double var_intracellular_ion_concentrations__CMDN_tot = CHASTE_CONST(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_intracellular_ion_concentrations__K_mCMDN = CHASTE_CONST(0.0023800000000000002); // millimolar + const double var_intracellular_ion_concentrations__K_mEGTA = CHASTE_CONST(0.00014999999999999999); // millimolar + const double var_intracellular_ion_concentrations__V_JSR = CHASTE_CONST(1.6e-7); // micro_litre + const double var_intracellular_ion_concentrations__V_SS = CHASTE_CONST(1.2e-9); // micro_litre + const double var_intracellular_ion_concentrations__V_myo = CHASTE_CONST(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 / CHASTE_MATH::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 / CHASTE_MATH::Pow((var_chaste_interface__intracellular_ion_concentrations__Ca_ss + var_intracellular_ion_concentrations__K_mEGTA), 2)); // dimensionless + const double var_membrane__F = CHASTE_CONST(96.485341500000004); // coulomb_per_millimole + const double var_membrane__R = CHASTE_CONST(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_max = 4000 * CHASTE_MATH::Pow(var_membrane__F, 2) * (CHASTE_CONST(0.001) * CHASTE_MATH::Exp(2 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - CHASTE_CONST(0.34100000000000003) * mParameters[3]) * mParameters[6] * var_chaste_interface__membrane__V / ((-1 + CHASTE_MATH::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 + 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 - CHASTE_CONST(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 = CHASTE_CONST(0.001) * var_intracellular_ion_concentrations__Ca_ss_orig_deriv; // millimolar / millisecond return d_dt_chaste_interface_var_intracellular_ion_concentrations__Ca_ss; } @@ -2870,7 +2872,7 @@ double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -2892,21 +2894,21 @@ 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_x52 = CHASTE_MATH::Exp(CHASTE_CONST(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_x55 = CHASTE_CONST(0.001) * var_x52 - CHASTE_CONST(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_x257 = CHASTE_CONST(0.0023800000000000002) + var_chaste_interface__intracellular_ion_concentrations__Ca_ss; + const double var_x258 = 1 + CHASTE_CONST(0.00011900000000000002) / CHASTE_MATH::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_x260 = CHASTE_CONST(0.001) * var_x259; + const double var_x265 = CHASTE_CONST(133.33333333333334) * var_chaste_interface__RyR_channel__P_O1 + CHASTE_CONST(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)); + partialF = var_x260 * (-CHASTE_CONST(806491.88514357049) - var_x265 * mParameters[0]) + CHASTE_CONST(2.3800000000000004e-7) * (CHASTE_CONST(806491.88514357049) * var_chaste_interface__intracellular_ion_concentrations__Cai - CHASTE_CONST(806491.88514357049) * var_chaste_interface__intracellular_ion_concentrations__Ca_ss - CHASTE_CONST(9570598.0870152581) * var_x51 * var_x57 + CHASTE_CONST(133.33333333333334) * var_x266 * var_x267 * mParameters[0]) / (CHASTE_MATH::Pow(var_x257, 3) * CHASTE_MATH::Pow(var_x258, 2)); } else { @@ -2934,14 +2936,14 @@ // Mathematics - const double var_intracellular_Ca_fluxes__tau_tr = 0.00057470000000000004; // second + const double var_intracellular_Ca_fluxes__tau_tr = CHASTE_CONST(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__K_mCSQN = CHASTE_CONST(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 / CHASTE_MATH::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 d_dt_chaste_interface_var_intracellular_ion_concentrations__Ca_JSR = CHASTE_CONST(0.001) * var_intracellular_ion_concentrations__Ca_JSR_orig_deriv; // millimolar / millisecond return d_dt_chaste_interface_var_intracellular_ion_concentrations__Ca_JSR; } @@ -2965,13 +2967,13 @@ 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_x268 = CHASTE_CONST(0.80000000000000004) + var_chaste_interface__intracellular_ion_concentrations__Ca_JSR; + const double var_x269 = CHASTE_MATH::Pow(var_x268, (-2)); const double var_x270 = 1 / (1 + 12 * var_x269); - const double var_x271 = 0.001 * var_x270; + const double var_x271 = CHASTE_CONST(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)); + partialF = var_x271 * (-CHASTE_CONST(1740.0382808421784) - var_x267 * mParameters[0]) + CHASTE_CONST(0.00016666666666666666) * (CHASTE_CONST(1740.0382808421784) * var_chaste_interface__intracellular_ion_concentrations__Ca_NSR - CHASTE_CONST(1740.0382808421784) * var_chaste_interface__intracellular_ion_concentrations__Ca_JSR - var_x266 * var_x273) / (CHASTE_MATH::Pow(var_x268, 3) * CHASTE_MATH::Pow((CHASTE_CONST(0.083333333333333329) + var_x269), 2)); } else { @@ -2995,22 +2997,22 @@ // 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__K_fb = CHASTE_CONST(0.00016799999999999999); // millimolar + const double var_SERCA2a_pump__K_rb = CHASTE_CONST(3.29); // millimolar + const double var_SERCA2a_pump__N_fb = CHASTE_CONST(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_SERCA2a_pump__Vmaxf = CHASTE_CONST(0.081299999999999997); // millimolar_per_second + const double var_SERCA2a_pump__Vmaxr = CHASTE_CONST(0.318); // millimolar_per_second + const double var_intracellular_Ca_fluxes__tau_tr = CHASTE_CONST(0.00057470000000000004); // second + const double var_SERCA2a_pump__rb = CHASTE_MATH::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__fb = CHASTE_MATH::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__V_JSR = CHASTE_CONST(1.6e-7); // micro_litre + const double var_intracellular_ion_concentrations__V_NSR = CHASTE_CONST(2.0999999999999998e-6); // micro_litre + const double var_intracellular_ion_concentrations__V_myo = CHASTE_CONST(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 d_dt_chaste_interface_var_intracellular_ion_concentrations__Ca_NSR = CHASTE_CONST(0.001) * var_intracellular_ion_concentrations__Ca_NSR_orig_deriv; // millimolar / millisecond return d_dt_chaste_interface_var_intracellular_ion_concentrations__Ca_NSR; } @@ -3026,15 +3028,15 @@ // 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_x119 = CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Cai, CHASTE_CONST(1.2)); + const double var_x120 = CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Ca_NSR, 1); + const double var_x121 = 1 / (1 + CHASTE_CONST(33855.471141425078) * var_x119 + CHASTE_CONST(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_x123 = CHASTE_MATH::Pow((CHASTE_CONST(2.9537323401073989e-5) + var_x119 + CHASTE_CONST(8.9779098483507565e-6) * var_x120), (-2)); + const double var_x124 = CHASTE_CONST(2752.4498037978587) * var_x119 - CHASTE_CONST(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; + partialF = -CHASTE_CONST(0.13257434520702313) - CHASTE_CONST(0.0011893356491532784) * var_x122 - CHASTE_CONST(3.2630189260961817e-12) * var_x126; } else { @@ -3051,7 +3053,7 @@ { // Inputs: // Time units: millisecond - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -3089,44 +3091,44 @@ // 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_Na_Ca_exchanger__K_mCa = CHASTE_CONST(1.3799999999999999); // millimolar + const double var_Na_Ca_exchanger__K_mNa = CHASTE_CONST(87.5); // millimolar + const double var_Na_Ca_exchanger__K_sat = CHASTE_CONST(0.20000000000000001); // dimensionless + const double var_Na_Ca_exchanger__eta = CHASTE_CONST(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__F = CHASTE_CONST(96.485341500000004); // coulomb_per_millimole + const double var_membrane__R = CHASTE_CONST(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_L_type_Ca_current_y_gate__tau_y = CHASTE_CONST(0.02) + CHASTE_CONST(0.59999999999999998) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(2.1052631578947367) + CHASTE_CONST(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 * CHASTE_MATH::Exp(-CHASTE_CONST(11.764705882352942) + CHASTE_CONST(0.14705882352941177) * mParameters[10] - CHASTE_CONST(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 * CHASTE_MATH::Exp(CHASTE_CONST(0.079000000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.079000000000000001) * mParameters[10]) + 310000 * CHASTE_MATH::Exp(CHASTE_CONST(0.34999999999999998) * var_chaste_interface__membrane__V - CHASTE_CONST(0.34999999999999998) * mParameters[10])) : (CHASTE_CONST(7692.3076923076924) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.96036036036036043) + CHASTE_CONST(0.0900900900900901) * mParameters[10] - CHASTE_CONST(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__alpha_j = ((var_chaste_interface__membrane__V < -40) ? (1000 * (CHASTE_CONST(37.780000000000001) + var_chaste_interface__membrane__V) * (-127140 * CHASTE_MATH::Exp(CHASTE_CONST(0.24440000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.24440000000000001) * mParameters[10]) - CHASTE_CONST(3.4740000000000003e-5) * CHASTE_MATH::Exp(CHASTE_CONST(0.043909999999999998) * mParameters[10] - CHASTE_CONST(0.043909999999999998) * var_chaste_interface__membrane__V)) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(24.640530000000002) + CHASTE_CONST(0.311) * var_chaste_interface__membrane__V - CHASTE_CONST(0.311) * mParameters[10]))) : (0)); // per_second + const double var_fast_sodium_current_j_gate__beta_j = ((var_chaste_interface__membrane__V < -40) ? (CHASTE_CONST(121.2) * CHASTE_MATH::Exp(CHASTE_CONST(0.01052) * mParameters[10] - CHASTE_CONST(0.01052) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(5.5312920000000005) + CHASTE_CONST(0.13780000000000001) * mParameters[10] - CHASTE_CONST(0.13780000000000001) * var_chaste_interface__membrane__V))) : (300 * CHASTE_MATH::Exp(CHASTE_CONST(2.5349999999999999e-7) * mParameters[10] - CHASTE_CONST(2.5349999999999999e-7) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.2000000000000002) + CHASTE_CONST(0.10000000000000001) * mParameters[10] - CHASTE_CONST(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_membrane__i_Stim_converted = CHASTE_STIM(var_chaste_interface__environment__time_converted); // uA_per_cm2 + const double var_rapid_activating_delayed_rectifiyer_K_current__R_V = 1 / (1 + CHASTE_CONST(1.4944999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(0.044600000000000001) * var_chaste_interface__membrane__V)); // dimensionless + const double var_L_type_Ca_current__i_Ca_max = 4000 * CHASTE_MATH::Pow(var_membrane__F, 2) * (CHASTE_CONST(0.001) * CHASTE_MATH::Exp(2 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - CHASTE_CONST(0.34100000000000003) * mParameters[3]) * mParameters[6] * var_chaste_interface__membrane__V / ((-1 + CHASTE_MATH::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_L_type_Ca_current__i_Ca_converted = CHASTE_CAP() * 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 * CHASTE_MATH::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 = CHASTE_CONST(0.5) * CHASTE_MATH::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_rapid_activating_delayed_rectifiyer_K_current__i_Kr_converted = CHASTE_CAP() * var_rapid_activating_delayed_rectifiyer_K_current__i_Kr; // uA_per_cm2 + const double var_Na_Ca_exchanger__i_NaCa = 5000 * (CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Nai, 3) * mParameters[3] * CHASTE_MATH::Exp(var_Na_Ca_exchanger__eta * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - CHASTE_MATH::Pow(mParameters[5], 3) * var_chaste_interface__intracellular_ion_concentrations__Cai * CHASTE_MATH::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 * CHASTE_MATH::Exp((-1 + var_Na_Ca_exchanger__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (CHASTE_MATH::Pow(var_Na_Ca_exchanger__K_mNa, 3) + CHASTE_MATH::Pow(mParameters[5], 3)) * (var_Na_Ca_exchanger__K_mCa + mParameters[3])); // microA_per_microF + const double var_Na_Ca_exchanger__i_NaCa_converted = CHASTE_CAP() * var_Na_Ca_exchanger__i_NaCa; // uA_per_cm2 + const double var_fast_sodium_current__E_Na = var_membrane__R * var_membrane__T * CHASTE_MATH::Log(mParameters[5] / var_chaste_interface__intracellular_ion_concentrations__Nai) / var_membrane__F; // millivolt + const double var_fast_sodium_current__i_Na = CHASTE_MATH::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 = CHASTE_CAP() * 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 * CHASTE_MATH::Log((mParameters[4] + CHASTE_CONST(0.018329999999999999) * mParameters[5]) / (var_chaste_interface__intracellular_ion_concentrations__Ki + CHASTE_CONST(0.018329999999999999) * var_chaste_interface__intracellular_ion_concentrations__Nai)) / var_membrane__F; // millivolt + const double var_slow_activating_delayed_rectifiyer_K_current__i_Ks = CHASTE_MATH::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 = CHASTE_CAP() * 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_K1_gate__K1_infinity_V = 1 / (2 + CHASTE_MATH::Exp(CHASTE_CONST(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_time_independent_potassium_current__i_K1_converted = CHASTE_CAP() * 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_transient_outward_potassium_current__i_to1_converted = CHASTE_CAP() * var_transient_outward_potassium_current__i_to1; // uA_per_cm2 std::vector dqs(13); dqs[0] = var_RyR_channel__J_rel; diff --git a/chaste_codegen/data/tests/chaste_reference_models/GRL2/dynamic_winslow_model_1999.hpp b/chaste_codegen/data/tests/chaste_reference_models/GRL2/dynamic_winslow_model_1999.hpp index 1aa2841bf..57fd8d110 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/GRL2/dynamic_winslow_model_1999.hpp +++ b/chaste_codegen/data/tests/chaste_reference_models/GRL2/dynamic_winslow_model_1999.hpp @@ -17,6 +17,9 @@ #include #include "AbstractDynamicallyLoadableEntity.hpp" #include "AbstractStimulusFunction.hpp" +#if USING_DEVICE_COMPILER +#include "StimulusEvaluatorCuda.hpp" +#endif #include "AbstractGeneralizedRushLarsenCardiacCell.hpp" class Dynamicwinslow_model_1999FromCellMLGRL2 : public AbstractGeneralizedRushLarsenCardiacCell, public AbstractDynamicallyLoadableEntity diff --git a/chaste_codegen/data/tests/chaste_reference_models/GRL2/hodgkin_huxley_squid_axon_model_1952_modified.cpp b/chaste_codegen/data/tests/chaste_reference_models/GRL2/hodgkin_huxley_squid_axon_model_1952_modified.cpp index 8be4b35b7..90b6d53e5 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/GRL2/hodgkin_huxley_squid_axon_model_1952_modified.cpp +++ b/chaste_codegen/data/tests/chaste_reference_models/GRL2/hodgkin_huxley_squid_axon_model_1952_modified.cpp @@ -21,6 +21,8 @@ #include "HeartConfig.hpp" #include "IsNan.hpp" #include "MathsCustomFunctions.hpp" +#include "ChasteMathDeviceNamespaces.hpp" +#include "ChasteCpuMacros.hpp" @@ -30,7 +32,7 @@ { // 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_duration = CHASTE_CONST(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( @@ -59,7 +61,7 @@ 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[2] = CHASTE_CONST(0.29999999999999999); // (var_leakage_current__g_L) [milliS_per_cm2] this->mParameters[3] = 36; // (var_potassium_channel__g_K) [milliS_per_cm2] } @@ -107,7 +109,7 @@ // 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -117,12 +119,12 @@ // 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__E_L = CHASTE_CONST(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_potassium_channel__i_K = CHASTE_MATH::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_sodium_channel__i_Na = CHASTE_MATH::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; @@ -137,7 +139,7 @@ const double delta = 1e-8; const double yinit = rY[v_index]; - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -150,13 +152,13 @@ // 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__E_L = CHASTE_CONST(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_membrane__i_Stim = CHASTE_STIM(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_potassium_channel__i_K = CHASTE_MATH::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_sodium_channel__i_Na = CHASTE_MATH::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; @@ -193,7 +195,7 @@ mYInit = rY; double y_save; - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -205,22 +207,22 @@ // 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__B = -CHASTE_CONST(0.10000000000000001); // per_millivolt + const double var_potassium_channel_n_gate__A = -CHASTE_CONST(0.01) / var_potassium_channel_n_gate__B; // per_millisecond + const double var_potassium_channel_n_gate__beta_n = CHASTE_CONST(0.125) * CHASTE_MATH::Exp(CHASTE_CONST(0.9375) + CHASTE_CONST(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_potassium_channel_n_gate__alpha_n = (((var_potassium_channel_n_gate__U >= -CHASTE_CONST(9.9999999999999995e-8)) && (var_potassium_channel_n_gate__U <= CHASTE_CONST(9.9999999999999995e-8))) ? ((1 - CHASTE_CONST(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 + CHASTE_MATH::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 var_sodium_channel_h_gate__alpha_h = CHASTE_CONST(0.070000000000000007) * CHASTE_MATH::Exp(-CHASTE_CONST(3.75) - CHASTE_CONST(0.050000000000000003) * var_chaste_interface__membrane__V); // per_millisecond + const double var_sodium_channel_h_gate__beta_h = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(4.5) - CHASTE_CONST(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__B = -CHASTE_CONST(0.10000000000000001); // per_millivolt + const double var_sodium_channel_m_gate__A = -CHASTE_CONST(0.10000000000000001) / var_sodium_channel_m_gate__B; // per_millisecond + const double var_sodium_channel_m_gate__beta_m = 4 * CHASTE_MATH::Exp(-CHASTE_CONST(4.166666666666667) - CHASTE_CONST(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 var_sodium_channel_m_gate__alpha_m = (((var_sodium_channel_m_gate__U >= -CHASTE_CONST(9.9999999999999995e-8)) && (var_sodium_channel_m_gate__U <= CHASTE_CONST(9.9999999999999995e-8))) ? ((1 - CHASTE_CONST(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 + CHASTE_MATH::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) @@ -230,13 +232,13 @@ 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__E_L = CHASTE_CONST(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_membrane__i_Stim = CHASTE_STIM(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_potassium_channel__i_K = CHASTE_MATH::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_sodium_channel__i_Na = CHASTE_MATH::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 } @@ -306,7 +308,7 @@ double Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2::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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -318,13 +320,13 @@ // 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__E_L = CHASTE_CONST(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_membrane__i_Stim = CHASTE_STIM(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_potassium_channel__i_K = CHASTE_MATH::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_sodium_channel__i_Na = CHASTE_MATH::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; @@ -344,9 +346,9 @@ const double var_x0 = 1 / mParameters[0]; - const double var_x1 = pow(var_chaste_interface__sodium_channel_m_gate__m, 3) * mParameters[1]; + const double var_x1 = CHASTE_MATH::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]); + partialF = var_x0 * (-mParameters[2] - var_x1 * var_chaste_interface__sodium_channel_h_gate__h - CHASTE_MATH::Pow(var_chaste_interface__potassium_channel_n_gate__n, 4) * mParameters[3]); } else { @@ -361,19 +363,19 @@ 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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__B = -CHASTE_CONST(0.10000000000000001); // per_millivolt + const double var_sodium_channel_m_gate__A = -CHASTE_CONST(0.10000000000000001) / var_sodium_channel_m_gate__B; // per_millisecond + const double var_sodium_channel_m_gate__beta_m = 4 * CHASTE_MATH::Exp(-CHASTE_CONST(4.166666666666667) - CHASTE_CONST(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 var_sodium_channel_m_gate__alpha_m = (((var_sodium_channel_m_gate__U >= -CHASTE_CONST(9.9999999999999995e-8)) && (var_sodium_channel_m_gate__U <= CHASTE_CONST(9.9999999999999995e-8))) ? ((1 - CHASTE_CONST(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 + CHASTE_MATH::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; @@ -384,19 +386,19 @@ double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_THIS(mFixedVoltage) : rY[0]); // Units: millivolt; Initial value: -75.0 - const double var_x3 = 0.10000000000000001 * var_chaste_interface__membrane__V; + const double var_x3 = CHASTE_CONST(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_x5 = (var_x4 >= -CHASTE_CONST(9.9999999999999995e-8)) && (var_x4 <= CHASTE_CONST(9.9999999999999995e-8)); + const double var_x6 = CHASTE_MATH::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_x9 = CHASTE_MATH::Exp(-CHASTE_CONST(4.166666666666667) - CHASTE_CONST(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; + partialF = -((var_x5) ? (CHASTE_CONST(3.5) + CHASTE_CONST(0.050000000000000003) * var_chaste_interface__membrane__V) : (-var_x4 * var_x8)) - 4 * var_x9; } else { @@ -411,15 +413,15 @@ 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 var_sodium_channel_h_gate__alpha_h = CHASTE_CONST(0.070000000000000007) * CHASTE_MATH::Exp(-CHASTE_CONST(3.75) - CHASTE_CONST(0.050000000000000003) * var_chaste_interface__membrane__V); // per_millisecond + const double var_sodium_channel_h_gate__beta_h = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(4.5) - CHASTE_CONST(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; @@ -430,15 +432,15 @@ double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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_x10 = CHASTE_MATH::Exp(-CHASTE_CONST(3.75) - CHASTE_CONST(0.050000000000000003) * var_chaste_interface__membrane__V); + const double var_x11 = CHASTE_MATH::Exp(-CHASTE_CONST(4.5) - CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V); const double var_x12 = 1 + var_x11; - partialF = -1 / var_x12 - 0.070000000000000007 * var_x10; + partialF = -1 / var_x12 - CHASTE_CONST(0.070000000000000007) * var_x10; } else { @@ -453,19 +455,19 @@ 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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__B = -CHASTE_CONST(0.10000000000000001); // per_millivolt + const double var_potassium_channel_n_gate__A = -CHASTE_CONST(0.01) / var_potassium_channel_n_gate__B; // per_millisecond + const double var_potassium_channel_n_gate__beta_n = CHASTE_CONST(0.125) * CHASTE_MATH::Exp(CHASTE_CONST(0.9375) + CHASTE_CONST(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_potassium_channel_n_gate__alpha_n = (((var_potassium_channel_n_gate__U >= -CHASTE_CONST(9.9999999999999995e-8)) && (var_potassium_channel_n_gate__U <= CHASTE_CONST(9.9999999999999995e-8))) ? ((1 - CHASTE_CONST(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 + CHASTE_MATH::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; @@ -476,19 +478,19 @@ double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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_x3 = CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V; + const double var_x13 = CHASTE_CONST(6.5) + var_x3; + const double var_x14 = (var_x13 >= -CHASTE_CONST(9.9999999999999995e-8)) && (var_x13 <= CHASTE_CONST(9.9999999999999995e-8)); + const double var_x15 = CHASTE_MATH::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); + const double var_x18 = CHASTE_MATH::Exp(CHASTE_CONST(0.9375) + CHASTE_CONST(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; + partialF = -((var_x14) ? (CHASTE_CONST(0.42499999999999999) + CHASTE_CONST(0.0050000000000000001) * var_chaste_interface__membrane__V) : (-CHASTE_CONST(0.099999999999999992) * var_x13 * var_x17)) - CHASTE_CONST(0.125) * var_x18; } else { @@ -505,7 +507,7 @@ { // Inputs: // Time units: millisecond - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -516,13 +518,13 @@ // 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__E_L = CHASTE_CONST(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_membrane__i_Stim = CHASTE_STIM(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_potassium_channel__i_K = CHASTE_MATH::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_sodium_channel__i_Na = CHASTE_MATH::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; diff --git a/chaste_codegen/data/tests/chaste_reference_models/GRL2/hodgkin_huxley_squid_axon_model_1952_modified.hpp b/chaste_codegen/data/tests/chaste_reference_models/GRL2/hodgkin_huxley_squid_axon_model_1952_modified.hpp index e9ed236cc..2e8b94744 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/GRL2/hodgkin_huxley_squid_axon_model_1952_modified.hpp +++ b/chaste_codegen/data/tests/chaste_reference_models/GRL2/hodgkin_huxley_squid_axon_model_1952_modified.hpp @@ -16,6 +16,9 @@ #include "ChasteSerialization.hpp" #include #include "AbstractStimulusFunction.hpp" +#if USING_DEVICE_COMPILER +#include "StimulusEvaluatorCuda.hpp" +#endif #include "AbstractGeneralizedRushLarsenCardiacCell.hpp" class Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2 : public AbstractGeneralizedRushLarsenCardiacCell diff --git a/chaste_codegen/data/tests/chaste_reference_models/GRL2Opt/dynamic_viswanathan_model_1999_epi.cpp b/chaste_codegen/data/tests/chaste_reference_models/GRL2Opt/dynamic_viswanathan_model_1999_epi.cpp index 55b7c46e4..25c48b5f7 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/GRL2Opt/dynamic_viswanathan_model_1999_epi.cpp +++ b/chaste_codegen/data/tests/chaste_reference_models/GRL2Opt/dynamic_viswanathan_model_1999_epi.cpp @@ -21,6 +21,8 @@ #include "HeartConfig.hpp" #include "IsNan.hpp" #include "MathsCustomFunctions.hpp" +#include "ChasteMathDeviceNamespaces.hpp" +#include "ChasteCpuMacros.hpp" #include "ModelFactory.hpp" @@ -149,7 +151,7 @@ class Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables : public A for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(0.074871767015605231 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(CHASTE_CONST(0.074871767015605231) * 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); @@ -160,7 +162,7 @@ class Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables : public A for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return -1 + exp(0.074871767015605231 * var_chaste_interface__membrane__V); + return -1 + CHASTE_MATH::Exp(CHASTE_CONST(0.074871767015605231) * 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); @@ -171,7 +173,7 @@ class Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables : public A for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(0.037435883507802616 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(CHASTE_CONST(0.037435883507802616) * 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); @@ -182,7 +184,7 @@ class Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables : public A for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return -1 + exp(0.037435883507802616 * var_chaste_interface__membrane__V); + return -1 + CHASTE_MATH::Exp(CHASTE_CONST(0.037435883507802616) * 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); @@ -193,7 +195,7 @@ class Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables : public A for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(0.018717941753901308 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(CHASTE_CONST(0.018717941753901308) * 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); @@ -204,7 +206,7 @@ class Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables : public A for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(-0.018717941753901308 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(-CHASTE_CONST(0.018717941753901308) * 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); @@ -215,7 +217,7 @@ class Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables : public A for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(-0.037435883507802616 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(-CHASTE_CONST(0.037435883507802616) * 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); @@ -226,7 +228,7 @@ class Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables : public A for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 0.1245 * exp(-0.003743588350780262 * var_chaste_interface__membrane__V); + return CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(0.003743588350780262) * 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); @@ -237,7 +239,7 @@ class Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables : public A for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 + exp(1.2521739130434781 - 0.16722408026755853 * var_chaste_interface__membrane__V); + return 1 + CHASTE_MATH::Exp(CHASTE_CONST(1.2521739130434781) - CHASTE_CONST(0.16722408026755853) * 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); @@ -248,7 +250,7 @@ class Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables : public A for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 + exp(0.4017857142857143 + 0.044642857142857144 * var_chaste_interface__membrane__V); + return 1 + CHASTE_MATH::Exp(CHASTE_CONST(0.4017857142857143) + CHASTE_CONST(0.044642857142857144) * 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); @@ -259,7 +261,7 @@ class Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables : public A for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 / (1 + exp(4 + 0.125 * var_chaste_interface__membrane__V)) + 0.59999999999999998 / (1 + exp(2.5 - 0.050000000000000003 * var_chaste_interface__membrane__V)); + return 1 / (1 + CHASTE_MATH::Exp(4 + CHASTE_CONST(0.125) * var_chaste_interface__membrane__V)) + CHASTE_CONST(0.59999999999999998) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(2.5) - CHASTE_CONST(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); @@ -270,7 +272,7 @@ class Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables : public A for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 0.001 / (0.02 + 0.019699999999999999 * exp(-0.113569 * pow((1 + 0.10000000000000001 * var_chaste_interface__membrane__V), 2))); + return CHASTE_CONST(0.001) / (CHASTE_CONST(0.02) + CHASTE_CONST(0.019699999999999999) * CHASTE_MATH::Exp(-CHASTE_CONST(0.113569) * CHASTE_MATH::Pow((1 + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V), 2))); }; const double var_chaste_interface__membrane__V = mTableMins[0] + i*mTableSteps[0]; double val = f(var_chaste_interface__membrane__V); @@ -281,7 +283,7 @@ class Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables : public A for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 / (1 + exp(-1.2962962962962963 - 0.092592592592592587 * var_chaste_interface__membrane__V)); + return 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.2962962962962963) - CHASTE_CONST(0.092592592592592587) * 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); @@ -292,7 +294,7 @@ class Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables : public A for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 0.0037000000000000002 + 0.0061000000000000004 / (1 + exp(5.5555555555555554 + 0.22222222222222221 * var_chaste_interface__membrane__V)); + return CHASTE_CONST(0.0037000000000000002) + CHASTE_CONST(0.0061000000000000004) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(5.5555555555555554) + CHASTE_CONST(0.22222222222222221) * 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); @@ -303,7 +305,7 @@ class Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables : public A for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 / (1 + exp(10.714285714285715 + 0.17857142857142858 * var_chaste_interface__membrane__V)); + return 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(10.714285714285715) + CHASTE_CONST(0.17857142857142858) * 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); @@ -314,7 +316,7 @@ class Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables : public A for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return ((var_chaste_interface__membrane__V < -40) ? (135 * exp(-11.764705882352942 - 0.14705882352941177 * var_chaste_interface__membrane__V)) : (0)); + return ((var_chaste_interface__membrane__V < -40) ? (135 * CHASTE_MATH::Exp(-CHASTE_CONST(11.764705882352942) - CHASTE_CONST(0.14705882352941177) * var_chaste_interface__membrane__V)) : (0)); }; const double var_chaste_interface__membrane__V = mTableMins[0] + i*mTableSteps[0]; double val = f(var_chaste_interface__membrane__V); @@ -336,7 +338,7 @@ class Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables : public A for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return ((var_chaste_interface__membrane__V < -40) ? (3560 * exp(0.079000000000000001 * var_chaste_interface__membrane__V) + 310000000 * exp(0.34999999999999998 * var_chaste_interface__membrane__V)) : (7692.3076923076933 / (1 + exp(-0.96036036036036043 - 0.0900900900900901 * var_chaste_interface__membrane__V)))); + return ((var_chaste_interface__membrane__V < -40) ? (3560 * CHASTE_MATH::Exp(CHASTE_CONST(0.079000000000000001) * var_chaste_interface__membrane__V) + 310000000 * CHASTE_MATH::Exp(CHASTE_CONST(0.34999999999999998) * var_chaste_interface__membrane__V)) : (CHASTE_CONST(7692.3076923076933) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.96036036036036043) - CHASTE_CONST(0.0900900900900901) * 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); @@ -358,7 +360,7 @@ class Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables : public A for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return ((var_chaste_interface__membrane__V < -40) ? (1000 * (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)); + return ((var_chaste_interface__membrane__V < -40) ? (1000 * (CHASTE_CONST(37.780000000000001) + var_chaste_interface__membrane__V) * (-127140 * CHASTE_MATH::Exp(CHASTE_CONST(0.24440000000000001) * var_chaste_interface__membrane__V) - CHASTE_CONST(3.4740000000000003e-5) * CHASTE_MATH::Exp(-CHASTE_CONST(0.043909999999999998) * var_chaste_interface__membrane__V)) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(24.640530000000002) + CHASTE_CONST(0.311) * var_chaste_interface__membrane__V))) : (0)); }; const double var_chaste_interface__membrane__V = mTableMins[0] + i*mTableSteps[0]; double val = f(var_chaste_interface__membrane__V); @@ -380,7 +382,7 @@ class Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables : public A for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return ((var_chaste_interface__membrane__V < -40) ? (121.2 * exp(-0.01052 * var_chaste_interface__membrane__V) / (1 + exp(-5.5312920000000005 - 0.13780000000000001 * var_chaste_interface__membrane__V))) : (300 * exp(-2.5349999999999999e-7 * var_chaste_interface__membrane__V) / (1 + exp(-3.2000000000000002 - 0.10000000000000001 * var_chaste_interface__membrane__V)))); + return ((var_chaste_interface__membrane__V < -40) ? (CHASTE_CONST(121.2) * CHASTE_MATH::Exp(-CHASTE_CONST(0.01052) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(5.5312920000000005) - CHASTE_CONST(0.13780000000000001) * var_chaste_interface__membrane__V))) : (300 * CHASTE_MATH::Exp(-CHASTE_CONST(2.5349999999999999e-7) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.2000000000000002) - CHASTE_CONST(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); @@ -402,7 +404,7 @@ class Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables : public A for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return ((fabs(47.130000000000003 + var_chaste_interface__membrane__V) >= 1.0000000000000001e-5) ? (320 * (47.130000000000003 + var_chaste_interface__membrane__V) / (1 - exp(-4.7130000000000001 - 0.10000000000000001 * var_chaste_interface__membrane__V))) : (3200)); + return ((CHASTE_MATH::Abs(CHASTE_CONST(47.130000000000003) + var_chaste_interface__membrane__V) >= CHASTE_CONST(1.0000000000000001e-5)) ? (320 * (CHASTE_CONST(47.130000000000003) + var_chaste_interface__membrane__V) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(4.7130000000000001) - CHASTE_CONST(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); @@ -424,7 +426,7 @@ class Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables : public A for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(-0.090909090909090912 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(-CHASTE_CONST(0.090909090909090912) * 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); @@ -435,7 +437,7 @@ class Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables : public A for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 / (1 + exp(-2.8666666666666667 - 0.13333333333333333 * var_chaste_interface__membrane__V)); + return 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.8666666666666667) - CHASTE_CONST(0.13333333333333333) * 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); @@ -446,7 +448,7 @@ class Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables : public A for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 0.60999999999999999 * (38.899999999999999 + var_chaste_interface__membrane__V) / (-1 + exp(5.6404999999999994 + 0.14499999999999999 * var_chaste_interface__membrane__V)) + 1.3799999999999999 * (14.199999999999999 + var_chaste_interface__membrane__V) / (1 - exp(-1.7465999999999999 - 0.123 * var_chaste_interface__membrane__V)); + return CHASTE_CONST(0.60999999999999999) * (CHASTE_CONST(38.899999999999999) + var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(5.6404999999999994) + CHASTE_CONST(0.14499999999999999) * var_chaste_interface__membrane__V)) + CHASTE_CONST(1.3799999999999999) * (CHASTE_CONST(14.199999999999999) + var_chaste_interface__membrane__V) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(1.7465999999999999) - CHASTE_CONST(0.123) * 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); @@ -457,7 +459,7 @@ class Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables : public A for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 / (1 + exp(0.089820359281437126 - 0.059880239520958084 * var_chaste_interface__membrane__V)); + return 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(0.089820359281437126) - CHASTE_CONST(0.059880239520958084) * 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); @@ -468,7 +470,7 @@ class Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables : public A for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 0.13100000000000001 * (30 + var_chaste_interface__membrane__V) / (-1 + exp(2.0609999999999999 + 0.068699999999999997 * var_chaste_interface__membrane__V)) + 0.071899999999999992 * (30 + var_chaste_interface__membrane__V) / (1 - exp(-4.4399999999999995 - 0.14799999999999999 * var_chaste_interface__membrane__V)); + return CHASTE_CONST(0.13100000000000001) * (30 + var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(2.0609999999999999) + CHASTE_CONST(0.068699999999999997) * var_chaste_interface__membrane__V)) + CHASTE_CONST(0.071899999999999992) * (30 + var_chaste_interface__membrane__V) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(4.4399999999999995) - CHASTE_CONST(0.14799999999999999) * 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); @@ -479,7 +481,7 @@ class Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables : public A for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 0.032750000000000001 * (30 + var_chaste_interface__membrane__V) / (-1 + exp(2.0609999999999999 + 0.068699999999999997 * var_chaste_interface__membrane__V)) + 0.017974999999999998 * (30 + var_chaste_interface__membrane__V) / (1 - exp(-4.4399999999999995 - 0.14799999999999999 * var_chaste_interface__membrane__V)); + return CHASTE_CONST(0.032750000000000001) * (30 + var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(2.0609999999999999) + CHASTE_CONST(0.068699999999999997) * var_chaste_interface__membrane__V)) + CHASTE_CONST(0.017974999999999998) * (30 + var_chaste_interface__membrane__V) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(4.4399999999999995) - CHASTE_CONST(0.14799999999999999) * 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); @@ -490,7 +492,7 @@ class Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables : public A for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 15 / (1 + exp(12 + 0.20000000000000001 * var_chaste_interface__membrane__V)); + return 15 / (1 + CHASTE_MATH::Exp(12 + CHASTE_CONST(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); @@ -501,7 +503,7 @@ class Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables : public A for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 100 * exp(5 + 0.20000000000000001 * var_chaste_interface__membrane__V) / (1 + exp(5 + 0.20000000000000001 * var_chaste_interface__membrane__V)); + return 100 * CHASTE_MATH::Exp(5 + CHASTE_CONST(0.20000000000000001) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(5 + CHASTE_CONST(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); @@ -512,7 +514,7 @@ class Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables : public A for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 10000 * exp(-1.6000000000000001 + 0.040000000000000001 * var_chaste_interface__membrane__V) / (1 + exp(-1.6000000000000001 + 0.040000000000000001 * var_chaste_interface__membrane__V)); + return 10000 * CHASTE_MATH::Exp(-CHASTE_CONST(1.6000000000000001) + CHASTE_CONST(0.040000000000000001) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.6000000000000001) + CHASTE_CONST(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); @@ -523,7 +525,7 @@ class Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt_LookupTables : public A for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 10000 * exp(-3.6000000000000001 - 0.040000000000000001 * var_chaste_interface__membrane__V) / (1 + exp(-3.6000000000000001 - 0.040000000000000001 * var_chaste_interface__membrane__V)); + return 10000 * CHASTE_MATH::Exp(-CHASTE_CONST(3.6000000000000001) - CHASTE_CONST(0.040000000000000001) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.6000000000000001) - CHASTE_CONST(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); @@ -556,7 +558,7 @@ std::shared_ptr 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_amplitude_converted = -CHASTE_CONST(25.5) * CHASTE_CAP(); // 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 @@ -587,13 +589,13 @@ std::shared_ptr // 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[0] = CHASTE_CONST(1.8); // (var_calcium_dynamics__Cao) [millimolar] + this->mParameters[1] = CHASTE_CONST(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[3] = CHASTE_CONST(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] + this->mParameters[5] = CHASTE_CONST(0.75); // (var_time_independent_potassium_current__g_K1_max) [milliS_per_cm2] + this->mParameters[6] = CHASTE_CONST(0.02614); // (var_rapid_delayed_rectifier_potassium_current__g_Kr_max) [milliS_per_cm2] } Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt::~Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt() @@ -644,7 +646,7 @@ std::shared_ptr // 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -681,27 +683,27 @@ std::shared_ptr // 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_L_type_Ca_channel_f_Ca_gate__f_Ca = 1 / (1 + CHASTE_CONST(1666.6666666666667) * var_chaste_interface__calcium_dynamics__Cai); // dimensionless + const double var_calcium_background_current__E_Ca = CHASTE_CONST(13.356169352749133) * CHASTE_MATH::Log(mParameters[0] / var_chaste_interface__calcium_dynamics__Cai); // millivolt + const double var_fast_sodium_current__E_Na = CHASTE_CONST(26.712338705498265) * CHASTE_MATH::Log(mParameters[2] / var_chaste_interface__ionic_concentrations__Nai); // millivolt + const double var_L_type_Ca_channel__i_Ca_L_converted = (CHASTE_CONST(7.8019226357407252) * (-CHASTE_CONST(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]) + CHASTE_CONST(0.0024381008236689767) * (-CHASTE_CONST(0.75) * mParameters[2] + CHASTE_CONST(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]) + CHASTE_CONST(0.00069711623550831479) * (-CHASTE_CONST(0.75) * mParameters[1] + CHASTE_CONST(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])) * CHASTE_CAP(); // uA_per_cm2 + const double var_Na_Ca_exchanger__i_NaCa = CHASTE_CONST(0.002) * (CHASTE_MATH::Pow(var_chaste_interface__ionic_concentrations__Nai, 3) * mParameters[0] * _lt_0_row[4] - CHASTE_MATH::Pow(mParameters[2], 3) * var_chaste_interface__calcium_dynamics__Cai * _lt_0_row[5]) / ((1 + CHASTE_CONST(144.92753623188406) * var_chaste_interface__calcium_dynamics__Cai) * (1 + CHASTE_CONST(0.001) * CHASTE_MATH::Pow(var_chaste_interface__ionic_concentrations__Nai, 3) * mParameters[0] + CHASTE_CONST(0.001) * CHASTE_MATH::Pow(mParameters[2], 3) * var_chaste_interface__calcium_dynamics__Cai)); // microA_per_microF + const double var_T_type_Ca_channel__i_Ca_T = CHASTE_CONST(0.050000000000000003) * CHASTE_MATH::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 = CHASTE_CONST(0.003016) * var_chaste_interface__membrane__V - CHASTE_CONST(0.003016) * var_calcium_background_current__E_Ca; // microA_per_microF + const double var_fast_sodium_current__i_Na_converted = CHASTE_MATH::Pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3) * (-var_fast_sodium_current__E_Na + var_chaste_interface__membrane__V) * CHASTE_CAP() * 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_non_specific_calcium_activated_current__i_ns_Ca = CHASTE_CONST(3612.0012202503358) * (-CHASTE_CONST(0.75) * mParameters[1] + CHASTE_CONST(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 + CHASTE_CONST(1.7279999999999996e-9) / CHASTE_MATH::Pow(var_chaste_interface__calcium_dynamics__Cai, 3)) * (_lt_0_row[3])) + CHASTE_CONST(3612.0012202503358) * (-CHASTE_CONST(0.75) * mParameters[2] + CHASTE_CONST(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 + CHASTE_CONST(1.7279999999999996e-9) / CHASTE_MATH::Pow(var_chaste_interface__calcium_dynamics__Cai, 3)) * (_lt_0_row[3])); // microA_per_microF + const double var_sarcolemmal_calcium_pump__i_p_Ca = CHASTE_CONST(1.1499999999999999) * var_chaste_interface__calcium_dynamics__Cai / (CHASTE_CONST(0.00050000000000000001) + var_chaste_interface__calcium_dynamics__Cai); // microA_per_microF + const double var_slow_delayed_rectifier_potassium_current__i_Ks = (CHASTE_CONST(0.433) + CHASTE_CONST(0.25979999999999998) / (1 + CHASTE_CONST(6.4818210260626455e-7) * CHASTE_MATH::Pow((1 / var_chaste_interface__calcium_dynamics__Cai), CHASTE_CONST(1.3999999999999999)))) * (-CHASTE_CONST(26.712338705498265) * CHASTE_MATH::Log((CHASTE_CONST(0.018329999999999999) * mParameters[2] + mParameters[1]) / (CHASTE_CONST(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 = CHASTE_CONST(0.0040000000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.0040000000000000001) * var_fast_sodium_current__E_Na; // microA_per_microF + const double var_sodium_potassium_pump__i_NaK = 2 * mParameters[1] / ((1 + 100 / CHASTE_MATH::Pow(var_chaste_interface__ionic_concentrations__Nai, 2)) * (CHASTE_CONST(1.5) + mParameters[1]) * (1 + _lt_0_row[7] + CHASTE_CONST(0.036499999999999998) * (-CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(0.01485884101040119) * mParameters[2])) * _lt_0_row[6])); // microA_per_microF + const double var_time_independent_potassium_current__E_K = CHASTE_CONST(26.712338705498265) * CHASTE_MATH::Log(mParameters[1] / var_chaste_interface__ionic_concentrations__Ki); // millivolt + const double var_ATP_sensitive_potassium_current__i_K_ATP = CHASTE_CONST(1.921898339896919e-8) * CHASTE_MATH::Pow(mParameters[1], CHASTE_CONST(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 = CHASTE_CONST(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 = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::Sqrt(mParameters[1]) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * CHASTE_CAP() * 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 = CHASTE_CONST(438.93811257017387) * CHASTE_MATH::Sqrt(mParameters[1]) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * CHASTE_CAP() * mParameters[5] / ((1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.23849999999999999) * var_time_independent_potassium_current__E_K)) * (1020 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.23849999999999999) * var_time_independent_potassium_current__E_K)) + 1000 * (CHASTE_CONST(0.49124000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__membrane__V - CHASTE_CONST(0.080320000000000003) * var_time_independent_potassium_current__E_K) + CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.061749999999999999) * var_time_independent_potassium_current__E_K)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(0.51429999999999998) * var_time_independent_potassium_current__E_K - CHASTE_CONST(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 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 - CHASTE_CAP() * var_ATP_sensitive_potassium_current__i_K_ATP - CHASTE_CAP() * var_Na_Ca_exchanger__i_NaCa - CHASTE_CAP() * var_T_type_Ca_channel__i_Ca_T - CHASTE_CAP() * var_calcium_background_current__i_Ca_b - CHASTE_CAP() * var_non_specific_calcium_activated_current__i_ns_Ca - CHASTE_CAP() * var_plateau_potassium_current__i_Kp - CHASTE_CAP() * var_sarcolemmal_calcium_pump__i_p_Ca - CHASTE_CAP() * var_slow_delayed_rectifier_potassium_current__i_Ks - CHASTE_CAP() * var_sodium_background_current__i_Na_b - CHASTE_CAP() * var_sodium_potassium_pump__i_NaK - CHASTE_CAP() * 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)); @@ -715,7 +717,7 @@ std::shared_ptr const double delta = 1e-8; const double yinit = rY[v_index]; - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -755,31 +757,31 @@ std::shared_ptr // 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_L_type_Ca_channel_f_Ca_gate__f_Ca = 1 / (1 + CHASTE_CONST(1666.6666666666667) * var_chaste_interface__calcium_dynamics__Cai); // dimensionless + const double var_calcium_background_current__E_Ca = CHASTE_CONST(13.356169352749133) * CHASTE_MATH::Log(mParameters[0] / var_chaste_interface__calcium_dynamics__Cai); // millivolt + const double var_fast_sodium_current__E_Na = CHASTE_CONST(26.712338705498265) * CHASTE_MATH::Log(mParameters[2] / var_chaste_interface__ionic_concentrations__Nai); // millivolt + const double var_L_type_Ca_channel__i_CaCa = CHASTE_CONST(7.8019226357407252) * (-CHASTE_CONST(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 = CHASTE_CONST(0.00069711623550831479) * (-CHASTE_CONST(0.75) * mParameters[1] + CHASTE_CONST(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 = CHASTE_CONST(0.0024381008236689767) * (-CHASTE_CONST(0.75) * mParameters[2] + CHASTE_CONST(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 = CHASTE_CONST(0.002) * (CHASTE_MATH::Pow(var_chaste_interface__ionic_concentrations__Nai, 3) * mParameters[0] * _lt_0_row[4] - CHASTE_MATH::Pow(mParameters[2], 3) * var_chaste_interface__calcium_dynamics__Cai * _lt_0_row[5]) / ((1 + CHASTE_CONST(144.92753623188406) * var_chaste_interface__calcium_dynamics__Cai) * (1 + CHASTE_CONST(0.001) * CHASTE_MATH::Pow(var_chaste_interface__ionic_concentrations__Nai, 3) * mParameters[0] + CHASTE_CONST(0.001) * CHASTE_MATH::Pow(mParameters[2], 3) * var_chaste_interface__calcium_dynamics__Cai)); // microA_per_microF + const double var_T_type_Ca_channel__i_Ca_T = CHASTE_CONST(0.050000000000000003) * CHASTE_MATH::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 = CHASTE_CONST(0.003016) * var_chaste_interface__membrane__V - CHASTE_CONST(0.003016) * var_calcium_background_current__E_Ca; // microA_per_microF + const double var_fast_sodium_current__i_Na = CHASTE_MATH::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_non_specific_calcium_activated_current__i_ns_K = CHASTE_CONST(3612.0012202503358) * (-CHASTE_CONST(0.75) * mParameters[1] + CHASTE_CONST(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 + CHASTE_CONST(1.7279999999999996e-9) / CHASTE_MATH::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 = CHASTE_CONST(3612.0012202503358) * (-CHASTE_CONST(0.75) * mParameters[2] + CHASTE_CONST(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 + CHASTE_CONST(1.7279999999999996e-9) / CHASTE_MATH::Pow(var_chaste_interface__calcium_dynamics__Cai, 3)) * (_lt_0_row[3])); // microA_per_microF + const double var_sarcolemmal_calcium_pump__i_p_Ca = CHASTE_CONST(1.1499999999999999) * var_chaste_interface__calcium_dynamics__Cai / (CHASTE_CONST(0.00050000000000000001) + var_chaste_interface__calcium_dynamics__Cai); // microA_per_microF + const double var_slow_delayed_rectifier_potassium_current__i_Ks = (CHASTE_CONST(0.433) + CHASTE_CONST(0.25979999999999998) / (1 + CHASTE_CONST(6.4818210260626455e-7) * CHASTE_MATH::Pow((1 / var_chaste_interface__calcium_dynamics__Cai), CHASTE_CONST(1.3999999999999999)))) * (-CHASTE_CONST(26.712338705498265) * CHASTE_MATH::Log((CHASTE_CONST(0.018329999999999999) * mParameters[2] + mParameters[1]) / (CHASTE_CONST(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 = CHASTE_CONST(0.0040000000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.0040000000000000001) * var_fast_sodium_current__E_Na; // microA_per_microF + const double var_sodium_potassium_pump__i_NaK = 2 * mParameters[1] / ((1 + 100 / CHASTE_MATH::Pow(var_chaste_interface__ionic_concentrations__Nai, 2)) * (CHASTE_CONST(1.5) + mParameters[1]) * (1 + _lt_0_row[7] + CHASTE_CONST(0.036499999999999998) * (-CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(0.01485884101040119) * mParameters[2])) * _lt_0_row[6])); // microA_per_microF + const double var_time_independent_potassium_current__E_K = CHASTE_CONST(26.712338705498265) * CHASTE_MATH::Log(mParameters[1] / var_chaste_interface__ionic_concentrations__Ki); // millivolt + const double var_ATP_sensitive_potassium_current__i_K_ATP = CHASTE_CONST(1.921898339896919e-8) * CHASTE_MATH::Pow(mParameters[1], CHASTE_CONST(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 = CHASTE_CONST(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 = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::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 = CHASTE_CONST(438.93811257017387) * CHASTE_MATH::Sqrt(mParameters[1]) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[5] / ((1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.23849999999999999) * var_time_independent_potassium_current__E_K)) * (1020 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.23849999999999999) * var_time_independent_potassium_current__E_K)) + 1000 * (CHASTE_CONST(0.49124000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__membrane__V - CHASTE_CONST(0.080320000000000003) * var_time_independent_potassium_current__E_K) + CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.061749999999999999) * var_time_independent_potassium_current__E_K)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(0.51429999999999998) * var_time_independent_potassium_current__E_K - CHASTE_CONST(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 + const double var_membrane__dVdt = -(CHASTE_STIM(var_chaste_interface__environment__time_converted) / CHASTE_CAP() + 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 = CHASTE_CONST(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; @@ -815,7 +817,7 @@ std::shared_ptr mYInit = rY; double y_save; - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -877,70 +879,70 @@ std::shared_ptr // 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 d_dt_chaste_interface_var_calcium_dynamics__APtrack2 = CHASTE_CONST(0.001) * (((var_chaste_interface__calcium_dynamics__APtrack > CHASTE_CONST(0.17999999999999999)) && (var_chaste_interface__calcium_dynamics__APtrack < CHASTE_CONST(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 = CHASTE_CONST(0.001) * (((var_chaste_interface__calcium_dynamics__APtrack > CHASTE_CONST(0.17999999999999999)) && (var_chaste_interface__calcium_dynamics__APtrack < CHASTE_CONST(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 + CHASTE_CONST(1666.6666666666667) * var_chaste_interface__calcium_dynamics__Cai); // dimensionless + const double d_dt_chaste_interface_var_calcium_dynamics__OVRLDtrack2 = CHASTE_CONST(0.001) * (((var_chaste_interface__calcium_dynamics__OVRLDtrack > CHASTE_CONST(0.97999999999999998)) && (var_chaste_interface__calcium_dynamics__OVRLDtrack2 < CHASTE_CONST(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 = CHASTE_CONST(0.001) * (((var_chaste_interface__calcium_dynamics__OVRLDtrack > CHASTE_CONST(0.97999999999999998)) && (var_chaste_interface__calcium_dynamics__OVRLDtrack3 < CHASTE_CONST(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 = CHASTE_CONST(0.001) * (((var_chaste_interface__calcium_dynamics__APtrack3 < CHASTE_CONST(0.37)) && (var_chaste_interface__calcium_dynamics__OVRLDtrack3 < CHASTE_CONST(0.37)) && (1 / (1 + CHASTE_CONST(0.80000000000000004) / var_chaste_interface__calcium_dynamics__Ca_JSR) > CHASTE_CONST(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 = CHASTE_CONST(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 > CHASTE_CONST(0.00018000000000000001)) ? (60000 * (1 - var_chaste_interface__calcium_dynamics__APtrack2) * (-CHASTE_CONST(0.00018000000000000001) + var_chaste_interface__calcium_dynamics__Cainfluxtrack) * var_chaste_interface__calcium_dynamics__APtrack2 / (CHASTE_CONST(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 / (CHASTE_CONST(0.00092000000000000003) + var_chaste_interface__calcium_dynamics__Cai); // millimolar_per_second + const double var_calcium_dynamics__i_tr = CHASTE_CONST(5.5555555555555554) * var_chaste_interface__calcium_dynamics__Ca_NSR - CHASTE_CONST(5.5555555555555554) * var_chaste_interface__calcium_dynamics__Ca_JSR; // millimolar_per_second + const double d_dt_chaste_interface_var_calcium_dynamics__Ca_JSR = CHASTE_CONST(0.001) * (-var_calcium_dynamics__i_rel + var_calcium_dynamics__i_tr) / (1 + 8 / CHASTE_MATH::Pow((CHASTE_CONST(0.80000000000000004) + var_chaste_interface__calcium_dynamics__Ca_JSR), 2)); // millimolar / millisecond + const double var_ionic_concentrations__V_myo = CHASTE_CONST(8.2280000000000009e-12) * CHASTE_CONST(CHASTE_MATH::Pi); // micro_litre + const double var_calcium_dynamics__V_JSR = CHASTE_CONST(0.0070588235294117632) * var_ionic_concentrations__V_myo; // micro_litre + const double var_calcium_dynamics__V_NSR = CHASTE_CONST(0.081176470588235281) * var_ionic_concentrations__V_myo; // micro_litre + const double d_dt_chaste_interface_var_calcium_dynamics__Ca_NSR = CHASTE_CONST(0.001) * var_calcium_dynamics__i_up - CHASTE_CONST(0.001) * var_calcium_dynamics__i_leak - CHASTE_CONST(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 = CHASTE_CONST(13.356169352749133) * CHASTE_MATH::Log(mParameters[0] / var_chaste_interface__calcium_dynamics__Cai); // millivolt + const double var_fast_sodium_current__E_Na = CHASTE_CONST(26.712338705498265) * CHASTE_MATH::Log(mParameters[2] / var_chaste_interface__ionic_concentrations__Nai); // millivolt + const double var_L_type_Ca_channel__i_CaCa = CHASTE_CONST(7.8019226357407252) * (-CHASTE_CONST(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 = CHASTE_CONST(0.00069711623550831479) * (-CHASTE_CONST(0.75) * mParameters[1] + CHASTE_CONST(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 = CHASTE_CONST(0.0024381008236689767) * (-CHASTE_CONST(0.75) * mParameters[2] + CHASTE_CONST(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_d_gate__d_infinity = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.16025641025641024) * var_L_type_Ca_channel_d_gate__E0_d)); // dimensionless + const double var_L_type_Ca_channel_d_gate__tau_d = ((CHASTE_MATH::Abs(var_L_type_Ca_channel_d_gate__E0_d) < CHASTE_CONST(1.0000000000000001e-5)) ? (CHASTE_CONST(0.0045787545787545781)) : (CHASTE_CONST(0.028571428571428571) * (1 - CHASTE_MATH::Exp(-CHASTE_CONST(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 = CHASTE_CONST(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 - CHASTE_CONST(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 d_dt_chaste_interface_var_L_type_Ca_channel_f_gate__f = CHASTE_CONST(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 - CHASTE_CONST(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 = CHASTE_CONST(0.002) * (CHASTE_MATH::Pow(var_chaste_interface__ionic_concentrations__Nai, 3) * mParameters[0] * _lt_0_row[4] - CHASTE_MATH::Pow(mParameters[2], 3) * var_chaste_interface__calcium_dynamics__Cai * _lt_0_row[5]) / ((1 + CHASTE_CONST(144.92753623188406) * var_chaste_interface__calcium_dynamics__Cai) * (1 + CHASTE_CONST(0.001) * CHASTE_MATH::Pow(var_chaste_interface__ionic_concentrations__Nai, 3) * mParameters[0] + CHASTE_CONST(0.001) * CHASTE_MATH::Pow(mParameters[2], 3) * var_chaste_interface__calcium_dynamics__Cai)); // microA_per_microF + const double var_T_type_Ca_channel__i_Ca_T = CHASTE_CONST(0.050000000000000003) * CHASTE_MATH::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 = CHASTE_CONST(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 = CHASTE_CONST(0.001) * (-var_chaste_interface__T_type_Ca_channel_g_gate__g + _lt_0_row[14]) * ((var_chaste_interface__membrane__V <= 0) ? (1 / (CHASTE_CONST(0.012) - CHASTE_CONST(0.00087500000000000002) * var_chaste_interface__membrane__V)) : (CHASTE_CONST(83.333333333333329))); // 1 / millisecond + const double var_calcium_background_current__i_Ca_b = CHASTE_CONST(0.003016) * var_chaste_interface__membrane__V - CHASTE_CONST(0.003016) * var_calcium_background_current__E_Ca; // microA_per_microF + const double var_fast_sodium_current__i_Na = CHASTE_MATH::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 = CHASTE_CONST(0.001) * (1 - var_chaste_interface__fast_sodium_current_h_gate__h) * _lt_0_row[15] - CHASTE_CONST(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 = CHASTE_CONST(0.001) * (1 - var_chaste_interface__fast_sodium_current_j_gate__j) * _lt_0_row[17] - CHASTE_CONST(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 = CHASTE_CONST(0.001) * (1 - var_chaste_interface__fast_sodium_current_m_gate__m) * _lt_0_row[19] - CHASTE_CONST(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_non_specific_calcium_activated_current__i_ns_K = CHASTE_CONST(3612.0012202503358) * (-CHASTE_CONST(0.75) * mParameters[1] + CHASTE_CONST(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 + CHASTE_CONST(1.7279999999999996e-9) / CHASTE_MATH::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 = CHASTE_CONST(3612.0012202503358) * (-CHASTE_CONST(0.75) * mParameters[2] + CHASTE_CONST(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 + CHASTE_CONST(1.7279999999999996e-9) / CHASTE_MATH::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 = CHASTE_CONST(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 = CHASTE_CONST(1.1499999999999999) * var_chaste_interface__calcium_dynamics__Cai / (CHASTE_CONST(0.00050000000000000001) + var_chaste_interface__calcium_dynamics__Cai); // microA_per_microF + const double d_dt_chaste_interface_var_calcium_dynamics__Cai = CHASTE_CONST(0.001) * (-CHASTE_CONST(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 + CHASTE_CONST(0.00011900000000000002) / CHASTE_MATH::Pow((CHASTE_CONST(0.0023800000000000002) + var_chaste_interface__calcium_dynamics__Cai), 2) + CHASTE_CONST(3.5000000000000004e-5) / CHASTE_MATH::Pow((CHASTE_CONST(0.00050000000000000001) + var_chaste_interface__calcium_dynamics__Cai), 2)); // millimolar / millisecond + const double d_dt_chaste_interface_var_calcium_dynamics__Cainfluxtrack = CHASTE_CONST(0.001) * ((var_chaste_interface__calcium_dynamics__APtrack > CHASTE_CONST(0.20000000000000001)) ? (-CHASTE_CONST(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 > CHASTE_CONST(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 = CHASTE_CONST(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 = (CHASTE_CONST(0.433) + CHASTE_CONST(0.25979999999999998) / (1 + CHASTE_CONST(6.4818210260626455e-7) * CHASTE_MATH::Pow((1 / var_chaste_interface__calcium_dynamics__Cai), CHASTE_CONST(1.3999999999999999)))) * (-CHASTE_CONST(26.712338705498265) * CHASTE_MATH::Log((CHASTE_CONST(0.018329999999999999) * mParameters[2] + mParameters[1]) / (CHASTE_CONST(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 = CHASTE_CONST(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 = CHASTE_CONST(0.0040000000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.0040000000000000001) * var_fast_sodium_current__E_Na; // microA_per_microF + const double var_sodium_potassium_pump__i_NaK = 2 * mParameters[1] / ((1 + 100 / CHASTE_MATH::Pow(var_chaste_interface__ionic_concentrations__Nai, 2)) * (CHASTE_CONST(1.5) + mParameters[1]) * (1 + _lt_0_row[7] + CHASTE_CONST(0.036499999999999998) * (-CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(0.01485884101040119) * mParameters[2])) * _lt_0_row[6])); // microA_per_microF + const double d_dt_chaste_interface_var_ionic_concentrations__Nai = CHASTE_CONST(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 = CHASTE_CONST(26.712338705498265) * CHASTE_MATH::Log(mParameters[1] / var_chaste_interface__ionic_concentrations__Ki); // millivolt + const double var_ATP_sensitive_potassium_current__i_K_ATP = CHASTE_CONST(1.921898339896919e-8) * CHASTE_MATH::Pow(mParameters[1], CHASTE_CONST(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 = CHASTE_CONST(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 = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::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 = CHASTE_CONST(438.93811257017387) * CHASTE_MATH::Sqrt(mParameters[1]) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[5] / ((1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.23849999999999999) * var_time_independent_potassium_current__E_K)) * (1020 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.23849999999999999) * var_time_independent_potassium_current__E_K)) + 1000 * (CHASTE_CONST(0.49124000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__membrane__V - CHASTE_CONST(0.080320000000000003) * var_time_independent_potassium_current__E_K) + CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.061749999999999999) * var_time_independent_potassium_current__E_K)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(0.51429999999999998) * var_time_independent_potassium_current__E_K - CHASTE_CONST(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 d_dt_chaste_interface_var_transient_outward_current_ydv_gate__ydv = CHASTE_CONST(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 + const double d_dt_chaste_interface_var_ionic_concentrations__Ki = CHASTE_CONST(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 = -(CHASTE_STIM(var_chaste_interface__environment__time_converted) / CHASTE_CAP() + 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 = CHASTE_CONST(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 = CHASTE_CONST(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) { @@ -948,7 +950,7 @@ std::shared_ptr } else { - d_dt_chaste_interface_var_membrane__V = 0.001 * var_membrane__dVdt; // millivolt / millisecond + d_dt_chaste_interface_var_membrane__V = CHASTE_CONST(0.001) * var_membrane__dVdt; // millivolt / millisecond } mEvalF[0] = d_dt_chaste_interface_var_membrane__V; @@ -1206,7 +1208,7 @@ std::shared_ptr double Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt::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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -1245,31 +1247,31 @@ std::shared_ptr 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_L_type_Ca_channel_f_Ca_gate__f_Ca = 1 / (1 + CHASTE_CONST(1666.6666666666667) * var_chaste_interface__calcium_dynamics__Cai); // dimensionless + const double var_calcium_background_current__E_Ca = CHASTE_CONST(13.356169352749133) * CHASTE_MATH::Log(mParameters[0] / var_chaste_interface__calcium_dynamics__Cai); // millivolt + const double var_fast_sodium_current__E_Na = CHASTE_CONST(26.712338705498265) * CHASTE_MATH::Log(mParameters[2] / var_chaste_interface__ionic_concentrations__Nai); // millivolt + const double var_L_type_Ca_channel__i_CaCa = CHASTE_CONST(7.8019226357407252) * (-CHASTE_CONST(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 = CHASTE_CONST(0.00069711623550831479) * (-CHASTE_CONST(0.75) * mParameters[1] + CHASTE_CONST(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 = CHASTE_CONST(0.0024381008236689767) * (-CHASTE_CONST(0.75) * mParameters[2] + CHASTE_CONST(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 = CHASTE_CONST(0.002) * (CHASTE_MATH::Pow(var_chaste_interface__ionic_concentrations__Nai, 3) * mParameters[0] * _lt_0_row[4] - CHASTE_MATH::Pow(mParameters[2], 3) * var_chaste_interface__calcium_dynamics__Cai * _lt_0_row[5]) / ((1 + CHASTE_CONST(144.92753623188406) * var_chaste_interface__calcium_dynamics__Cai) * (1 + CHASTE_CONST(0.001) * CHASTE_MATH::Pow(var_chaste_interface__ionic_concentrations__Nai, 3) * mParameters[0] + CHASTE_CONST(0.001) * CHASTE_MATH::Pow(mParameters[2], 3) * var_chaste_interface__calcium_dynamics__Cai)); // microA_per_microF + const double var_T_type_Ca_channel__i_Ca_T = CHASTE_CONST(0.050000000000000003) * CHASTE_MATH::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 = CHASTE_CONST(0.003016) * var_chaste_interface__membrane__V - CHASTE_CONST(0.003016) * var_calcium_background_current__E_Ca; // microA_per_microF + const double var_fast_sodium_current__i_Na = CHASTE_MATH::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_non_specific_calcium_activated_current__i_ns_K = CHASTE_CONST(3612.0012202503358) * (-CHASTE_CONST(0.75) * mParameters[1] + CHASTE_CONST(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 + CHASTE_CONST(1.7279999999999996e-9) / CHASTE_MATH::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 = CHASTE_CONST(3612.0012202503358) * (-CHASTE_CONST(0.75) * mParameters[2] + CHASTE_CONST(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 + CHASTE_CONST(1.7279999999999996e-9) / CHASTE_MATH::Pow(var_chaste_interface__calcium_dynamics__Cai, 3)) * (_lt_0_row[3])); // microA_per_microF + const double var_sarcolemmal_calcium_pump__i_p_Ca = CHASTE_CONST(1.1499999999999999) * var_chaste_interface__calcium_dynamics__Cai / (CHASTE_CONST(0.00050000000000000001) + var_chaste_interface__calcium_dynamics__Cai); // microA_per_microF + const double var_slow_delayed_rectifier_potassium_current__i_Ks = (CHASTE_CONST(0.433) + CHASTE_CONST(0.25979999999999998) / (1 + CHASTE_CONST(6.4818210260626455e-7) * CHASTE_MATH::Pow((1 / var_chaste_interface__calcium_dynamics__Cai), CHASTE_CONST(1.3999999999999999)))) * (-CHASTE_CONST(26.712338705498265) * CHASTE_MATH::Log((CHASTE_CONST(0.018329999999999999) * mParameters[2] + mParameters[1]) / (CHASTE_CONST(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 = CHASTE_CONST(0.0040000000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.0040000000000000001) * var_fast_sodium_current__E_Na; // microA_per_microF + const double var_sodium_potassium_pump__i_NaK = 2 * mParameters[1] / ((1 + 100 / CHASTE_MATH::Pow(var_chaste_interface__ionic_concentrations__Nai, 2)) * (CHASTE_CONST(1.5) + mParameters[1]) * (1 + _lt_0_row[7] + CHASTE_CONST(0.036499999999999998) * (-CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(0.01485884101040119) * mParameters[2])) * _lt_0_row[6])); // microA_per_microF + const double var_time_independent_potassium_current__E_K = CHASTE_CONST(26.712338705498265) * CHASTE_MATH::Log(mParameters[1] / var_chaste_interface__ionic_concentrations__Ki); // millivolt + const double var_ATP_sensitive_potassium_current__i_K_ATP = CHASTE_CONST(1.921898339896919e-8) * CHASTE_MATH::Pow(mParameters[1], CHASTE_CONST(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 = CHASTE_CONST(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 = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::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 = CHASTE_CONST(438.93811257017387) * CHASTE_MATH::Sqrt(mParameters[1]) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[5] / ((1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.23849999999999999) * var_time_independent_potassium_current__E_K)) * (1020 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.23849999999999999) * var_time_independent_potassium_current__E_K)) + 1000 * (CHASTE_CONST(0.49124000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__membrane__V - CHASTE_CONST(0.080320000000000003) * var_time_independent_potassium_current__E_K) + CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.061749999999999999) * var_time_independent_potassium_current__E_K)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(0.51429999999999998) * var_time_independent_potassium_current__E_K - CHASTE_CONST(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 + const double var_membrane__dVdt = -(CHASTE_STIM(var_chaste_interface__environment__time_converted) / CHASTE_CAP() + 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 = CHASTE_CONST(0.001) * var_membrane__dVdt; // millivolt / millisecond return d_dt_chaste_interface_var_membrane__V; } @@ -1279,7 +1281,7 @@ std::shared_ptr double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -1318,113 +1320,113 @@ std::shared_ptr 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_x1 = CHASTE_MATH::Pow(var_x0, CHASTE_CONST(1.3999999999999999)); + const double var_x2 = 1 + CHASTE_CONST(6.4818210260626455e-7) * var_x1; + const double var_x3 = CHASTE_CONST(0.433) + CHASTE_CONST(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_x6 = CHASTE_CONST(0.018717941753901308) * var_chaste_interface__membrane__V; + const double var_x7 = CHASTE_MATH::Exp(var_x6); + const double var_x8 = CHASTE_MATH::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_x10 = CHASTE_MATH::Exp(-var_x6); + const double var_x11 = CHASTE_MATH::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_x14 = CHASTE_CONST(0.018717941753901308) * var_x13 + CHASTE_CONST(0.018717941753901308) * var_x9; + const double var_x15 = 1 / (1 + CHASTE_CONST(144.92753623188406) * var_chaste_interface__calcium_dynamics__Cai); + const double var_x16 = 1 + CHASTE_CONST(0.001) * var_x12 + CHASTE_CONST(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_x19 = CHASTE_CONST(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_x21 = CHASTE_MATH::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_x24 = 1 / (CHASTE_CONST(1.5) + mParameters[1]); + const double var_x25 = CHASTE_MATH::Exp(-CHASTE_CONST(0.003743588350780262) * var_chaste_interface__membrane__V); + const double var_x26 = CHASTE_MATH::Exp(CHASTE_CONST(0.01485884101040119) * mParameters[2]); + const double var_x27 = CHASTE_CONST(0.037435883507802616) * var_chaste_interface__membrane__V; + const double var_x28 = CHASTE_MATH::Exp(-var_x27); + const double var_x29 = 1 + CHASTE_CONST(0.1245) * var_x25 + CHASTE_CONST(0.036499999999999998) * var_x28 * (-CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * var_x26); + const double var_x30 = CHASTE_MATH::Pow(var_x29, (-2)); + const double var_x31 = CHASTE_CONST(0.00046607674967214262) * var_x25 + CHASTE_CONST(0.037435883507802616) * var_x28 * (-CHASTE_CONST(0.0052142857142857138) + CHASTE_CONST(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_x33 = CHASTE_MATH::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_x35 = CHASTE_CONST(0.050000000000000003) * var_x34; + const double var_x36 = 1 / (1 + CHASTE_CONST(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_x43 = var_x42 - CHASTE_CONST(0.34100000000000003) * mParameters[0]; const double var_x44 = var_x41 * var_x43; - const double var_x45 = 7.8019226357407252 * var_x44; + const double var_x45 = CHASTE_CONST(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_x49 = var_x35 + var_x46 + CHASTE_CONST(0.58414373385695628) * var_x42 * var_x48 - CHASTE_CONST(0.58414373385695628) * var_x39 * var_x43 * var_x47 / CHASTE_MATH::Pow(var_x40, 2); + const double var_x50 = CHASTE_MATH::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_x53 = CHASTE_MATH::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_x57 = CHASTE_CONST(0.75) * var_x53; + const double var_x58 = -CHASTE_CONST(0.75) * mParameters[2] + var_x57 * var_chaste_interface__ionic_concentrations__Nai; + const double var_x59 = CHASTE_CONST(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_x62 = var_x47 * var_x53 / CHASTE_MATH::Pow(var_x54, 2); + const double var_x63 = var_x52 + var_x60 + CHASTE_CONST(6.8454343811362063e-5) * var_x61 * var_chaste_interface__ionic_concentrations__Nai - CHASTE_CONST(9.1272458415149417e-5) * var_x58 * var_x62; + const double var_x64 = CHASTE_MATH::Exp(CHASTE_CONST(1.2521739130434781) - CHASTE_CONST(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_x67 = CHASTE_CONST(0.0055199999999999997) * var_x66; + const double var_x68 = CHASTE_MATH::Pow(mParameters[1], CHASTE_CONST(0.23999999999999999)); + const double var_x69 = CHASTE_CONST(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_x71 = CHASTE_MATH::Log(var_x70 * mParameters[1]); + const double var_x72 = -CHASTE_CONST(26.712338705498265) * var_x71 + var_chaste_interface__membrane__V; + const double var_x73 = CHASTE_MATH::Exp(CHASTE_CONST(0.4017857142857143) + CHASTE_CONST(0.044642857142857144) * var_chaste_interface__membrane__V); const double var_x74 = 1 + var_x73; - const double var_x75 = sqrt(mParameters[1]); + const double var_x75 = CHASTE_MATH::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_x78 = CHASTE_CONST(0.43033148291193518) * var_x77; + const double var_x79 = CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(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_x82 = CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(13.738155796237757) * var_x71 - CHASTE_CONST(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_x85 = CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__membrane__V - CHASTE_CONST(2.1455350448256207) * var_x71); + const double var_x86 = CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(1.6494869150645177) * var_x71); + const double var_x87 = var_x86 + CHASTE_CONST(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_x92 = CHASTE_CONST(438.93811257017387) * var_x91; + const double var_x93 = -CHASTE_CONST(0.75) * mParameters[1] + var_x57 * var_chaste_interface__ionic_concentrations__Ki; + const double var_x94 = CHASTE_CONST(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_x97 = CHASTE_MATH::Pow(var_x80, (-2)); + const double var_x98 = var_x82 * var_x87 / CHASTE_MATH::Pow(var_x83, 2); + const double var_x99 = CHASTE_CONST(0.0004218936106979757) * var_x72 * var_x90 / CHASTE_MATH::Pow((var_x81 + CHASTE_CONST(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_x103 = var_x67 + var_x69 + var_x78 + var_x92 + var_x95 + var_x99 * (-CHASTE_CONST(514.29999999999995) * var_x98 - var_x96 * (CHASTE_CONST(0.061749999999999999) * var_x86 + CHASTE_CONST(0.039456396800000001) * var_x85) + CHASTE_CONST(243.26999999999998) * var_x79 * var_x97) + CHASTE_CONST(1.9572871637915374e-5) * var_x61 * var_chaste_interface__ionic_concentrations__Ki - CHASTE_CONST(2.6097162183887167e-5) * var_x62 * var_x93 - CHASTE_CONST(104.68673984798647) * var_x101 * var_x102 + CHASTE_CONST(0.00092307692307692295) * var_x64 * var_x72 / CHASTE_MATH::Pow(var_x65, 2) - CHASTE_CONST(0.019211226915711394) * var_x100 * var_x73 * mParameters[6] * var_chaste_interface__rapid_delayed_rectifier_potassium_current_xr_gate__xr / CHASTE_MATH::Pow(var_x74, 2); const double var_x104 = 1 / mParameters[3]; - const double var_x105 = 0.001 * var_x104; + const double var_x105 = CHASTE_CONST(0.001) * var_x104; - partialF = -var_x105 * (0.0070159999999999997 + var_x103 + var_x20 + var_x49 + var_x5 + var_x63 + var_x23 * var_x32); + partialF = -var_x105 * (CHASTE_CONST(0.0070159999999999997) + var_x103 + var_x20 + var_x49 + var_x5 + var_x63 + var_x23 * var_x32); } else { @@ -1439,7 +1441,7 @@ std::shared_ptr 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -1474,20 +1476,20 @@ std::shared_ptr 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 + const double var_L_type_Ca_channel_f_Ca_gate__f_Ca = 1 / (1 + CHASTE_CONST(1666.6666666666667) * var_chaste_interface__calcium_dynamics__Cai); // dimensionless + const double var_calcium_dynamics__i_leak = CHASTE_CONST(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 > CHASTE_CONST(0.00018000000000000001)) ? (60000 * (1 - var_chaste_interface__calcium_dynamics__APtrack2) * (-CHASTE_CONST(0.00018000000000000001) + var_chaste_interface__calcium_dynamics__Cainfluxtrack) * var_chaste_interface__calcium_dynamics__APtrack2 / (CHASTE_CONST(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 / (CHASTE_CONST(0.00092000000000000003) + var_chaste_interface__calcium_dynamics__Cai); // millimolar_per_second + const double var_ionic_concentrations__V_myo = CHASTE_CONST(8.2280000000000009e-12) * CHASTE_CONST(CHASTE_MATH::Pi); // micro_litre + const double var_calcium_dynamics__V_JSR = CHASTE_CONST(0.0070588235294117632) * var_ionic_concentrations__V_myo; // micro_litre + const double var_calcium_dynamics__V_NSR = CHASTE_CONST(0.081176470588235281) * var_ionic_concentrations__V_myo; // micro_litre + const double var_calcium_background_current__E_Ca = CHASTE_CONST(13.356169352749133) * CHASTE_MATH::Log(mParameters[0] / var_chaste_interface__calcium_dynamics__Cai); // millivolt + const double var_L_type_Ca_channel__i_CaCa = CHASTE_CONST(7.8019226357407252) * (-CHASTE_CONST(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 = CHASTE_CONST(0.002) * (CHASTE_MATH::Pow(var_chaste_interface__ionic_concentrations__Nai, 3) * mParameters[0] * _lt_0_row[4] - CHASTE_MATH::Pow(mParameters[2], 3) * var_chaste_interface__calcium_dynamics__Cai * _lt_0_row[5]) / ((1 + CHASTE_CONST(144.92753623188406) * var_chaste_interface__calcium_dynamics__Cai) * (1 + CHASTE_CONST(0.001) * CHASTE_MATH::Pow(var_chaste_interface__ionic_concentrations__Nai, 3) * mParameters[0] + CHASTE_CONST(0.001) * CHASTE_MATH::Pow(mParameters[2], 3) * var_chaste_interface__calcium_dynamics__Cai)); // microA_per_microF + const double var_T_type_Ca_channel__i_Ca_T = CHASTE_CONST(0.050000000000000003) * CHASTE_MATH::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 = CHASTE_CONST(0.003016) * var_chaste_interface__membrane__V - CHASTE_CONST(0.003016) * var_calcium_background_current__E_Ca; // microA_per_microF + const double var_sarcolemmal_calcium_pump__i_p_Ca = CHASTE_CONST(1.1499999999999999) * var_chaste_interface__calcium_dynamics__Cai / (CHASTE_CONST(0.00050000000000000001) + var_chaste_interface__calcium_dynamics__Cai); // microA_per_microF + const double d_dt_chaste_interface_var_calcium_dynamics__Cai = CHASTE_CONST(0.001) * (-CHASTE_CONST(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 + CHASTE_CONST(0.00011900000000000002) / CHASTE_MATH::Pow((CHASTE_CONST(0.0023800000000000002) + var_chaste_interface__calcium_dynamics__Cai), 2) + CHASTE_CONST(3.5000000000000004e-5) / CHASTE_MATH::Pow((CHASTE_CONST(0.00050000000000000001) + var_chaste_interface__calcium_dynamics__Cai), 2)); // millimolar / millisecond return d_dt_chaste_interface_var_calcium_dynamics__Cai; } @@ -1497,7 +1499,7 @@ std::shared_ptr double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -1532,78 +1534,78 @@ std::shared_ptr 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_x6 = CHASTE_CONST(0.018717941753901308) * var_chaste_interface__membrane__V; + const double var_x7 = CHASTE_MATH::Exp(var_x6); + const double var_x8 = CHASTE_MATH::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_x10 = CHASTE_MATH::Exp(-var_x6); + const double var_x11 = CHASTE_MATH::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_x15 = 1 / (1 + CHASTE_CONST(144.92753623188406) * var_chaste_interface__calcium_dynamics__Cai); + const double var_x16 = 1 + CHASTE_CONST(0.001) * var_x12 + CHASTE_CONST(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_x19 = CHASTE_CONST(0.002) * var_x18; + const double var_x33 = CHASTE_MATH::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_x35 = CHASTE_CONST(0.050000000000000003) * var_x34; + const double var_x36 = 1 / (1 + CHASTE_CONST(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_x43 = var_x42 - CHASTE_CONST(0.34100000000000003) * mParameters[0]; const double var_x44 = var_x41 * var_x43; - const double var_x45 = 7.8019226357407252 * var_x44; + const double var_x45 = CHASTE_CONST(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_x107 = var_x106 * var_chaste_interface__L_type_Ca_channel_f_gate__f / CHASTE_MATH::Pow((CHASTE_CONST(0.00059999999999999995) + var_chaste_interface__calcium_dynamics__Cai), 2); + const double var_x110 = CHASTE_CONST(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_x112 = CHASTE_MATH::Pow(var_x110, (-2)); + const double var_x113 = CHASTE_CONST(1.1499999999999999) * var_x112 * var_chaste_interface__calcium_dynamics__Cai; + const double var_x114 = CHASTE_CONST(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_x119 = var_x118 * var_x17 / CHASTE_MATH::Pow((CHASTE_CONST(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_x121 = CHASTE_MATH::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_x124 = CHASTE_CONST(1.38e-5) * var_x119 + CHASTE_CONST(1.9999999999999999e-6) * var_x123 + var_x120 * var_x19; + const double var_x136 = CHASTE_MATH::Log(var_x0 * mParameters[0]); + const double var_x137 = -CHASTE_CONST(13.356169352749133) * var_x136 + var_chaste_interface__membrane__V; + const double var_x155 = CHASTE_CONST(0.0023800000000000002) + var_chaste_interface__calcium_dynamics__Cai; + const double var_x156 = 1 + CHASTE_CONST(0.00011900000000000002) / CHASTE_MATH::Pow(var_x155, 2) + CHASTE_CONST(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_x158 = 1 / CHASTE_CONST(CHASTE_MATH::Pi); + const double var_x161 = CHASTE_CONST(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_x164 = -CHASTE_CONST(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_x166 = var_chaste_interface__calcium_dynamics__Cainfluxtrack > CHASTE_CONST(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_x171 = CHASTE_CONST(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_x173 = CHASTE_CONST(0.40588235294117642) * var_x172; + const double var_x174 = var_chaste_interface__calcium_dynamics__Cai / CHASTE_MATH::Pow(var_x171, 2); + const double var_x175 = CHASTE_CONST(1.1499999999999999) * var_x111; + const double var_x176 = var_x124 + var_x175 - var_x113 - var_x114 + CHASTE_CONST(0.040282206767891383) * var_x0 + CHASTE_CONST(7.8019226357407252) * var_x39 * var_x48 + CHASTE_CONST(0.6678084676374566) * var_x0 * var_x34; + const double var_x177 = CHASTE_CONST(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; + const double var_x181 = -CHASTE_CONST(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); + partialF = CHASTE_CONST(0.001) * var_x157 * (-var_x173 + CHASTE_CONST(0.40588235294117642) * var_x174 + CHASTE_CONST(0.0070588235294117632) * var_x170 - var_x176 * var_x177) + CHASTE_CONST(0.001) * (CHASTE_CONST(0.00023800000000000004) / CHASTE_MATH::Pow(var_x155, 3) + CHASTE_CONST(7.0000000000000007e-5) / CHASTE_MATH::Pow(var_x110, 3)) * (CHASTE_CONST(0.027058823529411764) * var_chaste_interface__calcium_dynamics__Ca_NSR + CHASTE_CONST(0.0070588235294117632) * var_x179 - var_x173 * var_chaste_interface__calcium_dynamics__Cai - var_x177 * (var_x181 - var_x180 + CHASTE_CONST(0.003016) * var_chaste_interface__membrane__V)) / CHASTE_MATH::Pow(var_x156, 2); } else { @@ -1618,7 +1620,7 @@ std::shared_ptr 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -1633,7 +1635,7 @@ std::shared_ptr 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 + const double d_dt_chaste_interface_var_fast_sodium_current_m_gate__m = CHASTE_CONST(0.001) * (1 - var_chaste_interface__fast_sodium_current_m_gate__m) * _lt_0_row[19] - CHASTE_CONST(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; } @@ -1643,7 +1645,7 @@ std::shared_ptr double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_THIS(mFixedVoltage) : rY[0]); // Units: millivolt; Initial value: -88.984 @@ -1656,15 +1658,15 @@ std::shared_ptr 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_x197 = CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V; + const double var_x198 = CHASTE_MATH::Exp(-CHASTE_CONST(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; + const double var_x200 = CHASTE_CONST(0.32000000000000001) / var_x199; + const double var_x201 = CHASTE_CONST(47.130000000000003) + var_chaste_interface__membrane__V; + const double var_x202 = CHASTE_MATH::Abs(var_x201) >= CHASTE_CONST(1.0000000000000001e-5); + const double var_x203 = CHASTE_CONST(0.080000000000000002) * var_x194; - partialF = ((var_x202) ? (-var_x203 - var_x200 * var_x201) : (-3.2000000000000002 - var_x203)); + partialF = ((var_x202) ? (-var_x203 - var_x200 * var_x201) : (-CHASTE_CONST(3.2000000000000002) - var_x203)); } else { @@ -1679,7 +1681,7 @@ std::shared_ptr 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -1694,7 +1696,7 @@ std::shared_ptr 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 + const double d_dt_chaste_interface_var_fast_sodium_current_h_gate__h = CHASTE_CONST(0.001) * (1 - var_chaste_interface__fast_sodium_current_h_gate__h) * _lt_0_row[15] - CHASTE_CONST(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; } @@ -1704,19 +1706,19 @@ std::shared_ptr double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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_x204 = CHASTE_MATH::Exp(CHASTE_CONST(0.34999999999999998) * var_chaste_interface__membrane__V); + const double var_x205 = CHASTE_MATH::Exp(CHASTE_CONST(0.079000000000000001) * var_chaste_interface__membrane__V); + const double var_x206 = CHASTE_MATH::Exp(-CHASTE_CONST(11.764705882352942) - CHASTE_CONST(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_x208 = CHASTE_MATH::Exp(-CHASTE_CONST(0.96036036036036043) - CHASTE_CONST(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)); + partialF = ((var_x207) ? (-310000 * var_x204 - CHASTE_CONST(0.13500000000000001) * var_x206 - CHASTE_CONST(3.5600000000000001) * var_x205) : (-CHASTE_CONST(7.6923076923076934) / var_x209)); } else { @@ -1731,7 +1733,7 @@ std::shared_ptr 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -1746,7 +1748,7 @@ std::shared_ptr 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 + const double d_dt_chaste_interface_var_fast_sodium_current_j_gate__j = CHASTE_CONST(0.001) * (1 - var_chaste_interface__fast_sodium_current_j_gate__j) * _lt_0_row[17] - CHASTE_CONST(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; } @@ -1756,31 +1758,31 @@ std::shared_ptr double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_THIS(mFixedVoltage) : rY[0]); // Units: millivolt; Initial value: -88.984 - const double var_x197 = 0.10000000000000001 * var_chaste_interface__membrane__V; + const double var_x197 = CHASTE_CONST(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_x211 = CHASTE_MATH::Exp(CHASTE_CONST(0.24440000000000001) * var_chaste_interface__membrane__V); + const double var_x212 = CHASTE_MATH::Exp(-CHASTE_CONST(0.043909999999999998) * var_chaste_interface__membrane__V); + const double var_x213 = -127140 * var_x211 - CHASTE_CONST(3.4740000000000003e-5) * var_x212; + const double var_x215 = CHASTE_MATH::Exp(CHASTE_CONST(24.640530000000002) + CHASTE_CONST(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_x218 = CHASTE_MATH::Exp(-CHASTE_CONST(5.5312920000000005) - CHASTE_CONST(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_x220 = CHASTE_MATH::Exp(-CHASTE_CONST(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_x222 = CHASTE_CONST(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_x224 = CHASTE_MATH::Exp(-CHASTE_CONST(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_x226 = CHASTE_MATH::Exp(-CHASTE_CONST(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)); + partialF = ((var_x207) ? (-CHASTE_CONST(0.1212) * var_x221 - var_x213 * var_x223) : (-CHASTE_CONST(0.29999999999999999) * var_x227)); } else { @@ -1795,7 +1797,7 @@ std::shared_ptr 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -1804,9 +1806,9 @@ std::shared_ptr // 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 + const double var_L_type_Ca_channel_d_gate__d_infinity = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.16025641025641024) * var_L_type_Ca_channel_d_gate__E0_d)); // dimensionless + const double var_L_type_Ca_channel_d_gate__tau_d = ((CHASTE_MATH::Abs(var_L_type_Ca_channel_d_gate__E0_d) < CHASTE_CONST(1.0000000000000001e-5)) ? (CHASTE_CONST(0.0045787545787545781)) : (CHASTE_CONST(0.028571428571428571) * (1 - CHASTE_MATH::Exp(-CHASTE_CONST(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 = CHASTE_CONST(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 - CHASTE_CONST(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; } @@ -1816,21 +1818,21 @@ std::shared_ptr double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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_x228 = CHASTE_MATH::Exp(-CHASTE_CONST(1.6025641025641024) - CHASTE_CONST(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_x231 = -CHASTE_CONST(0.001) + CHASTE_CONST(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_x233 = CHASTE_MATH::Abs(var_x232) < CHASTE_CONST(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)); + const double var_x239 = CHASTE_CONST(0.001) * var_x230; + const double var_x240 = ((var_x233) ? (CHASTE_CONST(218.40000000000003)) : (35 * var_x229 * var_x232 * var_x235)); partialF = var_x231 * var_x240 - var_x239 * var_x240; } @@ -1847,7 +1849,7 @@ std::shared_ptr 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -1864,7 +1866,7 @@ std::shared_ptr // 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 + const double d_dt_chaste_interface_var_L_type_Ca_channel_f_gate__f = CHASTE_CONST(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 - CHASTE_CONST(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; } @@ -1874,19 +1876,19 @@ std::shared_ptr double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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_x242 = CHASTE_MATH::Exp(-CHASTE_CONST(0.113569) * CHASTE_MATH::Pow((1 + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V), 2)); + const double var_x245 = CHASTE_MATH::Exp(4 + CHASTE_CONST(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_x247 = CHASTE_MATH::Exp(CHASTE_CONST(2.5) - CHASTE_CONST(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_x250 = CHASTE_CONST(0.019699999999999999) * var_x242; + const double var_x251 = -CHASTE_CONST(0.02) - var_x250; + const double var_x252 = 1 / var_x246 + CHASTE_CONST(0.59999999999999998) / var_x248; const double var_x254 = 1 - var_x252; partialF = var_x251 * var_x252 + var_x251 * var_x254; @@ -1904,7 +1906,7 @@ std::shared_ptr 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -1919,7 +1921,7 @@ std::shared_ptr 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 + const double d_dt_chaste_interface_var_T_type_Ca_channel_b_gate__b = CHASTE_CONST(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; } @@ -1929,17 +1931,17 @@ std::shared_ptr double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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_x257 = CHASTE_MATH::Exp(CHASTE_CONST(5.5555555555555554) + CHASTE_CONST(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); + const double var_x260 = 1 / (CHASTE_CONST(0.0037000000000000002) + CHASTE_CONST(0.0061000000000000004) * var_x259); - partialF = -0.001 * var_x260; + partialF = -CHASTE_CONST(0.001) * var_x260; } else { @@ -1954,7 +1956,7 @@ std::shared_ptr 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -1969,7 +1971,7 @@ std::shared_ptr 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 + const double d_dt_chaste_interface_var_T_type_Ca_channel_g_gate__g = CHASTE_CONST(0.001) * (-var_chaste_interface__T_type_Ca_channel_g_gate__g + _lt_0_row[14]) * ((var_chaste_interface__membrane__V <= 0) ? (1 / (CHASTE_CONST(0.012) - CHASTE_CONST(0.00087500000000000002) * var_chaste_interface__membrane__V)) : (CHASTE_CONST(83.333333333333329))); // 1 / millisecond return d_dt_chaste_interface_var_T_type_Ca_channel_g_gate__g; } @@ -1979,15 +1981,15 @@ std::shared_ptr double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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_x263 = 1 / (CHASTE_CONST(0.012) - CHASTE_CONST(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)); + partialF = ((var_x265) ? (-CHASTE_CONST(0.001) * var_x263) : (-CHASTE_CONST(0.083333333333333329))); } else { @@ -2002,7 +2004,7 @@ std::shared_ptr 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -2017,7 +2019,7 @@ std::shared_ptr 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 + const double d_dt_chaste_interface_var_rapid_delayed_rectifier_potassium_current_xr_gate__xr = CHASTE_CONST(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; } @@ -2027,21 +2029,21 @@ std::shared_ptr double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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_x268 = CHASTE_MATH::Exp(CHASTE_CONST(5.6404999999999994) + CHASTE_CONST(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_x271 = CHASTE_MATH::Exp(-CHASTE_CONST(1.7465999999999999) - CHASTE_CONST(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; + const double var_x274 = CHASTE_CONST(14.199999999999999) + var_chaste_interface__membrane__V; + const double var_x275 = CHASTE_CONST(38.899999999999999) + var_chaste_interface__membrane__V; - partialF = -0.0013799999999999999 * var_x273 * var_x274 - 0.00060999999999999997 * var_x270 * var_x275; + partialF = -CHASTE_CONST(0.0013799999999999999) * var_x273 * var_x274 - CHASTE_CONST(0.00060999999999999997) * var_x270 * var_x275; } else { @@ -2056,7 +2058,7 @@ std::shared_ptr 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -2071,7 +2073,7 @@ std::shared_ptr 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 + const double d_dt_chaste_interface_var_slow_delayed_rectifier_potassium_current_xs1_gate__xs1 = CHASTE_CONST(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; } @@ -2081,22 +2083,22 @@ std::shared_ptr double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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_x279 = CHASTE_MATH::Exp(CHASTE_CONST(2.0609999999999999) + CHASTE_CONST(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_x282 = CHASTE_MATH::Exp(-CHASTE_CONST(4.4399999999999995) - CHASTE_CONST(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; + partialF = -CHASTE_CONST(0.00013100000000000001) * var_x289 - CHASTE_CONST(7.1899999999999999e-5) * var_x290; } else { @@ -2111,7 +2113,7 @@ std::shared_ptr 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -2126,7 +2128,7 @@ std::shared_ptr 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 + const double d_dt_chaste_interface_var_slow_delayed_rectifier_potassium_current_xs2_gate__xs2 = CHASTE_CONST(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; } @@ -2136,22 +2138,22 @@ std::shared_ptr double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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_x279 = CHASTE_MATH::Exp(CHASTE_CONST(2.0609999999999999) + CHASTE_CONST(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_x282 = CHASTE_MATH::Exp(-CHASTE_CONST(4.4399999999999995) - CHASTE_CONST(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; + partialF = -CHASTE_CONST(3.2750000000000003e-5) * var_x289 - CHASTE_CONST(1.7975e-5) * var_x290; } else { @@ -2166,7 +2168,7 @@ std::shared_ptr 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -2183,7 +2185,7 @@ std::shared_ptr // 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 + const double d_dt_chaste_interface_var_transient_outward_current_zdv_gate__zdv = CHASTE_CONST(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; } @@ -2193,17 +2195,17 @@ std::shared_ptr double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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_x291 = CHASTE_CONST(0.040000000000000001) * var_chaste_interface__membrane__V; + const double var_x292 = CHASTE_MATH::Exp(-CHASTE_CONST(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_x296 = CHASTE_MATH::Exp(-CHASTE_CONST(3.6000000000000001) - var_x291); const double var_x297 = 1 + var_x296; const double var_x298 = var_x296 / var_x297; @@ -2222,7 +2224,7 @@ std::shared_ptr 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -2239,7 +2241,7 @@ std::shared_ptr // 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 + const double d_dt_chaste_interface_var_transient_outward_current_ydv_gate__ydv = CHASTE_CONST(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; } @@ -2249,20 +2251,20 @@ std::shared_ptr double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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_x304 = CHASTE_CONST(0.20000000000000001) * var_chaste_interface__membrane__V; + const double var_x305 = CHASTE_MATH::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_x308 = CHASTE_MATH::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; + partialF = -CHASTE_CONST(0.014999999999999999) * var_x307 - CHASTE_CONST(0.10000000000000001) * var_x310; } else { @@ -2293,9 +2295,9 @@ std::shared_ptr // 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 + 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 > CHASTE_CONST(0.00018000000000000001)) ? (60000 * (1 - var_chaste_interface__calcium_dynamics__APtrack2) * (-CHASTE_CONST(0.00018000000000000001) + var_chaste_interface__calcium_dynamics__Cainfluxtrack) * var_chaste_interface__calcium_dynamics__APtrack2 / (CHASTE_CONST(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 = CHASTE_CONST(5.5555555555555554) * var_chaste_interface__calcium_dynamics__Ca_NSR - CHASTE_CONST(5.5555555555555554) * var_chaste_interface__calcium_dynamics__Ca_JSR; // millimolar_per_second + const double d_dt_chaste_interface_var_calcium_dynamics__Ca_JSR = CHASTE_CONST(0.001) * (-var_calcium_dynamics__i_rel + var_calcium_dynamics__i_tr) / (1 + 8 / CHASTE_MATH::Pow((CHASTE_CONST(0.80000000000000004) + var_chaste_interface__calcium_dynamics__Ca_JSR), 2)); // millimolar / millisecond return d_dt_chaste_interface_var_calcium_dynamics__Ca_JSR; } @@ -2320,12 +2322,12 @@ std::shared_ptr - const double var_x161 = 0.00062 + var_chaste_interface__calcium_dynamics__Cainfluxtrack; + const double var_x161 = CHASTE_CONST(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_x164 = -CHASTE_CONST(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_x166 = var_chaste_interface__calcium_dynamics__Cainfluxtrack > CHASTE_CONST(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; @@ -2333,12 +2335,12 @@ std::shared_ptr 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_x315 = CHASTE_CONST(0.80000000000000004) + var_chaste_interface__calcium_dynamics__Ca_JSR; + const double var_x316 = CHASTE_MATH::Pow(var_x315, (-2)); const double var_x317 = 1 / (1 + 8 * var_x316); - const double var_x318 = 0.001 * var_x317; + const double var_x318 = CHASTE_CONST(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)); + partialF = var_x318 * (-CHASTE_CONST(5.5555555555555554) - var_x188) + CHASTE_CONST(0.00025000000000000001) * (-var_x179 + CHASTE_CONST(5.5555555555555554) * var_chaste_interface__calcium_dynamics__Ca_NSR - CHASTE_CONST(5.5555555555555554) * var_chaste_interface__calcium_dynamics__Ca_JSR) / (CHASTE_MATH::Pow(var_x315, 3) * CHASTE_MATH::Pow((CHASTE_CONST(0.125) + var_x316), 2)); } else { @@ -2363,13 +2365,13 @@ std::shared_ptr // 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 + const double var_calcium_dynamics__i_leak = CHASTE_CONST(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 / (CHASTE_CONST(0.00092000000000000003) + var_chaste_interface__calcium_dynamics__Cai); // millimolar_per_second + const double var_calcium_dynamics__i_tr = CHASTE_CONST(5.5555555555555554) * var_chaste_interface__calcium_dynamics__Ca_NSR - CHASTE_CONST(5.5555555555555554) * var_chaste_interface__calcium_dynamics__Ca_JSR; // millimolar_per_second + const double var_ionic_concentrations__V_myo = CHASTE_CONST(8.2280000000000009e-12) * CHASTE_CONST(CHASTE_MATH::Pi); // micro_litre + const double var_calcium_dynamics__V_JSR = CHASTE_CONST(0.0070588235294117632) * var_ionic_concentrations__V_myo; // micro_litre + const double var_calcium_dynamics__V_NSR = CHASTE_CONST(0.081176470588235281) * var_ionic_concentrations__V_myo; // micro_litre + const double d_dt_chaste_interface_var_calcium_dynamics__Ca_NSR = CHASTE_CONST(0.001) * var_calcium_dynamics__i_up - CHASTE_CONST(0.001) * var_calcium_dynamics__i_leak - CHASTE_CONST(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; } @@ -2383,7 +2385,7 @@ std::shared_ptr - partialF = -0.00081642512077294684; + partialF = -CHASTE_CONST(0.00081642512077294684); } else { @@ -2398,7 +2400,7 @@ std::shared_ptr 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -2439,31 +2441,31 @@ std::shared_ptr 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_L_type_Ca_channel_f_Ca_gate__f_Ca = 1 / (1 + CHASTE_CONST(1666.6666666666667) * var_chaste_interface__calcium_dynamics__Cai); // dimensionless + const double var_calcium_background_current__E_Ca = CHASTE_CONST(13.356169352749133) * CHASTE_MATH::Log(mParameters[0] / var_chaste_interface__calcium_dynamics__Cai); // millivolt + const double var_fast_sodium_current__E_Na = CHASTE_CONST(26.712338705498265) * CHASTE_MATH::Log(mParameters[2] / var_chaste_interface__ionic_concentrations__Nai); // millivolt + const double var_L_type_Ca_channel__i_CaCa = CHASTE_CONST(7.8019226357407252) * (-CHASTE_CONST(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 = CHASTE_CONST(0.00069711623550831479) * (-CHASTE_CONST(0.75) * mParameters[1] + CHASTE_CONST(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 = CHASTE_CONST(0.0024381008236689767) * (-CHASTE_CONST(0.75) * mParameters[2] + CHASTE_CONST(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 = CHASTE_CONST(0.002) * (CHASTE_MATH::Pow(var_chaste_interface__ionic_concentrations__Nai, 3) * mParameters[0] * _lt_0_row[4] - CHASTE_MATH::Pow(mParameters[2], 3) * var_chaste_interface__calcium_dynamics__Cai * _lt_0_row[5]) / ((1 + CHASTE_CONST(144.92753623188406) * var_chaste_interface__calcium_dynamics__Cai) * (1 + CHASTE_CONST(0.001) * CHASTE_MATH::Pow(var_chaste_interface__ionic_concentrations__Nai, 3) * mParameters[0] + CHASTE_CONST(0.001) * CHASTE_MATH::Pow(mParameters[2], 3) * var_chaste_interface__calcium_dynamics__Cai)); // microA_per_microF + const double var_T_type_Ca_channel__i_Ca_T = CHASTE_CONST(0.050000000000000003) * CHASTE_MATH::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 = CHASTE_CONST(0.003016) * var_chaste_interface__membrane__V - CHASTE_CONST(0.003016) * var_calcium_background_current__E_Ca; // microA_per_microF + const double var_fast_sodium_current__i_Na = CHASTE_MATH::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_non_specific_calcium_activated_current__i_ns_K = CHASTE_CONST(3612.0012202503358) * (-CHASTE_CONST(0.75) * mParameters[1] + CHASTE_CONST(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 + CHASTE_CONST(1.7279999999999996e-9) / CHASTE_MATH::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 = CHASTE_CONST(3612.0012202503358) * (-CHASTE_CONST(0.75) * mParameters[2] + CHASTE_CONST(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 + CHASTE_CONST(1.7279999999999996e-9) / CHASTE_MATH::Pow(var_chaste_interface__calcium_dynamics__Cai, 3)) * (_lt_0_row[3])); // microA_per_microF + const double var_sarcolemmal_calcium_pump__i_p_Ca = CHASTE_CONST(1.1499999999999999) * var_chaste_interface__calcium_dynamics__Cai / (CHASTE_CONST(0.00050000000000000001) + var_chaste_interface__calcium_dynamics__Cai); // microA_per_microF + const double var_slow_delayed_rectifier_potassium_current__i_Ks = (CHASTE_CONST(0.433) + CHASTE_CONST(0.25979999999999998) / (1 + CHASTE_CONST(6.4818210260626455e-7) * CHASTE_MATH::Pow((1 / var_chaste_interface__calcium_dynamics__Cai), CHASTE_CONST(1.3999999999999999)))) * (-CHASTE_CONST(26.712338705498265) * CHASTE_MATH::Log((CHASTE_CONST(0.018329999999999999) * mParameters[2] + mParameters[1]) / (CHASTE_CONST(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 = CHASTE_CONST(0.0040000000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.0040000000000000001) * var_fast_sodium_current__E_Na; // microA_per_microF + const double var_sodium_potassium_pump__i_NaK = 2 * mParameters[1] / ((1 + 100 / CHASTE_MATH::Pow(var_chaste_interface__ionic_concentrations__Nai, 2)) * (CHASTE_CONST(1.5) + mParameters[1]) * (1 + _lt_0_row[7] + CHASTE_CONST(0.036499999999999998) * (-CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(0.01485884101040119) * mParameters[2])) * _lt_0_row[6])); // microA_per_microF + const double var_time_independent_potassium_current__E_K = CHASTE_CONST(26.712338705498265) * CHASTE_MATH::Log(mParameters[1] / var_chaste_interface__ionic_concentrations__Ki); // millivolt + const double var_ATP_sensitive_potassium_current__i_K_ATP = CHASTE_CONST(1.921898339896919e-8) * CHASTE_MATH::Pow(mParameters[1], CHASTE_CONST(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 = CHASTE_CONST(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 = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::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 = CHASTE_CONST(438.93811257017387) * CHASTE_MATH::Sqrt(mParameters[1]) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[5] / ((1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.23849999999999999) * var_time_independent_potassium_current__E_K)) * (1020 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.23849999999999999) * var_time_independent_potassium_current__E_K)) + 1000 * (CHASTE_CONST(0.49124000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__membrane__V - CHASTE_CONST(0.080320000000000003) * var_time_independent_potassium_current__E_K) + CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.061749999999999999) * var_time_independent_potassium_current__E_K)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(0.51429999999999998) * var_time_independent_potassium_current__E_K - CHASTE_CONST(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 + const double var_membrane__dVdt = -(CHASTE_STIM(var_chaste_interface__environment__time_converted) / CHASTE_CAP() + 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 = CHASTE_CONST(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; } @@ -2473,7 +2475,7 @@ std::shared_ptr double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -2512,107 +2514,107 @@ std::shared_ptr 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_x1 = CHASTE_MATH::Pow(var_x0, CHASTE_CONST(1.3999999999999999)); + const double var_x2 = 1 + CHASTE_CONST(6.4818210260626455e-7) * var_x1; + const double var_x3 = CHASTE_CONST(0.433) + CHASTE_CONST(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_x6 = CHASTE_CONST(0.018717941753901308) * var_chaste_interface__membrane__V; + const double var_x7 = CHASTE_MATH::Exp(var_x6); + const double var_x8 = CHASTE_MATH::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_x10 = CHASTE_MATH::Exp(-var_x6); + const double var_x11 = CHASTE_MATH::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_x15 = 1 / (1 + CHASTE_CONST(144.92753623188406) * var_chaste_interface__calcium_dynamics__Cai); + const double var_x16 = 1 + CHASTE_CONST(0.001) * var_x12 + CHASTE_CONST(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_x19 = CHASTE_CONST(0.002) * var_x18; + const double var_x21 = CHASTE_MATH::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_x24 = 1 / (CHASTE_CONST(1.5) + mParameters[1]); + const double var_x25 = CHASTE_MATH::Exp(-CHASTE_CONST(0.003743588350780262) * var_chaste_interface__membrane__V); + const double var_x26 = CHASTE_MATH::Exp(CHASTE_CONST(0.01485884101040119) * mParameters[2]); + const double var_x27 = CHASTE_CONST(0.037435883507802616) * var_chaste_interface__membrane__V; + const double var_x28 = CHASTE_MATH::Exp(-var_x27); + const double var_x29 = 1 + CHASTE_CONST(0.1245) * var_x25 + CHASTE_CONST(0.036499999999999998) * var_x28 * (-CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * var_x26); + const double var_x33 = CHASTE_MATH::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_x35 = CHASTE_CONST(0.050000000000000003) * var_x34; + const double var_x36 = 1 / (1 + CHASTE_CONST(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_x43 = var_x42 - CHASTE_CONST(0.34100000000000003) * mParameters[0]; const double var_x44 = var_x41 * var_x43; - const double var_x45 = 7.8019226357407252 * var_x44; + const double var_x45 = CHASTE_CONST(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_x50 = CHASTE_MATH::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_x53 = CHASTE_MATH::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_x57 = CHASTE_CONST(0.75) * var_x53; + const double var_x58 = -CHASTE_CONST(0.75) * mParameters[2] + var_x57 * var_chaste_interface__ionic_concentrations__Nai; + const double var_x59 = CHASTE_CONST(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_x64 = CHASTE_MATH::Exp(CHASTE_CONST(1.2521739130434781) - CHASTE_CONST(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_x67 = CHASTE_CONST(0.0055199999999999997) * var_x66; + const double var_x68 = CHASTE_MATH::Pow(mParameters[1], CHASTE_CONST(0.23999999999999999)); + const double var_x69 = CHASTE_CONST(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_x71 = CHASTE_MATH::Log(var_x70 * mParameters[1]); + const double var_x72 = -CHASTE_CONST(26.712338705498265) * var_x71 + var_chaste_interface__membrane__V; + const double var_x73 = CHASTE_MATH::Exp(CHASTE_CONST(0.4017857142857143) + CHASTE_CONST(0.044642857142857144) * var_chaste_interface__membrane__V); const double var_x74 = 1 + var_x73; - const double var_x75 = sqrt(mParameters[1]); + const double var_x75 = CHASTE_MATH::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_x78 = CHASTE_CONST(0.43033148291193518) * var_x77; + const double var_x79 = CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(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_x82 = CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(13.738155796237757) * var_x71 - CHASTE_CONST(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_x85 = CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__membrane__V - CHASTE_CONST(2.1455350448256207) * var_x71); + const double var_x86 = CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(1.6494869150645177) * var_x71); + const double var_x87 = var_x86 + CHASTE_CONST(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_x92 = CHASTE_CONST(438.93811257017387) * var_x91; + const double var_x93 = -CHASTE_CONST(0.75) * mParameters[1] + var_x57 * var_chaste_interface__ionic_concentrations__Ki; + const double var_x94 = CHASTE_CONST(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_x110 = CHASTE_CONST(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_x115 = 1 / (CHASTE_CONST(0.018329999999999999) * var_chaste_interface__ionic_concentrations__Nai + var_chaste_interface__ionic_concentrations__Ki); + const double var_x116 = -CHASTE_CONST(26.712338705498265) * CHASTE_MATH::Log(var_x115 * (CHASTE_CONST(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_x126 = CHASTE_MATH::Log(var_x125 * mParameters[2]); + const double var_x127 = -CHASTE_CONST(26.712338705498265) * var_x126 + var_chaste_interface__membrane__V; + const double var_x136 = CHASTE_MATH::Log(var_x0 * mParameters[0]); + const double var_x137 = -CHASTE_CONST(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_x175 = CHASTE_CONST(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; + const double var_x181 = -CHASTE_CONST(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)); + partialF = ((var_x104 * (var_x180 + var_x181 + CHASTE_CONST(0.0070159999999999997) * var_chaste_interface__membrane__V - CHASTE_CONST(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 + CHASTE_STIM(var_chaste_interface__environment__time_converted) / CHASTE_CAP()) < -150000) ? (-CHASTE_CONST(100.5)) : (-CHASTE_CONST(0.5))); } else { @@ -2635,7 +2637,7 @@ std::shared_ptr // 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 + const double d_dt_chaste_interface_var_calcium_dynamics__APtrack2 = CHASTE_CONST(0.001) * (((var_chaste_interface__calcium_dynamics__APtrack > CHASTE_CONST(0.17999999999999999)) && (var_chaste_interface__calcium_dynamics__APtrack < CHASTE_CONST(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; } @@ -2650,9 +2652,9 @@ std::shared_ptr - const double var_x319 = (var_chaste_interface__calcium_dynamics__APtrack > 0.17999999999999999) && (var_chaste_interface__calcium_dynamics__APtrack < 0.20000000000000001); + const double var_x319 = (var_chaste_interface__calcium_dynamics__APtrack > CHASTE_CONST(0.17999999999999999)) && (var_chaste_interface__calcium_dynamics__APtrack < CHASTE_CONST(0.20000000000000001)); - partialF = ((var_x319) ? (-100.5) : (-0.5)); + partialF = ((var_x319) ? (-CHASTE_CONST(100.5)) : (-CHASTE_CONST(0.5))); } else { @@ -2675,7 +2677,7 @@ std::shared_ptr // 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 + const double d_dt_chaste_interface_var_calcium_dynamics__APtrack3 = CHASTE_CONST(0.001) * (((var_chaste_interface__calcium_dynamics__APtrack > CHASTE_CONST(0.17999999999999999)) && (var_chaste_interface__calcium_dynamics__APtrack < CHASTE_CONST(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; } @@ -2690,9 +2692,9 @@ std::shared_ptr - const double var_x319 = (var_chaste_interface__calcium_dynamics__APtrack > 0.17999999999999999) && (var_chaste_interface__calcium_dynamics__APtrack < 0.20000000000000001); + const double var_x319 = (var_chaste_interface__calcium_dynamics__APtrack > CHASTE_CONST(0.17999999999999999)) && (var_chaste_interface__calcium_dynamics__APtrack < CHASTE_CONST(0.20000000000000001)); - partialF = ((var_x319) ? (-100.5) : (-0.01)); + partialF = ((var_x319) ? (-CHASTE_CONST(100.5)) : (-CHASTE_CONST(0.01))); } else { @@ -2707,7 +2709,7 @@ std::shared_ptr 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -2738,15 +2740,15 @@ std::shared_ptr 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 + const double var_L_type_Ca_channel_f_Ca_gate__f_Ca = 1 / (1 + CHASTE_CONST(1666.6666666666667) * var_chaste_interface__calcium_dynamics__Cai); // dimensionless + const double var_ionic_concentrations__V_myo = CHASTE_CONST(8.2280000000000009e-12) * CHASTE_CONST(CHASTE_MATH::Pi); // micro_litre + const double var_calcium_background_current__E_Ca = CHASTE_CONST(13.356169352749133) * CHASTE_MATH::Log(mParameters[0] / var_chaste_interface__calcium_dynamics__Cai); // millivolt + const double var_L_type_Ca_channel__i_CaCa = CHASTE_CONST(7.8019226357407252) * (-CHASTE_CONST(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 = CHASTE_CONST(0.002) * (CHASTE_MATH::Pow(var_chaste_interface__ionic_concentrations__Nai, 3) * mParameters[0] * _lt_0_row[4] - CHASTE_MATH::Pow(mParameters[2], 3) * var_chaste_interface__calcium_dynamics__Cai * _lt_0_row[5]) / ((1 + CHASTE_CONST(144.92753623188406) * var_chaste_interface__calcium_dynamics__Cai) * (1 + CHASTE_CONST(0.001) * CHASTE_MATH::Pow(var_chaste_interface__ionic_concentrations__Nai, 3) * mParameters[0] + CHASTE_CONST(0.001) * CHASTE_MATH::Pow(mParameters[2], 3) * var_chaste_interface__calcium_dynamics__Cai)); // microA_per_microF + const double var_T_type_Ca_channel__i_Ca_T = CHASTE_CONST(0.050000000000000003) * CHASTE_MATH::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 = CHASTE_CONST(0.003016) * var_chaste_interface__membrane__V - CHASTE_CONST(0.003016) * var_calcium_background_current__E_Ca; // microA_per_microF + const double var_sarcolemmal_calcium_pump__i_p_Ca = CHASTE_CONST(1.1499999999999999) * var_chaste_interface__calcium_dynamics__Cai / (CHASTE_CONST(0.00050000000000000001) + var_chaste_interface__calcium_dynamics__Cai); // microA_per_microF + const double d_dt_chaste_interface_var_calcium_dynamics__Cainfluxtrack = CHASTE_CONST(0.001) * ((var_chaste_interface__calcium_dynamics__APtrack > CHASTE_CONST(0.20000000000000001)) ? (-CHASTE_CONST(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 > CHASTE_CONST(0.01)) ? (0) : (-500 * var_chaste_interface__calcium_dynamics__Cainfluxtrack))); // 1 / millisecond return d_dt_chaste_interface_var_calcium_dynamics__Cainfluxtrack; } @@ -2763,9 +2765,9 @@ std::shared_ptr - const double var_x320 = var_chaste_interface__calcium_dynamics__APtrack > 0.20000000000000001; + const double var_x320 = var_chaste_interface__calcium_dynamics__APtrack > CHASTE_CONST(0.20000000000000001); - partialF = (((var_x320) || (var_chaste_interface__calcium_dynamics__APtrack2 > 0.01)) ? (0) : (-0.5)); + partialF = (((var_x320) || (var_chaste_interface__calcium_dynamics__APtrack2 > CHASTE_CONST(0.01))) ? (0) : (-CHASTE_CONST(0.5))); } else { @@ -2792,7 +2794,7 @@ std::shared_ptr // 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 + const double d_dt_chaste_interface_var_calcium_dynamics__OVRLDtrack = CHASTE_CONST(0.001) * (((var_chaste_interface__calcium_dynamics__APtrack3 < CHASTE_CONST(0.37)) && (var_chaste_interface__calcium_dynamics__OVRLDtrack3 < CHASTE_CONST(0.37)) && (1 / (1 + CHASTE_CONST(0.80000000000000004) / var_chaste_interface__calcium_dynamics__Ca_JSR) > CHASTE_CONST(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; } @@ -2812,7 +2814,7 @@ std::shared_ptr - 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)); + partialF = (((var_chaste_interface__calcium_dynamics__APtrack3 < CHASTE_CONST(0.37)) && (var_chaste_interface__calcium_dynamics__OVRLDtrack3 < CHASTE_CONST(0.37)) && (1 / (1 + CHASTE_CONST(0.80000000000000004) / var_chaste_interface__calcium_dynamics__Ca_JSR) > CHASTE_CONST(0.69999999999999996))) ? (-50) : (-CHASTE_CONST(0.5))); } else { @@ -2835,7 +2837,7 @@ std::shared_ptr // 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 + const double d_dt_chaste_interface_var_calcium_dynamics__OVRLDtrack2 = CHASTE_CONST(0.001) * (((var_chaste_interface__calcium_dynamics__OVRLDtrack > CHASTE_CONST(0.97999999999999998)) && (var_chaste_interface__calcium_dynamics__OVRLDtrack2 < CHASTE_CONST(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; } @@ -2852,9 +2854,9 @@ std::shared_ptr - const double var_x321 = var_chaste_interface__calcium_dynamics__OVRLDtrack > 0.97999999999999998; + const double var_x321 = var_chaste_interface__calcium_dynamics__OVRLDtrack > CHASTE_CONST(0.97999999999999998); - partialF = (((var_x321) && (var_chaste_interface__calcium_dynamics__OVRLDtrack2 < 0.97999999999999998)) ? (-50) : (-0.5)); + partialF = (((var_x321) && (var_chaste_interface__calcium_dynamics__OVRLDtrack2 < CHASTE_CONST(0.97999999999999998))) ? (-50) : (-CHASTE_CONST(0.5))); } else { @@ -2877,7 +2879,7 @@ std::shared_ptr // 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 + const double d_dt_chaste_interface_var_calcium_dynamics__OVRLDtrack3 = CHASTE_CONST(0.001) * (((var_chaste_interface__calcium_dynamics__OVRLDtrack > CHASTE_CONST(0.97999999999999998)) && (var_chaste_interface__calcium_dynamics__OVRLDtrack3 < CHASTE_CONST(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; } @@ -2894,9 +2896,9 @@ std::shared_ptr - const double var_x321 = var_chaste_interface__calcium_dynamics__OVRLDtrack > 0.97999999999999998; + const double var_x321 = var_chaste_interface__calcium_dynamics__OVRLDtrack > CHASTE_CONST(0.97999999999999998); - partialF = (((var_x321) && (var_chaste_interface__calcium_dynamics__OVRLDtrack3 < 0.97999999999999998)) ? (-50) : (-0.01)); + partialF = (((var_x321) && (var_chaste_interface__calcium_dynamics__OVRLDtrack3 < CHASTE_CONST(0.97999999999999998))) ? (-50) : (-CHASTE_CONST(0.01))); } else { @@ -2911,7 +2913,7 @@ std::shared_ptr 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -2938,17 +2940,17 @@ std::shared_ptr 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_L_type_Ca_channel_f_Ca_gate__f_Ca = 1 / (1 + CHASTE_CONST(1666.6666666666667) * var_chaste_interface__calcium_dynamics__Cai); // dimensionless + const double var_ionic_concentrations__V_myo = CHASTE_CONST(8.2280000000000009e-12) * CHASTE_CONST(CHASTE_MATH::Pi); // micro_litre + const double var_fast_sodium_current__E_Na = CHASTE_CONST(26.712338705498265) * CHASTE_MATH::Log(mParameters[2] / var_chaste_interface__ionic_concentrations__Nai); // millivolt + const double var_L_type_Ca_channel__i_CaNa = CHASTE_CONST(0.0024381008236689767) * (-CHASTE_CONST(0.75) * mParameters[2] + CHASTE_CONST(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 = CHASTE_CONST(0.002) * (CHASTE_MATH::Pow(var_chaste_interface__ionic_concentrations__Nai, 3) * mParameters[0] * _lt_0_row[4] - CHASTE_MATH::Pow(mParameters[2], 3) * var_chaste_interface__calcium_dynamics__Cai * _lt_0_row[5]) / ((1 + CHASTE_CONST(144.92753623188406) * var_chaste_interface__calcium_dynamics__Cai) * (1 + CHASTE_CONST(0.001) * CHASTE_MATH::Pow(var_chaste_interface__ionic_concentrations__Nai, 3) * mParameters[0] + CHASTE_CONST(0.001) * CHASTE_MATH::Pow(mParameters[2], 3) * var_chaste_interface__calcium_dynamics__Cai)); // microA_per_microF + const double var_fast_sodium_current__i_Na = CHASTE_MATH::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 + const double var_non_specific_calcium_activated_current__i_ns_Na = CHASTE_CONST(3612.0012202503358) * (-CHASTE_CONST(0.75) * mParameters[2] + CHASTE_CONST(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 + CHASTE_CONST(1.7279999999999996e-9) / CHASTE_MATH::Pow(var_chaste_interface__calcium_dynamics__Cai, 3)) * (_lt_0_row[3])); // microA_per_microF + const double var_sodium_background_current__i_Na_b = CHASTE_CONST(0.0040000000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.0040000000000000001) * var_fast_sodium_current__E_Na; // microA_per_microF + const double var_sodium_potassium_pump__i_NaK = 2 * mParameters[1] / ((1 + 100 / CHASTE_MATH::Pow(var_chaste_interface__ionic_concentrations__Nai, 2)) * (CHASTE_CONST(1.5) + mParameters[1]) * (1 + _lt_0_row[7] + CHASTE_CONST(0.036499999999999998) * (-CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(0.01485884101040119) * mParameters[2])) * _lt_0_row[6])); // microA_per_microF + const double d_dt_chaste_interface_var_ionic_concentrations__Nai = CHASTE_CONST(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; } @@ -2958,7 +2960,7 @@ std::shared_ptr double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -2977,49 +2979,49 @@ std::shared_ptr - 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_x6 = CHASTE_CONST(0.018717941753901308) * var_chaste_interface__membrane__V; + const double var_x7 = CHASTE_MATH::Exp(var_x6); + const double var_x8 = CHASTE_MATH::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_x10 = CHASTE_MATH::Exp(-var_x6); + const double var_x11 = CHASTE_MATH::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_x15 = 1 / (1 + CHASTE_CONST(144.92753623188406) * var_chaste_interface__calcium_dynamics__Cai); + const double var_x16 = 1 + CHASTE_CONST(0.001) * var_x12 + CHASTE_CONST(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_x21 = CHASTE_MATH::Pow(var_chaste_interface__ionic_concentrations__Nai, (-2)); + const double var_x24 = 1 / (CHASTE_CONST(1.5) + mParameters[1]); + const double var_x25 = CHASTE_MATH::Exp(-CHASTE_CONST(0.003743588350780262) * var_chaste_interface__membrane__V); + const double var_x26 = CHASTE_MATH::Exp(CHASTE_CONST(0.01485884101040119) * mParameters[2]); + const double var_x27 = CHASTE_CONST(0.037435883507802616) * var_chaste_interface__membrane__V; + const double var_x28 = CHASTE_MATH::Exp(-var_x27); + const double var_x29 = 1 + CHASTE_CONST(0.1245) * var_x25 + CHASTE_CONST(0.036499999999999998) * var_x28 * (-CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * var_x26); + const double var_x36 = 1 / (1 + CHASTE_CONST(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_x50 = CHASTE_MATH::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_x53 = CHASTE_MATH::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_x121 = CHASTE_MATH::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_x146 = CHASTE_MATH::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; + const double var_x151 = var_x150 / (CHASTE_MATH::Pow((CHASTE_CONST(0.01) + var_x21), 2) * CHASTE_MATH::Pow(var_chaste_interface__ionic_concentrations__Nai, 3)); + const double var_x153 = CHASTE_CONST(0.10684935482199306) * var_x125 + CHASTE_CONST(0.0018285756177517324) * var_x61 + CHASTE_CONST(26.712338705498265) * var_x125 * var_x52; + const double var_x158 = 1 / CHASTE_CONST(CHASTE_MATH::Pi); + const double var_x322 = CHASTE_CONST(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]); + partialF = var_x322 * (-var_x153 - CHASTE_CONST(0.12) * var_x151 - CHASTE_CONST(0.018000000000000002) * var_x148 * var_x18 + CHASTE_CONST(1.8e-5) * var_x118 * var_x121 * var_x146 * var_x15 * mParameters[0]); } else { @@ -3034,7 +3036,7 @@ std::shared_ptr 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -3063,20 +3065,20 @@ std::shared_ptr 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_L_type_Ca_channel_f_Ca_gate__f_Ca = 1 / (1 + CHASTE_CONST(1666.6666666666667) * var_chaste_interface__calcium_dynamics__Cai); // dimensionless + const double var_ionic_concentrations__V_myo = CHASTE_CONST(8.2280000000000009e-12) * CHASTE_CONST(CHASTE_MATH::Pi); // micro_litre + const double var_L_type_Ca_channel__i_CaK = CHASTE_CONST(0.00069711623550831479) * (-CHASTE_CONST(0.75) * mParameters[1] + CHASTE_CONST(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_non_specific_calcium_activated_current__i_ns_K = CHASTE_CONST(3612.0012202503358) * (-CHASTE_CONST(0.75) * mParameters[1] + CHASTE_CONST(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 + CHASTE_CONST(1.7279999999999996e-9) / CHASTE_MATH::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 = (CHASTE_CONST(0.433) + CHASTE_CONST(0.25979999999999998) / (1 + CHASTE_CONST(6.4818210260626455e-7) * CHASTE_MATH::Pow((1 / var_chaste_interface__calcium_dynamics__Cai), CHASTE_CONST(1.3999999999999999)))) * (-CHASTE_CONST(26.712338705498265) * CHASTE_MATH::Log((CHASTE_CONST(0.018329999999999999) * mParameters[2] + mParameters[1]) / (CHASTE_CONST(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 / CHASTE_MATH::Pow(var_chaste_interface__ionic_concentrations__Nai, 2)) * (CHASTE_CONST(1.5) + mParameters[1]) * (1 + _lt_0_row[7] + CHASTE_CONST(0.036499999999999998) * (-CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(0.01485884101040119) * mParameters[2])) * _lt_0_row[6])); // microA_per_microF + const double var_time_independent_potassium_current__E_K = CHASTE_CONST(26.712338705498265) * CHASTE_MATH::Log(mParameters[1] / var_chaste_interface__ionic_concentrations__Ki); // millivolt + const double var_ATP_sensitive_potassium_current__i_K_ATP = CHASTE_CONST(1.921898339896919e-8) * CHASTE_MATH::Pow(mParameters[1], CHASTE_CONST(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 = CHASTE_CONST(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 = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::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 = CHASTE_CONST(438.93811257017387) * CHASTE_MATH::Sqrt(mParameters[1]) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__membrane__V) * mParameters[5] / ((1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.23849999999999999) * var_time_independent_potassium_current__E_K)) * (1020 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.23849999999999999) * var_time_independent_potassium_current__E_K)) + 1000 * (CHASTE_CONST(0.49124000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__membrane__V - CHASTE_CONST(0.080320000000000003) * var_time_independent_potassium_current__E_K) + CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.061749999999999999) * var_time_independent_potassium_current__E_K)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(0.51429999999999998) * var_time_independent_potassium_current__E_K - CHASTE_CONST(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 + const double d_dt_chaste_interface_var_ionic_concentrations__Ki = CHASTE_CONST(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; } @@ -3086,7 +3088,7 @@ std::shared_ptr double partialF; if (!forceNumerical && this->mUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -3108,57 +3110,57 @@ std::shared_ptr 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_x1 = CHASTE_MATH::Pow(var_x0, CHASTE_CONST(1.3999999999999999)); + const double var_x2 = 1 + CHASTE_CONST(6.4818210260626455e-7) * var_x1; + const double var_x3 = CHASTE_CONST(0.433) + CHASTE_CONST(0.25979999999999998) / var_x2; + const double var_x27 = CHASTE_CONST(0.037435883507802616) * var_chaste_interface__membrane__V; + const double var_x36 = 1 / (1 + CHASTE_CONST(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_x53 = CHASTE_MATH::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_x64 = CHASTE_MATH::Exp(CHASTE_CONST(1.2521739130434781) - CHASTE_CONST(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_x68 = CHASTE_MATH::Pow(mParameters[1], CHASTE_CONST(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_x71 = CHASTE_MATH::Log(var_x70 * mParameters[1]); + const double var_x72 = -CHASTE_CONST(26.712338705498265) * var_x71 + var_chaste_interface__membrane__V; + const double var_x73 = CHASTE_MATH::Exp(CHASTE_CONST(0.4017857142857143) + CHASTE_CONST(0.044642857142857144) * var_chaste_interface__membrane__V); const double var_x74 = 1 + var_x73; - const double var_x75 = sqrt(mParameters[1]); + const double var_x75 = CHASTE_MATH::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_x79 = CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(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_x82 = CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(13.738155796237757) * var_x71 - CHASTE_CONST(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_x85 = CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__membrane__V - CHASTE_CONST(2.1455350448256207) * var_x71); + const double var_x86 = CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(1.6494869150645177) * var_x71); + const double var_x87 = var_x86 + CHASTE_CONST(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_x97 = CHASTE_MATH::Pow(var_x80, (-2)); + const double var_x98 = var_x82 * var_x87 / CHASTE_MATH::Pow(var_x83, 2); + const double var_x99 = CHASTE_CONST(0.0004218936106979757) * var_x72 * var_x90 / CHASTE_MATH::Pow((var_x81 + CHASTE_CONST(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_x115 = 1 / (CHASTE_CONST(0.018329999999999999) * var_chaste_interface__ionic_concentrations__Nai + var_chaste_interface__ionic_concentrations__Ki); + const double var_x154 = CHASTE_CONST(0.00052283717663123607) * var_x61 + var_x99 * (-var_x96 * (CHASTE_CONST(1.053972635420138) * var_x70 * var_x85 + CHASTE_CONST(1.6494869150645177) * var_x70 * var_x86) - CHASTE_CONST(13738.155796237757) * var_x70 * var_x98 + CHASTE_CONST(6498.310636886562) * var_x70 * var_x79 * var_x97) + CHASTE_CONST(11.495160327182951) * var_x70 * var_x77 + CHASTE_CONST(5.1338399412861326e-7) * var_x68 * var_x70 + CHASTE_CONST(0.14745210965435041) * var_x66 * var_x70 + CHASTE_CONST(11725.06353372661) * var_x70 * var_x91 - CHASTE_CONST(2796.4276527937964) * var_x101 * var_x102 * var_x70; + const double var_x158 = 1 / CHASTE_CONST(CHASTE_MATH::Pi); + const double var_x322 = CHASTE_CONST(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); + partialF = var_x322 * (-var_x154 + CHASTE_CONST(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 { @@ -3175,7 +3177,7 @@ std::shared_ptr { // Inputs: // Time units: millisecond - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -3205,43 +3207,43 @@ std::shared_ptr 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__P_Ca = CHASTE_CONST(0.00054000000000000001); // cm_per_second + const double var_L_type_Ca_channel__P_K = CHASTE_CONST(1.9299999999999999e-7); // cm_per_second + const double var_L_type_Ca_channel__P_Na = CHASTE_CONST(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__gamma_Cao = CHASTE_CONST(0.34100000000000003); // dimensionless + const double var_L_type_Ca_channel__gamma_Ki = CHASTE_CONST(0.75); // dimensionless + const double var_L_type_Ca_channel__gamma_Ko = CHASTE_CONST(0.75); // dimensionless + const double var_L_type_Ca_channel__gamma_Nai = CHASTE_CONST(0.75); // dimensionless + const double var_L_type_Ca_channel__gamma_Nao = CHASTE_CONST(0.75); // dimensionless + const double var_L_type_Ca_channel_f_Ca_gate__Km_Ca = CHASTE_CONST(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__I_st_converted = CHASTE_STIM(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_fast_sodium_current__E_Na = var_membrane__R * var_membrane__T * CHASTE_MATH::Log(mParameters[2] / var_chaste_interface__ionic_concentrations__Nai) / var_membrane__F; // millivolt + const double var_L_type_Ca_channel__I_CaCa = 4 * CHASTE_MATH::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 * CHASTE_MATH::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 + CHASTE_MATH::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 = CHASTE_MATH::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 * CHASTE_MATH::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 + CHASTE_MATH::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 = CHASTE_MATH::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 * CHASTE_MATH::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 + CHASTE_MATH::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_L_type_Ca_channel__i_Ca_L_converted = CHASTE_CAP() * var_L_type_Ca_channel__i_Ca_L; // uA_per_cm2 + const double var_fast_sodium_current__i_Na = CHASTE_MATH::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 = CHASTE_CAP() * 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__g_Kr = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::Sqrt(mParameters[1]) * mParameters[6]; // milliS_per_microF + const double var_time_independent_potassium_current__E_K = var_membrane__R * var_membrane__T * CHASTE_MATH::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_rapid_delayed_rectifier_potassium_current__i_Kr_converted = CHASTE_CAP() * var_rapid_delayed_rectifier_potassium_current__i_Kr; // uA_per_cm2 + const double var_time_independent_potassium_current__g_K1 = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::Sqrt(mParameters[1]) * mParameters[5]; // milliS_per_cm2 + const double var_time_independent_potassium_current_K1_gate__alpha_K1 = 1020 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.23849999999999999) * var_time_independent_potassium_current__E_K)); // per_second + const double var_time_independent_potassium_current_K1_gate__beta_K1 = 1000 * (CHASTE_CONST(0.49124000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__membrane__V - CHASTE_CONST(0.080320000000000003) * var_time_independent_potassium_current__E_K) + CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.061749999999999999) * var_time_independent_potassium_current__E_K)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(0.51429999999999998) * var_time_independent_potassium_current__E_K - CHASTE_CONST(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 + const double var_time_independent_potassium_current__i_K1_converted = CHASTE_CAP() * 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; diff --git a/chaste_codegen/data/tests/chaste_reference_models/GRL2Opt/dynamic_viswanathan_model_1999_epi.hpp b/chaste_codegen/data/tests/chaste_reference_models/GRL2Opt/dynamic_viswanathan_model_1999_epi.hpp index bd776ac22..f67af549b 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/GRL2Opt/dynamic_viswanathan_model_1999_epi.hpp +++ b/chaste_codegen/data/tests/chaste_reference_models/GRL2Opt/dynamic_viswanathan_model_1999_epi.hpp @@ -17,6 +17,9 @@ #include #include "AbstractDynamicallyLoadableEntity.hpp" #include "AbstractStimulusFunction.hpp" +#if USING_DEVICE_COMPILER +#include "StimulusEvaluatorCuda.hpp" +#endif #include "AbstractGeneralizedRushLarsenCardiacCell.hpp" class Dynamicviswanathan_model_1999_epiFromCellMLGRL2Opt : public AbstractGeneralizedRushLarsenCardiacCell, public AbstractDynamicallyLoadableEntity diff --git a/chaste_codegen/data/tests/chaste_reference_models/GRL2Opt/dynamic_winslow_model_1999.cpp b/chaste_codegen/data/tests/chaste_reference_models/GRL2Opt/dynamic_winslow_model_1999.cpp index 77a50e74f..f093f7d7b 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/GRL2Opt/dynamic_winslow_model_1999.cpp +++ b/chaste_codegen/data/tests/chaste_reference_models/GRL2Opt/dynamic_winslow_model_1999.cpp @@ -5,13 +5,14 @@ //! Model: winslow_model_1999 //! //! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen -//! (translator: chaste_codegen, model type: GeneralizedRushLarsenSecondOrderOpt) +//! (translator: chaste_codegen, model type: GeneralizedRushLarsenSecondOrder) //! on (date omitted as unimportant) //! //! #include "dynamic_winslow_model_1999.hpp" #include +#include #include #include #include "Exception.hpp" @@ -20,25 +21,34 @@ #include "HeartConfig.hpp" #include "IsNan.hpp" #include "MathsCustomFunctions.hpp" +#include "ChasteMathDeviceNamespaces.hpp" +#include "ChasteCpuMacros.hpp" - boost::shared_ptr Dynamicwinslow_model_1999FromCellMLGRL2Opt::UseCellMLDefaultStimulus() + + + + + boost::shared_ptr Dynamicwinslow_model_1999FromCellMLGRL2::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 + const double var_chaste_interface__membrane__stim_amplitude_converted = -CHASTE_CONST(21.126799999999999) * CHASTE_CAP(); // 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), - var_chaste_interface__membrane__stim_duration, - var_chaste_interface__membrane__stim_period, - var_chaste_interface__membrane__stim_start + -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; } - - Dynamicwinslow_model_1999FromCellMLGRL2Opt::Dynamicwinslow_model_1999FromCellMLGRL2Opt(boost::shared_ptr /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus) + 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, @@ -46,213 +56,246 @@ { // Time units: millisecond // - this->mpSystemInfo = OdeSystemInformation::Instance(); + 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] = CHASTE_CONST(0.00031250000000000001); // (var_L_type_Ca_current__P_Ca) [cm_per_second] + this->mParameters[7] = CHASTE_CONST(0.001); // (var_membrane__C_sc) [microF_per_cm2] + this->mParameters[8] = CHASTE_CONST(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] = CHASTE_CONST(2.7999999999999998); // (var_time_independent_potassium_current__g_K1) [milliS_per_microF] + this->mParameters[12] = CHASTE_CONST(0.0033999999999999998); // (var_rapid_activating_delayed_rectifiyer_K_current__g_Kr) [milliS_per_microF] + this->mParameters[13] = CHASTE_CONST(0.0027133999999999999); // (var_slow_activating_delayed_rectifiyer_K_current__g_Ks) [milliS_per_microF] + this->mParameters[14] = CHASTE_CONST(0.29999999999999999); // (var_Na_Ca_exchanger__K_NaCa) [microA_per_microF] + this->mParameters[15] = CHASTE_CONST(0.23815); // (var_transient_outward_potassium_current__g_to1) [milliS_per_microF] } - Dynamicwinslow_model_1999FromCellMLGRL2Opt::~Dynamicwinslow_model_1999FromCellMLGRL2Opt() + Dynamicwinslow_model_1999FromCellMLGRL2::~Dynamicwinslow_model_1999FromCellMLGRL2() { } + - double Dynamicwinslow_model_1999FromCellMLGRL2Opt::GetIIonic(const std::vector* pStateVariables) + 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_THIS(mFixedVoltage) : rY[0]); // Units: millivolt; Initial value: -96.1638 - double var_chaste_interface__fast_sodium_current_m_gate__m = rY[1]; + 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[2]; + 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[3]; + 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[4]; + 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[5]; + 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[6]; + 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[7]; + 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[8]; + 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[9]; + 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[20]; + 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[27]; + double var_chaste_interface__intracellular_ion_concentrations__Nai = rY[28]; // 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_L_type_Ca_current__P_K = CHASTE_CONST(5.7899999999999998e-7); // cm_per_second + const double var_L_type_Ca_current__i_Ca_half = -CHASTE_CONST(0.26500000000000001); // microA_per_microF + const double var_Na_Ca_exchanger__K_mCa = CHASTE_CONST(1.3799999999999999); // millimolar + const double var_Na_Ca_exchanger__K_mNa = CHASTE_CONST(87.5); // millimolar + const double var_Na_Ca_exchanger__K_sat = CHASTE_CONST(0.20000000000000001); // dimensionless + const double var_Na_Ca_exchanger__eta = CHASTE_CONST(0.34999999999999998); // dimensionless + const double var_calcium_background_current__g_Cab = CHASTE_CONST(0.00038420000000000001); // milliS_per_microF + const double var_membrane__F = CHASTE_CONST(96.485341500000004); // coulomb_per_millimole + const double var_membrane__R = CHASTE_CONST(8.3144720000000003); // joule_per_mole_kelvin + const double var_membrane__T = 310; // kelvin + const double var_plateau_potassium_current__g_Kp = CHASTE_CONST(0.0022160000000000001); // milliS_per_microF + const double var_plateau_potassium_current_Kp_gate__Kp_V = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.2521739130434781) - CHASTE_CONST(0.16722408026755853) * var_chaste_interface__membrane__V)); // dimensionless + const double var_rapid_activating_delayed_rectifiyer_K_current__R_V = 1 / (1 + CHASTE_CONST(1.4944999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(0.044600000000000001) * var_chaste_interface__membrane__V)); // dimensionless + const double var_sarcolemmal_calcium_pump__I_pCa = CHASTE_CONST(0.050000000000000003); // microA_per_microF + const double var_sarcolemmal_calcium_pump__K_mpCa = CHASTE_CONST(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_sodium_background_current__g_Nab = CHASTE_CONST(0.0030999999999999999); // milliS_per_microF + const double var_sodium_potassium_pump__I_NaK = CHASTE_CONST(0.69299999999999995); // microA_per_microF + const double var_sodium_potassium_pump__K_mKo = CHASTE_CONST(1.5); // millimolar + const double var_sodium_potassium_pump__K_mNai = 10; // millimolar + const double var_L_type_Ca_current__i_Ca_max = 4000 * CHASTE_MATH::Pow(var_membrane__F, 2) * (CHASTE_CONST(0.001) * CHASTE_MATH::Exp(2 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - CHASTE_CONST(0.34100000000000003) * mParameters[3]) * mParameters[6] * var_chaste_interface__membrane__V / ((-1 + CHASTE_MATH::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.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_L_type_Ca_current__i_Ca_converted = CHASTE_CAP() * 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 = CHASTE_CONST(0.5) * var_membrane__R * var_membrane__T * CHASTE_MATH::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_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_L_type_Ca_current__i_Ca_K = CHASTE_MATH::Pow(var_membrane__F, 2) * (-mParameters[4] + var_chaste_interface__intracellular_ion_concentrations__Ki * CHASTE_MATH::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 + CHASTE_MATH::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 * CHASTE_MATH::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(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_rapid_activating_delayed_rectifiyer_K_current__f_Ko = CHASTE_CONST(0.5) * CHASTE_MATH::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 = CHASTE_CAP() * var_rapid_activating_delayed_rectifiyer_K_current__i_Kr; // uA_per_cm2 + const double var_Na_Ca_exchanger__i_NaCa = 5000 * (CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Nai, 3) * mParameters[3] * CHASTE_MATH::Exp(var_Na_Ca_exchanger__eta * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - CHASTE_MATH::Pow(mParameters[5], 3) * var_chaste_interface__intracellular_ion_concentrations__Cai * CHASTE_MATH::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 * CHASTE_MATH::Exp((-1 + var_Na_Ca_exchanger__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (CHASTE_MATH::Pow(var_Na_Ca_exchanger__K_mNa, 3) + CHASTE_MATH::Pow(mParameters[5], 3)) * (var_Na_Ca_exchanger__K_mCa + mParameters[3])); // microA_per_microF + const double var_Na_Ca_exchanger__i_NaCa_converted = CHASTE_CAP() * var_Na_Ca_exchanger__i_NaCa; // uA_per_cm2 + const double var_fast_sodium_current__E_Na = var_membrane__R * var_membrane__T * CHASTE_MATH::Log(mParameters[5] / var_chaste_interface__intracellular_ion_concentrations__Nai) / var_membrane__F; // millivolt + const double var_fast_sodium_current__i_Na = CHASTE_MATH::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 = CHASTE_CAP() * 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 * CHASTE_MATH::Log((mParameters[4] + CHASTE_CONST(0.018329999999999999) * mParameters[5]) / (var_chaste_interface__intracellular_ion_concentrations__Ki + CHASTE_CONST(0.018329999999999999) * var_chaste_interface__intracellular_ion_concentrations__Nai)) / var_membrane__F; // millivolt + const double var_slow_activating_delayed_rectifiyer_K_current__i_Ks = CHASTE_MATH::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 = CHASTE_CAP() * 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 * 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 var_sodium_potassium_pump__sigma = -CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(0.01485884101040119) * mParameters[5]); // dimensionless + const double var_sodium_potassium_pump__f_NaK = 1 / (1 + CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(0.10000000000000001) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) + CHASTE_CONST(0.036499999999999998) * var_sodium_potassium_pump__sigma * CHASTE_MATH::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 + CHASTE_MATH::Pow((var_sodium_potassium_pump__K_mNai / var_chaste_interface__intracellular_ion_concentrations__Nai), CHASTE_CONST(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 + CHASTE_MATH::Exp(CHASTE_CONST(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 = CHASTE_CAP() * 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 = CHASTE_CAP() * var_transient_outward_potassium_current__i_to1; // uA_per_cm2 + const double var_chaste_interface__i_ionic = CHASTE_CAP() * var_L_type_Ca_current__i_Ca_K + CHASTE_CAP() * var_calcium_background_current__i_Ca_b + CHASTE_CAP() * var_plateau_potassium_current__i_Kp + CHASTE_CAP() * var_sarcolemmal_calcium_pump__i_p_Ca + CHASTE_CAP() * var_sodium_background_current__i_Na_b + CHASTE_CAP() * 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_1999FromCellMLGRL2Opt::UpdateTransmembranePotential(double var_chaste_interface__environment__time_converted) + 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_THIS(mFixedVoltage) : rY[0]); // Units: millivolt; Initial value: -96.1638 - double var_chaste_interface__fast_sodium_current_m_gate__m = rY[1]; + 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[2]; + 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[3]; + 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[4]; + 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[5]; + 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[6]; + 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[7]; + 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[8]; + 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[9]; + 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[20]; + 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[27]; + double var_chaste_interface__intracellular_ion_concentrations__Nai = rY[28]; // 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_L_type_Ca_current__P_K = CHASTE_CONST(5.7899999999999998e-7); // cm_per_second + const double var_L_type_Ca_current__i_Ca_half = -CHASTE_CONST(0.26500000000000001); // microA_per_microF + const double var_Na_Ca_exchanger__K_mCa = CHASTE_CONST(1.3799999999999999); // millimolar + const double var_Na_Ca_exchanger__K_mNa = CHASTE_CONST(87.5); // millimolar + const double var_Na_Ca_exchanger__K_sat = CHASTE_CONST(0.20000000000000001); // dimensionless + const double var_Na_Ca_exchanger__eta = CHASTE_CONST(0.34999999999999998); // dimensionless + const double var_calcium_background_current__g_Cab = CHASTE_CONST(0.00038420000000000001); // milliS_per_microF + const double var_membrane__F = CHASTE_CONST(96.485341500000004); // coulomb_per_millimole + const double var_membrane__R = CHASTE_CONST(8.3144720000000003); // joule_per_mole_kelvin + const double var_membrane__T = 310; // kelvin + const double var_membrane__i_Stim_converted = CHASTE_STIM(var_chaste_interface__environment__time_converted); // uA_per_cm2 + const double var_membrane__i_Stim = var_membrane__i_Stim_converted / CHASTE_CAP(); // microA_per_microF + const double var_plateau_potassium_current__g_Kp = CHASTE_CONST(0.0022160000000000001); // milliS_per_microF + const double var_plateau_potassium_current_Kp_gate__Kp_V = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.2521739130434781) - CHASTE_CONST(0.16722408026755853) * var_chaste_interface__membrane__V)); // dimensionless + const double var_rapid_activating_delayed_rectifiyer_K_current__R_V = 1 / (1 + CHASTE_CONST(1.4944999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(0.044600000000000001) * var_chaste_interface__membrane__V)); // dimensionless + const double var_sarcolemmal_calcium_pump__I_pCa = CHASTE_CONST(0.050000000000000003); // microA_per_microF + const double var_sarcolemmal_calcium_pump__K_mpCa = CHASTE_CONST(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_sodium_background_current__g_Nab = CHASTE_CONST(0.0030999999999999999); // milliS_per_microF + const double var_sodium_potassium_pump__I_NaK = CHASTE_CONST(0.69299999999999995); // microA_per_microF + const double var_sodium_potassium_pump__K_mKo = CHASTE_CONST(1.5); // millimolar + const double var_sodium_potassium_pump__K_mNai = 10; // millimolar + const double var_L_type_Ca_current__i_Ca_max = 4000 * CHASTE_MATH::Pow(var_membrane__F, 2) * (CHASTE_CONST(0.001) * CHASTE_MATH::Exp(2 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - CHASTE_CONST(0.34100000000000003) * mParameters[3]) * mParameters[6] * var_chaste_interface__membrane__V / ((-1 + CHASTE_MATH::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.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_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 = CHASTE_CONST(0.5) * var_membrane__R * var_membrane__T * CHASTE_MATH::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_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_L_type_Ca_current__i_Ca_K = CHASTE_MATH::Pow(var_membrane__F, 2) * (-mParameters[4] + var_chaste_interface__intracellular_ion_concentrations__Ki * CHASTE_MATH::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 + CHASTE_MATH::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 * CHASTE_MATH::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(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_rapid_activating_delayed_rectifiyer_K_current__f_Ko = CHASTE_CONST(0.5) * CHASTE_MATH::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 * (CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Nai, 3) * mParameters[3] * CHASTE_MATH::Exp(var_Na_Ca_exchanger__eta * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - CHASTE_MATH::Pow(mParameters[5], 3) * var_chaste_interface__intracellular_ion_concentrations__Cai * CHASTE_MATH::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 * CHASTE_MATH::Exp((-1 + var_Na_Ca_exchanger__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (CHASTE_MATH::Pow(var_Na_Ca_exchanger__K_mNa, 3) + CHASTE_MATH::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 * CHASTE_MATH::Log(mParameters[5] / var_chaste_interface__intracellular_ion_concentrations__Nai) / var_membrane__F; // millivolt + const double var_fast_sodium_current__i_Na = CHASTE_MATH::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 * CHASTE_MATH::Log((mParameters[4] + CHASTE_CONST(0.018329999999999999) * mParameters[5]) / (var_chaste_interface__intracellular_ion_concentrations__Ki + CHASTE_CONST(0.018329999999999999) * var_chaste_interface__intracellular_ion_concentrations__Nai)) / var_membrane__F; // millivolt + const double var_slow_activating_delayed_rectifiyer_K_current__i_Ks = CHASTE_MATH::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 * 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 + const double var_sodium_potassium_pump__sigma = -CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(0.01485884101040119) * mParameters[5]); // dimensionless + const double var_sodium_potassium_pump__f_NaK = 1 / (1 + CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(0.10000000000000001) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) + CHASTE_CONST(0.036499999999999998) * var_sodium_potassium_pump__sigma * CHASTE_MATH::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 + CHASTE_MATH::Pow((var_sodium_potassium_pump__K_mNai / var_chaste_interface__intracellular_ion_concentrations__Nai), CHASTE_CONST(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 + CHASTE_MATH::Exp(CHASTE_CONST(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 = CHASTE_CONST(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; @@ -280,7 +323,7 @@ } } - void Dynamicwinslow_model_1999FromCellMLGRL2Opt::ComputeOneStepExceptVoltage(double var_chaste_interface__environment__time_converted) + void Dynamicwinslow_model_1999FromCellMLGRL2::ComputeOneStepExceptVoltage(double var_chaste_interface__environment__time_converted) { std::vector& rY = rGetStateVariables(); const double delta=1e-8; @@ -288,64 +331,64 @@ mYInit = rY; double y_save; - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_THIS(mFixedVoltage) : rY[0]); // Units: millivolt; Initial value: -96.1638 - double var_chaste_interface__fast_sodium_current_m_gate__m = rY[1]; + 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[2]; + 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[3]; + 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[4]; + 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[5]; + 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[6]; + 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[7]; + 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[8]; + 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[9]; + 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[10]; + 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[11]; + 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[12]; + 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[13]; + 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[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[15]; + 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[16]; + 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[17]; + 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[18]; + 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[19]; + 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[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[21]; + 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[22]; + 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[23]; + 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[24]; + 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[25]; + 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[26]; + 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[27]; + double var_chaste_interface__intracellular_ion_concentrations__Nai = rY[28]; // 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]; @@ -355,172 +398,197 @@ 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__P_K = CHASTE_CONST(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.0; // per_second + const double d_dt_chaste_interface_var_L_type_Ca_current__O = CHASTE_CONST(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__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 d_dt_chaste_interface_var_L_type_Ca_current__O_Ca = CHASTE_CONST(0.001) * var_L_type_Ca_current__O_Ca_orig_deriv; // 1 / millisecond + const double var_L_type_Ca_current__i_Ca_half = -CHASTE_CONST(0.26500000000000001); // microA_per_microF + const double var_L_type_Ca_current__omega = 10; // per_second + const double var_Na_Ca_exchanger__K_mCa = CHASTE_CONST(1.3799999999999999); // millimolar + const double var_Na_Ca_exchanger__K_mNa = CHASTE_CONST(87.5); // millimolar + const double var_Na_Ca_exchanger__K_sat = CHASTE_CONST(0.20000000000000001); // dimensionless + const double var_Na_Ca_exchanger__eta = CHASTE_CONST(0.34999999999999998); // dimensionless + const double var_RyR_channel__k_a_minus = 576; // per_second + const double var_RyR_channel__k_a_plus = CHASTE_CONST(12150000000000.0); // millimolar4_per_second + const double var_RyR_channel__k_b_minus = 1930; // per_second + const double var_RyR_channel__k_b_plus = CHASTE_CONST(4050000000.0); // millimolar3_per_second + const double var_RyR_channel__k_c_minus = CHASTE_CONST(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.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 d_dt_chaste_interface_var_RyR_channel__P_C2 = CHASTE_CONST(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 = CHASTE_CONST(0.00016799999999999999); // millimolar + const double var_SERCA2a_pump__K_rb = CHASTE_CONST(3.29); // millimolar + const double var_SERCA2a_pump__N_fb = CHASTE_CONST(1.2); // dimensionless + const double var_SERCA2a_pump__N_rb = 1; // dimensionless + const double var_SERCA2a_pump__Vmaxf = CHASTE_CONST(0.081299999999999997); // millimolar_per_second + const double var_SERCA2a_pump__Vmaxr = CHASTE_CONST(0.318); // millimolar_per_second + const double var_calcium_background_current__g_Cab = CHASTE_CONST(0.00038420000000000001); // milliS_per_microF + const double var_intracellular_Ca_fluxes__HTRPN_tot = CHASTE_CONST(0.14000000000000001); // dimensionless + const double var_intracellular_Ca_fluxes__LTRPN_tot = CHASTE_CONST(0.070000000000000007); // dimensionless + const double var_intracellular_Ca_fluxes__k_htrpn_minus = CHASTE_CONST(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 = CHASTE_CONST(0.00057470000000000004); // second + const double var_intracellular_Ca_fluxes__tau_xfer = CHASTE_CONST(0.026700000000000002); // second + const double var_intracellular_ion_concentrations__A_cap = CHASTE_CONST(0.00015339999999999999); // cm2 + const double var_intracellular_ion_concentrations__CMDN_tot = CHASTE_CONST(0.050000000000000003); // millimolar + const double var_intracellular_ion_concentrations__CSQN_tot = 15; // millimolar + const double var_SERCA2a_pump__rb = CHASTE_MATH::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_L_type_Ca_current__gamma = CHASTE_CONST(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 - CHASTE_MATH::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 = CHASTE_CONST(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 + CHASTE_MATH::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 - CHASTE_MATH::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 = CHASTE_CONST(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 + CHASTE_MATH::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 = CHASTE_CONST(0.001) * var_RyR_channel__P_O2_orig_deriv; // 1 / millisecond + const double var_SERCA2a_pump__fb = CHASTE_MATH::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 = CHASTE_CONST(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__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 = CHASTE_CONST(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__K_mCMDN = CHASTE_CONST(0.0023800000000000002); // millimolar + const double var_intracellular_ion_concentrations__K_mCSQN = CHASTE_CONST(0.80000000000000004); // millimolar + const double var_intracellular_ion_concentrations__K_mEGTA = CHASTE_CONST(0.00014999999999999999); // millimolar + const double var_intracellular_ion_concentrations__V_JSR = CHASTE_CONST(1.6e-7); // micro_litre + const double var_intracellular_ion_concentrations__V_NSR = CHASTE_CONST(2.0999999999999998e-6); // micro_litre + const double var_intracellular_ion_concentrations__V_SS = CHASTE_CONST(1.2e-9); // micro_litre + const double var_intracellular_ion_concentrations__V_myo = CHASTE_CONST(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 d_dt_chaste_interface_var_intracellular_ion_concentrations__Ca_NSR = CHASTE_CONST(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 / CHASTE_MATH::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 d_dt_chaste_interface_var_intracellular_ion_concentrations__Ca_JSR = CHASTE_CONST(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 / CHASTE_MATH::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 / CHASTE_MATH::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 / CHASTE_MATH::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 / CHASTE_MATH::Pow((var_chaste_interface__intracellular_ion_concentrations__Cai + var_intracellular_ion_concentrations__K_mEGTA), 2)); // dimensionless + const double var_membrane__F = CHASTE_CONST(96.485341500000004); // coulomb_per_millimole + const double var_membrane__R = CHASTE_CONST(8.3144720000000003); // joule_per_mole_kelvin + const double var_membrane__T = 310; // kelvin + const double var_L_type_Ca_current__alpha = 400 * CHASTE_MATH::Exp(CHASTE_CONST(0.20000000000000001) + CHASTE_CONST(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 = 50 * CHASTE_MATH::Exp(-CHASTE_CONST(0.15384615384615385) - CHASTE_CONST(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 = CHASTE_CONST(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 = CHASTE_CONST(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 + CHASTE_MATH::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 / CHASTE_MATH::Pow(var_L_type_Ca_current__b, 2); // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_current__C2 = CHASTE_CONST(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 + CHASTE_MATH::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 / CHASTE_MATH::Pow(var_L_type_Ca_current__b, 3); // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_current__C3 = CHASTE_CONST(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 + CHASTE_MATH::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 / CHASTE_MATH::Pow(var_L_type_Ca_current__b, 4); // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_current__C4 = CHASTE_CONST(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__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 = CHASTE_CONST(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 = CHASTE_CONST(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 / CHASTE_MATH::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 + CHASTE_MATH::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 = CHASTE_CONST(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 / CHASTE_MATH::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 + CHASTE_MATH::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 = CHASTE_CONST(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 / CHASTE_MATH::Pow(var_L_type_Ca_current__b, 4) + var_L_type_Ca_current__fprime) * var_chaste_interface__L_type_Ca_current__C_Ca4 + CHASTE_MATH::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 = CHASTE_CONST(0.001) * var_L_type_Ca_current__C_Ca4_orig_deriv; // 1 / millisecond + const double var_L_type_Ca_current_y_gate__tau_y = CHASTE_CONST(0.02) + CHASTE_CONST(0.59999999999999998) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(2.1052631578947367) + CHASTE_CONST(0.10526315789473684) * var_chaste_interface__membrane__V)); // second + const double var_L_type_Ca_current_y_gate__y_infinity = CHASTE_CONST(0.20000000000000001) + CHASTE_CONST(0.80000000000000004) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(2.5) + CHASTE_CONST(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 d_dt_chaste_interface_var_L_type_Ca_current_y_gate__y = CHASTE_CONST(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 * CHASTE_MATH::Exp(-CHASTE_CONST(11.764705882352942) + CHASTE_CONST(0.14705882352941177) * mParameters[10] - CHASTE_CONST(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 * CHASTE_MATH::Exp(CHASTE_CONST(0.079000000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.079000000000000001) * mParameters[10]) + 310000 * CHASTE_MATH::Exp(CHASTE_CONST(0.34999999999999998) * var_chaste_interface__membrane__V - CHASTE_CONST(0.34999999999999998) * mParameters[10])) : (CHASTE_CONST(7692.3076923076924) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.96036036036036043) + CHASTE_CONST(0.0900900900900901) * mParameters[10] - CHASTE_CONST(0.0900900900900901) * var_chaste_interface__membrane__V)))); // per_second + const double var_fast_sodium_current_h_gate__h_inf = CHASTE_CONST(0.01) * mParameters[9] + (1 - CHASTE_CONST(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 = CHASTE_CONST(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 * (CHASTE_CONST(37.780000000000001) + var_chaste_interface__membrane__V) * (-127140 * CHASTE_MATH::Exp(CHASTE_CONST(0.24440000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.24440000000000001) * mParameters[10]) - CHASTE_CONST(3.4740000000000003e-5) * CHASTE_MATH::Exp(CHASTE_CONST(0.043909999999999998) * mParameters[10] - CHASTE_CONST(0.043909999999999998) * var_chaste_interface__membrane__V)) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(24.640530000000002) + CHASTE_CONST(0.311) * var_chaste_interface__membrane__V - CHASTE_CONST(0.311) * mParameters[10]))) : (0)); // per_second + const double var_fast_sodium_current_j_gate__beta_j = ((var_chaste_interface__membrane__V < -40) ? (CHASTE_CONST(121.2) * CHASTE_MATH::Exp(CHASTE_CONST(0.01052) * mParameters[10] - CHASTE_CONST(0.01052) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(5.5312920000000005) + CHASTE_CONST(0.13780000000000001) * mParameters[10] - CHASTE_CONST(0.13780000000000001) * var_chaste_interface__membrane__V))) : (300 * CHASTE_MATH::Exp(CHASTE_CONST(2.5349999999999999e-7) * mParameters[10] - CHASTE_CONST(2.5349999999999999e-7) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.2000000000000002) + CHASTE_CONST(0.10000000000000001) * mParameters[10] - CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V)))); // per_second + const double var_fast_sodium_current_j_gate__j_inf = CHASTE_CONST(0.01) * mParameters[9] + (1 - CHASTE_CONST(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 = CHASTE_CONST(0.001) * var_fast_sodium_current_j_gate__j_orig_deriv; // 1 / millisecond + const double var_fast_sodium_current_m_gate__E0_m = CHASTE_CONST(47.130000000000003) + var_chaste_interface__membrane__V; // millivolt + const double var_fast_sodium_current_m_gate__alpha_m = ((CHASTE_MATH::Abs(var_fast_sodium_current_m_gate__E0_m) < CHASTE_CONST(1.0000000000000001e-5)) ? (1000 / (CHASTE_CONST(0.10000000000000001) - CHASTE_CONST(0.0050000000000000001) * var_fast_sodium_current_m_gate__E0_m)) : (320 * var_fast_sodium_current_m_gate__E0_m / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(0.10000000000000001) * var_fast_sodium_current_m_gate__E0_m)))); // per_second + const double var_fast_sodium_current_m_gate__beta_m = 80 * CHASTE_MATH::Exp(-CHASTE_CONST(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 = CHASTE_CONST(0.001) * var_fast_sodium_current_m_gate__m_orig_deriv; // 1 / millisecond + const double var_plateau_potassium_current__g_Kp = CHASTE_CONST(0.0022160000000000001); // milliS_per_microF + const double var_plateau_potassium_current_Kp_gate__Kp_V = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.2521739130434781) - CHASTE_CONST(0.16722408026755853) * var_chaste_interface__membrane__V)); // dimensionless + const double var_rapid_activating_delayed_rectifiyer_K_current__R_V = 1 / (1 + CHASTE_CONST(1.4944999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(0.044600000000000001) * var_chaste_interface__membrane__V)); // dimensionless + const double var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__K12 = CHASTE_MATH::Exp(-CHASTE_CONST(5.4950000000000001) + CHASTE_CONST(0.1691) * var_chaste_interface__membrane__V); // dimensionless + const double var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__K21 = CHASTE_MATH::Exp(-CHASTE_CONST(7.6769999999999996) - CHASTE_CONST(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__tau_factor = 1; // dimensionless + const double var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__tau_X_kr = CHASTE_CONST(0.001) / (var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__K12 + var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__K21) + CHASTE_CONST(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 d_dt_chaste_interface_var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr = CHASTE_CONST(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 = CHASTE_CONST(0.050000000000000003); // microA_per_microF + const double var_sarcolemmal_calcium_pump__K_mpCa = CHASTE_CONST(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_infinity = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.8161764705882353) - CHASTE_CONST(0.073529411764705885) * var_chaste_interface__membrane__V)); // dimensionless + const double var_slow_activating_delayed_rectifiyer_K_current_X_ks_gate__tau_X_ks = CHASTE_CONST(0.001) / (CHASTE_CONST(0.00013100000000000001) * (-10 + var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.68699999999999994) + CHASTE_CONST(0.068699999999999997) * var_chaste_interface__membrane__V)) + CHASTE_CONST(7.1899999999999999e-5) * (-10 + var_chaste_interface__membrane__V) / (1 - CHASTE_MATH::Exp(CHASTE_CONST(1.48) - CHASTE_CONST(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 d_dt_chaste_interface_var_slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks = CHASTE_CONST(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 = CHASTE_CONST(0.0030999999999999999); // milliS_per_microF + const double var_sodium_potassium_pump__I_NaK = CHASTE_CONST(0.69299999999999995); // microA_per_microF + const double var_sodium_potassium_pump__K_mKo = CHASTE_CONST(1.5); // millimolar + const double var_sodium_potassium_pump__K_mNai = 10; // millimolar + const double var_L_type_Ca_current__i_Ca_max = 4000 * CHASTE_MATH::Pow(var_membrane__F, 2) * (CHASTE_CONST(0.001) * CHASTE_MATH::Exp(2 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - CHASTE_CONST(0.34100000000000003) * mParameters[3]) * mParameters[6] * var_chaste_interface__membrane__V / ((-1 + CHASTE_MATH::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_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_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 = CHASTE_CONST(0.5) * var_membrane__R * var_membrane__T * CHASTE_MATH::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_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 + 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 - CHASTE_CONST(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 = CHASTE_CONST(0.001) * var_intracellular_ion_concentrations__Ca_ss_orig_deriv; // millimolar / millisecond + const double var_L_type_Ca_current__i_Ca_K = CHASTE_MATH::Pow(var_membrane__F, 2) * (-mParameters[4] + var_chaste_interface__intracellular_ion_concentrations__Ki * CHASTE_MATH::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 + CHASTE_MATH::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 * CHASTE_MATH::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 = CHASTE_CONST(0.5) * CHASTE_MATH::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 * (CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Nai, 3) * mParameters[3] * CHASTE_MATH::Exp(var_Na_Ca_exchanger__eta * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - CHASTE_MATH::Pow(mParameters[5], 3) * var_chaste_interface__intracellular_ion_concentrations__Cai * CHASTE_MATH::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 * CHASTE_MATH::Exp((-1 + var_Na_Ca_exchanger__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (CHASTE_MATH::Pow(var_Na_Ca_exchanger__K_mNa, 3) + CHASTE_MATH::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 * CHASTE_MATH::Log(mParameters[5] / var_chaste_interface__intracellular_ion_concentrations__Nai) / var_membrane__F; // millivolt + const double var_fast_sodium_current__i_Na = CHASTE_MATH::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 + CHASTE_CONST(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 = CHASTE_CONST(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 * CHASTE_MATH::Log((mParameters[4] + CHASTE_CONST(0.018329999999999999) * mParameters[5]) / (var_chaste_interface__intracellular_ion_concentrations__Ki + CHASTE_CONST(0.018329999999999999) * var_chaste_interface__intracellular_ion_concentrations__Nai)) / var_membrane__F; // millivolt + const double var_slow_activating_delayed_rectifiyer_K_current__i_Ks = CHASTE_MATH::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 = -CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(0.01485884101040119) * mParameters[5]); // dimensionless + const double var_sodium_potassium_pump__f_NaK = 1 / (1 + CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(0.10000000000000001) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) + CHASTE_CONST(0.036499999999999998) * var_sodium_potassium_pump__sigma * CHASTE_MATH::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 + CHASTE_MATH::Pow((var_sodium_potassium_pump__K_mNai / var_chaste_interface__intracellular_ion_concentrations__Nai), CHASTE_CONST(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 = CHASTE_CONST(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 + CHASTE_MATH::Exp(CHASTE_CONST(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 = CHASTE_CONST(45.159999999999997) * CHASTE_MATH::Exp(CHASTE_CONST(0.035770000000000003) * var_chaste_interface__membrane__V); // per_second + const double var_transient_outward_potassium_current_X_to1_gate__beta_X_to1 = CHASTE_CONST(98.900000000000006) * CHASTE_MATH::Exp(-CHASTE_CONST(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 = CHASTE_CONST(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 = CHASTE_CONST(0.001) * var_intracellular_ion_concentrations__Ki_orig_deriv; // millimolar / millisecond + const double var_transient_outward_potassium_current_Y_to1_gate__alpha_Y_to1 = CHASTE_CONST(5.415) * CHASTE_MATH::Exp(-CHASTE_CONST(6.7000000000000002) - CHASTE_CONST(0.20000000000000001) * var_chaste_interface__membrane__V) / (1 + CHASTE_CONST(0.051334999999999999) * CHASTE_MATH::Exp(-CHASTE_CONST(6.7000000000000002) - CHASTE_CONST(0.20000000000000001) * var_chaste_interface__membrane__V)); // per_second + const double var_transient_outward_potassium_current_Y_to1_gate__beta_Y_to1 = CHASTE_CONST(5.415) * CHASTE_MATH::Exp(CHASTE_CONST(6.7000000000000002) + CHASTE_CONST(0.20000000000000001) * var_chaste_interface__membrane__V) / (1 + CHASTE_CONST(0.051334999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(6.7000000000000002) + CHASTE_CONST(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 = CHASTE_CONST(0.001) * var_transient_outward_potassium_current_Y_to1_gate__Y_to1_orig_deriv; // 1 / millisecond if (mSetVoltageDerivativeToZero) { @@ -528,75 +596,41 @@ } 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 + const double var_membrane__i_Stim_converted = CHASTE_STIM(var_chaste_interface__environment__time_converted); // uA_per_cm2 + const double var_membrane__i_Stim = var_membrane__i_Stim_converted / CHASTE_CAP(); // 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 = CHASTE_CONST(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[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; @@ -892,196 +926,212 @@ } - double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluateYDerivative0(double var_chaste_interface__environment__time_converted, std::vector& rY) + double Dynamicwinslow_model_1999FromCellMLGRL2::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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_THIS(mFixedVoltage) : rY[0]); // Units: millivolt; Initial value: -96.1638 - double var_chaste_interface__fast_sodium_current_m_gate__m = rY[1]; + 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[2]; + 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[3]; + 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[4]; + 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[5]; + 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[6]; + 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[7]; + 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[8]; + 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[9]; + 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[20]; + 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[27]; + double var_chaste_interface__intracellular_ion_concentrations__Nai = rY[28]; // 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_L_type_Ca_current__P_K = CHASTE_CONST(5.7899999999999998e-7); // cm_per_second + const double var_L_type_Ca_current__i_Ca_half = -CHASTE_CONST(0.26500000000000001); // microA_per_microF + const double var_Na_Ca_exchanger__K_mCa = CHASTE_CONST(1.3799999999999999); // millimolar + const double var_Na_Ca_exchanger__K_mNa = CHASTE_CONST(87.5); // millimolar + const double var_Na_Ca_exchanger__K_sat = CHASTE_CONST(0.20000000000000001); // dimensionless + const double var_Na_Ca_exchanger__eta = CHASTE_CONST(0.34999999999999998); // dimensionless + const double var_calcium_background_current__g_Cab = CHASTE_CONST(0.00038420000000000001); // milliS_per_microF + const double var_membrane__F = CHASTE_CONST(96.485341500000004); // coulomb_per_millimole + const double var_membrane__R = CHASTE_CONST(8.3144720000000003); // joule_per_mole_kelvin + const double var_membrane__T = 310; // kelvin + const double var_membrane__i_Stim_converted = CHASTE_STIM(var_chaste_interface__environment__time_converted); // uA_per_cm2 + const double var_membrane__i_Stim = var_membrane__i_Stim_converted / CHASTE_CAP(); // microA_per_microF + const double var_plateau_potassium_current__g_Kp = CHASTE_CONST(0.0022160000000000001); // milliS_per_microF + const double var_plateau_potassium_current_Kp_gate__Kp_V = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.2521739130434781) - CHASTE_CONST(0.16722408026755853) * var_chaste_interface__membrane__V)); // dimensionless + const double var_rapid_activating_delayed_rectifiyer_K_current__R_V = 1 / (1 + CHASTE_CONST(1.4944999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(0.044600000000000001) * var_chaste_interface__membrane__V)); // dimensionless + const double var_sarcolemmal_calcium_pump__I_pCa = CHASTE_CONST(0.050000000000000003); // microA_per_microF + const double var_sarcolemmal_calcium_pump__K_mpCa = CHASTE_CONST(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_sodium_background_current__g_Nab = CHASTE_CONST(0.0030999999999999999); // milliS_per_microF + const double var_sodium_potassium_pump__I_NaK = CHASTE_CONST(0.69299999999999995); // microA_per_microF + const double var_sodium_potassium_pump__K_mKo = CHASTE_CONST(1.5); // millimolar + const double var_sodium_potassium_pump__K_mNai = 10; // millimolar + const double var_L_type_Ca_current__i_Ca_max = 4000 * CHASTE_MATH::Pow(var_membrane__F, 2) * (CHASTE_CONST(0.001) * CHASTE_MATH::Exp(2 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - CHASTE_CONST(0.34100000000000003) * mParameters[3]) * mParameters[6] * var_chaste_interface__membrane__V / ((-1 + CHASTE_MATH::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.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_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 = CHASTE_CONST(0.5) * var_membrane__R * var_membrane__T * CHASTE_MATH::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_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_L_type_Ca_current__i_Ca_K = CHASTE_MATH::Pow(var_membrane__F, 2) * (-mParameters[4] + var_chaste_interface__intracellular_ion_concentrations__Ki * CHASTE_MATH::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 + CHASTE_MATH::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 * CHASTE_MATH::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(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_rapid_activating_delayed_rectifiyer_K_current__f_Ko = CHASTE_CONST(0.5) * CHASTE_MATH::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 * (CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Nai, 3) * mParameters[3] * CHASTE_MATH::Exp(var_Na_Ca_exchanger__eta * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - CHASTE_MATH::Pow(mParameters[5], 3) * var_chaste_interface__intracellular_ion_concentrations__Cai * CHASTE_MATH::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 * CHASTE_MATH::Exp((-1 + var_Na_Ca_exchanger__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (CHASTE_MATH::Pow(var_Na_Ca_exchanger__K_mNa, 3) + CHASTE_MATH::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 * CHASTE_MATH::Log(mParameters[5] / var_chaste_interface__intracellular_ion_concentrations__Nai) / var_membrane__F; // millivolt + const double var_fast_sodium_current__i_Na = CHASTE_MATH::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 * CHASTE_MATH::Log((mParameters[4] + CHASTE_CONST(0.018329999999999999) * mParameters[5]) / (var_chaste_interface__intracellular_ion_concentrations__Ki + CHASTE_CONST(0.018329999999999999) * var_chaste_interface__intracellular_ion_concentrations__Nai)) / var_membrane__F; // millivolt + const double var_slow_activating_delayed_rectifiyer_K_current__i_Ks = CHASTE_MATH::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 * 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 + const double var_sodium_potassium_pump__sigma = -CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(0.01485884101040119) * mParameters[5]); // dimensionless + const double var_sodium_potassium_pump__f_NaK = 1 / (1 + CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(0.10000000000000001) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) + CHASTE_CONST(0.036499999999999998) * var_sodium_potassium_pump__sigma * CHASTE_MATH::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 + CHASTE_MATH::Pow((var_sodium_potassium_pump__K_mNai / var_chaste_interface__intracellular_ion_concentrations__Nai), CHASTE_CONST(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 + CHASTE_MATH::Exp(CHASTE_CONST(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 = CHASTE_CONST(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 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_THIS(mFixedVoltage) : rY[0]); // Units: millivolt; Initial value: -96.1638 - double var_chaste_interface__fast_sodium_current_m_gate__m = rY[1]; + 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[2]; + 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[3]; + 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[4]; + 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[5]; + 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[6]; + 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[7]; + 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[8]; + 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[9]; + 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[20]; + 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[27]; + double var_chaste_interface__intracellular_ion_concentrations__Nai = rY[28]; // 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); + + const double var_x0 = CHASTE_MATH::Exp(CHASTE_CONST(1.2521739130434781) - CHASTE_CONST(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 = CHASTE_MATH::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 = CHASTE_MATH::Log(var_x7); + const double var_x9 = -CHASTE_CONST(26.713760659695648) * var_x8 + var_chaste_interface__membrane__V; + const double var_x10 = var_x0 * var_x9 / CHASTE_MATH::Pow(var_x1, 2); + const double var_x11 = CHASTE_MATH::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 = CHASTE_MATH::Exp(CHASTE_CONST(0.044600000000000001) * var_chaste_interface__membrane__V); + const double var_x15 = CHASTE_MATH::Sqrt(mParameters[4]); + const double var_x16 = var_x15 * mParameters[12] / (1 + CHASTE_CONST(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 = CHASTE_MATH::Exp(CHASTE_CONST(0.056150836234118207) * var_chaste_interface__membrane__V - CHASTE_CONST(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 = CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Nai, 3); + const double var_x24 = CHASTE_MATH::Exp(CHASTE_CONST(0.013101861787960915) * var_chaste_interface__membrane__V); + const double var_x25 = var_x24 * mParameters[3]; + const double var_x26 = CHASTE_MATH::Exp(-CHASTE_CONST(0.024332029034784559) * var_chaste_interface__membrane__V); + const double var_x27 = CHASTE_MATH::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 + CHASTE_CONST(0.20000000000000001) * var_x26; + const double var_x31 = 1 / var_x30; + const double var_x32 = 1 / (CHASTE_CONST(669921.875) + var_x27); + const double var_x33 = 1 / (CHASTE_CONST(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 * (CHASTE_CONST(0.024332029034784559) * var_x29 + CHASTE_CONST(0.013101861787960915) * var_x23 * var_x25); + const double var_x37 = 1 / var_chaste_interface__intracellular_ion_concentrations__Nai; + const double var_x38 = CHASTE_MATH::Pow(var_x37, CHASTE_CONST(1.5)); + const double var_x39 = 1 / (1 + CHASTE_CONST(31.622776601683793) * var_x38); + const double var_x40 = CHASTE_MATH::Exp(-CHASTE_CONST(0.0037433890822745476) * var_chaste_interface__membrane__V); + const double var_x41 = CHASTE_MATH::Exp(CHASTE_CONST(0.01485884101040119) * mParameters[5]); + const double var_x42 = CHASTE_CONST(0.037433890822745473) * var_chaste_interface__membrane__V; + const double var_x43 = CHASTE_MATH::Exp(-var_x42); + const double var_x44 = 1 + CHASTE_CONST(0.1245) * var_x40 + CHASTE_CONST(0.036499999999999998) * var_x43 * (-CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * var_x41); + const double var_x45 = CHASTE_MATH::Pow(var_x44, (-2)); + const double var_x46 = CHASTE_CONST(0.00046605194074318115) * var_x40 + CHASTE_CONST(0.037433890822745473) * var_x43 * (-CHASTE_CONST(0.0052142857142857138) + CHASTE_CONST(0.0052142857142857138) * var_x41); + const double var_x47 = 1 / (CHASTE_CONST(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 = CHASTE_MATH::Exp(CHASTE_CONST(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 = CHASTE_CONST(0.001) * var_x52 - CHASTE_CONST(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 - CHASTE_CONST(54518.063995566983) * var_x57); + const double var_x59 = CHASTE_MATH::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 = CHASTE_CONST(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 / CHASTE_MATH::Pow(var_x30, 2); + const double var_x72 = CHASTE_MATH::Pow((1 + CHASTE_CONST(0.5) * var_x19), (-2)); + const double var_x73 = var_x19 * var_x21 * var_x72 * var_x9; + const double var_x74 = CHASTE_MATH::Pow((CHASTE_CONST(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 = CHASTE_MATH::Pow(var_x53, (-2)); + const double var_x79 = var_x55 * var_x67 * var_x78; + const double var_x80 = var_x63 * var_x75 * (CHASTE_CONST(4.0816465109550109) * var_x68 + CHASTE_CONST(54518.063995566983) * var_x56 - CHASTE_CONST(4081.6465109550109) * var_x79) / CHASTE_MATH::Pow((CHASTE_CONST(1.8342544226833014e-5) - var_x57), 2); + const double var_x81 = CHASTE_MATH::Pow(var_x60, (-2)); + const double var_x82 = 1 / mParameters[7]; + const double var_x83 = CHASTE_CONST(0.001) * var_x82; + + partialF = -var_x83 * (CHASTE_CONST(0.0034841999999999998) + var_x13 + var_x3 + var_x5 + CHASTE_CONST(0.5) * var_x17 + 5000 * var_x36 + CHASTE_CONST(0.0022160000000000001) * var_x2 + CHASTE_CONST(0.69299999999999995) * var_x49 + CHASTE_CONST(1.0816363254030779) * var_x69 + CHASTE_CONST(7.8283429051047759e-8) * var_x77 + CHASTE_CONST(0.00037056856187290968) * var_x10 + CHASTE_CONST(24.332029034784558) * var_x71 + CHASTE_CONST(7.035970683610309e-16) * var_x80 + CHASTE_CONST(14447.286958825252) * var_x66 + var_x18 * var_x22 + var_x51 * var_x65 - CHASTE_CONST(1081.636325403078) * var_x51 * var_x79 - CHASTE_CONST(0.014037709058529552) * var_x73 * mParameters[4] - CHASTE_CONST(7.8283429051047759e-8) * var_x51 * var_x58 * var_x59 * var_x63 * var_x81 * var_chaste_interface__membrane__V - CHASTE_CONST(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 { @@ -1093,44 +1143,128 @@ } return partialF; } - double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluateYDerivative1(double var_chaste_interface__environment__time_converted, std::vector& rY) + 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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__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_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_Na_Ca_exchanger__K_mCa = CHASTE_CONST(1.3799999999999999); // millimolar + const double var_Na_Ca_exchanger__K_mNa = CHASTE_CONST(87.5); // millimolar + const double var_Na_Ca_exchanger__K_sat = CHASTE_CONST(0.20000000000000001); // dimensionless + const double var_Na_Ca_exchanger__eta = CHASTE_CONST(0.34999999999999998); // dimensionless + const double var_SERCA2a_pump__K_fb = CHASTE_CONST(0.00016799999999999999); // millimolar + const double var_SERCA2a_pump__K_rb = CHASTE_CONST(3.29); // millimolar + const double var_SERCA2a_pump__N_fb = CHASTE_CONST(1.2); // dimensionless + const double var_SERCA2a_pump__N_rb = 1; // dimensionless + const double var_SERCA2a_pump__Vmaxf = CHASTE_CONST(0.081299999999999997); // millimolar_per_second + const double var_SERCA2a_pump__Vmaxr = CHASTE_CONST(0.318); // millimolar_per_second + const double var_calcium_background_current__g_Cab = CHASTE_CONST(0.00038420000000000001); // milliS_per_microF + const double var_intracellular_Ca_fluxes__HTRPN_tot = CHASTE_CONST(0.14000000000000001); // dimensionless + const double var_intracellular_Ca_fluxes__LTRPN_tot = CHASTE_CONST(0.070000000000000007); // dimensionless + const double var_intracellular_Ca_fluxes__k_htrpn_minus = CHASTE_CONST(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 = CHASTE_CONST(0.026700000000000002); // second + const double var_intracellular_ion_concentrations__A_cap = CHASTE_CONST(0.00015339999999999999); // cm2 + const double var_intracellular_ion_concentrations__CMDN_tot = CHASTE_CONST(0.050000000000000003); // millimolar + const double var_SERCA2a_pump__rb = CHASTE_MATH::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 = CHASTE_MATH::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 = CHASTE_CONST(0.0023800000000000002); // millimolar + const double var_intracellular_ion_concentrations__K_mEGTA = CHASTE_CONST(0.00014999999999999999); // millimolar + const double var_intracellular_ion_concentrations__V_myo = CHASTE_CONST(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 / CHASTE_MATH::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 / CHASTE_MATH::Pow((var_chaste_interface__intracellular_ion_concentrations__Cai + var_intracellular_ion_concentrations__K_mEGTA), 2)); // dimensionless + const double var_membrane__F = CHASTE_CONST(96.485341500000004); // coulomb_per_millimole + const double var_membrane__R = CHASTE_CONST(8.3144720000000003); // joule_per_mole_kelvin + const double var_membrane__T = 310; // kelvin + const double var_sarcolemmal_calcium_pump__I_pCa = CHASTE_CONST(0.050000000000000003); // microA_per_microF + const double var_sarcolemmal_calcium_pump__K_mpCa = CHASTE_CONST(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 = CHASTE_CONST(0.5) * var_membrane__R * var_membrane__T * CHASTE_MATH::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 * (CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Nai, 3) * mParameters[3] * CHASTE_MATH::Exp(var_Na_Ca_exchanger__eta * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - CHASTE_MATH::Pow(mParameters[5], 3) * var_chaste_interface__intracellular_ion_concentrations__Cai * CHASTE_MATH::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 * CHASTE_MATH::Exp((-1 + var_Na_Ca_exchanger__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (CHASTE_MATH::Pow(var_Na_Ca_exchanger__K_mNa, 3) + CHASTE_MATH::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 + CHASTE_CONST(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 = CHASTE_CONST(0.001) * var_intracellular_ion_concentrations__Cai_orig_deriv; // millimolar / millisecond - return d_dt_chaste_interface_var_fast_sodium_current_m_gate__m; + return d_dt_chaste_interface_var_intracellular_ion_concentrations__Cai; } - double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluatePartialDerivative1(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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_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))); + + const double var_x23 = CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Nai, 3); + const double var_x24 = CHASTE_MATH::Exp(CHASTE_CONST(0.013101861787960915) * var_chaste_interface__membrane__V); + const double var_x26 = CHASTE_MATH::Exp(-CHASTE_CONST(0.024332029034784559) * var_chaste_interface__membrane__V); + const double var_x27 = CHASTE_MATH::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 + CHASTE_CONST(0.20000000000000001) * var_x26; + const double var_x31 = 1 / var_x30; + const double var_x32 = 1 / (CHASTE_CONST(669921.875) + var_x27); + const double var_x33 = 1 / (CHASTE_CONST(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 = CHASTE_CONST(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 = CHASTE_MATH::Pow(var_x84, (-2)); + const double var_x113 = CHASTE_CONST(0.0023800000000000002) + var_chaste_interface__intracellular_ion_concentrations__Cai; + const double var_x114 = 1 + CHASTE_CONST(0.00011900000000000002) / CHASTE_MATH::Pow(var_x113, 2); + const double var_x115 = 1 / var_x114; + const double var_x116 = CHASTE_CONST(0.001) * var_x115; + const double var_x117 = CHASTE_CONST(0.0015381954438488301) * var_x85; + const double var_x118 = CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Cai, CHASTE_CONST(0.19999999999999996)); + const double var_x119 = CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Cai, CHASTE_CONST(1.2)); + const double var_x120 = CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Ca_NSR, 1); + const double var_x121 = 1 / (1 + CHASTE_CONST(33855.471141425078) * var_x119 + CHASTE_CONST(0.303951367781155) * var_x120); + const double var_x122 = var_x121 * mParameters[1]; + const double var_x123 = CHASTE_MATH::Pow((CHASTE_CONST(2.9537323401073989e-5) + var_x119 + CHASTE_CONST(8.9779098483507565e-6) * var_x120), (-2)); + const double var_x124 = CHASTE_CONST(2752.4498037978587) * var_x119 - CHASTE_CONST(0.096656534954407292) * var_x120; + const double var_x125 = CHASTE_CONST(2800.0000000000005) * var_chaste_interface__intracellular_ion_concentrations__Cai; + + partialF = var_x116 * (-CHASTE_CONST(5637.4531835205999) - var_x117 + CHASTE_CONST(2800.0000000000005) * var_chaste_interface__intracellular_Ca_fluxes__HTRPNCa + CHASTE_CONST(2800.0000000000005) * var_chaste_interface__intracellular_Ca_fluxes__LTRPNCa - CHASTE_CONST(0.00015787156411954756) * var_x86 + CHASTE_CONST(0.0015381954438488301) * var_x87 * var_chaste_interface__intracellular_ion_concentrations__Cai - CHASTE_CONST(307.63908876976598) * var_x28 * var_x35 - CHASTE_CONST(3302.9397645574304) * var_x118 * var_x122 + CHASTE_CONST(3.5444788081288787e-5) * var_x118 * var_x123 * var_x124 * mParameters[1]) + CHASTE_CONST(2.3800000000000004e-7) * (CHASTE_CONST(2.8000000000000003) * var_chaste_interface__intracellular_Ca_fluxes__LTRPNCa + CHASTE_CONST(37.453183520599246) * var_chaste_interface__intracellular_ion_concentrations__Ca_ss + CHASTE_CONST(0.0092400000000000017) * var_chaste_interface__intracellular_Ca_fluxes__HTRPNCa + CHASTE_CONST(0.00015787156411954756) * CHASTE_MATH::Log(var_x86 * mParameters[3]) - CHASTE_CONST(37.453183520599246) * var_chaste_interface__intracellular_ion_concentrations__Cai - CHASTE_CONST(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) + CHASTE_CONST(307.63908876976598) * var_x31 * var_x32 * var_x33 * var_x70 * mParameters[14]) / (CHASTE_MATH::Pow(var_x113, 3) * CHASTE_MATH::Pow(var_x114, 2)); } else { @@ -1142,40 +1276,45 @@ } return partialF; } - double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluateYDerivative2(double var_chaste_interface__environment__time_converted, std::vector& rY) + 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 - + 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_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_m_gate__E0_m = CHASTE_CONST(47.130000000000003) + var_chaste_interface__membrane__V; // millivolt + const double var_fast_sodium_current_m_gate__alpha_m = ((CHASTE_MATH::Abs(var_fast_sodium_current_m_gate__E0_m) < CHASTE_CONST(1.0000000000000001e-5)) ? (1000 / (CHASTE_CONST(0.10000000000000001) - CHASTE_CONST(0.0050000000000000001) * var_fast_sodium_current_m_gate__E0_m)) : (320 * var_fast_sodium_current_m_gate__E0_m / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(0.10000000000000001) * var_fast_sodium_current_m_gate__E0_m)))); // per_second + const double var_fast_sodium_current_m_gate__beta_m = 80 * CHASTE_MATH::Exp(-CHASTE_CONST(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 = CHASTE_CONST(0.001) * var_fast_sodium_current_m_gate__m_orig_deriv; // 1 / millisecond - return d_dt_chaste_interface_var_fast_sodium_current_h_gate__h; + return d_dt_chaste_interface_var_fast_sodium_current_m_gate__m; } - double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluatePartialDerivative2(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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; + + const double var_x128 = CHASTE_MATH::Exp(-CHASTE_CONST(0.090909090909090912) * var_chaste_interface__membrane__V); + const double var_x130 = var_chaste_interface__membrane__V >= -90; + const double var_x131 = CHASTE_CONST(47.130000000000003) + var_chaste_interface__membrane__V; + const double var_x132 = (var_x130) && (CHASTE_MATH::Abs(var_x131) < CHASTE_CONST(1.0000000000000001e-5)); + const double var_x133 = CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V; + const double var_x134 = CHASTE_MATH::Exp(-CHASTE_CONST(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_x86) ? (135.0 * var_x85) : (0)) - 0.001 * ((var_x86) ? (3560.0 * var_x87 + 310000.0 * var_x88) : (7692.3076923076924 / var_x90)); + partialF = CHASTE_CONST(0.001) * ((var_x132) ? (-var_x137 - 1000 / (-CHASTE_CONST(0.13565000000000002) - CHASTE_CONST(0.0050000000000000001) * var_chaste_interface__membrane__V)) : ((var_x130) ? (-var_x137 - var_x131 * var_x136) : (0))); } else { @@ -1187,52 +1326,46 @@ } return partialF; } - double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluateYDerivative3(double var_chaste_interface__environment__time_converted, std::vector& rY) + 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 - + 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_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_h_gate__alpha_h = ((var_chaste_interface__membrane__V < -40) ? (135 * CHASTE_MATH::Exp(-CHASTE_CONST(11.764705882352942) + CHASTE_CONST(0.14705882352941177) * mParameters[10] - CHASTE_CONST(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 * CHASTE_MATH::Exp(CHASTE_CONST(0.079000000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.079000000000000001) * mParameters[10]) + 310000 * CHASTE_MATH::Exp(CHASTE_CONST(0.34999999999999998) * var_chaste_interface__membrane__V - CHASTE_CONST(0.34999999999999998) * mParameters[10])) : (CHASTE_CONST(7692.3076923076924) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.96036036036036043) + CHASTE_CONST(0.0900900900900901) * mParameters[10] - CHASTE_CONST(0.0900900900900901) * var_chaste_interface__membrane__V)))); // per_second + const double var_fast_sodium_current_h_gate__h_inf = CHASTE_CONST(0.01) * mParameters[9] + (1 - CHASTE_CONST(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 = CHASTE_CONST(0.001) * var_fast_sodium_current_h_gate__h_orig_deriv; // 1 / millisecond - return d_dt_chaste_interface_var_fast_sodium_current_j_gate__j; + return d_dt_chaste_interface_var_fast_sodium_current_h_gate__h; } - double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluatePartialDerivative3(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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)); + + const double var_x138 = CHASTE_MATH::Exp(-CHASTE_CONST(11.764705882352942) + CHASTE_CONST(0.14705882352941177) * mParameters[10] - CHASTE_CONST(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 = CHASTE_MATH::Exp(CHASTE_CONST(0.079000000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.079000000000000001) * mParameters[10]); + const double var_x142 = CHASTE_MATH::Exp(CHASTE_CONST(0.34999999999999998) * var_chaste_interface__membrane__V - CHASTE_CONST(0.34999999999999998) * mParameters[10]); + const double var_x143 = CHASTE_MATH::Exp(-CHASTE_CONST(0.96036036036036043) + CHASTE_CONST(0.0900900900900901) * mParameters[10] - CHASTE_CONST(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) : (CHASTE_CONST(7692.3076923076924) / var_x144)); + const double var_x146 = CHASTE_CONST(0.001) * var_x140 + CHASTE_CONST(0.001) * var_x145; + + partialF = -var_x146; } else { @@ -1244,42 +1377,58 @@ } return partialF; } - double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluateYDerivative4(double var_chaste_interface__environment__time_converted, std::vector& rY) + 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 - + double var_chaste_interface__fast_sodium_current_j_gate__j = rY[4]; + // Units: dimensionless; Initial value: 0.99254 + // 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 + const double var_fast_sodium_current_j_gate__alpha_j = ((var_chaste_interface__membrane__V < -40) ? (1000 * (CHASTE_CONST(37.780000000000001) + var_chaste_interface__membrane__V) * (-127140 * CHASTE_MATH::Exp(CHASTE_CONST(0.24440000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.24440000000000001) * mParameters[10]) - CHASTE_CONST(3.4740000000000003e-5) * CHASTE_MATH::Exp(CHASTE_CONST(0.043909999999999998) * mParameters[10] - CHASTE_CONST(0.043909999999999998) * var_chaste_interface__membrane__V)) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(24.640530000000002) + CHASTE_CONST(0.311) * var_chaste_interface__membrane__V - CHASTE_CONST(0.311) * mParameters[10]))) : (0)); // per_second + const double var_fast_sodium_current_j_gate__beta_j = ((var_chaste_interface__membrane__V < -40) ? (CHASTE_CONST(121.2) * CHASTE_MATH::Exp(CHASTE_CONST(0.01052) * mParameters[10] - CHASTE_CONST(0.01052) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(5.5312920000000005) + CHASTE_CONST(0.13780000000000001) * mParameters[10] - CHASTE_CONST(0.13780000000000001) * var_chaste_interface__membrane__V))) : (300 * CHASTE_MATH::Exp(CHASTE_CONST(2.5349999999999999e-7) * mParameters[10] - CHASTE_CONST(2.5349999999999999e-7) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.2000000000000002) + CHASTE_CONST(0.10000000000000001) * mParameters[10] - CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V)))); // per_second + const double var_fast_sodium_current_j_gate__j_inf = CHASTE_CONST(0.01) * mParameters[9] + (1 - CHASTE_CONST(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 = CHASTE_CONST(0.001) * var_fast_sodium_current_j_gate__j_orig_deriv; // 1 / millisecond - return d_dt_chaste_interface_var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr; + return d_dt_chaste_interface_var_fast_sodium_current_j_gate__j; } - double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluatePartialDerivative4(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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; + + const double var_x133 = CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V; + const double var_x139 = var_chaste_interface__membrane__V < -40; + const double var_x153 = CHASTE_MATH::Exp(-CHASTE_CONST(5.5312920000000005) + CHASTE_CONST(0.13780000000000001) * mParameters[10] - CHASTE_CONST(0.13780000000000001) * var_chaste_interface__membrane__V); + const double var_x154 = 1 + var_x153; + const double var_x155 = CHASTE_MATH::Exp(CHASTE_CONST(0.01052) * mParameters[10] - CHASTE_CONST(0.01052) * var_chaste_interface__membrane__V); + const double var_x156 = var_x155 / var_x154; + const double var_x157 = CHASTE_MATH::Exp(-CHASTE_CONST(3.2000000000000002) - var_x133 + CHASTE_CONST(0.10000000000000001) * mParameters[10]); + const double var_x158 = 1 + var_x157; + const double var_x159 = CHASTE_MATH::Exp(CHASTE_CONST(2.5349999999999999e-7) * mParameters[10] - CHASTE_CONST(2.5349999999999999e-7) * var_chaste_interface__membrane__V); + const double var_x160 = var_x159 / var_x158; + const double var_x161 = ((var_x139) ? (CHASTE_CONST(121.2) * var_x156) : (300 * var_x160)); + const double var_x162 = CHASTE_CONST(37.780000000000001) + var_chaste_interface__membrane__V; + const double var_x163 = CHASTE_MATH::Exp(CHASTE_CONST(0.24440000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.24440000000000001) * mParameters[10]); + const double var_x164 = CHASTE_MATH::Exp(CHASTE_CONST(0.043909999999999998) * mParameters[10] - CHASTE_CONST(0.043909999999999998) * var_chaste_interface__membrane__V); + const double var_x165 = -127140 * var_x163 - CHASTE_CONST(3.4740000000000003e-5) * var_x164; + const double var_x166 = CHASTE_MATH::Exp(CHASTE_CONST(24.640530000000002) + CHASTE_CONST(0.311) * var_chaste_interface__membrane__V - CHASTE_CONST(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 = CHASTE_CONST(0.001) * var_x161 + CHASTE_CONST(0.001) * var_x170; + + partialF = -var_x171; } else { @@ -1291,41 +1440,43 @@ } return partialF; } - double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluateYDerivative5(double var_chaste_interface__environment__time_converted, std::vector& rY) + 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 - + 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_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_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__K12 = CHASTE_MATH::Exp(-CHASTE_CONST(5.4950000000000001) + CHASTE_CONST(0.1691) * var_chaste_interface__membrane__V); // dimensionless + const double var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__K21 = CHASTE_MATH::Exp(-CHASTE_CONST(7.6769999999999996) - CHASTE_CONST(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 = CHASTE_CONST(0.001) / (var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__K12 + var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__K21) + CHASTE_CONST(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 = CHASTE_CONST(0.001) * var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr_orig_deriv; // 1 / millisecond - return d_dt_chaste_interface_var_slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks; + return d_dt_chaste_interface_var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr; } - double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluatePartialDerivative5(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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; + + const double var_x176 = CHASTE_MATH::Exp(-CHASTE_CONST(7.6769999999999996) - CHASTE_CONST(0.012800000000000001) * var_chaste_interface__membrane__V); + const double var_x177 = CHASTE_MATH::Exp(-CHASTE_CONST(5.4950000000000001) + CHASTE_CONST(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 / (CHASTE_CONST(0.027) + CHASTE_CONST(0.001) * var_x179); - partialF = -0.00013100000000000001 * var_x119 * var_x125 - 7.1899999999999999e-5 * var_x123 * var_x125; + partialF = -CHASTE_CONST(0.001) * var_x180; } else { @@ -1337,36 +1488,42 @@ } return partialF; } - double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluateYDerivative6(double var_chaste_interface__environment__time_converted, std::vector& rY) + 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 - + 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_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_slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks_infinity = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.8161764705882353) - CHASTE_CONST(0.073529411764705885) * var_chaste_interface__membrane__V)); // dimensionless + const double var_slow_activating_delayed_rectifiyer_K_current_X_ks_gate__tau_X_ks = CHASTE_CONST(0.001) / (CHASTE_CONST(0.00013100000000000001) * (-10 + var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.68699999999999994) + CHASTE_CONST(0.068699999999999997) * var_chaste_interface__membrane__V)) + CHASTE_CONST(7.1899999999999999e-5) * (-10 + var_chaste_interface__membrane__V) / (1 - CHASTE_MATH::Exp(CHASTE_CONST(1.48) - CHASTE_CONST(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 = CHASTE_CONST(0.001) * var_slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks_orig_deriv; // 1 / millisecond - return d_dt_chaste_interface_var_transient_outward_potassium_current_X_to1_gate__X_to1; + return d_dt_chaste_interface_var_slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks; } - double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluatePartialDerivative6(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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); + + const double var_x185 = CHASTE_MATH::Exp(-CHASTE_CONST(0.68699999999999994) + CHASTE_CONST(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 = CHASTE_MATH::Exp(CHASTE_CONST(1.48) - CHASTE_CONST(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.045159999999999999 * var_x126 - 0.098900000000000002 * var_x127; + partialF = -CHASTE_CONST(0.00013100000000000001) * var_x187 * var_x191 - CHASTE_CONST(7.1899999999999999e-5) * var_x190 * var_x191; } else { @@ -1378,41 +1535,37 @@ } return partialF; } - double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluateYDerivative7(double var_chaste_interface__environment__time_converted, std::vector& rY) + 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 - + 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_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 + const double var_transient_outward_potassium_current_X_to1_gate__alpha_X_to1 = CHASTE_CONST(45.159999999999997) * CHASTE_MATH::Exp(CHASTE_CONST(0.035770000000000003) * var_chaste_interface__membrane__V); // per_second + const double var_transient_outward_potassium_current_X_to1_gate__beta_X_to1 = CHASTE_CONST(98.900000000000006) * CHASTE_MATH::Exp(-CHASTE_CONST(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 = CHASTE_CONST(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_Y_to1_gate__Y_to1; + return d_dt_chaste_interface_var_transient_outward_potassium_current_X_to1_gate__X_to1; } - double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluatePartialDerivative7(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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; + + const double var_x192 = CHASTE_MATH::Exp(CHASTE_CONST(0.035770000000000003) * var_chaste_interface__membrane__V); + const double var_x193 = CHASTE_MATH::Exp(-CHASTE_CONST(0.062370000000000002) * var_chaste_interface__membrane__V); - partialF = -0.0054149999999999997 * var_x134 - 0.0054149999999999997 * var_x135; + partialF = -CHASTE_CONST(0.045159999999999999) * var_x192 - CHASTE_CONST(0.098900000000000002) * var_x193; } else { @@ -1424,32 +1577,43 @@ } return partialF; } - double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluateYDerivative8(double var_chaste_interface__environment__time_converted, std::vector& rY) + double Dynamicwinslow_model_1999FromCellMLGRL2::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 - + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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_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 + const double var_transient_outward_potassium_current_Y_to1_gate__alpha_Y_to1 = CHASTE_CONST(5.415) * CHASTE_MATH::Exp(-CHASTE_CONST(6.7000000000000002) - CHASTE_CONST(0.20000000000000001) * var_chaste_interface__membrane__V) / (1 + CHASTE_CONST(0.051334999999999999) * CHASTE_MATH::Exp(-CHASTE_CONST(6.7000000000000002) - CHASTE_CONST(0.20000000000000001) * var_chaste_interface__membrane__V)); // per_second + const double var_transient_outward_potassium_current_Y_to1_gate__beta_Y_to1 = CHASTE_CONST(5.415) * CHASTE_MATH::Exp(CHASTE_CONST(6.7000000000000002) + CHASTE_CONST(0.20000000000000001) * var_chaste_interface__membrane__V) / (1 + CHASTE_CONST(0.051334999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(6.7000000000000002) + CHASTE_CONST(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 = CHASTE_CONST(0.001) * var_transient_outward_potassium_current_Y_to1_gate__Y_to1_orig_deriv; // 1 / millisecond - return d_dt_chaste_interface_var_L_type_Ca_current__O; + return d_dt_chaste_interface_var_transient_outward_potassium_current_Y_to1_gate__Y_to1; } - double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluatePartialDerivative8(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + 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 ? CHASTE_THIS(mFixedVoltage) : rY[0]); + // Units: millivolt; Initial value: -96.1638 + + const double var_x194 = CHASTE_CONST(0.20000000000000001) * var_chaste_interface__membrane__V; + const double var_x195 = CHASTE_CONST(6.7000000000000002) + var_x194; + const double var_x196 = CHASTE_MATH::Exp(var_x195); + const double var_x197 = 1 + CHASTE_CONST(0.051334999999999999) * var_x196; + const double var_x198 = var_x196 / var_x197; + const double var_x200 = CHASTE_MATH::Exp(-var_x195); + const double var_x201 = 1 + CHASTE_CONST(0.051334999999999999) * var_x200; + const double var_x202 = var_x200 / var_x201; - partialF = -2.0; + partialF = -CHASTE_CONST(0.0054149999999999997) * var_x198 - CHASTE_CONST(0.0054149999999999997) * var_x202; } else { @@ -1461,32 +1625,33 @@ } return partialF; } - double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluateYDerivative9(double var_chaste_interface__environment__time_converted, std::vector& rY) + double Dynamicwinslow_model_1999FromCellMLGRL2::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 - + 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__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 + 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 = CHASTE_CONST(0.001) * var_L_type_Ca_current__O_orig_deriv; // 1 / millisecond - return d_dt_chaste_interface_var_L_type_Ca_current__O_Ca; + return d_dt_chaste_interface_var_L_type_Ca_current__O; } - double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluatePartialDerivative9(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + 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 = -7.0; + partialF = -2; } else { @@ -1498,48 +1663,33 @@ } return partialF; } - double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluateYDerivative10(double var_chaste_interface__environment__time_converted, std::vector& rY) + double Dynamicwinslow_model_1999FromCellMLGRL2::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 - + 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__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 + 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 = CHASTE_CONST(0.001) * var_L_type_Ca_current__O_Ca_orig_deriv; // 1 / millisecond - return d_dt_chaste_interface_var_L_type_Ca_current__C0; + return d_dt_chaste_interface_var_L_type_Ca_current__O_Ca; } - double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluatePartialDerivative10(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + 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) { - 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; + partialF = -7; } else { @@ -1551,54 +1701,48 @@ } return partialF; } - double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluateYDerivative11(double var_chaste_interface__environment__time_converted, std::vector& rY) + 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_THIS(mFixedVoltage) : rY[0]); // Units: millivolt; Initial value: -96.1638 - double var_chaste_interface__L_type_Ca_current__C0 = rY[10]; + 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[11]; + 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[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_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__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 + const double var_L_type_Ca_current__omega = 10; // per_second + const double var_L_type_Ca_current__gamma = CHASTE_CONST(103.75) * var_chaste_interface__intracellular_ion_concentrations__Ca_ss; // per_second + const double var_L_type_Ca_current__alpha = 400 * CHASTE_MATH::Exp(CHASTE_CONST(0.20000000000000001) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V); // per_second + const double var_L_type_Ca_current__beta = 50 * CHASTE_MATH::Exp(-CHASTE_CONST(0.15384615384615385) - CHASTE_CONST(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 = CHASTE_CONST(0.001) * var_L_type_Ca_current__C0_orig_deriv; // 1 / millisecond - return d_dt_chaste_interface_var_L_type_Ca_current__C1; + return d_dt_chaste_interface_var_L_type_Ca_current__C0; } - double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluatePartialDerivative11(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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; + + const double var_x205 = CHASTE_MATH::Exp(CHASTE_CONST(0.20000000000000001) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V); + const double var_x208 = CHASTE_CONST(1.6000000000000001) * var_x205; + const double var_x209 = CHASTE_CONST(0.10375) * var_chaste_interface__intracellular_ion_concentrations__Ca_ss; - partialF = var_x149 - var_x148 - var_x150; + partialF = -var_x208 - var_x209; } else { @@ -1610,55 +1754,54 @@ } return partialF; } - double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluateYDerivative12(double var_chaste_interface__environment__time_converted, std::vector& rY) + 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_THIS(mFixedVoltage) : rY[0]); // Units: millivolt; Initial value: -96.1638 - double var_chaste_interface__L_type_Ca_current__C1 = rY[11]; + 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[12]; + 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[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_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.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 + 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 = CHASTE_CONST(103.75) * var_chaste_interface__intracellular_ion_concentrations__Ca_ss; // per_second + const double var_L_type_Ca_current__alpha = 400 * CHASTE_MATH::Exp(CHASTE_CONST(0.20000000000000001) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V); // per_second + const double var_L_type_Ca_current__beta = 50 * CHASTE_MATH::Exp(-CHASTE_CONST(0.15384615384615385) - CHASTE_CONST(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 = CHASTE_CONST(0.001) * var_L_type_Ca_current__C1_orig_deriv; // 1 / millisecond - return d_dt_chaste_interface_var_L_type_Ca_current__C2; + return d_dt_chaste_interface_var_L_type_Ca_current__C1; } - double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluatePartialDerivative12(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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; + + const double var_x203 = CHASTE_MATH::Exp(-CHASTE_CONST(0.15384615384615385) - CHASTE_CONST(0.076923076923076927) * var_chaste_interface__membrane__V); + const double var_x205 = CHASTE_MATH::Exp(CHASTE_CONST(0.20000000000000001) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V); + const double var_x210 = CHASTE_CONST(0.050000000000000003) * var_x203; + const double var_x214 = CHASTE_CONST(1.2) * var_x205; + const double var_x215 = CHASTE_CONST(0.20749999999999999) * var_chaste_interface__intracellular_ion_concentrations__Ca_ss; - partialF = var_x155 + var_x157 - var_x158; + partialF = -var_x210 - var_x214 - var_x215; } else { @@ -1670,53 +1813,54 @@ } return partialF; } - double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluateYDerivative13(double var_chaste_interface__environment__time_converted, std::vector& rY) + 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_THIS(mFixedVoltage) : rY[0]); // Units: millivolt; Initial value: -96.1638 - double var_chaste_interface__L_type_Ca_current__C2 = rY[12]; + 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[13]; + 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[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_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.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 + 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 = CHASTE_CONST(103.75) * var_chaste_interface__intracellular_ion_concentrations__Ca_ss; // per_second + const double var_L_type_Ca_current__alpha = 400 * CHASTE_MATH::Exp(CHASTE_CONST(0.20000000000000001) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V); // per_second + const double var_L_type_Ca_current__beta = 50 * CHASTE_MATH::Exp(-CHASTE_CONST(0.15384615384615385) - CHASTE_CONST(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 + CHASTE_MATH::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 / CHASTE_MATH::Pow(var_L_type_Ca_current__b, 2); // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_current__C2 = CHASTE_CONST(0.001) * var_L_type_Ca_current__C2_orig_deriv; // 1 / millisecond - return d_dt_chaste_interface_var_L_type_Ca_current__C3; + return d_dt_chaste_interface_var_L_type_Ca_current__C2; } - double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluatePartialDerivative13(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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; + + const double var_x203 = CHASTE_MATH::Exp(-CHASTE_CONST(0.15384615384615385) - CHASTE_CONST(0.076923076923076927) * var_chaste_interface__membrane__V); + const double var_x205 = CHASTE_MATH::Exp(CHASTE_CONST(0.20000000000000001) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V); + const double var_x216 = CHASTE_CONST(0.10000000000000001) * var_x203; + const double var_x220 = CHASTE_CONST(0.80000000000000004) * var_x205; + const double var_x221 = CHASTE_CONST(0.41499999999999998) * var_chaste_interface__intracellular_ion_concentrations__Ca_ss; - partialF = -var_x159 - var_x163 - var_x164; + partialF = -var_x216 - var_x220 - var_x221; } else { @@ -1728,53 +1872,54 @@ } return partialF; } - double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluateYDerivative14(double var_chaste_interface__environment__time_converted, std::vector& rY) + 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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]; + 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[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[19]; - // Units: dimensionless; Initial value: 4.59752e-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.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 + 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 = CHASTE_CONST(103.75) * var_chaste_interface__intracellular_ion_concentrations__Ca_ss; // per_second + const double var_L_type_Ca_current__alpha = 400 * CHASTE_MATH::Exp(CHASTE_CONST(0.20000000000000001) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V); // per_second + const double var_L_type_Ca_current__beta = 50 * CHASTE_MATH::Exp(-CHASTE_CONST(0.15384615384615385) - CHASTE_CONST(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 + CHASTE_MATH::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 / CHASTE_MATH::Pow(var_L_type_Ca_current__b, 3); // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_current__C3 = CHASTE_CONST(0.001) * var_L_type_Ca_current__C3_orig_deriv; // 1 / millisecond - return d_dt_chaste_interface_var_L_type_Ca_current__C4; + return d_dt_chaste_interface_var_L_type_Ca_current__C3; } - double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluatePartialDerivative14(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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; + + const double var_x203 = CHASTE_MATH::Exp(-CHASTE_CONST(0.15384615384615385) - CHASTE_CONST(0.076923076923076927) * var_chaste_interface__membrane__V); + const double var_x205 = CHASTE_MATH::Exp(CHASTE_CONST(0.20000000000000001) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V); + const double var_x222 = CHASTE_CONST(0.14999999999999999) * var_x203; + const double var_x226 = CHASTE_CONST(0.40000000000000002) * var_x205; + const double var_x227 = CHASTE_CONST(0.82999999999999996) * var_chaste_interface__intracellular_ion_concentrations__Ca_ss; - partialF = -0.29999999999999999 - var_x165 - var_x167; + partialF = -var_x222 - var_x226 - var_x227; } else { @@ -1786,48 +1931,54 @@ } return partialF; } - double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluateYDerivative15(double var_chaste_interface__environment__time_converted, std::vector& rY) + 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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__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.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 + 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 = CHASTE_CONST(103.75) * var_chaste_interface__intracellular_ion_concentrations__Ca_ss; // per_second + const double var_L_type_Ca_current__alpha = 400 * CHASTE_MATH::Exp(CHASTE_CONST(0.20000000000000001) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V); // per_second + const double var_L_type_Ca_current__beta = 50 * CHASTE_MATH::Exp(-CHASTE_CONST(0.15384615384615385) - CHASTE_CONST(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 + CHASTE_MATH::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 / CHASTE_MATH::Pow(var_L_type_Ca_current__b, 4); // 1 / second + const double d_dt_chaste_interface_var_L_type_Ca_current__C4 = CHASTE_CONST(0.001) * var_L_type_Ca_current__C4_orig_deriv; // 1 / millisecond - return d_dt_chaste_interface_var_L_type_Ca_current__C_Ca0; + return d_dt_chaste_interface_var_L_type_Ca_current__C4; } - double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluatePartialDerivative15(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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_x171 = 3.2000000000000002 * var_x138; + + const double var_x203 = CHASTE_MATH::Exp(-CHASTE_CONST(0.15384615384615385) - CHASTE_CONST(0.076923076923076927) * var_chaste_interface__membrane__V); + const double var_x228 = CHASTE_CONST(0.20000000000000001) * var_x203; + const double var_x230 = CHASTE_CONST(1.6599999999999999) * var_chaste_interface__intracellular_ion_concentrations__Ca_ss; - partialF = -0.01 - var_x171; + partialF = -CHASTE_CONST(0.29999999999999999) - var_x228 - var_x230; } else { @@ -1839,52 +1990,49 @@ } return partialF; } - double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluateYDerivative16(double var_chaste_interface__environment__time_converted, std::vector& rY) + 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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]; + 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[16]; + 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[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__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 = CHASTE_CONST(103.75) * var_chaste_interface__intracellular_ion_concentrations__Ca_ss; // per_second + const double var_L_type_Ca_current__alpha = 400 * CHASTE_MATH::Exp(CHASTE_CONST(0.20000000000000001) + CHASTE_CONST(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 = 50 * CHASTE_MATH::Exp(-CHASTE_CONST(0.15384615384615385) - CHASTE_CONST(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 + 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 = CHASTE_CONST(0.001) * var_L_type_Ca_current__C_Ca0_orig_deriv; // 1 / millisecond - return d_dt_chaste_interface_var_L_type_Ca_current__C_Ca1; + return d_dt_chaste_interface_var_L_type_Ca_current__C_Ca0; } - double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluatePartialDerivative16(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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; + + const double var_x205 = CHASTE_MATH::Exp(CHASTE_CONST(0.20000000000000001) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V); + const double var_x234 = CHASTE_CONST(3.2000000000000002) * var_x205; - partialF = -0.0050000000000000001 - var_x172 - var_x174; + partialF = -CHASTE_CONST(0.01) - var_x234; } else { @@ -1896,54 +2044,53 @@ } return partialF; } - double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluateYDerivative17(double var_chaste_interface__environment__time_converted, std::vector& rY) + 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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]; + 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[17]; + 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[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__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 = CHASTE_CONST(103.75) * var_chaste_interface__intracellular_ion_concentrations__Ca_ss; // per_second + const double var_L_type_Ca_current__alpha = 400 * CHASTE_MATH::Exp(CHASTE_CONST(0.20000000000000001) + CHASTE_CONST(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 = 50 * CHASTE_MATH::Exp(-CHASTE_CONST(0.15384615384615385) - CHASTE_CONST(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 + 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 = CHASTE_CONST(0.001) * var_L_type_Ca_current__C_Ca1_orig_deriv; // 1 / millisecond - return d_dt_chaste_interface_var_L_type_Ca_current__C_Ca2; + return d_dt_chaste_interface_var_L_type_Ca_current__C_Ca1; } - double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluatePartialDerivative17(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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; + + const double var_x203 = CHASTE_MATH::Exp(-CHASTE_CONST(0.15384615384615385) - CHASTE_CONST(0.076923076923076927) * var_chaste_interface__membrane__V); + const double var_x205 = CHASTE_MATH::Exp(CHASTE_CONST(0.20000000000000001) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V); + const double var_x235 = CHASTE_CONST(0.025000000000000001) * var_x203; + const double var_x237 = CHASTE_CONST(2.3999999999999999) * var_x205; - partialF = -0.0025000000000000001 + var_x142 + var_x149; + partialF = -CHASTE_CONST(0.0050000000000000001) - var_x235 - var_x237; } else { @@ -1955,53 +2102,53 @@ } return partialF; } - double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluateYDerivative18(double var_chaste_interface__environment__time_converted, std::vector& rY) + 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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]; + 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[18]; + 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[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__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 = CHASTE_CONST(103.75) * var_chaste_interface__intracellular_ion_concentrations__Ca_ss; // per_second + const double var_L_type_Ca_current__alpha = 400 * CHASTE_MATH::Exp(CHASTE_CONST(0.20000000000000001) + CHASTE_CONST(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 = 50 * CHASTE_MATH::Exp(-CHASTE_CONST(0.15384615384615385) - CHASTE_CONST(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 + 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 / CHASTE_MATH::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 + CHASTE_MATH::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 = CHASTE_CONST(0.001) * var_L_type_Ca_current__C_Ca2_orig_deriv; // 1 / millisecond - return d_dt_chaste_interface_var_L_type_Ca_current__C_Ca3; + return d_dt_chaste_interface_var_L_type_Ca_current__C_Ca2; } - double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluatePartialDerivative18(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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; + + const double var_x203 = CHASTE_MATH::Exp(-CHASTE_CONST(0.15384615384615385) - CHASTE_CONST(0.076923076923076927) * var_chaste_interface__membrane__V); + const double var_x205 = CHASTE_MATH::Exp(CHASTE_CONST(0.20000000000000001) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V); + const double var_x208 = CHASTE_CONST(1.6000000000000001) * var_x205; + const double var_x210 = CHASTE_CONST(0.050000000000000003) * var_x203; - partialF = -0.00125 + var_x157 - var_x175; + partialF = -CHASTE_CONST(0.0025000000000000001) - var_x208 - var_x210; } else { @@ -2013,53 +2160,53 @@ } return partialF; } - double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluateYDerivative19(double var_chaste_interface__environment__time_converted, std::vector& rY) + 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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]; + 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[19]; + 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.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__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 = CHASTE_CONST(103.75) * var_chaste_interface__intracellular_ion_concentrations__Ca_ss; // per_second + const double var_L_type_Ca_current__alpha = 400 * CHASTE_MATH::Exp(CHASTE_CONST(0.20000000000000001) + CHASTE_CONST(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 = 50 * CHASTE_MATH::Exp(-CHASTE_CONST(0.15384615384615385) - CHASTE_CONST(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 + 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 / CHASTE_MATH::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 + CHASTE_MATH::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 = CHASTE_CONST(0.001) * var_L_type_Ca_current__C_Ca3_orig_deriv; // 1 / millisecond - return d_dt_chaste_interface_var_L_type_Ca_current__C_Ca4; + return d_dt_chaste_interface_var_L_type_Ca_current__C_Ca3; } - double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluatePartialDerivative19(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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; + + const double var_x203 = CHASTE_MATH::Exp(-CHASTE_CONST(0.15384615384615385) - CHASTE_CONST(0.076923076923076927) * var_chaste_interface__membrane__V); + const double var_x205 = CHASTE_MATH::Exp(CHASTE_CONST(0.20000000000000001) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V); + const double var_x220 = CHASTE_CONST(0.80000000000000004) * var_x205; + const double var_x238 = CHASTE_CONST(0.074999999999999997) * var_x203; - partialF = -0.0076249999999999998 + var_x155; + partialF = -CHASTE_CONST(0.00125) - var_x220 - var_x238; } else { @@ -2071,38 +2218,53 @@ } return partialF; } - double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluateYDerivative20(double var_chaste_interface__environment__time_converted, std::vector& rY) + 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 - + 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_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_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 = CHASTE_CONST(103.75) * var_chaste_interface__intracellular_ion_concentrations__Ca_ss; // per_second + const double var_L_type_Ca_current__alpha = 400 * CHASTE_MATH::Exp(CHASTE_CONST(0.20000000000000001) + CHASTE_CONST(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 * CHASTE_MATH::Exp(-CHASTE_CONST(0.15384615384615385) - CHASTE_CONST(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 / CHASTE_MATH::Pow(var_L_type_Ca_current__b, 4) + var_L_type_Ca_current__fprime) * var_chaste_interface__L_type_Ca_current__C_Ca4 + CHASTE_MATH::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 = CHASTE_CONST(0.001) * var_L_type_Ca_current__C_Ca4_orig_deriv; // 1 / millisecond - return d_dt_chaste_interface_var_L_type_Ca_current_y_gate__y; + return d_dt_chaste_interface_var_L_type_Ca_current__C_Ca4; } - double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluatePartialDerivative20(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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); + + const double var_x203 = CHASTE_MATH::Exp(-CHASTE_CONST(0.15384615384615385) - CHASTE_CONST(0.076923076923076927) * var_chaste_interface__membrane__V); + const double var_x216 = CHASTE_CONST(0.10000000000000001) * var_x203; - partialF = -0.001 * var_x182; + partialF = -CHASTE_CONST(0.0076249999999999998) - var_x216; } else { @@ -2114,48 +2276,39 @@ } return partialF; } - double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluateYDerivative21(double var_chaste_interface__environment__time_converted, std::vector& rY) + double Dynamicwinslow_model_1999FromCellMLGRL2::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 - + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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_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 + const double var_L_type_Ca_current_y_gate__tau_y = CHASTE_CONST(0.02) + CHASTE_CONST(0.59999999999999998) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(2.1052631578947367) + CHASTE_CONST(0.10526315789473684) * var_chaste_interface__membrane__V)); // second + const double var_L_type_Ca_current_y_gate__y_infinity = CHASTE_CONST(0.20000000000000001) + CHASTE_CONST(0.80000000000000004) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(2.5) + CHASTE_CONST(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 = CHASTE_CONST(0.001) * var_L_type_Ca_current_y_gate__y_orig_deriv; // 1 / millisecond - return d_dt_chaste_interface_var_RyR_channel__P_O1; + return d_dt_chaste_interface_var_L_type_Ca_current_y_gate__y; } - double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluatePartialDerivative21(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + 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__intracellular_ion_concentrations__Ca_ss = rY[30]; - // Units: millimolar; Initial value: 0.00011 + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_THIS(mFixedVoltage) : rY[0]); + // Units: millivolt; Initial value: -96.1638 - const double var_x183 = pow(var_chaste_interface__intracellular_ion_concentrations__Ca_ss, 3.0); - const double var_x184 = 4050000.0 * var_x183; + + const double var_x242 = CHASTE_MATH::Exp(CHASTE_CONST(2.1052631578947367) + CHASTE_CONST(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 / (CHASTE_CONST(0.02) + CHASTE_CONST(0.59999999999999998) * var_x244); - partialF = -0.67600000000000005 - var_x184; + partialF = -CHASTE_CONST(0.001) * var_x245; } else { @@ -2167,35 +2320,49 @@ } return partialF; } - double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluateYDerivative22(double var_chaste_interface__environment__time_converted, std::vector& rY) + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluateYDerivative22(double var_chaste_interface__environment__time_converted, std::vector& rY) { - double var_chaste_interface__RyR_channel__P_O1 = rY[21]; + 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[22]; + 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_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 + const double var_RyR_channel__k_a_minus = 576; // per_second + const double var_RyR_channel__k_a_plus = CHASTE_CONST(12150000000000.0); // millimolar4_per_second + const double var_RyR_channel__k_b_minus = 1930; // per_second + const double var_RyR_channel__k_b_plus = CHASTE_CONST(4050000000.0); // millimolar3_per_second + const double var_RyR_channel__k_c_minus = CHASTE_CONST(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 + CHASTE_MATH::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 - CHASTE_MATH::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 = CHASTE_CONST(0.001) * var_RyR_channel__P_O1_orig_deriv; // 1 / millisecond - return d_dt_chaste_interface_var_RyR_channel__P_O2; + return d_dt_chaste_interface_var_RyR_channel__P_O1; } - double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluatePartialDerivative22(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + 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 = CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Ca_ss, 3); + const double var_x247 = 4050000 * var_x246; - partialF = -1.9299999999999999; + partialF = -CHASTE_CONST(0.67600000000000005) - var_x247; } else { @@ -2207,38 +2374,36 @@ } return partialF; } - double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluateYDerivative23(double var_chaste_interface__environment__time_converted, std::vector& rY) + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluateYDerivative23(double var_chaste_interface__environment__time_converted, std::vector& rY) { - double var_chaste_interface__RyR_channel__P_O1 = rY[21]; + 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[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 + const double var_RyR_channel__k_b_minus = 1930; // per_second + const double var_RyR_channel__k_b_plus = CHASTE_CONST(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 + CHASTE_MATH::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 = CHASTE_CONST(0.001) * var_RyR_channel__P_O2_orig_deriv; // 1 / millisecond - return d_dt_chaste_interface_var_RyR_channel__P_C1; + return d_dt_chaste_interface_var_RyR_channel__P_O2; } - double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluatePartialDerivative23(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + 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) { - 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; + partialF = -CHASTE_CONST(1.9299999999999999); } else { @@ -2250,32 +2415,39 @@ } return partialF; } - double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluateYDerivative24(double var_chaste_interface__environment__time_converted, std::vector& rY) + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluateYDerivative24(double var_chaste_interface__environment__time_converted, std::vector& rY) { - double var_chaste_interface__RyR_channel__P_O1 = rY[21]; + 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[24]; - // Units: dimensionless; Initial value: 0.53 - + 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_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__k_a_minus = 576; // per_second + const double var_RyR_channel__k_a_plus = CHASTE_CONST(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 - CHASTE_MATH::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 = CHASTE_CONST(0.001) * var_RyR_channel__P_C1_orig_deriv; // 1 / millisecond - return d_dt_chaste_interface_var_RyR_channel__P_C2; + return d_dt_chaste_interface_var_RyR_channel__P_C1; } - double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluatePartialDerivative24(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + 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 = CHASTE_CONST(12150000000.0) * CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Ca_ss, 4); - partialF = -0.00080000000000000004; + partialF = -var_x248; } else { @@ -2287,34 +2459,33 @@ } return partialF; } - double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluateYDerivative25(double var_chaste_interface__environment__time_converted, std::vector& rY) + double Dynamicwinslow_model_1999FromCellMLGRL2::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 - + 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_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 + const double var_RyR_channel__k_c_minus = CHASTE_CONST(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 = CHASTE_CONST(0.001) * var_RyR_channel__P_C2_orig_deriv; // 1 / millisecond - return d_dt_chaste_interface_var_intracellular_Ca_fluxes__HTRPNCa; + return d_dt_chaste_interface_var_RyR_channel__P_C2; } - double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluatePartialDerivative25(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + 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) { - 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; + partialF = -CHASTE_CONST(0.00080000000000000004); } else { @@ -2326,34 +2497,35 @@ } return partialF; } - double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluateYDerivative26(double var_chaste_interface__environment__time_converted, std::vector& rY) + double Dynamicwinslow_model_1999FromCellMLGRL2::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]; + 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_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 + const double var_intracellular_Ca_fluxes__k_htrpn_minus = CHASTE_CONST(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 = CHASTE_CONST(0.001) * var_intracellular_Ca_fluxes__HTRPNCa_orig_deriv; // millimolar / millisecond - return d_dt_chaste_interface_var_intracellular_Ca_fluxes__LTRPNCa; + return d_dt_chaste_interface_var_intracellular_Ca_fluxes__HTRPNCa; } - double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluatePartialDerivative26(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + 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[28]; + double var_chaste_interface__intracellular_ion_concentrations__Cai = rY[1]; // Units: millimolar; Initial value: 8e-05 + - partialF = -0.040000000000000001 - 40.0 * var_chaste_interface__intracellular_ion_concentrations__Cai; + partialF = -CHASTE_CONST(6.6000000000000005e-5) - 20 * var_chaste_interface__intracellular_ion_concentrations__Cai; } else { @@ -2365,26 +2537,35 @@ } return partialF; } - double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluateYDerivative27(double var_chaste_interface__environment__time_converted, std::vector& rY) + 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_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_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 = CHASTE_CONST(0.001) * var_intracellular_Ca_fluxes__LTRPNCa_orig_deriv; // millimolar / millisecond - return d_dt_chaste_interface_var_intracellular_ion_concentrations__Nai; + return d_dt_chaste_interface_var_intracellular_Ca_fluxes__LTRPNCa; } - double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluatePartialDerivative27(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + 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; + partialF = -CHASTE_CONST(0.040000000000000001) - 40 * var_chaste_interface__intracellular_ion_concentrations__Cai; } else { @@ -2396,127 +2577,96 @@ } return partialF; } - double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluateYDerivative28(double var_chaste_interface__environment__time_converted, std::vector& rY) + 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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]; + double var_chaste_interface__intracellular_ion_concentrations__Cai = rY[1]; // 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 - + 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_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 + const double var_Na_Ca_exchanger__K_mCa = CHASTE_CONST(1.3799999999999999); // millimolar + const double var_Na_Ca_exchanger__K_mNa = CHASTE_CONST(87.5); // millimolar + const double var_Na_Ca_exchanger__K_sat = CHASTE_CONST(0.20000000000000001); // dimensionless + const double var_Na_Ca_exchanger__eta = CHASTE_CONST(0.34999999999999998); // dimensionless + const double var_intracellular_ion_concentrations__A_cap = CHASTE_CONST(0.00015339999999999999); // cm2 + const double var_intracellular_ion_concentrations__V_myo = CHASTE_CONST(2.584e-5); // micro_litre + const double var_membrane__F = CHASTE_CONST(96.485341500000004); // coulomb_per_millimole + const double var_membrane__R = CHASTE_CONST(8.3144720000000003); // joule_per_mole_kelvin + const double var_membrane__T = 310; // kelvin + const double var_sodium_background_current__g_Nab = CHASTE_CONST(0.0030999999999999999); // milliS_per_microF + const double var_sodium_potassium_pump__I_NaK = CHASTE_CONST(0.69299999999999995); // microA_per_microF + const double var_sodium_potassium_pump__K_mKo = CHASTE_CONST(1.5); // millimolar + const double var_sodium_potassium_pump__K_mNai = 10; // millimolar + const double var_Na_Ca_exchanger__i_NaCa = 5000 * (CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Nai, 3) * mParameters[3] * CHASTE_MATH::Exp(var_Na_Ca_exchanger__eta * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - CHASTE_MATH::Pow(mParameters[5], 3) * var_chaste_interface__intracellular_ion_concentrations__Cai * CHASTE_MATH::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 * CHASTE_MATH::Exp((-1 + var_Na_Ca_exchanger__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (CHASTE_MATH::Pow(var_Na_Ca_exchanger__K_mNa, 3) + CHASTE_MATH::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 * CHASTE_MATH::Log(mParameters[5] / var_chaste_interface__intracellular_ion_concentrations__Nai) / var_membrane__F; // millivolt + const double var_fast_sodium_current__i_Na = CHASTE_MATH::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 = -CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(0.01485884101040119) * mParameters[5]); // dimensionless + const double var_sodium_potassium_pump__f_NaK = 1 / (1 + CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(0.10000000000000001) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) + CHASTE_CONST(0.036499999999999998) * var_sodium_potassium_pump__sigma * CHASTE_MATH::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 + CHASTE_MATH::Pow((var_sodium_potassium_pump__K_mNai / var_chaste_interface__intracellular_ion_concentrations__Nai), CHASTE_CONST(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 = CHASTE_CONST(0.001) * var_intracellular_ion_concentrations__Nai_orig_deriv; // millimolar / millisecond - return d_dt_chaste_interface_var_intracellular_ion_concentrations__Cai; + return d_dt_chaste_interface_var_intracellular_ion_concentrations__Nai; } - double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluatePartialDerivative28(double var_chaste_interface__environment__time_converted, std::vector& rY, double delta, bool forceNumerical) + 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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]; + 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 - 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)); + + const double var_x11 = CHASTE_MATH::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 = CHASTE_MATH::Exp(CHASTE_CONST(0.013101861787960915) * var_chaste_interface__membrane__V); + const double var_x25 = var_x24 * mParameters[3]; + const double var_x26 = CHASTE_MATH::Exp(-CHASTE_CONST(0.024332029034784559) * var_chaste_interface__membrane__V); + const double var_x27 = CHASTE_MATH::Pow(mParameters[5], 3); + const double var_x30 = 1 + CHASTE_CONST(0.20000000000000001) * var_x26; + const double var_x31 = 1 / var_x30; + const double var_x32 = 1 / (CHASTE_CONST(669921.875) + var_x27); + const double var_x33 = 1 / (CHASTE_CONST(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 = CHASTE_MATH::Pow(var_x37, CHASTE_CONST(1.5)); + const double var_x40 = CHASTE_MATH::Exp(-CHASTE_CONST(0.0037433890822745476) * var_chaste_interface__membrane__V); + const double var_x41 = CHASTE_MATH::Exp(CHASTE_CONST(0.01485884101040119) * mParameters[5]); + const double var_x42 = CHASTE_CONST(0.037433890822745473) * var_chaste_interface__membrane__V; + const double var_x43 = CHASTE_MATH::Exp(-var_x42); + const double var_x44 = 1 + CHASTE_CONST(0.1245) * var_x40 + CHASTE_CONST(0.036499999999999998) * var_x43 * (-CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * var_x41); + const double var_x47 = 1 / (CHASTE_CONST(1.5) + mParameters[4]); + const double var_x48 = var_x47 * mParameters[4]; + const double var_x103 = var_x13 * var_x37; + const double var_x104 = CHASTE_MATH::Pow((CHASTE_CONST(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 * CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Nai, 2); + + partialF = (-CHASTE_CONST(5.0952821319166834e-6) * var_x37 - CHASTE_CONST(2.768751798927894) * var_x107 - CHASTE_CONST(6.0676044384883792e-6) * var_x106 - CHASTE_CONST(0.0016436393973924784) * var_x103) * mParameters[2]; } else { @@ -2528,26 +2678,137 @@ } return partialF; } - double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluateYDerivative29(double var_chaste_interface__environment__time_converted, std::vector& rY) + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluateYDerivative29(double var_chaste_interface__environment__time_converted, std::vector& rY) { + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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_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_L_type_Ca_current__P_K = CHASTE_CONST(5.7899999999999998e-7); // cm_per_second + const double var_L_type_Ca_current__i_Ca_half = -CHASTE_CONST(0.26500000000000001); // microA_per_microF + const double var_intracellular_ion_concentrations__A_cap = CHASTE_CONST(0.00015339999999999999); // cm2 + const double var_intracellular_ion_concentrations__V_myo = CHASTE_CONST(2.584e-5); // micro_litre + const double var_membrane__F = CHASTE_CONST(96.485341500000004); // coulomb_per_millimole + const double var_membrane__R = CHASTE_CONST(8.3144720000000003); // joule_per_mole_kelvin + const double var_membrane__T = 310; // kelvin + const double var_plateau_potassium_current__g_Kp = CHASTE_CONST(0.0022160000000000001); // milliS_per_microF + const double var_plateau_potassium_current_Kp_gate__Kp_V = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.2521739130434781) - CHASTE_CONST(0.16722408026755853) * var_chaste_interface__membrane__V)); // dimensionless + const double var_rapid_activating_delayed_rectifiyer_K_current__R_V = 1 / (1 + CHASTE_CONST(1.4944999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(0.044600000000000001) * var_chaste_interface__membrane__V)); // dimensionless + const double var_sodium_potassium_pump__I_NaK = CHASTE_CONST(0.69299999999999995); // microA_per_microF + const double var_sodium_potassium_pump__K_mKo = CHASTE_CONST(1.5); // millimolar + const double var_sodium_potassium_pump__K_mNai = 10; // millimolar + const double var_L_type_Ca_current__i_Ca_max = 4000 * CHASTE_MATH::Pow(var_membrane__F, 2) * (CHASTE_CONST(0.001) * CHASTE_MATH::Exp(2 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - CHASTE_CONST(0.34100000000000003) * mParameters[3]) * mParameters[6] * var_chaste_interface__membrane__V / ((-1 + CHASTE_MATH::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 = CHASTE_MATH::Pow(var_membrane__F, 2) * (-mParameters[4] + var_chaste_interface__intracellular_ion_concentrations__Ki * CHASTE_MATH::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 + CHASTE_MATH::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 * CHASTE_MATH::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 = CHASTE_CONST(0.5) * CHASTE_MATH::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 * CHASTE_MATH::Log((mParameters[4] + CHASTE_CONST(0.018329999999999999) * mParameters[5]) / (var_chaste_interface__intracellular_ion_concentrations__Ki + CHASTE_CONST(0.018329999999999999) * var_chaste_interface__intracellular_ion_concentrations__Nai)) / var_membrane__F; // millivolt + const double var_slow_activating_delayed_rectifiyer_K_current__i_Ks = CHASTE_MATH::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 = -CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(0.01485884101040119) * mParameters[5]); // dimensionless + const double var_sodium_potassium_pump__f_NaK = 1 / (1 + CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(0.10000000000000001) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) + CHASTE_CONST(0.036499999999999998) * var_sodium_potassium_pump__sigma * CHASTE_MATH::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 + CHASTE_MATH::Pow((var_sodium_potassium_pump__K_mNai / var_chaste_interface__intracellular_ion_concentrations__Nai), CHASTE_CONST(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 + CHASTE_MATH::Exp(CHASTE_CONST(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 = CHASTE_CONST(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 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 ? CHASTE_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 - - partialF = 0; + + const double var_x0 = CHASTE_MATH::Exp(CHASTE_CONST(1.2521739130434781) - CHASTE_CONST(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 = CHASTE_MATH::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 = CHASTE_MATH::Log(var_x7); + const double var_x9 = -CHASTE_CONST(26.713760659695648) * var_x8 + var_chaste_interface__membrane__V; + const double var_x14 = CHASTE_MATH::Exp(CHASTE_CONST(0.044600000000000001) * var_chaste_interface__membrane__V); + const double var_x15 = CHASTE_MATH::Sqrt(mParameters[4]); + const double var_x16 = var_x15 * mParameters[12] / (1 + CHASTE_CONST(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 = CHASTE_MATH::Exp(CHASTE_CONST(0.056150836234118207) * var_chaste_interface__membrane__V - CHASTE_CONST(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 = CHASTE_CONST(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 = CHASTE_MATH::Exp(CHASTE_CONST(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 = CHASTE_CONST(0.001) * var_x52 - CHASTE_CONST(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 - CHASTE_CONST(54518.063995566983) * var_x57); + const double var_x59 = CHASTE_MATH::Exp(var_x42); + const double var_x60 = -1 + var_x59; + const double var_x61 = 1 / var_x60; + const double var_x72 = CHASTE_MATH::Pow((1 + CHASTE_CONST(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 + CHASTE_CONST(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 = (-CHASTE_CONST(3.6423049046217326e-6) * var_x108 - CHASTE_CONST(1.28669728151281e-10) * var_x112 - CHASTE_CONST(0.00082181969869623921) * var_x110 - CHASTE_CONST(0.0016436393973924784) * var_x102 - CHASTE_CONST(0.0016436393973924784) * var_x109 - CHASTE_CONST(0.0016436393973924784) * var_x111 + CHASTE_CONST(2.3072931657732449e-5) * var_x19 * var_x20 * var_x6 * var_x72 * var_x9 * mParameters[4] * mParameters[11]) * mParameters[2]; } else { @@ -2559,98 +2820,95 @@ } return partialF; } - double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluateYDerivative30(double var_chaste_interface__environment__time_converted, std::vector& rY) + 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_THIS(mFixedVoltage) : rY[0]); // Units: millivolt; Initial value: -96.1638 - double var_chaste_interface__L_type_Ca_current__O = rY[8]; + 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[9]; + 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[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[21]; + 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[22]; + double var_chaste_interface__RyR_channel__P_O2 = rY[23]; // 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__tau_xfer = CHASTE_CONST(0.026700000000000002); // second + const double var_intracellular_ion_concentrations__A_cap = CHASTE_CONST(0.00015339999999999999); // cm2 + const double var_intracellular_ion_concentrations__CMDN_tot = CHASTE_CONST(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.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_intracellular_ion_concentrations__K_mCMDN = CHASTE_CONST(0.0023800000000000002); // millimolar + const double var_intracellular_ion_concentrations__K_mEGTA = CHASTE_CONST(0.00014999999999999999); // millimolar + const double var_intracellular_ion_concentrations__V_JSR = CHASTE_CONST(1.6e-7); // micro_litre + const double var_intracellular_ion_concentrations__V_SS = CHASTE_CONST(1.2e-9); // micro_litre + const double var_intracellular_ion_concentrations__V_myo = CHASTE_CONST(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 / CHASTE_MATH::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 / CHASTE_MATH::Pow((var_chaste_interface__intracellular_ion_concentrations__Ca_ss + var_intracellular_ion_concentrations__K_mEGTA), 2)); // dimensionless + const double var_membrane__F = CHASTE_CONST(96.485341500000004); // coulomb_per_millimole + const double var_membrane__R = CHASTE_CONST(8.3144720000000003); // joule_per_mole_kelvin + const double var_membrane__T = 310; // kelvin + const double var_L_type_Ca_current__i_Ca_max = 4000 * CHASTE_MATH::Pow(var_membrane__F, 2) * (CHASTE_CONST(0.001) * CHASTE_MATH::Exp(2 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - CHASTE_CONST(0.34100000000000003) * mParameters[3]) * mParameters[6] * var_chaste_interface__membrane__V / ((-1 + CHASTE_MATH::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 + 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 - CHASTE_CONST(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 = CHASTE_CONST(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 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_THIS(mFixedVoltage) : rY[0]); // Units: millivolt; Initial value: -96.1638 - double var_chaste_interface__L_type_Ca_current__O = rY[8]; + 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[9]; + 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[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[21]; + 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[22]; + double var_chaste_interface__RyR_channel__P_O2 = rY[23]; // 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)); + + 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 = CHASTE_MATH::Exp(CHASTE_CONST(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 = CHASTE_CONST(0.001) * var_x52 - CHASTE_CONST(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 = CHASTE_CONST(0.0023800000000000002) + var_chaste_interface__intracellular_ion_concentrations__Ca_ss; + const double var_x258 = 1 + CHASTE_CONST(0.00011900000000000002) / CHASTE_MATH::Pow(var_x257, 2); + const double var_x259 = 1 / var_x258; + const double var_x260 = CHASTE_CONST(0.001) * var_x259; + const double var_x265 = CHASTE_CONST(133.33333333333334) * var_chaste_interface__RyR_channel__P_O1 + CHASTE_CONST(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 * (-CHASTE_CONST(806491.88514357049) - var_x265 * mParameters[0]) + CHASTE_CONST(2.3800000000000004e-7) * (CHASTE_CONST(806491.88514357049) * var_chaste_interface__intracellular_ion_concentrations__Cai - CHASTE_CONST(806491.88514357049) * var_chaste_interface__intracellular_ion_concentrations__Ca_ss - CHASTE_CONST(9570598.0870152581) * var_x51 * var_x57 + CHASTE_CONST(133.33333333333334) * var_x266 * var_x267 * mParameters[0]) / (CHASTE_MATH::Pow(var_x257, 3) * CHASTE_MATH::Pow(var_x258, 2)); } else { @@ -2662,12 +2920,12 @@ } return partialF; } - double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluateYDerivative31(double var_chaste_interface__environment__time_converted, std::vector& rY) + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluateYDerivative31(double var_chaste_interface__environment__time_converted, std::vector& rY) { - double var_chaste_interface__RyR_channel__P_O1 = rY[21]; + 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[22]; + 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 @@ -2676,29 +2934,28 @@ 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__tau_tr = CHASTE_CONST(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) * 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_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 = CHASTE_CONST(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 / CHASTE_MATH::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 d_dt_chaste_interface_var_intracellular_ion_concentrations__Ca_JSR = CHASTE_CONST(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 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[21]; + 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[22]; + 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 @@ -2707,15 +2964,16 @@ 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; + + 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 = CHASTE_CONST(0.80000000000000004) + var_chaste_interface__intracellular_ion_concentrations__Ca_JSR; + const double var_x269 = CHASTE_MATH::Pow(var_x268, (-2)); + const double var_x270 = 1 / (1 + 12 * var_x269); + const double var_x271 = CHASTE_CONST(0.001) * var_x270; + const double var_x273 = var_x267 * mParameters[0]; - 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)); + partialF = var_x271 * (-CHASTE_CONST(1740.0382808421784) - var_x267 * mParameters[0]) + CHASTE_CONST(0.00016666666666666666) * (CHASTE_CONST(1740.0382808421784) * var_chaste_interface__intracellular_ion_concentrations__Ca_NSR - CHASTE_CONST(1740.0382808421784) * var_chaste_interface__intracellular_ion_concentrations__Ca_JSR - var_x266 * var_x273) / (CHASTE_MATH::Pow(var_x268, 3) * CHASTE_MATH::Pow((CHASTE_CONST(0.083333333333333329) + var_x269), 2)); } else { @@ -2727,56 +2985,58 @@ } return partialF; } - double Dynamicwinslow_model_1999FromCellMLGRL2Opt::EvaluateYDerivative32(double var_chaste_interface__environment__time_converted, std::vector& rY) + double Dynamicwinslow_model_1999FromCellMLGRL2::EvaluateYDerivative32(double var_chaste_interface__environment__time_converted, std::vector& rY) { - double var_chaste_interface__intracellular_ion_concentrations__Cai = rY[28]; + 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_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_SERCA2a_pump__K_fb = CHASTE_CONST(0.00016799999999999999); // millimolar + const double var_SERCA2a_pump__K_rb = CHASTE_CONST(3.29); // millimolar + const double var_SERCA2a_pump__N_fb = CHASTE_CONST(1.2); // dimensionless + const double var_SERCA2a_pump__N_rb = 1; // dimensionless + const double var_SERCA2a_pump__Vmaxf = CHASTE_CONST(0.081299999999999997); // millimolar_per_second + const double var_SERCA2a_pump__Vmaxr = CHASTE_CONST(0.318); // millimolar_per_second + const double var_intracellular_Ca_fluxes__tau_tr = CHASTE_CONST(0.00057470000000000004); // second + const double var_SERCA2a_pump__rb = CHASTE_MATH::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_SERCA2a_pump__fb = CHASTE_MATH::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 = CHASTE_CONST(1.6e-7); // micro_litre + const double var_intracellular_ion_concentrations__V_NSR = CHASTE_CONST(2.0999999999999998e-6); // micro_litre + const double var_intracellular_ion_concentrations__V_myo = CHASTE_CONST(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 d_dt_chaste_interface_var_intracellular_ion_concentrations__Ca_NSR = CHASTE_CONST(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 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[28]; + 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_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); + + const double var_x119 = CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Cai, CHASTE_CONST(1.2)); + const double var_x120 = CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Ca_NSR, 1); + const double var_x121 = 1 / (1 + CHASTE_CONST(33855.471141425078) * var_x119 + CHASTE_CONST(0.303951367781155) * var_x120); + const double var_x122 = var_x121 * mParameters[1]; + const double var_x123 = CHASTE_MATH::Pow((CHASTE_CONST(2.9537323401073989e-5) + var_x119 + CHASTE_CONST(8.9779098483507565e-6) * var_x120), (-2)); + const double var_x124 = CHASTE_CONST(2752.4498037978587) * var_x119 - CHASTE_CONST(0.096656534954407292) * var_x120; + const double var_x126 = var_x123 * var_x124 * mParameters[1]; - partialF = -0.13257434520702313 - 0.0011893356491532784 * var_x196 - 3.2630189260961817e-12 * var_x200; + partialF = -CHASTE_CONST(0.13257434520702313) - CHASTE_CONST(0.0011893356491532784) * var_x122 - CHASTE_CONST(3.2630189260961817e-12) * var_x126; } else { @@ -2789,26 +3049,109 @@ return partialF; } - std::vector Dynamicwinslow_model_1999FromCellMLGRL2Opt::ComputeDerivedQuantities(double var_chaste_interface__environment__time_converted, const std::vector & rY) + 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 ? CHASTE_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_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; + const double var_Na_Ca_exchanger__K_mCa = CHASTE_CONST(1.3799999999999999); // millimolar + const double var_Na_Ca_exchanger__K_mNa = CHASTE_CONST(87.5); // millimolar + const double var_Na_Ca_exchanger__K_sat = CHASTE_CONST(0.20000000000000001); // dimensionless + const double var_Na_Ca_exchanger__eta = CHASTE_CONST(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 = CHASTE_CONST(96.485341500000004); // coulomb_per_millimole + const double var_membrane__R = CHASTE_CONST(8.3144720000000003); // joule_per_mole_kelvin + const double var_membrane__T = 310; // kelvin + const double var_L_type_Ca_current_y_gate__tau_y = CHASTE_CONST(0.02) + CHASTE_CONST(0.59999999999999998) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(2.1052631578947367) + CHASTE_CONST(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 * CHASTE_MATH::Exp(-CHASTE_CONST(11.764705882352942) + CHASTE_CONST(0.14705882352941177) * mParameters[10] - CHASTE_CONST(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 * CHASTE_MATH::Exp(CHASTE_CONST(0.079000000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.079000000000000001) * mParameters[10]) + 310000 * CHASTE_MATH::Exp(CHASTE_CONST(0.34999999999999998) * var_chaste_interface__membrane__V - CHASTE_CONST(0.34999999999999998) * mParameters[10])) : (CHASTE_CONST(7692.3076923076924) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.96036036036036043) + CHASTE_CONST(0.0900900900900901) * mParameters[10] - CHASTE_CONST(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 * (CHASTE_CONST(37.780000000000001) + var_chaste_interface__membrane__V) * (-127140 * CHASTE_MATH::Exp(CHASTE_CONST(0.24440000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.24440000000000001) * mParameters[10]) - CHASTE_CONST(3.4740000000000003e-5) * CHASTE_MATH::Exp(CHASTE_CONST(0.043909999999999998) * mParameters[10] - CHASTE_CONST(0.043909999999999998) * var_chaste_interface__membrane__V)) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(24.640530000000002) + CHASTE_CONST(0.311) * var_chaste_interface__membrane__V - CHASTE_CONST(0.311) * mParameters[10]))) : (0)); // per_second + const double var_fast_sodium_current_j_gate__beta_j = ((var_chaste_interface__membrane__V < -40) ? (CHASTE_CONST(121.2) * CHASTE_MATH::Exp(CHASTE_CONST(0.01052) * mParameters[10] - CHASTE_CONST(0.01052) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(5.5312920000000005) + CHASTE_CONST(0.13780000000000001) * mParameters[10] - CHASTE_CONST(0.13780000000000001) * var_chaste_interface__membrane__V))) : (300 * CHASTE_MATH::Exp(CHASTE_CONST(2.5349999999999999e-7) * mParameters[10] - CHASTE_CONST(2.5349999999999999e-7) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.2000000000000002) + CHASTE_CONST(0.10000000000000001) * mParameters[10] - CHASTE_CONST(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 = CHASTE_STIM(var_chaste_interface__environment__time_converted); // uA_per_cm2 + const double var_rapid_activating_delayed_rectifiyer_K_current__R_V = 1 / (1 + CHASTE_CONST(1.4944999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(0.044600000000000001) * var_chaste_interface__membrane__V)); // dimensionless + const double var_L_type_Ca_current__i_Ca_max = 4000 * CHASTE_MATH::Pow(var_membrane__F, 2) * (CHASTE_CONST(0.001) * CHASTE_MATH::Exp(2 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - CHASTE_CONST(0.34100000000000003) * mParameters[3]) * mParameters[6] * var_chaste_interface__membrane__V / ((-1 + CHASTE_MATH::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 = CHASTE_CAP() * 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 * CHASTE_MATH::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 = CHASTE_CONST(0.5) * CHASTE_MATH::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 = CHASTE_CAP() * var_rapid_activating_delayed_rectifiyer_K_current__i_Kr; // uA_per_cm2 + const double var_Na_Ca_exchanger__i_NaCa = 5000 * (CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Nai, 3) * mParameters[3] * CHASTE_MATH::Exp(var_Na_Ca_exchanger__eta * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - CHASTE_MATH::Pow(mParameters[5], 3) * var_chaste_interface__intracellular_ion_concentrations__Cai * CHASTE_MATH::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 * CHASTE_MATH::Exp((-1 + var_Na_Ca_exchanger__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (CHASTE_MATH::Pow(var_Na_Ca_exchanger__K_mNa, 3) + CHASTE_MATH::Pow(mParameters[5], 3)) * (var_Na_Ca_exchanger__K_mCa + mParameters[3])); // microA_per_microF + const double var_Na_Ca_exchanger__i_NaCa_converted = CHASTE_CAP() * var_Na_Ca_exchanger__i_NaCa; // uA_per_cm2 + const double var_fast_sodium_current__E_Na = var_membrane__R * var_membrane__T * CHASTE_MATH::Log(mParameters[5] / var_chaste_interface__intracellular_ion_concentrations__Nai) / var_membrane__F; // millivolt + const double var_fast_sodium_current__i_Na = CHASTE_MATH::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 = CHASTE_CAP() * 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 * CHASTE_MATH::Log((mParameters[4] + CHASTE_CONST(0.018329999999999999) * mParameters[5]) / (var_chaste_interface__intracellular_ion_concentrations__Ki + CHASTE_CONST(0.018329999999999999) * var_chaste_interface__intracellular_ion_concentrations__Nai)) / var_membrane__F; // millivolt + const double var_slow_activating_delayed_rectifiyer_K_current__i_Ks = CHASTE_MATH::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 = CHASTE_CAP() * 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 + CHASTE_MATH::Exp(CHASTE_CONST(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 = CHASTE_CAP() * 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 = CHASTE_CAP() * 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) +void OdeSystemInformation::Initialise(void) { this->mSystemName = "winslow_model_1999"; - this->mFreeVariableName = "environment__time"; + this->mFreeVariableName = "time"; this->mFreeVariableUnits = "millisecond"; // rY[0]: @@ -2817,188 +3160,294 @@ void OdeSystemInformation::Initialis this->mInitialConditions.push_back(-96.1638); // rY[1]: - this->mVariableNames.push_back("fast_sodium_current_m_gate__m"); + 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[2]: - this->mVariableNames.push_back("fast_sodium_current_h_gate__h"); + // rY[3]: + this->mVariableNames.push_back("membrane_fast_sodium_current_h_gate"); this->mVariableUnits.push_back("dimensionless"); this->mInitialConditions.push_back(0.988354); - // rY[3]: - this->mVariableNames.push_back("fast_sodium_current_j_gate__j"); + // rY[4]: + this->mVariableNames.push_back("membrane_fast_sodium_current_j_gate"); this->mVariableUnits.push_back("dimensionless"); this->mInitialConditions.push_back(0.99254); - // rY[4]: + // 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[5]: + // 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[6]: + // 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[7]: + // 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[8]: - this->mVariableNames.push_back("L_type_Ca_current__O"); + // 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[9]: - this->mVariableNames.push_back("L_type_Ca_current__O_Ca"); + // 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[10]: + // rY[11]: this->mVariableNames.push_back("L_type_Ca_current__C0"); this->mVariableUnits.push_back("dimensionless"); this->mInitialConditions.push_back(0.997208); - // rY[11]: + // rY[12]: this->mVariableNames.push_back("L_type_Ca_current__C1"); this->mVariableUnits.push_back("dimensionless"); this->mInitialConditions.push_back(6.38897e-05); - // rY[12]: + // rY[13]: this->mVariableNames.push_back("L_type_Ca_current__C2"); this->mVariableUnits.push_back("dimensionless"); this->mInitialConditions.push_back(1.535e-09); - // rY[13]: + // rY[14]: this->mVariableNames.push_back("L_type_Ca_current__C3"); this->mVariableUnits.push_back("dimensionless"); this->mInitialConditions.push_back(1.63909e-14); - // rY[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[15]: + // rY[16]: this->mVariableNames.push_back("L_type_Ca_current__C_Ca0"); this->mVariableUnits.push_back("dimensionless"); this->mInitialConditions.push_back(0.00272826); - // rY[16]: + // 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[17]: + // 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[18]: + // 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[19]: + // 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[20]: - this->mVariableNames.push_back("L_type_Ca_current_y_gate__y"); + // 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[21]: + // rY[22]: this->mVariableNames.push_back("RyR_channel__P_O1"); this->mVariableUnits.push_back("dimensionless"); this->mInitialConditions.push_back(0.0); - // rY[22]: + // rY[23]: this->mVariableNames.push_back("RyR_channel__P_O2"); this->mVariableUnits.push_back("dimensionless"); this->mInitialConditions.push_back(0.0); - // rY[23]: + // rY[24]: this->mVariableNames.push_back("RyR_channel__P_C1"); this->mVariableUnits.push_back("dimensionless"); this->mInitialConditions.push_back(0.47); - // rY[24]: + // rY[25]: this->mVariableNames.push_back("RyR_channel__P_C2"); this->mVariableUnits.push_back("dimensionless"); this->mInitialConditions.push_back(0.53); - // rY[25]: + // rY[26]: this->mVariableNames.push_back("intracellular_Ca_fluxes__HTRPNCa"); this->mVariableUnits.push_back("millimolar"); this->mInitialConditions.push_back(0.98); - // rY[26]: + // rY[27]: 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->mVariableNames.push_back("cytosolic_sodium_concentration"); this->mVariableUnits.push_back("millimolar"); - this->mInitialConditions.push_back(8e-05); + this->mInitialConditions.push_back(10.0); // rY[29]: - this->mVariableNames.push_back("intracellular_ion_concentrations__Ki"); + this->mVariableNames.push_back("cytosolic_potassium_concentration"); this->mVariableUnits.push_back("millimolar"); this->mInitialConditions.push_back(157.8); // rY[30]: - this->mVariableNames.push_back("intracellular_ion_concentrations__Ca_ss"); + 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("intracellular_ion_concentrations__Ca_JSR"); + this->mVariableNames.push_back("JSR_calcium_concentration"); this->mVariableUnits.push_back("millimolar"); this->mInitialConditions.push_back(0.257); // rY[32]: - this->mVariableNames.push_back("intracellular_ion_concentrations__Ca_NSR"); + 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("environment__time"); - this->mDerivedQuantityUnits.push_back("millisecond"); + 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"); - - this->mAttributes["SuggestedForwardEulerTimestep"] = 0.0001; + // 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_1999FromCellMLGRL2Opt) +CHASTE_CLASS_EXPORT(Dynamicwinslow_model_1999FromCellMLGRL2) extern "C" { AbstractCardiacCellInterface* MakeCardiacCell( boost::shared_ptr pSolver, boost::shared_ptr pStimulus) { - return new Dynamicwinslow_model_1999FromCellMLGRL2Opt(pSolver, pStimulus); + return new Dynamicwinslow_model_1999FromCellMLGRL2(pSolver, pStimulus); } -} \ No newline at end of file +} diff --git a/chaste_codegen/data/tests/chaste_reference_models/GRL2Opt/dynamic_winslow_model_1999.hpp b/chaste_codegen/data/tests/chaste_reference_models/GRL2Opt/dynamic_winslow_model_1999.hpp index 224f28d13..57fd8d110 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/GRL2Opt/dynamic_winslow_model_1999.hpp +++ b/chaste_codegen/data/tests/chaste_reference_models/GRL2Opt/dynamic_winslow_model_1999.hpp @@ -1,5 +1,5 @@ -#ifndef DYNAMICWINSLOW_MODEL_1999FROMCELLMLGRL2OPT_HPP_ -#define DYNAMICWINSLOW_MODEL_1999FROMCELLMLGRL2OPT_HPP_ +#ifndef DYNAMICWINSLOW_MODEL_1999FROMCELLMLGRL2_HPP_ +#define DYNAMICWINSLOW_MODEL_1999FROMCELLMLGRL2_HPP_ //! @file //! @@ -8,7 +8,7 @@ //! Model: winslow_model_1999 //! //! Processed by chaste_codegen: https://github.com/ModellingWebLab/chaste-codegen -//! (translator: chaste_codegen, model type: GeneralizedRushLarsenSecondOrderOpt) +//! (translator: chaste_codegen, model type: GeneralizedRushLarsenSecondOrder) //! on (date omitted as unimportant) //! //! @@ -17,9 +17,12 @@ #include #include "AbstractDynamicallyLoadableEntity.hpp" #include "AbstractStimulusFunction.hpp" +#if USING_DEVICE_COMPILER +#include "StimulusEvaluatorCuda.hpp" +#endif #include "AbstractGeneralizedRushLarsenCardiacCell.hpp" -class Dynamicwinslow_model_1999FromCellMLGRL2Opt : public AbstractGeneralizedRushLarsenCardiacCell, public AbstractDynamicallyLoadableEntity +class Dynamicwinslow_model_1999FromCellMLGRL2 : public AbstractGeneralizedRushLarsenCardiacCell, public AbstractDynamicallyLoadableEntity { friend class boost::serialization::access; template @@ -33,11 +36,17 @@ class Dynamicwinslow_model_1999FromCellMLGRL2Opt : public AbstractGeneralizedRus // 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(); - Dynamicwinslow_model_1999FromCellMLGRL2Opt(boost::shared_ptr /* unused; should be empty */, boost::shared_ptr pIntracellularStimulus); - ~Dynamicwinslow_model_1999FromCellMLGRL2Opt(); + 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); @@ -114,7 +123,7 @@ class Dynamicwinslow_model_1999FromCellMLGRL2Opt : public AbstractGeneralizedRus // Needs to be included last #include "SerializationExportWrapper.hpp" -CHASTE_CLASS_EXPORT(Dynamicwinslow_model_1999FromCellMLGRL2Opt) +CHASTE_CLASS_EXPORT(Dynamicwinslow_model_1999FromCellMLGRL2) namespace boost { @@ -122,7 +131,7 @@ namespace boost { template inline void save_construct_data( - Archive & ar, const Dynamicwinslow_model_1999FromCellMLGRL2Opt * t, const unsigned int fileVersion) + 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(); @@ -132,17 +141,17 @@ namespace boost template inline void load_construct_data( - Archive & ar, Dynamicwinslow_model_1999FromCellMLGRL2Opt * t, const unsigned int fileVersion) + 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_1999FromCellMLGRL2Opt(p_solver, p_stimulus); + ::new(t)Dynamicwinslow_model_1999FromCellMLGRL2(p_solver, p_stimulus); } } } -#endif // DYNAMICWINSLOW_MODEL_1999FROMCELLMLGRL2OPT_HPP_ \ No newline at end of file +#endif // DYNAMICWINSLOW_MODEL_1999FROMCELLMLGRL2_HPP_ \ No newline at end of file diff --git a/chaste_codegen/data/tests/chaste_reference_models/GRL2Opt/hodgkin_huxley_squid_axon_model_1952_modified.cpp b/chaste_codegen/data/tests/chaste_reference_models/GRL2Opt/hodgkin_huxley_squid_axon_model_1952_modified.cpp index b5ce43475..73d979ee2 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/GRL2Opt/hodgkin_huxley_squid_axon_model_1952_modified.cpp +++ b/chaste_codegen/data/tests/chaste_reference_models/GRL2Opt/hodgkin_huxley_squid_axon_model_1952_modified.cpp @@ -21,6 +21,8 @@ #include "HeartConfig.hpp" #include "IsNan.hpp" #include "MathsCustomFunctions.hpp" +#include "ChasteMathDeviceNamespaces.hpp" +#include "ChasteCpuMacros.hpp" @@ -143,7 +145,7 @@ class Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2Opt_LookupT for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return (((6.5 + 0.10000000000000001 * 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)))); + return (((CHASTE_CONST(6.5) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V >= -CHASTE_CONST(9.9999999999999995e-8)) && (CHASTE_CONST(6.5) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V <= CHASTE_CONST(9.9999999999999995e-8))) ? (CHASTE_CONST(0.42499999999999999) + CHASTE_CONST(0.0050000000000000001) * var_chaste_interface__membrane__V) : (-CHASTE_CONST(0.099999999999999992) * (CHASTE_CONST(6.5) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(6.5) - CHASTE_CONST(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); @@ -165,7 +167,7 @@ class Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2Opt_LookupT for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(0.9375 + 0.012500000000000001 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(CHASTE_CONST(0.9375) + CHASTE_CONST(0.012500000000000001) * 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); @@ -176,7 +178,7 @@ class Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2Opt_LookupT for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(-3.75 - 0.050000000000000003 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(-CHASTE_CONST(3.75) - CHASTE_CONST(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); @@ -187,7 +189,7 @@ class Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2Opt_LookupT for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 + exp(-4.5 - 0.10000000000000001 * var_chaste_interface__membrane__V); + return 1 + CHASTE_MATH::Exp(-CHASTE_CONST(4.5) - CHASTE_CONST(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); @@ -198,7 +200,7 @@ class Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2Opt_LookupT for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return (((5 + 0.10000000000000001 * var_chaste_interface__membrane__V >= -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)))); + return (((5 + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V >= -CHASTE_CONST(9.9999999999999995e-8)) && (5 + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V <= CHASTE_CONST(9.9999999999999995e-8))) ? (CHASTE_CONST(3.5) + CHASTE_CONST(0.050000000000000003) * var_chaste_interface__membrane__V) : (-(5 + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(-5 - CHASTE_CONST(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); @@ -220,7 +222,7 @@ class Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2Opt_LookupT for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(-4.166666666666667 - 0.055555555555555552 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(-CHASTE_CONST(4.166666666666667) - CHASTE_CONST(0.055555555555555552) * 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); @@ -254,7 +256,7 @@ std::shared_ptr p_cellml_stim(new RegularStimulus( @@ -283,7 +285,7 @@ std::shared_ptrmParameters[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[2] = CHASTE_CONST(0.29999999999999999); // (var_leakage_current__g_L) [milliS_per_cm2] this->mParameters[3] = 36; // (var_potassium_channel__g_K) [milliS_per_cm2] } @@ -335,7 +337,7 @@ std::shared_ptr& rY = *pStateVariables; - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -345,9 +347,9 @@ std::shared_ptrmFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -375,7 +377,7 @@ std::shared_ptrmFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -431,8 +433,8 @@ std::shared_ptr& rY) { double d_dt_chaste_interface_var_membrane__V; - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -522,7 +524,7 @@ std::shared_ptr& rY) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -584,7 +586,7 @@ std::shared_ptrmUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_THIS(mFixedVoltage) : rY[0]); // Units: millivolt; Initial value: -75.0 @@ -597,15 +599,15 @@ std::shared_ptrIndexTable0(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_x4 = CHASTE_CONST(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_x6 = (var_x5 >= -CHASTE_CONST(9.9999999999999995e-8)) && (var_x5 <= CHASTE_CONST(9.9999999999999995e-8)); + const double var_x7 = CHASTE_MATH::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)); + partialF = ((var_x6) ? (-CHASTE_CONST(3.5) - var_x11 - CHASTE_CONST(0.050000000000000003) * var_chaste_interface__membrane__V) : (-var_x11 + var_x5 * var_x9)); } else { @@ -620,7 +622,7 @@ std::shared_ptr& rY) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -635,7 +637,7 @@ std::shared_ptrIndexTable0(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 + const double d_dt_chaste_interface_var_sodium_channel_h_gate__h = CHASTE_CONST(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; } @@ -645,7 +647,7 @@ std::shared_ptrmUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_THIS(mFixedVoltage) : rY[0]); // Units: millivolt; Initial value: -75.0 @@ -658,10 +660,10 @@ std::shared_ptrIndexTable0(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_x13 = CHASTE_MATH::Exp(-CHASTE_CONST(4.5) - CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V); const double var_x14 = 1 + var_x13; - partialF = -1 / var_x14 - 0.070000000000000007 * var_x12; + partialF = -1 / var_x14 - CHASTE_CONST(0.070000000000000007) * var_x12; } else { @@ -676,7 +678,7 @@ std::shared_ptr& rY) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -691,7 +693,7 @@ std::shared_ptrIndexTable0(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 + 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] - CHASTE_CONST(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; } @@ -701,7 +703,7 @@ std::shared_ptrmUseAnalyticJacobian) { - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_THIS(mFixedVoltage) : rY[0]); // Units: millivolt; Initial value: -75.0 @@ -713,16 +715,16 @@ std::shared_ptrIndexTable0(var_chaste_interface__membrane__V); - const double var_x4 = 0.10000000000000001 * var_chaste_interface__membrane__V; + const double var_x4 = CHASTE_CONST(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_x17 = CHASTE_CONST(6.5) + var_x4; + const double var_x18 = (var_x17 >= -CHASTE_CONST(9.9999999999999995e-8)) && (var_x17 <= CHASTE_CONST(9.9999999999999995e-8)); + const double var_x19 = CHASTE_MATH::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; + const double var_x23 = CHASTE_CONST(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)); + partialF = ((var_x18) ? (-CHASTE_CONST(0.42499999999999999) - var_x23 - CHASTE_CONST(0.0050000000000000001) * var_chaste_interface__membrane__V) : (-var_x23 + CHASTE_CONST(0.099999999999999992) * var_x17 * var_x21)); } else { @@ -739,7 +741,7 @@ std::shared_ptrmFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -751,13 +753,13 @@ std::shared_ptr dqs(5); dqs[0] = var_sodium_channel__i_Na; diff --git a/chaste_codegen/data/tests/chaste_reference_models/GRL2Opt/hodgkin_huxley_squid_axon_model_1952_modified.hpp b/chaste_codegen/data/tests/chaste_reference_models/GRL2Opt/hodgkin_huxley_squid_axon_model_1952_modified.hpp index 119bf02a5..897980249 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/GRL2Opt/hodgkin_huxley_squid_axon_model_1952_modified.hpp +++ b/chaste_codegen/data/tests/chaste_reference_models/GRL2Opt/hodgkin_huxley_squid_axon_model_1952_modified.hpp @@ -16,6 +16,9 @@ #include "ChasteSerialization.hpp" #include #include "AbstractStimulusFunction.hpp" +#if USING_DEVICE_COMPILER +#include "StimulusEvaluatorCuda.hpp" +#endif #include "AbstractGeneralizedRushLarsenCardiacCell.hpp" class Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLGRL2Opt : public AbstractGeneralizedRushLarsenCardiacCell diff --git a/chaste_codegen/data/tests/chaste_reference_models/Normal/fox_mcharg_gilmour_2002_console_script.cpp b/chaste_codegen/data/tests/chaste_reference_models/Normal/fox_mcharg_gilmour_2002_console_script.cpp index 0bfa64612..affe9bade 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/Normal/fox_mcharg_gilmour_2002_console_script.cpp +++ b/chaste_codegen/data/tests/chaste_reference_models/Normal/fox_mcharg_gilmour_2002_console_script.cpp @@ -21,6 +21,8 @@ #include "HeartConfig.hpp" #include "IsNan.hpp" #include "MathsCustomFunctions.hpp" +#include "ChasteMathDeviceNamespaces.hpp" +#include "ChasteCpuMacros.hpp" @@ -29,7 +31,7 @@ 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_amplitude_converted = -80 * CHASTE_CAP(); // 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 @@ -61,24 +63,24 @@ // 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[0] = CHASTE_CONST(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[2] = CHASTE_CONST(0.10000000000000001); // (var_calcium_dynamics__V_up) [micromolar_per_millisecond] + this->mParameters[3] = CHASTE_CONST(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[8] = CHASTE_CONST(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[10] = CHASTE_CONST(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[13] = CHASTE_CONST(2.7999999999999998); // (var_time_independent_potassium_current__g_K1) [milliS_per_microF] + this->mParameters[14] = CHASTE_CONST(0.013599999999999999); // (var_rapid_activating_delayed_rectifiyer_K_current__g_Kr) [milliS_per_microF] + this->mParameters[15] = CHASTE_CONST(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] + this->mParameters[17] = CHASTE_CONST(0.23815); // (var_transient_outward_potassium_current__g_to) [milliS_per_microF] } Cellfox_mcharg_gilmour_2002FromCellML::~Cellfox_mcharg_gilmour_2002FromCellML() @@ -125,7 +127,7 @@ // 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -151,56 +153,56 @@ // 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_L_type_Ca_current__P_CaK = CHASTE_CONST(5.7899999999999998e-7); // cm_per_millisecond + const double var_L_type_Ca_current__i_Ca_half = -CHASTE_CONST(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_Na_Ca_exchanger__K_mNa = CHASTE_CONST(87.5); // millimolar + const double var_Na_Ca_exchanger__K_sat = CHASTE_CONST(0.20000000000000001); // dimensionless + const double var_Na_Ca_exchanger__eta = CHASTE_CONST(0.34999999999999998); // dimensionless + const double var_calcium_background_current__g_Cab = CHASTE_CONST(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__F = CHASTE_CONST(96.5); // coulomb_per_millimole + const double var_membrane__R = CHASTE_CONST(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_plateau_potassium_current__g_Kp = CHASTE_CONST(0.0022160000000000001); // milliS_per_microF + const double var_plateau_potassium_current_Kp_gate__Kp_V = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.2521739130434781) - CHASTE_CONST(0.16722408026755853) * var_chaste_interface__membrane__V)); // dimensionless + const double var_rapid_activating_delayed_rectifiyer_K_current__R_V = 1 / (1 + CHASTE_CONST(2.5) * CHASTE_MATH::Exp(CHASTE_CONST(2.8000000000000003) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V)); // dimensionless + const double var_sarcolemmal_calcium_pump__K_mpCa = CHASTE_CONST(0.050000000000000003); // micromolar + const double var_sarcolemmal_calcium_pump__i_pCa_max = CHASTE_CONST(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_background_current__g_Nab = CHASTE_CONST(0.0030999999999999999); // milliS_per_microF + const double var_sodium_potassium_pump__K_mKo = CHASTE_CONST(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_sodium_potassium_pump__i_NaK_max = CHASTE_CONST(0.69299999999999995); // microA_per_microF + const double var_L_type_Ca_current__i_Ca_max = 4 * CHASTE_MATH::Pow(var_membrane__F, 2) * (-CHASTE_CONST(0.34100000000000003) * mParameters[5] + var_calcium_dynamics__Ca_i * CHASTE_MATH::Exp(2 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * mParameters[8] * var_chaste_interface__membrane__V / ((-1 + CHASTE_MATH::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_L_type_Ca_current__i_Ca_converted = CHASTE_CAP() * var_L_type_Ca_current__i_Ca; // uA_per_cm2 + const double var_calcium_background_current__E_Ca = CHASTE_CONST(0.5) * var_membrane__R * var_membrane__T * CHASTE_MATH::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_L_type_Ca_current__i_CaK = 1000 * CHASTE_MATH::Pow(var_membrane__F, 2) * (-mParameters[6] + mParameters[3] * CHASTE_MATH::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 + CHASTE_MATH::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 * CHASTE_MATH::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_rapid_activating_delayed_rectifiyer_K_current__i_Kr = CHASTE_CONST(0.5) * CHASTE_MATH::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 = CHASTE_CAP() * var_rapid_activating_delayed_rectifiyer_K_current__i_Kr; // uA_per_cm2 + const double var_Na_Ca_exchanger__i_NaCa = (CHASTE_MATH::Pow(mParameters[4], 3) * mParameters[5] * CHASTE_MATH::Exp(var_Na_Ca_exchanger__eta * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - CHASTE_MATH::Pow(mParameters[7], 3) * var_calcium_dynamics__Ca_i * CHASTE_MATH::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 * CHASTE_MATH::Exp((-1 + var_Na_Ca_exchanger__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (CHASTE_MATH::Pow(var_Na_Ca_exchanger__K_mNa, 3) + CHASTE_MATH::Pow(mParameters[7], 3)) * (var_Na_Ca_exchanger__K_mCa + mParameters[5])); // microA_per_microF + const double var_Na_Ca_exchanger__i_NaCa_converted = CHASTE_CAP() * var_Na_Ca_exchanger__i_NaCa; // uA_per_cm2 + const double var_fast_sodium_current__E_Na = var_membrane__R * var_membrane__T * CHASTE_MATH::Log(mParameters[7] / mParameters[4]) / var_membrane__F; // millivolt + const double var_fast_sodium_current__i_Na = CHASTE_MATH::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 = CHASTE_CAP() * 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 * CHASTE_MATH::Log((mParameters[6] + CHASTE_CONST(0.018329999999999999) * mParameters[7]) / (mParameters[3] + CHASTE_CONST(0.018329999999999999) * mParameters[4])) / var_membrane__F; // millivolt + const double var_slow_activating_delayed_rectifiyer_K_current__i_Ks = CHASTE_MATH::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 = CHASTE_CAP() * 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_sodium_potassium_pump__sigma = -CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(0.01485884101040119) * mParameters[7]); // dimensionless + const double var_sodium_potassium_pump__f_NaK = 1 / (1 + CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(0.10000000000000001) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) + CHASTE_CONST(0.036499999999999998) * var_sodium_potassium_pump__sigma * CHASTE_MATH::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 + CHASTE_MATH::Pow((var_sodium_potassium_pump__K_mNai / mParameters[4]), CHASTE_CONST(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_K1_gate__K1_infinity = 1 / (2 + CHASTE_MATH::Exp(CHASTE_CONST(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_time_independent_potassium_current__i_K1_converted = CHASTE_CAP() * 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 var_transient_outward_potassium_current__i_to_converted = CHASTE_CAP() * var_transient_outward_potassium_current__i_to; // uA_per_cm2 + const double var_chaste_interface__i_ionic = CHASTE_CAP() * var_L_type_Ca_current__i_CaK + CHASTE_CAP() * var_calcium_background_current__i_Ca_b + CHASTE_CAP() * var_plateau_potassium_current__i_Kp + CHASTE_CAP() * var_sarcolemmal_calcium_pump__i_p_Ca + CHASTE_CAP() * var_sodium_background_current__i_Na_b + CHASTE_CAP() * 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)); @@ -211,7 +213,7 @@ { // Inputs: // Time units: millisecond - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -241,75 +243,75 @@ // 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_L_type_Ca_current_f_Ca_gate__K_mfCa = CHASTE_CONST(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_Na_Ca_exchanger__K_mNa = CHASTE_CONST(87.5); // millimolar + const double var_Na_Ca_exchanger__K_sat = CHASTE_CONST(0.20000000000000001); // dimensionless + const double var_Na_Ca_exchanger__eta = CHASTE_CONST(0.34999999999999998); // dimensionless + const double var_calcium_background_current__g_Cab = CHASTE_CONST(0.00038420000000000001); // milliS_per_microF + const double var_calcium_dynamics__A_Cap = CHASTE_CONST(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 var_L_type_Ca_current_f_Ca_gate__f_Ca_infinity = 1 / (1 + CHASTE_MATH::Pow(var_calcium_dynamics__Ca_i, 3) / CHASTE_MATH::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__K_mup = CHASTE_CONST(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_calcium_dynamics__V_SR = CHASTE_CONST(1.9999999999999999e-6); // microlitre + const double var_calcium_dynamics__V_myo = CHASTE_CONST(2.584e-5); // microlitre + const double var_calcium_dynamics__J_up = mParameters[2] / (1 + CHASTE_MATH::Pow(var_calcium_dynamics__K_mup, 2) / CHASTE_MATH::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 / CHASTE_MATH::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 / CHASTE_MATH::Pow((var_calcium_dynamics__Ca_i + var_calcium_dynamics__K_mCMDN), 2)); // dimensionless + const double var_calcium_dynamics__gamma = 1 / (1 + CHASTE_CONST(8000000000.0) / CHASTE_MATH::Pow(var_chaste_interface__calcium_dynamics__Ca_SR, 3)); // dimensionless + const double var_membrane__F = CHASTE_CONST(96.5); // coulomb_per_millimole + const double var_membrane__R = CHASTE_CONST(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 var_L_type_Ca_current_d_gate__d_infinity = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.6025641025641024) - CHASTE_CONST(0.16025641025641024) * var_chaste_interface__membrane__V)); // dimensionless + const double var_L_type_Ca_current_d_gate__tau_d = 1 / (CHASTE_CONST(0.25) * CHASTE_MATH::Exp(-CHASTE_CONST(0.01) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.070000000000000007) * var_chaste_interface__membrane__V)) + CHASTE_CONST(0.070000000000000007) * CHASTE_MATH::Exp(-CHASTE_CONST(0.050000000000000003) * var_L_type_Ca_current_d_gate__E0_m) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(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 var_L_type_Ca_current_f_gate__f_infinity = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(2.5) + CHASTE_CONST(0.20000000000000001) * var_chaste_interface__membrane__V)); // dimensionless + const double var_L_type_Ca_current_f_gate__tau_f = 30 + 200 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(2.1052631578947367) + CHASTE_CONST(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 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 + CHASTE_CONST(1.6499999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(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__alpha_h = CHASTE_CONST(0.13500000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(11.764705882352942) + CHASTE_CONST(0.14705882352941177) * mParameters[12] - CHASTE_CONST(0.14705882352941177) * var_chaste_interface__membrane__V); // per_millisecond + const double var_fast_sodium_current_h_gate__beta_h = CHASTE_CONST(7.5) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.1000000000000001) + CHASTE_CONST(0.10000000000000001) * mParameters[12] - CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V)); // per_millisecond + const double var_fast_sodium_current_h_gate__h_inf = CHASTE_CONST(0.01) * mParameters[11] + (1 - CHASTE_CONST(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__alpha_j = CHASTE_CONST(0.17499999999999999) * CHASTE_MATH::Exp(-CHASTE_CONST(4.3478260869565215) + CHASTE_CONST(0.043478260869565216) * mParameters[12] - CHASTE_CONST(0.043478260869565216) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(11.85) + CHASTE_CONST(0.14999999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.14999999999999999) * mParameters[12])); // per_millisecond + const double var_fast_sodium_current_j_gate__beta_j = CHASTE_CONST(0.29999999999999999) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.2000000000000002) + CHASTE_CONST(0.10000000000000001) * mParameters[12] - CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V)); // per_millisecond + const double var_fast_sodium_current_j_gate__j_inf = CHASTE_CONST(0.01) * mParameters[11] + (1 - CHASTE_CONST(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 var_fast_sodium_current_m_gate__E0_m = CHASTE_CONST(47.130000000000003) + var_chaste_interface__membrane__V; // millivolt + const double var_fast_sodium_current_m_gate__alpha_m = CHASTE_CONST(0.32000000000000001) * var_fast_sodium_current_m_gate__E0_m / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(0.10000000000000001) * var_fast_sodium_current_m_gate__E0_m)); // per_millisecond + const double var_fast_sodium_current_m_gate__beta_m = CHASTE_CONST(0.080000000000000002) * CHASTE_MATH::Exp(-CHASTE_CONST(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 var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr_inf = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.1819999999999999) - CHASTE_CONST(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 / (CHASTE_MATH::Exp(-CHASTE_CONST(7.6769999999999996) - CHASTE_CONST(0.012800000000000001) * var_chaste_interface__membrane__V) + CHASTE_MATH::Exp(-CHASTE_CONST(5.4950000000000001) + CHASTE_CONST(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__K_mpCa = CHASTE_CONST(0.050000000000000003); // micromolar + const double var_sarcolemmal_calcium_pump__i_pCa_max = CHASTE_CONST(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 var_slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks_infinity = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.1764705882352942) - CHASTE_CONST(0.073529411764705885) * var_chaste_interface__membrane__V)); // dimensionless + const double var_slow_activating_delayed_rectifiyer_K_current_X_ks_gate__tau_X_ks = 1 / (CHASTE_CONST(0.00013100000000000001) * (-10 + var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.68699999999999994) + CHASTE_CONST(0.068699999999999997) * var_chaste_interface__membrane__V)) + CHASTE_CONST(7.1899999999999999e-5) * (-10 + var_chaste_interface__membrane__V) / (1 - CHASTE_MATH::Exp(CHASTE_CONST(1.48) - CHASTE_CONST(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_max = 4 * CHASTE_MATH::Pow(var_membrane__F, 2) * (-CHASTE_CONST(0.34100000000000003) * mParameters[5] + var_calcium_dynamics__Ca_i * CHASTE_MATH::Exp(2 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * mParameters[8] * var_chaste_interface__membrane__V / ((-1 + CHASTE_MATH::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__E_Ca = CHASTE_CONST(0.5) * var_membrane__R * var_membrane__T * CHASTE_MATH::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 var_Na_Ca_exchanger__i_NaCa = (CHASTE_MATH::Pow(mParameters[4], 3) * mParameters[5] * CHASTE_MATH::Exp(var_Na_Ca_exchanger__eta * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - CHASTE_MATH::Pow(mParameters[7], 3) * var_calcium_dynamics__Ca_i * CHASTE_MATH::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 * CHASTE_MATH::Exp((-1 + var_Na_Ca_exchanger__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (CHASTE_MATH::Pow(var_Na_Ca_exchanger__K_mNa, 3) + CHASTE_MATH::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 - CHASTE_CONST(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 = CHASTE_CONST(0.001) * var_calcium_dynamics__Ca_i_orig_deriv; // millimolar / millisecond + const double var_transient_outward_potassium_current_X_to_gate__alpha_X_to = CHASTE_CONST(0.045159999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(0.035770000000000003) * var_chaste_interface__membrane__V); // per_millisecond + const double var_transient_outward_potassium_current_X_to_gate__beta_X_to = CHASTE_CONST(0.098900000000000002) * CHASTE_MATH::Exp(-CHASTE_CONST(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 var_transient_outward_potassium_current_Y_to_gate__alpha_Y_to = CHASTE_CONST(0.0054149999999999997) * CHASTE_MATH::Exp(-CHASTE_CONST(6.7000000000000002) - CHASTE_CONST(0.20000000000000001) * var_chaste_interface__membrane__V) / (1 + CHASTE_CONST(0.051334999999999999) * CHASTE_MATH::Exp(-CHASTE_CONST(6.7000000000000002) - CHASTE_CONST(0.20000000000000001) * var_chaste_interface__membrane__V)); // per_millisecond + const double var_transient_outward_potassium_current_Y_to_gate__beta_Y_to = CHASTE_CONST(0.0054149999999999997) * CHASTE_MATH::Exp(CHASTE_CONST(6.7000000000000002) + CHASTE_CONST(0.20000000000000001) * var_chaste_interface__membrane__V) / (1 + CHASTE_CONST(0.051334999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(6.7000000000000002) + CHASTE_CONST(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) @@ -318,31 +320,31 @@ } 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_L_type_Ca_current__P_CaK = CHASTE_CONST(5.7899999999999998e-7); // cm_per_millisecond + const double var_L_type_Ca_current__i_Ca_half = -CHASTE_CONST(0.26500000000000001); // microA_per_microF + const double var_membrane__i_Stim_converted = CHASTE_STIM(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_membrane__i_Stim = var_membrane__i_Stim_converted / CHASTE_CAP(); // microA_per_microF + const double var_plateau_potassium_current__g_Kp = CHASTE_CONST(0.0022160000000000001); // milliS_per_microF + const double var_plateau_potassium_current_Kp_gate__Kp_V = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.2521739130434781) - CHASTE_CONST(0.16722408026755853) * var_chaste_interface__membrane__V)); // dimensionless + const double var_rapid_activating_delayed_rectifiyer_K_current__R_V = 1 / (1 + CHASTE_CONST(2.5) * CHASTE_MATH::Exp(CHASTE_CONST(2.8000000000000003) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V)); // dimensionless + const double var_sodium_background_current__g_Nab = CHASTE_CONST(0.0030999999999999999); // milliS_per_microF + const double var_sodium_potassium_pump__K_mKo = CHASTE_CONST(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_sodium_potassium_pump__i_NaK_max = CHASTE_CONST(0.69299999999999995); // microA_per_microF + const double var_L_type_Ca_current__i_CaK = 1000 * CHASTE_MATH::Pow(var_membrane__F, 2) * (-mParameters[6] + mParameters[3] * CHASTE_MATH::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 + CHASTE_MATH::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 * CHASTE_MATH::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_rapid_activating_delayed_rectifiyer_K_current__i_Kr = CHASTE_CONST(0.5) * CHASTE_MATH::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 * CHASTE_MATH::Log(mParameters[7] / mParameters[4]) / var_membrane__F; // millivolt + const double var_fast_sodium_current__i_Na = CHASTE_MATH::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 * CHASTE_MATH::Log((mParameters[6] + CHASTE_CONST(0.018329999999999999) * mParameters[7]) / (mParameters[3] + CHASTE_CONST(0.018329999999999999) * mParameters[4])) / var_membrane__F; // millivolt + const double var_slow_activating_delayed_rectifiyer_K_current__i_Ks = CHASTE_MATH::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_sodium_potassium_pump__sigma = -CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(0.01485884101040119) * mParameters[7]); // dimensionless + const double var_sodium_potassium_pump__f_NaK = 1 / (1 + CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(0.10000000000000001) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) + CHASTE_CONST(0.036499999999999998) * var_sodium_potassium_pump__sigma * CHASTE_MATH::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 + CHASTE_MATH::Pow((var_sodium_potassium_pump__K_mNai / mParameters[4]), CHASTE_CONST(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_K1_gate__K1_infinity = 1 / (2 + CHASTE_MATH::Exp(CHASTE_CONST(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 @@ -367,7 +369,7 @@ { // Inputs: // Time units: millisecond - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -397,44 +399,44 @@ // 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_Na_Ca_exchanger__K_mNa = CHASTE_CONST(87.5); // millimolar + const double var_Na_Ca_exchanger__K_sat = CHASTE_CONST(0.20000000000000001); // dimensionless + const double var_Na_Ca_exchanger__eta = CHASTE_CONST(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_calcium_dynamics__gamma = 1 / (1 + CHASTE_CONST(8000000000.0) / CHASTE_MATH::Pow(var_chaste_interface__calcium_dynamics__Ca_SR, 3)); // dimensionless + const double var_membrane__F = CHASTE_CONST(96.5); // coulomb_per_millimole + const double var_membrane__R = CHASTE_CONST(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_L_type_Ca_current_f_gate__tau_f = 30 + 200 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(2.1052631578947367) + CHASTE_CONST(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 + CHASTE_CONST(1.6499999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(0.050000000000000003) * var_chaste_interface__membrane__V)); // micromolar_per_millisecond + const double var_fast_sodium_current_h_gate__alpha_h = CHASTE_CONST(0.13500000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(11.764705882352942) + CHASTE_CONST(0.14705882352941177) * mParameters[12] - CHASTE_CONST(0.14705882352941177) * var_chaste_interface__membrane__V); // per_millisecond + const double var_fast_sodium_current_h_gate__beta_h = CHASTE_CONST(7.5) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.1000000000000001) + CHASTE_CONST(0.10000000000000001) * mParameters[12] - CHASTE_CONST(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__alpha_j = CHASTE_CONST(0.17499999999999999) * CHASTE_MATH::Exp(-CHASTE_CONST(4.3478260869565215) + CHASTE_CONST(0.043478260869565216) * mParameters[12] - CHASTE_CONST(0.043478260869565216) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(11.85) + CHASTE_CONST(0.14999999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.14999999999999999) * mParameters[12])); // per_millisecond + const double var_fast_sodium_current_j_gate__beta_j = CHASTE_CONST(0.29999999999999999) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.2000000000000002) + CHASTE_CONST(0.10000000000000001) * mParameters[12] - CHASTE_CONST(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_membrane__i_Stim_converted = CHASTE_STIM(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_rapid_activating_delayed_rectifiyer_K_current__R_V = 1 / (1 + CHASTE_CONST(2.5) * CHASTE_MATH::Exp(CHASTE_CONST(2.8000000000000003) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V)); // dimensionless + const double var_L_type_Ca_current__i_Ca_max = 4 * CHASTE_MATH::Pow(var_membrane__F, 2) * (-CHASTE_CONST(0.34100000000000003) * mParameters[5] + var_calcium_dynamics__Ca_i * CHASTE_MATH::Exp(2 * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * mParameters[8] * var_chaste_interface__membrane__V / ((-1 + CHASTE_MATH::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_L_type_Ca_current__i_Ca_converted = CHASTE_CAP() * 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 * CHASTE_MATH::Log(mParameters[6] / mParameters[3]) / var_membrane__F; // millivolt + const double var_rapid_activating_delayed_rectifiyer_K_current__i_Kr = CHASTE_CONST(0.5) * CHASTE_MATH::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 = CHASTE_CAP() * var_rapid_activating_delayed_rectifiyer_K_current__i_Kr; // uA_per_cm2 + const double var_Na_Ca_exchanger__i_NaCa = (CHASTE_MATH::Pow(mParameters[4], 3) * mParameters[5] * CHASTE_MATH::Exp(var_Na_Ca_exchanger__eta * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - CHASTE_MATH::Pow(mParameters[7], 3) * var_calcium_dynamics__Ca_i * CHASTE_MATH::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 * CHASTE_MATH::Exp((-1 + var_Na_Ca_exchanger__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (CHASTE_MATH::Pow(var_Na_Ca_exchanger__K_mNa, 3) + CHASTE_MATH::Pow(mParameters[7], 3)) * (var_Na_Ca_exchanger__K_mCa + mParameters[5])); // microA_per_microF + const double var_Na_Ca_exchanger__i_NaCa_converted = CHASTE_CAP() * var_Na_Ca_exchanger__i_NaCa; // uA_per_cm2 + const double var_fast_sodium_current__E_Na = var_membrane__R * var_membrane__T * CHASTE_MATH::Log(mParameters[7] / mParameters[4]) / var_membrane__F; // millivolt + const double var_fast_sodium_current__i_Na = CHASTE_MATH::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 = CHASTE_CAP() * 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 * CHASTE_MATH::Log((mParameters[6] + CHASTE_CONST(0.018329999999999999) * mParameters[7]) / (mParameters[3] + CHASTE_CONST(0.018329999999999999) * mParameters[4])) / var_membrane__F; // millivolt + const double var_slow_activating_delayed_rectifiyer_K_current__i_Ks = CHASTE_MATH::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 = CHASTE_CAP() * 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_K1_gate__K1_infinity = 1 / (2 + CHASTE_MATH::Exp(CHASTE_CONST(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_time_independent_potassium_current__i_K1_converted = CHASTE_CAP() * 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_transient_outward_potassium_current__i_to_converted = CHASTE_CAP() * var_transient_outward_potassium_current__i_to; // uA_per_cm2 std::vector dqs(14); dqs[0] = var_calcium_dynamics__J_rel; diff --git a/chaste_codegen/data/tests/chaste_reference_models/Normal/fox_mcharg_gilmour_2002_console_script.hpp b/chaste_codegen/data/tests/chaste_reference_models/Normal/fox_mcharg_gilmour_2002_console_script.hpp index 2bacd16da..b9ee5843b 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/Normal/fox_mcharg_gilmour_2002_console_script.hpp +++ b/chaste_codegen/data/tests/chaste_reference_models/Normal/fox_mcharg_gilmour_2002_console_script.hpp @@ -16,6 +16,9 @@ #include "ChasteSerialization.hpp" #include #include "AbstractStimulusFunction.hpp" +#if USING_DEVICE_COMPILER +#include "StimulusEvaluatorCuda.hpp" +#endif #include "AbstractCardiacCell.hpp" class Cellfox_mcharg_gilmour_2002FromCellML : public AbstractCardiacCell diff --git a/chaste_codegen/data/tests/chaste_reference_models/Normal/luo_rudy_1994.cpp b/chaste_codegen/data/tests/chaste_reference_models/Normal/luo_rudy_1994.cpp index 447bcdcb9..fc39b7a84 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/Normal/luo_rudy_1994.cpp +++ b/chaste_codegen/data/tests/chaste_reference_models/Normal/luo_rudy_1994.cpp @@ -21,6 +21,8 @@ #include "HeartConfig.hpp" #include "IsNan.hpp" #include "MathsCustomFunctions.hpp" +#include "ChasteMathDeviceNamespaces.hpp" +#include "ChasteCpuMacros.hpp" @@ -29,8 +31,8 @@ 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__stimCurrent_converted = CHASTE_CONST(50.000000000000007); // uA_per_cm2 + const double var_chaste_interface__membrane__stimDuration = CHASTE_CONST(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), @@ -60,12 +62,12 @@ // 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[0] = CHASTE_CONST(1.8); // (var_ionic_concentrations__Cao) [mM] + this->mParameters[1] = CHASTE_CONST(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] + this->mParameters[3] = CHASTE_CONST(0.01); // (var_membrane__Cm) [uF_per_mm2] + this->mParameters[4] = CHASTE_CONST(0.16); // (var_fast_sodium_current__g_Na) [mS_per_mm2] + this->mParameters[5] = CHASTE_CONST(0.0074999999999999997); // (var_time_independent_potassium_current__g_K1_max) [mS_per_mm2] } Cellluo_rudy_1994FromCellML::~Cellluo_rudy_1994FromCellML() @@ -112,7 +114,7 @@ // 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -133,66 +135,66 @@ 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_L_type_Ca_channel_f_Ca_gate__Km_Ca = CHASTE_CONST(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_Na_Ca_exchanger__K_mCa = CHASTE_CONST(1.3799999999999999); // mM + const double var_Na_Ca_exchanger__K_mNa = CHASTE_CONST(87.5); // mM + const double var_Na_Ca_exchanger__K_sat = CHASTE_CONST(0.10000000000000001); // dimensionless + const double var_Na_Ca_exchanger__eta = CHASTE_CONST(0.34999999999999998); // dimensionless + const double var_calcium_background_current__g_Cab = CHASTE_CONST(3.0159999999999999e-5); // mS_per_mm2 + const double var_L_type_Ca_channel_f_Ca_gate__f_Ca = 1 / (1 + CHASTE_MATH::Pow(var_chaste_interface__ionic_concentrations__Cai, 2) / CHASTE_MATH::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__R = CHASTE_CONST(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_calcium_background_current__E_CaN = CHASTE_CONST(0.5) * var_membrane__R * var_membrane__T * CHASTE_MATH::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 * CHASTE_MATH::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 >= -CHASTE_CONST(1.3307320976818627e-6)) && (var_chaste_interface__membrane__V <= CHASTE_CONST(1.3307320976818627e-6))) ? (CHASTE_CONST(375733.02761014085) * (CHASTE_CONST(1.3307320976818627e-6) + var_chaste_interface__membrane__V) * (CHASTE_CONST(1.0459259999999999e-7) * (-CHASTE_CONST(0.34000000000000002) * mParameters[0] + var_chaste_interface__ionic_concentrations__Cai * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) + CHASTE_CONST(1.0459259999999999e-7) * (-CHASTE_CONST(0.34000000000000002) * mParameters[0] + var_chaste_interface__ionic_concentrations__Cai * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) - CHASTE_CONST(1.0459259999999999e-7) * (-CHASTE_CONST(0.34000000000000002) * mParameters[0] + var_chaste_interface__ionic_concentrations__Cai * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) : (CHASTE_CONST(0.078597788527232842) * (-CHASTE_CONST(0.34000000000000002) * mParameters[0] + var_chaste_interface__ionic_concentrations__Cai * CHASTE_MATH::Exp(CHASTE_CONST(0.075146605522028176) * var_chaste_interface__membrane__V)) * var_chaste_interface__membrane__V / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(0.075146605522028176) * var_chaste_interface__membrane__V)))); // uA_per_mm2 + const double var_L_type_Ca_channel__I_CaK = (((var_chaste_interface__membrane__V >= -CHASTE_CONST(2.6614641953637254e-6)) && (var_chaste_interface__membrane__V <= CHASTE_CONST(2.6614641953637254e-6))) ? (CHASTE_CONST(187866.51380507043) * (CHASTE_CONST(2.6614641953637254e-6) + var_chaste_interface__membrane__V) * (CHASTE_CONST(1.8691085000000002e-11) * (-CHASTE_CONST(0.75) * mParameters[1] + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Ki * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) + CHASTE_CONST(1.8691085000000002e-11) * (-CHASTE_CONST(0.75) * mParameters[1] + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Ki * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) - CHASTE_CONST(1.8691085000000002e-11) * (-CHASTE_CONST(0.75) * mParameters[1] + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Ki * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) : (CHASTE_CONST(7.0228579563684903e-6) * (-CHASTE_CONST(0.75) * mParameters[1] + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Ki * CHASTE_MATH::Exp(CHASTE_CONST(0.037573302761014088) * var_chaste_interface__membrane__V)) * var_chaste_interface__membrane__V / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(0.037573302761014088) * var_chaste_interface__membrane__V)))); // uA_per_mm2 + const double var_L_type_Ca_channel__I_CaNa = (((var_chaste_interface__membrane__V >= -CHASTE_CONST(2.6614641953637254e-6)) && (var_chaste_interface__membrane__V <= CHASTE_CONST(2.6614641953637254e-6))) ? (CHASTE_CONST(187866.51380507043) * (CHASTE_CONST(2.6614641953637254e-6) + var_chaste_interface__membrane__V) * (CHASTE_CONST(6.5370374999999993e-11) * (-CHASTE_CONST(0.75) * mParameters[2] + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Nai * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) + CHASTE_CONST(6.5370374999999993e-11) * (-CHASTE_CONST(0.75) * mParameters[2] + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Nai * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) - CHASTE_CONST(6.5370374999999993e-11) * (-CHASTE_CONST(0.75) * mParameters[2] + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Nai * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) : (CHASTE_CONST(2.4561808914760263e-5) * (-CHASTE_CONST(0.75) * mParameters[2] + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Nai * CHASTE_MATH::Exp(CHASTE_CONST(0.037573302761014088) * var_chaste_interface__membrane__V)) * var_chaste_interface__membrane__V / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(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_Na_Ca_exchanger__i_NaCa = (CHASTE_MATH::Pow(var_chaste_interface__ionic_concentrations__Nai, 3) * mParameters[0] * CHASTE_MATH::Exp(var_Na_Ca_exchanger__eta * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - CHASTE_MATH::Pow(mParameters[2], 3) * var_chaste_interface__ionic_concentrations__Cai * CHASTE_MATH::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 * CHASTE_MATH::Exp((-1 + var_Na_Ca_exchanger__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (CHASTE_MATH::Pow(var_Na_Ca_exchanger__K_mNa, 3) + CHASTE_MATH::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_fast_sodium_current__i_Na = CHASTE_MATH::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 = CHASTE_CONST(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 >= -CHASTE_CONST(2.6614641953637254e-6) + CHASTE_CONST(26.614641953637257) * CHASTE_MATH::Log((mParameters[1] + mParameters[2]) / (var_chaste_interface__ionic_concentrations__Ki + var_chaste_interface__ionic_concentrations__Nai))) && (var_chaste_interface__membrane__V <= CHASTE_CONST(2.6614641953637254e-6) + CHASTE_CONST(26.614641953637257) * CHASTE_MATH::Log((mParameters[1] + mParameters[2]) / (var_chaste_interface__ionic_concentrations__Ki + var_chaste_interface__ionic_concentrations__Nai)))) || ((var_chaste_interface__membrane__V >= CHASTE_CONST(2.6614641953637254e-6) + CHASTE_CONST(26.614641953637257) * CHASTE_MATH::Log((mParameters[1] + mParameters[2]) / (var_chaste_interface__ionic_concentrations__Ki + var_chaste_interface__ionic_concentrations__Nai))) && (var_chaste_interface__membrane__V <= -CHASTE_CONST(2.6614641953637254e-6) + CHASTE_CONST(26.614641953637257) * CHASTE_MATH::Log((mParameters[1] + mParameters[2]) / (var_chaste_interface__ionic_concentrations__Ki + var_chaste_interface__ionic_concentrations__Nai))))) ? (CHASTE_CONST(1.6947874999999998e-11) * (-CHASTE_CONST(0.75) * mParameters[1] + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Ki * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) - CHASTE_CONST(187866.51380507043) * (-CHASTE_CONST(1.6947874999999998e-11) * (-CHASTE_CONST(0.75) * mParameters[1] + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Ki * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) - CHASTE_CONST(1.6947874999999998e-11) * (-CHASTE_CONST(0.75) * mParameters[1] + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Ki * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) * (-CHASTE_CONST(2.6614641953637254e-6) - CHASTE_CONST(26.614641953637257) * CHASTE_MATH::Log((mParameters[1] + mParameters[2]) / (var_chaste_interface__ionic_concentrations__Ki + var_chaste_interface__ionic_concentrations__Nai)) + var_chaste_interface__membrane__V)) : (CHASTE_CONST(6.3678763853082156e-6) * (-CHASTE_CONST(0.75) * mParameters[1] + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Ki * CHASTE_MATH::Exp(CHASTE_CONST(0.037573302761014088) * var_chaste_interface__membrane__V - CHASTE_MATH::Log((mParameters[1] + mParameters[2]) / (var_chaste_interface__ionic_concentrations__Ki + var_chaste_interface__ionic_concentrations__Nai)))) * (-CHASTE_CONST(26.614641953637257) * CHASTE_MATH::Log((mParameters[1] + mParameters[2]) / (var_chaste_interface__ionic_concentrations__Ki + var_chaste_interface__ionic_concentrations__Nai)) + var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(0.037573302761014088) * var_chaste_interface__membrane__V - CHASTE_MATH::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 >= -CHASTE_CONST(2.6614641953637254e-6) + CHASTE_CONST(26.614641953637257) * CHASTE_MATH::Log((mParameters[1] + mParameters[2]) / (var_chaste_interface__ionic_concentrations__Ki + var_chaste_interface__ionic_concentrations__Nai))) && (var_chaste_interface__membrane__V <= CHASTE_CONST(2.6614641953637254e-6) + CHASTE_CONST(26.614641953637257) * CHASTE_MATH::Log((mParameters[1] + mParameters[2]) / (var_chaste_interface__ionic_concentrations__Ki + var_chaste_interface__ionic_concentrations__Nai)))) || ((var_chaste_interface__membrane__V >= CHASTE_CONST(2.6614641953637254e-6) + CHASTE_CONST(26.614641953637257) * CHASTE_MATH::Log((mParameters[1] + mParameters[2]) / (var_chaste_interface__ionic_concentrations__Ki + var_chaste_interface__ionic_concentrations__Nai))) && (var_chaste_interface__membrane__V <= -CHASTE_CONST(2.6614641953637254e-6) + CHASTE_CONST(26.614641953637257) * CHASTE_MATH::Log((mParameters[1] + mParameters[2]) / (var_chaste_interface__ionic_concentrations__Ki + var_chaste_interface__ionic_concentrations__Nai))))) ? (CHASTE_CONST(1.6947874999999998e-11) * (-CHASTE_CONST(0.75) * mParameters[2] + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Nai * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) - CHASTE_CONST(187866.51380507043) * (-CHASTE_CONST(1.6947874999999998e-11) * (-CHASTE_CONST(0.75) * mParameters[2] + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Nai * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) - CHASTE_CONST(1.6947874999999998e-11) * (-CHASTE_CONST(0.75) * mParameters[2] + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Nai * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) * (-CHASTE_CONST(2.6614641953637254e-6) - CHASTE_CONST(26.614641953637257) * CHASTE_MATH::Log((mParameters[1] + mParameters[2]) / (var_chaste_interface__ionic_concentrations__Ki + var_chaste_interface__ionic_concentrations__Nai)) + var_chaste_interface__membrane__V)) : (CHASTE_CONST(6.3678763853082156e-6) * (-CHASTE_CONST(0.75) * mParameters[2] + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Nai * CHASTE_MATH::Exp(CHASTE_CONST(0.037573302761014088) * var_chaste_interface__membrane__V - CHASTE_MATH::Log((mParameters[1] + mParameters[2]) / (var_chaste_interface__ionic_concentrations__Ki + var_chaste_interface__ionic_concentrations__Nai)))) * (-CHASTE_CONST(26.614641953637257) * CHASTE_MATH::Log((mParameters[1] + mParameters[2]) / (var_chaste_interface__ionic_concentrations__Ki + var_chaste_interface__ionic_concentrations__Nai)) + var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(0.037573302761014088) * var_chaste_interface__membrane__V - CHASTE_MATH::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 = CHASTE_CONST(0.0011999999999999999); // mM + const double var_non_specific_calcium_activated_current__i_ns_K = var_non_specific_calcium_activated_current__I_ns_K / (1 + CHASTE_MATH::Pow(var_non_specific_calcium_activated_current__K_m_ns_Ca, 3) / CHASTE_MATH::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 + CHASTE_MATH::Pow(var_non_specific_calcium_activated_current__K_m_ns_Ca, 3) / CHASTE_MATH::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_plateau_potassium_current__Kp = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.2521739130434781) - CHASTE_CONST(0.16722408026755853) * var_chaste_interface__membrane__V)); // dimensionless + const double var_plateau_potassium_current__g_Kp = CHASTE_CONST(0.000183); // mS_per_mm2 + const double var_sarcolemmal_calcium_pump__I_pCa = CHASTE_CONST(0.0115); // uA_per_mm2 + const double var_sarcolemmal_calcium_pump__K_mpCa = CHASTE_CONST(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__g_Nab = CHASTE_CONST(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__I_NaK = CHASTE_CONST(0.014999999999999999); // uA_per_mm2 + const double var_sodium_potassium_pump__K_mKo = CHASTE_CONST(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_sodium_potassium_pump__sigma = -CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(0.01485884101040119) * mParameters[2]); // dimensionless + const double var_sodium_potassium_pump__f_NaK = 1 / (1 + CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(0.10000000000000001) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) + CHASTE_CONST(0.036499999999999998) * var_sodium_potassium_pump__sigma * CHASTE_MATH::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 + CHASTE_MATH::Pow((var_sodium_potassium_pump__K_mNai / var_chaste_interface__ionic_concentrations__Nai), CHASTE_CONST(1.5))) * (mParameters[1] + var_sodium_potassium_pump__K_mKo)); // uA_per_mm2 + const double var_time_dependent_potassium_current__PR_NaK = CHASTE_CONST(0.018329999999999999); // dimensionless + const double var_time_dependent_potassium_current__E_K = var_membrane__R * var_membrane__T * CHASTE_MATH::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 = CHASTE_CONST(0.00282); // mS_per_mm2 + const double var_time_dependent_potassium_current__g_K = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::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 + CHASTE_MATH::Exp(-CHASTE_CONST(1.7526479750778814) + CHASTE_CONST(0.031152647975077882) * var_chaste_interface__membrane__V)); // dimensionless + const double var_time_dependent_potassium_current__i_K = CHASTE_MATH::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 * CHASTE_MATH::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__g_K1 = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::Sqrt(mParameters[1]) * mParameters[5]; // mS_per_mm2 + const double var_time_independent_potassium_current_K1_gate__alpha_K1 = CHASTE_CONST(1.02) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.23849999999999999) * var_time_independent_potassium_current__E_K1)); // per_ms + const double var_time_independent_potassium_current_K1_gate__beta_K1 = (CHASTE_CONST(0.49124000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__membrane__V - CHASTE_CONST(0.080320000000000003) * var_time_independent_potassium_current__E_K1) + CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.061749999999999999) * var_time_independent_potassium_current__E_K1)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(0.51429999999999998) * var_time_independent_potassium_current__E_K1 - CHASTE_CONST(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 var_time_independent_potassium_current__i_K1_converted = CHASTE_CONST(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 - CHASTE_CONST(100.00000000000001) * var_L_type_Ca_channel__i_Ca_L - CHASTE_CONST(100.00000000000001) * var_Na_Ca_exchanger__i_NaCa - CHASTE_CONST(100.00000000000001) * var_calcium_background_current__i_Ca_b - CHASTE_CONST(100.00000000000001) * var_non_specific_calcium_activated_current__i_ns_Ca - CHASTE_CONST(100.00000000000001) * var_plateau_potassium_current__i_Kp - CHASTE_CONST(100.00000000000001) * var_sarcolemmal_calcium_pump__i_p_Ca - CHASTE_CONST(100.00000000000001) * var_sodium_background_current__i_Na_b - CHASTE_CONST(100.00000000000001) * var_sodium_potassium_pump__i_NaK - CHASTE_CONST(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)); @@ -203,7 +205,7 @@ { // Inputs: // Time units: millisecond - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -230,107 +232,107 @@ // 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_L_type_Ca_channel_f_Ca_gate__Km_Ca = CHASTE_CONST(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_Na_Ca_exchanger__K_mCa = CHASTE_CONST(1.3799999999999999); // mM + const double var_Na_Ca_exchanger__K_mNa = CHASTE_CONST(87.5); // mM + const double var_Na_Ca_exchanger__K_sat = CHASTE_CONST(0.10000000000000001); // dimensionless + const double var_Na_Ca_exchanger__eta = CHASTE_CONST(0.34999999999999998); // dimensionless + const double var_calcium_background_current__g_Cab = CHASTE_CONST(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__I_up = CHASTE_CONST(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__K_mrel = CHASTE_CONST(0.00080000000000000004); // mM + const double var_calcium_fluxes_in_the_SR__K_mup = CHASTE_CONST(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__delta_Ca_ith = CHASTE_CONST(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__G_rel = (1 - CHASTE_MATH::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 * CHASTE_MATH::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_L_type_Ca_channel_f_Ca_gate__f_Ca = 1 / (1 + CHASTE_MATH::Pow(var_chaste_interface__ionic_concentrations__Cai, 2) / CHASTE_MATH::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 var_ionic_concentrations__V_JSR = CHASTE_CONST(0.0047999999999999996); // dimensionless + const double var_ionic_concentrations__V_NSR = CHASTE_CONST(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_ionic_concentrations__V_myo = CHASTE_CONST(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__R = CHASTE_CONST(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_calcium_background_current__E_CaN = CHASTE_CONST(0.5) * var_membrane__R * var_membrane__T * CHASTE_MATH::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 * CHASTE_MATH::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 >= -CHASTE_CONST(1.3307320976818627e-6)) && (var_chaste_interface__membrane__V <= CHASTE_CONST(1.3307320976818627e-6))) ? (CHASTE_CONST(375733.02761014085) * (CHASTE_CONST(1.3307320976818627e-6) + var_chaste_interface__membrane__V) * (CHASTE_CONST(1.0459259999999999e-7) * (-CHASTE_CONST(0.34000000000000002) * mParameters[0] + var_chaste_interface__ionic_concentrations__Cai * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) + CHASTE_CONST(1.0459259999999999e-7) * (-CHASTE_CONST(0.34000000000000002) * mParameters[0] + var_chaste_interface__ionic_concentrations__Cai * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) - CHASTE_CONST(1.0459259999999999e-7) * (-CHASTE_CONST(0.34000000000000002) * mParameters[0] + var_chaste_interface__ionic_concentrations__Cai * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) : (CHASTE_CONST(0.078597788527232842) * (-CHASTE_CONST(0.34000000000000002) * mParameters[0] + var_chaste_interface__ionic_concentrations__Cai * CHASTE_MATH::Exp(CHASTE_CONST(0.075146605522028176) * var_chaste_interface__membrane__V)) * var_chaste_interface__membrane__V / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(0.075146605522028176) * var_chaste_interface__membrane__V)))); // uA_per_mm2 + const double var_L_type_Ca_channel__I_CaK = (((var_chaste_interface__membrane__V >= -CHASTE_CONST(2.6614641953637254e-6)) && (var_chaste_interface__membrane__V <= CHASTE_CONST(2.6614641953637254e-6))) ? (CHASTE_CONST(187866.51380507043) * (CHASTE_CONST(2.6614641953637254e-6) + var_chaste_interface__membrane__V) * (CHASTE_CONST(1.8691085000000002e-11) * (-CHASTE_CONST(0.75) * mParameters[1] + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Ki * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) + CHASTE_CONST(1.8691085000000002e-11) * (-CHASTE_CONST(0.75) * mParameters[1] + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Ki * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) - CHASTE_CONST(1.8691085000000002e-11) * (-CHASTE_CONST(0.75) * mParameters[1] + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Ki * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) : (CHASTE_CONST(7.0228579563684903e-6) * (-CHASTE_CONST(0.75) * mParameters[1] + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Ki * CHASTE_MATH::Exp(CHASTE_CONST(0.037573302761014088) * var_chaste_interface__membrane__V)) * var_chaste_interface__membrane__V / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(0.037573302761014088) * var_chaste_interface__membrane__V)))); // uA_per_mm2 + const double var_L_type_Ca_channel__I_CaNa = (((var_chaste_interface__membrane__V >= -CHASTE_CONST(2.6614641953637254e-6)) && (var_chaste_interface__membrane__V <= CHASTE_CONST(2.6614641953637254e-6))) ? (CHASTE_CONST(187866.51380507043) * (CHASTE_CONST(2.6614641953637254e-6) + var_chaste_interface__membrane__V) * (CHASTE_CONST(6.5370374999999993e-11) * (-CHASTE_CONST(0.75) * mParameters[2] + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Nai * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) + CHASTE_CONST(6.5370374999999993e-11) * (-CHASTE_CONST(0.75) * mParameters[2] + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Nai * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) - CHASTE_CONST(6.5370374999999993e-11) * (-CHASTE_CONST(0.75) * mParameters[2] + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Nai * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) : (CHASTE_CONST(2.4561808914760263e-5) * (-CHASTE_CONST(0.75) * mParameters[2] + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Nai * CHASTE_MATH::Exp(CHASTE_CONST(0.037573302761014088) * var_chaste_interface__membrane__V)) * var_chaste_interface__membrane__V / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(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__d_infinity = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.6025641025641024) - CHASTE_CONST(0.16025641025641024) * var_chaste_interface__membrane__V)); // dimensionless + const double var_L_type_Ca_channel_d_gate__tau_d = (((var_chaste_interface__membrane__V >= -CHASTE_CONST(10.000000624)) && (var_chaste_interface__membrane__V <= -CHASTE_CONST(9.9999993759999999))) ? (CHASTE_CONST(801282.05129393819) * (CHASTE_CONST(10.000000624) + var_chaste_interface__membrane__V) * (CHASTE_CONST(45787545.788225032) * (1 - CHASTE_MATH::Exp(CHASTE_CONST(9.999999999851651e-8))) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(9.999999999851651e-8))) + CHASTE_CONST(45787545.788225032) * (1 - CHASTE_MATH::Exp(-CHASTE_CONST(9.999999999851651e-8))) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.999999999851651e-8)))) - CHASTE_CONST(45787545.788225032) * (1 - CHASTE_MATH::Exp(CHASTE_CONST(9.999999999851651e-8))) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(9.999999999851651e-8)))) : (CHASTE_CONST(28.571428571428569) * (1 - CHASTE_MATH::Exp(-CHASTE_CONST(1.6025641025641024) - CHASTE_CONST(0.16025641025641024) * var_chaste_interface__membrane__V)) / ((1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.6025641025641024) - CHASTE_CONST(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__f_infinity = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(4.0767441860465121) + CHASTE_CONST(0.11627906976744186) * var_chaste_interface__membrane__V)) + CHASTE_CONST(0.59999999999999998) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(2.5) - CHASTE_CONST(0.050000000000000003) * var_chaste_interface__membrane__V)); // dimensionless + const double var_L_type_Ca_channel_f_gate__tau_f = 1 / (CHASTE_CONST(0.02) + CHASTE_CONST(0.019699999999999999) * CHASTE_MATH::Exp(-CHASTE_CONST(0.113569) * CHASTE_MATH::Pow((1 + CHASTE_CONST(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_Na_Ca_exchanger__i_NaCa = (CHASTE_MATH::Pow(var_chaste_interface__ionic_concentrations__Nai, 3) * mParameters[0] * CHASTE_MATH::Exp(var_Na_Ca_exchanger__eta * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - CHASTE_MATH::Pow(mParameters[2], 3) * var_chaste_interface__ionic_concentrations__Cai * CHASTE_MATH::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 * CHASTE_MATH::Exp((-1 + var_Na_Ca_exchanger__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (CHASTE_MATH::Pow(var_Na_Ca_exchanger__K_mNa, 3) + CHASTE_MATH::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 var_fast_sodium_current__i_Na = CHASTE_MATH::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) ? (CHASTE_CONST(0.13500000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(11.764705882352942) - CHASTE_CONST(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 * CHASTE_MATH::Exp(CHASTE_CONST(0.34999999999999998) * var_chaste_interface__membrane__V) + CHASTE_CONST(3.5600000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.079000000000000001) * var_chaste_interface__membrane__V)) : (CHASTE_CONST(7.6923076923076916) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.96036036036036043) - CHASTE_CONST(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 var_fast_sodium_current_j_gate__alpha_j = ((var_chaste_interface__membrane__V < -40) ? ((CHASTE_CONST(37.780000000000001) + var_chaste_interface__membrane__V) * (-127140 * CHASTE_MATH::Exp(CHASTE_CONST(0.24440000000000001) * var_chaste_interface__membrane__V) - CHASTE_CONST(3.4740000000000003e-5) * CHASTE_MATH::Exp(-CHASTE_CONST(0.043909999999999998) * var_chaste_interface__membrane__V)) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(24.640530000000002) + CHASTE_CONST(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) ? (CHASTE_CONST(0.1212) * CHASTE_MATH::Exp(-CHASTE_CONST(0.01052) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(5.5312920000000005) - CHASTE_CONST(0.13780000000000001) * var_chaste_interface__membrane__V))) : (CHASTE_CONST(0.29999999999999999) * CHASTE_MATH::Exp(-CHASTE_CONST(2.5349999999999999e-7) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.2000000000000002) - CHASTE_CONST(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 var_fast_sodium_current_m_gate__alpha_m = (((var_chaste_interface__membrane__V >= -CHASTE_CONST(47.130001)) && (var_chaste_interface__membrane__V <= -CHASTE_CONST(47.129999000000005))) ? (-CHASTE_CONST(3.200000000092018e-7) / (1 - CHASTE_MATH::Exp(CHASTE_CONST(1.0000000000287557e-7))) + CHASTE_CONST(499999.99998562218) * (CHASTE_CONST(47.130001) + var_chaste_interface__membrane__V) * (CHASTE_CONST(3.200000000092018e-7) / (1 - CHASTE_MATH::Exp(CHASTE_CONST(1.0000000000287557e-7))) + CHASTE_CONST(3.200000000092018e-7) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(1.0000000000287557e-7))))) : (CHASTE_CONST(0.32000000000000001) * (CHASTE_CONST(47.130000000000003) + var_chaste_interface__membrane__V) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(4.7130000000000001) - CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V)))); // per_ms + const double var_fast_sodium_current_m_gate__beta_m = CHASTE_CONST(0.080000000000000002) * CHASTE_MATH::Exp(-CHASTE_CONST(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_non_specific_calcium_activated_current__I_ns_K = ((((var_chaste_interface__membrane__V >= -CHASTE_CONST(2.6614641953637254e-6) + CHASTE_CONST(26.614641953637257) * CHASTE_MATH::Log((mParameters[1] + mParameters[2]) / (var_chaste_interface__ionic_concentrations__Ki + var_chaste_interface__ionic_concentrations__Nai))) && (var_chaste_interface__membrane__V <= CHASTE_CONST(2.6614641953637254e-6) + CHASTE_CONST(26.614641953637257) * CHASTE_MATH::Log((mParameters[1] + mParameters[2]) / (var_chaste_interface__ionic_concentrations__Ki + var_chaste_interface__ionic_concentrations__Nai)))) || ((var_chaste_interface__membrane__V >= CHASTE_CONST(2.6614641953637254e-6) + CHASTE_CONST(26.614641953637257) * CHASTE_MATH::Log((mParameters[1] + mParameters[2]) / (var_chaste_interface__ionic_concentrations__Ki + var_chaste_interface__ionic_concentrations__Nai))) && (var_chaste_interface__membrane__V <= -CHASTE_CONST(2.6614641953637254e-6) + CHASTE_CONST(26.614641953637257) * CHASTE_MATH::Log((mParameters[1] + mParameters[2]) / (var_chaste_interface__ionic_concentrations__Ki + var_chaste_interface__ionic_concentrations__Nai))))) ? (CHASTE_CONST(1.6947874999999998e-11) * (-CHASTE_CONST(0.75) * mParameters[1] + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Ki * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) - CHASTE_CONST(187866.51380507043) * (-CHASTE_CONST(1.6947874999999998e-11) * (-CHASTE_CONST(0.75) * mParameters[1] + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Ki * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) - CHASTE_CONST(1.6947874999999998e-11) * (-CHASTE_CONST(0.75) * mParameters[1] + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Ki * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) * (-CHASTE_CONST(2.6614641953637254e-6) - CHASTE_CONST(26.614641953637257) * CHASTE_MATH::Log((mParameters[1] + mParameters[2]) / (var_chaste_interface__ionic_concentrations__Ki + var_chaste_interface__ionic_concentrations__Nai)) + var_chaste_interface__membrane__V)) : (CHASTE_CONST(6.3678763853082156e-6) * (-CHASTE_CONST(0.75) * mParameters[1] + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Ki * CHASTE_MATH::Exp(CHASTE_CONST(0.037573302761014088) * var_chaste_interface__membrane__V - CHASTE_MATH::Log((mParameters[1] + mParameters[2]) / (var_chaste_interface__ionic_concentrations__Ki + var_chaste_interface__ionic_concentrations__Nai)))) * (-CHASTE_CONST(26.614641953637257) * CHASTE_MATH::Log((mParameters[1] + mParameters[2]) / (var_chaste_interface__ionic_concentrations__Ki + var_chaste_interface__ionic_concentrations__Nai)) + var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(0.037573302761014088) * var_chaste_interface__membrane__V - CHASTE_MATH::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 >= -CHASTE_CONST(2.6614641953637254e-6) + CHASTE_CONST(26.614641953637257) * CHASTE_MATH::Log((mParameters[1] + mParameters[2]) / (var_chaste_interface__ionic_concentrations__Ki + var_chaste_interface__ionic_concentrations__Nai))) && (var_chaste_interface__membrane__V <= CHASTE_CONST(2.6614641953637254e-6) + CHASTE_CONST(26.614641953637257) * CHASTE_MATH::Log((mParameters[1] + mParameters[2]) / (var_chaste_interface__ionic_concentrations__Ki + var_chaste_interface__ionic_concentrations__Nai)))) || ((var_chaste_interface__membrane__V >= CHASTE_CONST(2.6614641953637254e-6) + CHASTE_CONST(26.614641953637257) * CHASTE_MATH::Log((mParameters[1] + mParameters[2]) / (var_chaste_interface__ionic_concentrations__Ki + var_chaste_interface__ionic_concentrations__Nai))) && (var_chaste_interface__membrane__V <= -CHASTE_CONST(2.6614641953637254e-6) + CHASTE_CONST(26.614641953637257) * CHASTE_MATH::Log((mParameters[1] + mParameters[2]) / (var_chaste_interface__ionic_concentrations__Ki + var_chaste_interface__ionic_concentrations__Nai))))) ? (CHASTE_CONST(1.6947874999999998e-11) * (-CHASTE_CONST(0.75) * mParameters[2] + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Nai * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) - CHASTE_CONST(187866.51380507043) * (-CHASTE_CONST(1.6947874999999998e-11) * (-CHASTE_CONST(0.75) * mParameters[2] + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Nai * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) - CHASTE_CONST(1.6947874999999998e-11) * (-CHASTE_CONST(0.75) * mParameters[2] + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Nai * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) * (-CHASTE_CONST(2.6614641953637254e-6) - CHASTE_CONST(26.614641953637257) * CHASTE_MATH::Log((mParameters[1] + mParameters[2]) / (var_chaste_interface__ionic_concentrations__Ki + var_chaste_interface__ionic_concentrations__Nai)) + var_chaste_interface__membrane__V)) : (CHASTE_CONST(6.3678763853082156e-6) * (-CHASTE_CONST(0.75) * mParameters[2] + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Nai * CHASTE_MATH::Exp(CHASTE_CONST(0.037573302761014088) * var_chaste_interface__membrane__V - CHASTE_MATH::Log((mParameters[1] + mParameters[2]) / (var_chaste_interface__ionic_concentrations__Ki + var_chaste_interface__ionic_concentrations__Nai)))) * (-CHASTE_CONST(26.614641953637257) * CHASTE_MATH::Log((mParameters[1] + mParameters[2]) / (var_chaste_interface__ionic_concentrations__Ki + var_chaste_interface__ionic_concentrations__Nai)) + var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(0.037573302761014088) * var_chaste_interface__membrane__V - CHASTE_MATH::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 = CHASTE_CONST(0.0011999999999999999); // mM + const double var_non_specific_calcium_activated_current__i_ns_K = var_non_specific_calcium_activated_current__I_ns_K / (1 + CHASTE_MATH::Pow(var_non_specific_calcium_activated_current__K_m_ns_Ca, 3) / CHASTE_MATH::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 + CHASTE_MATH::Pow(var_non_specific_calcium_activated_current__K_m_ns_Ca, 3) / CHASTE_MATH::Pow(var_chaste_interface__ionic_concentrations__Cai, 3)); // uA_per_mm2 + const double var_plateau_potassium_current__Kp = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.2521739130434781) - CHASTE_CONST(0.16722408026755853) * var_chaste_interface__membrane__V)); // dimensionless + const double var_plateau_potassium_current__g_Kp = CHASTE_CONST(0.000183); // mS_per_mm2 + const double var_sarcolemmal_calcium_pump__I_pCa = CHASTE_CONST(0.0115); // uA_per_mm2 + const double var_sarcolemmal_calcium_pump__K_mpCa = CHASTE_CONST(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 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 + CHASTE_CONST(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__g_Nab = CHASTE_CONST(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__I_NaK = CHASTE_CONST(0.014999999999999999); // uA_per_mm2 + const double var_sodium_potassium_pump__K_mKo = CHASTE_CONST(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_sodium_potassium_pump__sigma = -CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(0.01485884101040119) * mParameters[2]); // dimensionless + const double var_sodium_potassium_pump__f_NaK = 1 / (1 + CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(0.10000000000000001) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) + CHASTE_CONST(0.036499999999999998) * var_sodium_potassium_pump__sigma * CHASTE_MATH::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 + CHASTE_MATH::Pow((var_sodium_potassium_pump__K_mNai / var_chaste_interface__ionic_concentrations__Nai), CHASTE_CONST(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 var_time_dependent_potassium_current__PR_NaK = CHASTE_CONST(0.018329999999999999); // dimensionless + const double var_time_dependent_potassium_current__E_K = var_membrane__R * var_membrane__T * CHASTE_MATH::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 = CHASTE_CONST(0.00282); // mS_per_mm2 + const double var_time_dependent_potassium_current__g_K = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::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 >= -CHASTE_CONST(30.000000675675675)) && (var_chaste_interface__membrane__V <= -CHASTE_CONST(29.999999324324325))) ? (-CHASTE_CONST(4.8581081081938701e-11) / (1 - CHASTE_MATH::Exp(CHASTE_CONST(1.0000000000176534e-7))) + CHASTE_CONST(739999.99998693645) * (CHASTE_CONST(30.000000675675675) + var_chaste_interface__membrane__V) * (CHASTE_CONST(4.8581081081938701e-11) / (1 - CHASTE_MATH::Exp(CHASTE_CONST(1.0000000000176534e-7))) + CHASTE_CONST(4.8581081081938701e-11) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(1.0000000000176534e-7))))) : (CHASTE_CONST(7.1899999999999999e-5) * (30 + var_chaste_interface__membrane__V) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(4.4399999999999995) - CHASTE_CONST(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 >= -CHASTE_CONST(30.000001455604075)) && (var_chaste_interface__membrane__V <= -CHASTE_CONST(29.999998544395925))) ? (-CHASTE_CONST(1.9068413391534758e-10) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999880736e-8))) + CHASTE_CONST(343500.00000040967) * (CHASTE_CONST(30.000001455604075) + var_chaste_interface__membrane__V) * (CHASTE_CONST(1.9068413391534758e-10) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999880736e-8))) + CHASTE_CONST(1.9068413391534758e-10) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999880736e-8))))) : (CHASTE_CONST(0.00013100000000000001) * (30 + var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(2.0609999999999999) + CHASTE_CONST(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_time_dependent_potassium_current_Xi_gate__Xi = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.7526479750778814) + CHASTE_CONST(0.031152647975077882) * var_chaste_interface__membrane__V)); // dimensionless + const double var_time_dependent_potassium_current__i_K = CHASTE_MATH::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 * CHASTE_MATH::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__g_K1 = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::Sqrt(mParameters[1]) * mParameters[5]; // mS_per_mm2 + const double var_time_independent_potassium_current_K1_gate__alpha_K1 = CHASTE_CONST(1.02) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.23849999999999999) * var_time_independent_potassium_current__E_K1)); // per_ms + const double var_time_independent_potassium_current_K1_gate__beta_K1 = (CHASTE_CONST(0.49124000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__membrane__V - CHASTE_CONST(0.080320000000000003) * var_time_independent_potassium_current__E_K1) + CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.061749999999999999) * var_time_independent_potassium_current__E_K1)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(0.51429999999999998) * var_time_independent_potassium_current__E_K1 - CHASTE_CONST(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 @@ -341,8 +343,8 @@ } 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_membrane__I_st_converted = -CHASTE_STIM(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_membrane__I_st = CHASTE_CONST(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 @@ -367,7 +369,7 @@ { // Inputs: // Time units: millisecond - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -382,19 +384,19 @@ // 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__I_st_converted = -CHASTE_STIM(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_membrane__R = CHASTE_CONST(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_fast_sodium_current__E_Na = var_membrane__R * var_membrane__T * CHASTE_MATH::Log(mParameters[2] / var_chaste_interface__ionic_concentrations__Nai) / var_membrane__F; // mV + const double var_fast_sodium_current__i_Na = CHASTE_MATH::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 = CHASTE_CONST(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 * CHASTE_MATH::Log(mParameters[1] / var_chaste_interface__ionic_concentrations__Ki) / var_membrane__F; // mV + const double var_time_independent_potassium_current__g_K1 = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::Sqrt(mParameters[1]) * mParameters[5]; // mS_per_mm2 + const double var_time_independent_potassium_current_K1_gate__alpha_K1 = CHASTE_CONST(1.02) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.23849999999999999) * var_time_independent_potassium_current__E_K1)); // per_ms + const double var_time_independent_potassium_current_K1_gate__beta_K1 = (CHASTE_CONST(0.49124000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__membrane__V - CHASTE_CONST(0.080320000000000003) * var_time_independent_potassium_current__E_K1) + CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.061749999999999999) * var_time_independent_potassium_current__E_K1)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(0.51429999999999998) * var_time_independent_potassium_current__E_K1 - CHASTE_CONST(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_time_independent_potassium_current__i_K1_converted = CHASTE_CONST(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; diff --git a/chaste_codegen/data/tests/chaste_reference_models/Normal/luo_rudy_1994.hpp b/chaste_codegen/data/tests/chaste_reference_models/Normal/luo_rudy_1994.hpp index c32f251f2..817d2929c 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/Normal/luo_rudy_1994.hpp +++ b/chaste_codegen/data/tests/chaste_reference_models/Normal/luo_rudy_1994.hpp @@ -16,6 +16,9 @@ #include "ChasteSerialization.hpp" #include #include "AbstractStimulusFunction.hpp" +#if USING_DEVICE_COMPILER +#include "StimulusEvaluatorCuda.hpp" +#endif #include "AbstractCardiacCell.hpp" class Cellluo_rudy_1994FromCellML : public AbstractCardiacCell diff --git a/chaste_codegen/data/tests/chaste_reference_models/Normal/non_dynamic_aslanidi_Purkinje_model_2009.cpp b/chaste_codegen/data/tests/chaste_reference_models/Normal/non_dynamic_aslanidi_Purkinje_model_2009.cpp index 82dadca51..aa0d77442 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/Normal/non_dynamic_aslanidi_Purkinje_model_2009.cpp +++ b/chaste_codegen/data/tests/chaste_reference_models/Normal/non_dynamic_aslanidi_Purkinje_model_2009.cpp @@ -21,6 +21,8 @@ #include "HeartConfig.hpp" #include "IsNan.hpp" #include "MathsCustomFunctions.hpp" +#include "ChasteMathDeviceNamespaces.hpp" +#include "ChasteCpuMacros.hpp" @@ -29,7 +31,7 @@ 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_amplitude_converted = -80 * CHASTE_CAP(); // 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 @@ -150,22 +152,22 @@ 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[0] = CHASTE_CONST(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[2] = CHASTE_CONST(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[4] = CHASTE_CONST(1.8); // (var_model_parameters__Ca_o) [millimolar] + this->mParameters[5] = CHASTE_CONST(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[7] = CHASTE_CONST(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] + this->mParameters[11] = CHASTE_CONST(0.25); // (var_i_K1__g_K1_max) [milliS_per_microF] + this->mParameters[12] = CHASTE_CONST(0.040008488000000002); // (var_i_Kr__g_Kr_max) [milliS_per_microF] + this->mParameters[13] = CHASTE_CONST(0.052581329000000003); // (var_i_Ks__g_Ks_max) [milliS_per_microF] + this->mParameters[14] = CHASTE_CONST(4.5); // (var_i_NaCa__i_NaCa_max) [microA_per_microF] + this->mParameters[15] = CHASTE_CONST(0.14135944); // (var_i_to_1__g_to_1) [milliS_per_microF] } Cellaslanidi_Purkinje_model_2009FromCellML::~Cellaslanidi_Purkinje_model_2009FromCellML() @@ -212,7 +214,7 @@ // 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -263,74 +265,74 @@ 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_background_currents__g_Cl_b = CHASTE_CONST(0.00022499999999999999); // milliS_per_microF + const double var_background_currents__g_K_b = CHASTE_CONST(0.0050000000000000001); // milliS_per_microF + const double var_background_currents__g_Na_b = CHASTE_CONST(0.0025000000000000001); // milliS_per_microF + const double var_background_currents__p_Ca_b = CHASTE_CONST(1.9950840000000001e-7); // cm_per_second + const double var_equilibrium_potentials__r_NaK = CHASTE_CONST(0.018329999999999999); // dimensionless + const double var_i_Ca_L__p_Ca = CHASTE_CONST(0.000243); // cm_per_second + const double var_i_Ca_T__g_Ca_T = CHASTE_CONST(0.13); // milliS_per_microF + const double var_i_Ca_p__i_Ca_p_max = CHASTE_CONST(0.057500000000000002); // microA_per_microF + const double var_i_Ca_p__km_Ca_p = CHASTE_CONST(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_K_p__g_K_p = CHASTE_CONST(0.0027599999999999999); // milliS_per_microF + const double var_i_Ks__g_Ks = (1 + CHASTE_CONST(0.59999999999999998) / (1 + CHASTE_CONST(6.4818210260626455e-7) * CHASTE_MATH::Pow((1 / var_chaste_interface__Ca_i__Ca_i), CHASTE_CONST(1.3999999999999999)))) * mParameters[13]; // milliS_per_microF + const double var_i_NaCa__X_NaCa = CHASTE_CONST(0.40000000000000002); // dimensionless + const double var_i_NaCa__k_sat = CHASTE_CONST(0.27000000000000002); // dimensionless + const double var_i_NaCa__km_Ca_act = CHASTE_CONST(0.000125); // millimolar + const double var_i_NaCa__km_Ca_i = CHASTE_CONST(0.0035999999999999999); // millimolar + const double var_i_NaCa__km_Ca_o = CHASTE_CONST(1.3); // millimolar + const double var_i_NaCa__km_Na_i_1 = CHASTE_CONST(12.300000000000001); // millimolar + const double var_i_NaCa__km_Na_o = CHASTE_CONST(87.5); // millimolar + const double var_i_NaK__g_NaK = CHASTE_CONST(0.61875000000000002); // microA_per_microF + const double var_i_NaK__km_K_o = CHASTE_CONST(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_Na_L__g_Na_L = CHASTE_CONST(0.037374999999999999); // milliS_per_microF + const double var_i_to_2__p_Cl = CHASTE_CONST(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_i_K_p__kp = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.2521739130434781) - CHASTE_CONST(0.16722408026755853) * var_chaste_interface__membrane__V)); // dimensionless + const double var_i_Kr__rr_infinity = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.26470588235294124) + CHASTE_CONST(0.049019607843137261) * var_chaste_interface__membrane__V)); // dimensionless + const double var_i_NaCa__dNaCa_1 = CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * var_i_NaCa__km_Ca_o + CHASTE_CONST(1.5) * CHASTE_MATH::Pow(var_i_NaCa__km_Na_o, 3) * var_chaste_interface__Ca_i__Ca_i + CHASTE_MATH::Pow(var_i_NaCa__km_Na_i_1, 3) * (1 + CHASTE_CONST(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_i_K1__g_K1 = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::Sqrt(mParameters[5]) * mParameters[11]; // milliS_per_microF + const double var_i_Kr__g_Kr = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::Sqrt(mParameters[5]) * mParameters[12]; // milliS_per_microF + const double var_i_NaCa__dNaCa_2 = CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mParameters[4] + CHASTE_CONST(1.5) * CHASTE_MATH::Pow(mParameters[6], 3) * var_chaste_interface__Ca_i__Ca_i + CHASTE_MATH::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 = -CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(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_equilibrium_potentials__E_Cl = -var_model_parameters__R * var_model_parameters__T * CHASTE_MATH::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_equilibrium_potentials__E_K = var_model_parameters__R * var_model_parameters__T * CHASTE_MATH::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_equilibrium_potentials__E_Ks = var_model_parameters__R * var_model_parameters__T * CHASTE_MATH::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 * CHASTE_MATH::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__alpha_xK1 = CHASTE_CONST(1.02) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.23849999999999999) * var_equilibrium_potentials__E_K)); // dimensionless + const double var_i_K1_xK1_gate__beta_xK1 = (CHASTE_CONST(0.49124000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__membrane__V - CHASTE_CONST(0.080320000000000003) * var_equilibrium_potentials__E_K) + CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.061749999999999999) * var_equilibrium_potentials__E_K)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(0.51429999999999998) * var_equilibrium_potentials__E_K - CHASTE_CONST(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_K1__i_K1 = (CHASTE_CONST(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_Na__i_Na = CHASTE_MATH::Pow(var_chaste_interface__i_Na_m_gate__m, 3) * (-var_equilibrium_potentials__E_Na + var_chaste_interface__membrane__V) * (CHASTE_CONST(0.20000000000000001) * var_chaste_interface__i_Na_j_gate__j + CHASTE_CONST(0.80000000000000004) * var_chaste_interface__i_Na_h_gate__h) * mParameters[8]; // microA_per_microF + const double var_i_NaCa__i_NaCa = (-CHASTE_CONST(1.5) * CHASTE_MATH::Pow(mParameters[6], 3) * var_chaste_interface__Ca_i__Ca_i * CHASTE_MATH::Exp(-CHASTE_CONST(0.65000000000000002) * var_chaste_interface__membrane__V * var_model_parameters__F / (var_model_parameters__R * var_model_parameters__T)) + CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * var_i_NaCa__X_NaCa * mParameters[14] * mParameters[4] * CHASTE_MATH::Exp(CHASTE_CONST(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 * CHASTE_MATH::Exp(-CHASTE_CONST(0.65000000000000002) * var_chaste_interface__membrane__V * var_model_parameters__F / (var_model_parameters__R * var_model_parameters__T))) * (1 + CHASTE_CONST(0.44444444444444442) * CHASTE_MATH::Pow(var_i_NaCa__km_Ca_act, 2) / CHASTE_MATH::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 + CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V * var_model_parameters__F / (var_model_parameters__R * var_model_parameters__T)) + CHASTE_CONST(0.036499999999999998) * var_i_NaK__sigma * CHASTE_MATH::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 + CHASTE_MATH::Pow(var_i_NaK__km_Na_i_2, 2) / CHASTE_MATH::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 = CHASTE_MATH::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) * (CHASTE_CONST(0.20000000000000001) * var_chaste_interface__i_to_1_i2_gate__i2 + CHASTE_CONST(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 = CHASTE_MATH::Pow(var_i_to_2__z_Cl, 2) * CHASTE_MATH::Pow(var_model_parameters__F, 2) * (-var_model_parameters__Cl_o * CHASTE_MATH::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 - CHASTE_MATH::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__gamma_Cao = CHASTE_CONST(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_background_currents__i_Ca_b = CHASTE_MATH::Pow(var_model_parameters__F, 2) * CHASTE_MATH::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 * CHASTE_MATH::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 + CHASTE_MATH::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 = CHASTE_MATH::Pow(var_model_parameters__F, 2) * CHASTE_MATH::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 * CHASTE_MATH::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 + CHASTE_MATH::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 var_chaste_interface__i_ionic = CHASTE_CAP() * var_membrane__i_tot; // uA_per_cm2 const double i_ionic = var_chaste_interface__i_ionic; EXCEPT_IF_NOT(!std::isnan(i_ionic)); @@ -341,7 +343,7 @@ { // 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)); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -404,216 +406,216 @@ // 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_CT_K_Cl__CT_K_Cl_max = CHASTE_CONST(7.0755999999999996e-6); // millimolar_per_millisecond + const double var_CT_Na_Cl__CT_Na_Cl_max = CHASTE_CONST(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_JSR__km_CSQN = CHASTE_CONST(0.80000000000000004); // millimolar + const double var_Ca_MK_act__Ca_MK_0 = CHASTE_CONST(0.050000000000000003); // dimensionless + const double var_Ca_MK_act__alpha_Ca_MK = CHASTE_CONST(0.050000000000000003); // per_millisecond + const double var_Ca_MK_act__beta_Ca_MK = CHASTE_CONST(0.00068000000000000005); // per_millisecond + const double var_Ca_MK_act__km_Ca_MK = CHASTE_CONST(0.14999999999999999); // millimolar + const double var_Ca_i__CMDN_max = CHASTE_CONST(0.050000000000000003); // millimolar + const double var_Ca_i__TRPN_max = CHASTE_CONST(0.070000000000000007); // millimolar + const double var_Ca_i__km_CMDN = CHASTE_CONST(0.0023800000000000002); // millimolar + const double var_Ca_i__CMDN = 2 * var_Ca_i__CMDN_max * var_chaste_interface__Ca_i__Ca_i / CHASTE_MATH::Pow((var_chaste_interface__Ca_i__Ca_i + var_Ca_i__km_CMDN), 2); // dimensionless + const double var_Ca_i__km_TRPN = CHASTE_CONST(0.00050000000000000001); // millimolar + const double var_Ca_i__TRPN = 2 * var_chaste_interface__Ca_i__Ca_i * var_Ca_i__TRPN_max / CHASTE_MATH::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__b_SL_max = CHASTE_CONST(1.1240000000000001); // millimolar + const double var_Ca_r__b_SR_max = CHASTE_CONST(0.047); // millimolar + const double var_Ca_r__km_b_SL = CHASTE_CONST(0.0086999999999999994); // millimolar + const double var_Ca_r__b_SL = 2 * var_chaste_interface__Ca_r__Ca_r * var_Ca_r__b_SL_max / CHASTE_MATH::Pow((var_chaste_interface__Ca_r__Ca_r + var_Ca_r__km_b_SL), 2); // dimensionless + const double var_Ca_r__km_b_SR = CHASTE_CONST(0.00087000000000000001); // millimolar + const double var_Ca_r__b_SR = 2 * var_chaste_interface__Ca_r__Ca_r * var_Ca_r__b_SR_max / CHASTE_MATH::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__tau_ss = CHASTE_CONST(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_background_currents__g_Cl_b = CHASTE_CONST(0.00022499999999999999); // milliS_per_microF + const double var_background_currents__g_K_b = CHASTE_CONST(0.0050000000000000001); // milliS_per_microF + const double var_background_currents__g_Na_b = CHASTE_CONST(0.0025000000000000001); // milliS_per_microF + const double var_background_currents__p_Ca_b = CHASTE_CONST(1.9950840000000001e-7); // cm_per_second + const double var_equilibrium_potentials__r_NaK = CHASTE_CONST(0.018329999999999999); // dimensionless + const double var_i_Ca_L__p_Ca = CHASTE_CONST(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(CHASTE_CONST(0.5) + 1 / (1 + CHASTE_CONST(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 = CHASTE_CONST(0.057500000000000002); // microA_per_microF + const double var_i_Ca_p__km_Ca_p = CHASTE_CONST(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_K_p__g_K_p = CHASTE_CONST(0.0027599999999999999); // milliS_per_microF + const double var_i_Ks__g_Ks = (1 + CHASTE_CONST(0.59999999999999998) / (1 + CHASTE_CONST(6.4818210260626455e-7) * CHASTE_MATH::Pow((1 / var_chaste_interface__Ca_i__Ca_i), CHASTE_CONST(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 = CHASTE_CONST(0.40000000000000002); // dimensionless + const double var_i_NaCa__k_sat = CHASTE_CONST(0.27000000000000002); // dimensionless + const double var_i_NaCa__km_Ca_act = CHASTE_CONST(0.000125); // millimolar + const double var_i_NaCa__km_Ca_i = CHASTE_CONST(0.0035999999999999999); // millimolar + const double var_i_NaCa__km_Ca_o = CHASTE_CONST(1.3); // millimolar + const double var_i_NaCa__km_Na_i_1 = CHASTE_CONST(12.300000000000001); // millimolar + const double var_i_NaCa__km_Na_o = CHASTE_CONST(87.5); // millimolar + const double var_i_NaK__g_NaK = CHASTE_CONST(0.61875000000000002); // microA_per_microF + const double var_i_NaK__km_K_o = CHASTE_CONST(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_Na_L__g_Na_L = CHASTE_CONST(0.037374999999999999); // milliS_per_microF + const double var_i_to_2__p_Cl = CHASTE_CONST(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__km_to_2 = CHASTE_CONST(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 var_i_Ca_L_d_gate__d_infinity = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(0.59347181008902072) - CHASTE_CONST(0.14836795252225518) * var_chaste_interface__membrane__V)); // dimensionless + const double var_i_Ca_L_d_gate__tau_d = CHASTE_CONST(0.58999999999999997) + CHASTE_CONST(0.80000000000000004) * CHASTE_MATH::Exp(CHASTE_CONST(0.67599999999999993) + CHASTE_CONST(0.051999999999999998) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.7160000000000002) + CHASTE_CONST(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 var_i_Ca_L_f2_gate__f2_infinity = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.8) + CHASTE_CONST(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 + CHASTE_CONST(24.217200000000005) * CHASTE_MATH::Pow((-1 + CHASTE_CONST(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 var_i_Ca_L_f_gate__f_infinity = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.8) + CHASTE_CONST(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 + CHASTE_CONST(0.03125) * CHASTE_MATH::Pow((-1 + CHASTE_CONST(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__alpha_b = CHASTE_CONST(1.0680000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.54333333333333333) + CHASTE_CONST(0.033333333333333333) * var_chaste_interface__membrane__V); // per_millisecond + const double var_i_Ca_T_b_gate__b_infinity = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(5.4098360655737707) - CHASTE_CONST(0.16393442622950821) * var_chaste_interface__membrane__V)); // dimensionless + const double var_i_Ca_T_b_gate__beta_b = CHASTE_CONST(1.0680000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(0.54333333333333333) - CHASTE_CONST(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__alpha_g = CHASTE_CONST(0.014999999999999999) * CHASTE_MATH::Exp(-CHASTE_CONST(0.86074429771908767) - CHASTE_CONST(0.012004801920768308) * var_chaste_interface__membrane__V); // per_millisecond + const double var_i_Ca_T_g_gate__beta_g = CHASTE_CONST(0.014999999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(4.6558441558441563) + CHASTE_CONST(0.064935064935064929) * var_chaste_interface__membrane__V); // per_millisecond + const double var_i_Ca_T_g_gate__g_infinity = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(9.0909090909090917) + CHASTE_CONST(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 var_i_K_p__kp = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.2521739130434781) - CHASTE_CONST(0.16722408026755853) * var_chaste_interface__membrane__V)); // dimensionless + const double var_i_Kr__rr_infinity = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.26470588235294124) + CHASTE_CONST(0.049019607843137261) * var_chaste_interface__membrane__V)); // dimensionless + const double var_i_Kr_xr_gate__tau_xr = 100 + 900 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(0.20000000000000001) * var_chaste_interface__membrane__V)); // millisecond + const double var_i_Kr_xr_gate__xr_infinity = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.0069387755102040824) - CHASTE_CONST(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 var_i_Ks_xs1_gate__tau_xs1 = 1 / (CHASTE_CONST(7.6100000000000007e-5) * (CHASTE_CONST(44.600000000000001) + var_chaste_interface__membrane__V) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(444.66200000000003) - CHASTE_CONST(9.9700000000000006) * var_chaste_interface__membrane__V)) + CHASTE_CONST(0.00036000000000000002) * (-CHASTE_CONST(0.55000000000000004) + var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.070400000000000004) + CHASTE_CONST(0.128) * var_chaste_interface__membrane__V))); // millisecond + const double var_i_Ks_xs1_gate__xs1_infinity = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(0.65693430656934315) - CHASTE_CONST(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 var_i_Ks_xs2_gate__tau_xs2 = 2 / (CHASTE_CONST(7.6100000000000007e-5) * (CHASTE_CONST(44.600000000000001) + var_chaste_interface__membrane__V) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(444.66200000000003) - CHASTE_CONST(9.9700000000000006) * var_chaste_interface__membrane__V)) + CHASTE_CONST(0.00036000000000000002) * (-CHASTE_CONST(0.55000000000000004) + var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.070400000000000004) + CHASTE_CONST(0.128) * var_chaste_interface__membrane__V))); // millisecond + const double var_i_Ks_xs2_gate__xs2_infinity = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(0.65693430656934315) - CHASTE_CONST(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 var_i_Na_L_h_L_gate__h_L_infinity = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(11.311475409836067) + CHASTE_CONST(0.16393442622950821) * var_chaste_interface__membrane__V)); // dimensionless + const double var_i_Na_L_h_L_gate__tau_h_L = 175 + 125 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(4.166666666666667) - CHASTE_CONST(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__alpha_m_L = CHASTE_CONST(0.32000000000000001) * (CHASTE_CONST(47.130000000000003) + var_chaste_interface__membrane__V) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(4.7130000000000001) - CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V)); // per_millisecond + const double var_i_Na_L_m_L_gate__beta_m_L = CHASTE_CONST(0.080000000000000002) * CHASTE_MATH::Exp(-CHASTE_CONST(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__alpha_h = ((var_chaste_interface__membrane__V < -40) ? (CHASTE_CONST(0.13500000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(11.764705882352942) + CHASTE_CONST(0.14705882352941177) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(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 * CHASTE_MATH::Exp(CHASTE_CONST(0.34999999999999998) * var_chaste_interface__membrane__V - CHASTE_CONST(0.34999999999999998) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time)) + CHASTE_CONST(3.5600000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.079000000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.079000000000000001) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time))) : (CHASTE_CONST(7.6923076923076916) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.96036036036036043) + CHASTE_CONST(0.0900900900900901) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(0.0900900900900901) * var_chaste_interface__membrane__V)))); // per_millisecond + const double var_i_Na_h_gate__h_infinity = CHASTE_CONST(0.01) * mp_membrane_fast_sodium_current_reduced_inactivation_modifier->Calc(mParameters[9], var_chaste_interface__environment__time) + (1 - CHASTE_CONST(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__alpha_j = ((var_chaste_interface__membrane__V < -40) ? ((CHASTE_CONST(37.780000000000001) + var_chaste_interface__membrane__V) * (-127140 * CHASTE_MATH::Exp(CHASTE_CONST(0.24440000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.24440000000000001) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time)) - CHASTE_CONST(3.4740000000000003e-5) * CHASTE_MATH::Exp(CHASTE_CONST(0.043909999999999998) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(0.043909999999999998) * var_chaste_interface__membrane__V)) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(24.640530000000002) + CHASTE_CONST(0.311) * var_chaste_interface__membrane__V - CHASTE_CONST(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) ? (CHASTE_CONST(0.1212) * CHASTE_MATH::Exp(CHASTE_CONST(0.01052) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(0.01052) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(5.5312920000000005) + CHASTE_CONST(0.13780000000000001) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(0.13780000000000001) * var_chaste_interface__membrane__V))) : (CHASTE_CONST(0.29999999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(2.5349999999999999e-7) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(2.5349999999999999e-7) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.2000000000000002) + CHASTE_CONST(0.10000000000000001) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V)))); // per_millisecond + const double var_i_Na_j_gate__j_infinity = CHASTE_CONST(0.01) * mp_membrane_fast_sodium_current_reduced_inactivation_modifier->Calc(mParameters[9], var_chaste_interface__environment__time) + (1 - CHASTE_CONST(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__alpha_m = CHASTE_CONST(0.32000000000000001) * (CHASTE_CONST(47.130000000000003) + var_chaste_interface__membrane__V) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(4.7130000000000001) - CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V)); // per_millisecond + const double var_i_Na_m_gate__beta_m = CHASTE_CONST(0.080000000000000002) * CHASTE_MATH::Exp(-CHASTE_CONST(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__alpha_a = 25 * CHASTE_MATH::Exp(-CHASTE_CONST(3.7999999999999998) + CHASTE_CONST(0.050000000000000003) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.7999999999999998) + CHASTE_CONST(0.050000000000000003) * var_chaste_interface__membrane__V)); // per_millisecond + const double var_i_to_1_a_gate__beta_a = 25 * CHASTE_MATH::Exp(-CHASTE_CONST(2.7000000000000002) - CHASTE_CONST(0.050000000000000003) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.7000000000000002) - CHASTE_CONST(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__alpha_i2 = CHASTE_CONST(0.0044200000000000003) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.7333333333333334) + CHASTE_CONST(0.066666666666666666) * var_chaste_interface__membrane__V)); // per_millisecond + const double var_i_to_1_i2_gate__beta_i2 = CHASTE_CONST(0.050000000000000003) * CHASTE_MATH::Exp(-CHASTE_CONST(0.66666666666666663) + CHASTE_CONST(0.066666666666666666) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.66666666666666663) + CHASTE_CONST(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 var_i_to_1_i2_gate__tau_i2 = CHASTE_CONST(21.5) + 30 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.5) + CHASTE_CONST(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__alpha_i = CHASTE_CONST(0.029999999999999999) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.6666666666666667) + CHASTE_CONST(0.066666666666666666) * var_chaste_interface__membrane__V)); // per_millisecond + const double var_i_to_1_i_gate__beta_i = CHASTE_CONST(0.10000000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(2.6666666666666665) + CHASTE_CONST(0.066666666666666666) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.6666666666666665) + CHASTE_CONST(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 var_i_to_1_i_gate__tau_i = 6 + 5 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.6499999999999999) + CHASTE_CONST(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_i_NaCa__dNaCa_1 = CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * var_i_NaCa__km_Ca_o + CHASTE_CONST(1.5) * CHASTE_MATH::Pow(var_i_NaCa__km_Na_o, 3) * var_chaste_interface__Ca_i__Ca_i + CHASTE_MATH::Pow(var_i_NaCa__km_Na_i_1, 3) * (1 + CHASTE_CONST(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_i_K1__g_K1 = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::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 = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::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 = CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mp_extracellular_calcium_concentration_modifier->Calc(mParameters[4], var_chaste_interface__environment__time) + CHASTE_CONST(1.5) * CHASTE_MATH::Pow(mp_extracellular_sodium_concentration_modifier->Calc(mParameters[6], var_chaste_interface__environment__time), 3) * var_chaste_interface__Ca_i__Ca_i + CHASTE_MATH::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 = -CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(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_equilibrium_potentials__E_Cl = -var_model_parameters__R * var_model_parameters__T * CHASTE_MATH::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_equilibrium_potentials__E_K = var_model_parameters__R * var_model_parameters__T * CHASTE_MATH::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 / (CHASTE_CONST(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_equilibrium_potentials__E_Ks = var_model_parameters__R * var_model_parameters__T * CHASTE_MATH::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 * CHASTE_MATH::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 = CHASTE_MATH::Pow((-var_equilibrium_potentials__E_Cl + var_equilibrium_potentials__E_Na), 4) * var_CT_Na_Cl__CT_Na_Cl_max / (CHASTE_CONST(59494197.640692554) + CHASTE_MATH::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__alpha_xK1 = CHASTE_CONST(1.02) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.23849999999999999) * var_equilibrium_potentials__E_K)); // dimensionless + const double var_i_K1_xK1_gate__beta_xK1 = (CHASTE_CONST(0.49124000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__membrane__V - CHASTE_CONST(0.080320000000000003) * var_equilibrium_potentials__E_K) + CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.061749999999999999) * var_equilibrium_potentials__E_K)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(0.51429999999999998) * var_equilibrium_potentials__E_K - CHASTE_CONST(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 = mp_i_K1__i_K1_modifier->Calc((CHASTE_CONST(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_Na__i_Na = mp_i_Na__i_Na_modifier->Calc(CHASTE_MATH::Pow(var_chaste_interface__i_Na_m_gate__m, 3) * (-var_equilibrium_potentials__E_Na + var_chaste_interface__membrane__V) * (CHASTE_CONST(0.20000000000000001) * var_chaste_interface__i_Na_j_gate__j + CHASTE_CONST(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((-CHASTE_CONST(1.5) * CHASTE_MATH::Pow(mp_extracellular_sodium_concentration_modifier->Calc(mParameters[6], var_chaste_interface__environment__time), 3) * var_chaste_interface__Ca_i__Ca_i * CHASTE_MATH::Exp(-CHASTE_CONST(0.65000000000000002) * var_chaste_interface__membrane__V * var_model_parameters__F / (var_model_parameters__R * var_model_parameters__T)) + CHASTE_MATH::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) * CHASTE_MATH::Exp(CHASTE_CONST(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 * CHASTE_MATH::Exp(-CHASTE_CONST(0.65000000000000002) * var_chaste_interface__membrane__V * var_model_parameters__F / (var_model_parameters__R * var_model_parameters__T))) * (1 + CHASTE_CONST(0.44444444444444442) * CHASTE_MATH::Pow(var_i_NaCa__km_Ca_act, 2) / CHASTE_MATH::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 + CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V * var_model_parameters__F / (var_model_parameters__R * var_model_parameters__T)) + CHASTE_CONST(0.036499999999999998) * var_i_NaK__sigma * CHASTE_MATH::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 + CHASTE_MATH::Pow(var_i_NaK__km_Na_i_2, 2) / CHASTE_MATH::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 = CHASTE_MATH::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) * (CHASTE_CONST(0.20000000000000001) * var_chaste_interface__i_to_1_i2_gate__i2 + CHASTE_CONST(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 = CHASTE_MATH::Pow(var_i_to_2__z_Cl, 2) * CHASTE_MATH::Pow(var_model_parameters__F, 2) * (-var_model_parameters__Cl_o * CHASTE_MATH::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 - CHASTE_MATH::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__Vol_cell = CHASTE_CONST(0.34539999999999998); // microlitre + const double var_model_parameters__Vol_jsr = CHASTE_CONST(0.0047999999999999996) * var_model_parameters__Vol_cell; // microlitre + const double var_model_parameters__Vol_myo = CHASTE_CONST(0.68000000000000005) * var_model_parameters__Vol_cell; // microlitre + const double var_model_parameters__Vol_nsr = CHASTE_CONST(0.055199999999999999) * var_model_parameters__Vol_cell; // microlitre + const double var_model_parameters__Vol_ss = CHASTE_CONST(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__gamma_Cao = CHASTE_CONST(0.34100000000000003); // dimensionless + const double var_model_parameters__length = CHASTE_CONST(0.01); // cm + const double var_model_parameters__radius = CHASTE_CONST(0.0011000000000000001); // cm + const double var_model_parameters__a_geo = CHASTE_CONST(6.2800000000000002) * CHASTE_MATH::Pow(var_model_parameters__radius, 2) + CHASTE_CONST(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_background_currents__i_Ca_b = CHASTE_MATH::Pow(var_model_parameters__F, 2) * CHASTE_MATH::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 * CHASTE_MATH::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 + CHASTE_MATH::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 = CHASTE_MATH::Pow(var_model_parameters__F, 2) * CHASTE_MATH::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 * CHASTE_MATH::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 + CHASTE_MATH::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 var_i_Ca_L_f_Ca2_gate__tau_f_Ca2 = mp_membrane_L_type_calcium_current_fCa2_gate_tau_modifier->Calc(125 + 300 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(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 var_i_Ca_L_f_Ca_gate__f_Ca_infinity = CHASTE_CONST(0.14999999999999999) + CHASTE_CONST(0.55000000000000004) / (1 + CHASTE_CONST(333.33333333333331) * var_chaste_interface__Ca_r__Ca_r) + CHASTE_CONST(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__vg = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(2.6000000000000001) + CHASTE_CONST(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__Ca_fac = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(3.3333333333333335) + CHASTE_CONST(66.666666666666671) * var_i_Ca_L__i_Ca_L)); // millimolar + const double var_q_rel_ri_gate__ri_infinity = 1 / (1 + CHASTE_MATH::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 var_q_rel_ri_gate__tau_ri = 3 + (350 - var_q_rel_ri_gate__tau_Ca_MK) / (1 + CHASTE_MATH::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__ro_infinity_JSR = CHASTE_MATH::Pow(var_chaste_interface__Ca_JSR__Ca_JSR, CHASTE_CONST(1.8999999999999999)) / (CHASTE_MATH::Pow(var_chaste_interface__Ca_JSR__Ca_JSR, CHASTE_CONST(1.8999999999999999)) + CHASTE_CONST(1644.6531773416521) * CHASTE_MATH::Pow((var_chaste_interface__Ca_r__Ca_r / (CHASTE_CONST(0.0028) + var_chaste_interface__Ca_r__Ca_r)), CHASTE_CONST(1.8999999999999999))); // dimensionless + const double var_q_rel_ro_gate__ro_infinity = CHASTE_MATH::Pow(var_i_Ca_L__i_Ca_L, 2) * var_q_rel_ro_gate__ro_infinity_JSR / (1 + CHASTE_MATH::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 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 / CHASTE_MATH::Pow((var_chaste_interface__Ca_JSR__Ca_JSR + var_Ca_JSR__km_CSQN), 2)); // millimolar / millisecond + const double var_q_up__X_q_up = CHASTE_CONST(0.5); // dimensionless + const double var_q_up__dkm_plb_max = CHASTE_CONST(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_max = CHASTE_CONST(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__km_up = CHASTE_CONST(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 + 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 + CHASTE_CONST(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) { @@ -621,10 +623,10 @@ } else { - const double var_i_Ca_T__g_Ca_T = 0.13; // milliS_per_microF + const double var_i_Ca_T__g_Ca_T = CHASTE_CONST(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_stim_converted = CHASTE_STIM(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_membrane__i_stim = var_membrane__i_stim_converted / CHASTE_CAP(); // 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 } @@ -665,7 +667,7 @@ { // 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)); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -713,65 +715,65 @@ // 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_0 = CHASTE_CONST(0.050000000000000003); // dimensionless + const double var_Ca_MK_act__km_Ca_MK = CHASTE_CONST(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_equilibrium_potentials__r_NaK = CHASTE_CONST(0.018329999999999999); // dimensionless + const double var_i_Ca_L__p_Ca = CHASTE_CONST(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(CHASTE_CONST(0.5) + 1 / (1 + CHASTE_CONST(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 + CHASTE_CONST(0.59999999999999998) / (1 + CHASTE_CONST(6.4818210260626455e-7) * CHASTE_MATH::Pow((1 / var_chaste_interface__Ca_i__Ca_i), CHASTE_CONST(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 = CHASTE_CONST(0.40000000000000002); // dimensionless + const double var_i_NaCa__k_sat = CHASTE_CONST(0.27000000000000002); // dimensionless + const double var_i_NaCa__km_Ca_act = CHASTE_CONST(0.000125); // millimolar + const double var_i_NaCa__km_Ca_i = CHASTE_CONST(0.0035999999999999999); // millimolar + const double var_i_NaCa__km_Ca_o = CHASTE_CONST(1.3); // millimolar + const double var_i_NaCa__km_Na_i_1 = CHASTE_CONST(12.300000000000001); // millimolar + const double var_i_NaCa__km_Na_o = CHASTE_CONST(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 + CHASTE_CONST(24.217200000000005) * CHASTE_MATH::Pow((-1 + CHASTE_CONST(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 + CHASTE_CONST(0.03125) * CHASTE_MATH::Pow((-1 + CHASTE_CONST(0.40000000000000002) * var_chaste_interface__membrane__V), 2), var_chaste_interface__environment__time); // millisecond + const double var_i_Kr__rr_infinity = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.26470588235294124) + CHASTE_CONST(0.049019607843137261) * var_chaste_interface__membrane__V)); // dimensionless + const double var_i_Na_h_gate__alpha_h = ((var_chaste_interface__membrane__V < -40) ? (CHASTE_CONST(0.13500000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(11.764705882352942) + CHASTE_CONST(0.14705882352941177) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(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 * CHASTE_MATH::Exp(CHASTE_CONST(0.34999999999999998) * var_chaste_interface__membrane__V - CHASTE_CONST(0.34999999999999998) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time)) + CHASTE_CONST(3.5600000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.079000000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.079000000000000001) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time))) : (CHASTE_CONST(7.6923076923076916) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.96036036036036043) + CHASTE_CONST(0.0900900900900901) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(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__alpha_j = ((var_chaste_interface__membrane__V < -40) ? ((CHASTE_CONST(37.780000000000001) + var_chaste_interface__membrane__V) * (-127140 * CHASTE_MATH::Exp(CHASTE_CONST(0.24440000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.24440000000000001) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time)) - CHASTE_CONST(3.4740000000000003e-5) * CHASTE_MATH::Exp(CHASTE_CONST(0.043909999999999998) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(0.043909999999999998) * var_chaste_interface__membrane__V)) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(24.640530000000002) + CHASTE_CONST(0.311) * var_chaste_interface__membrane__V - CHASTE_CONST(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) ? (CHASTE_CONST(0.1212) * CHASTE_MATH::Exp(CHASTE_CONST(0.01052) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(0.01052) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(5.5312920000000005) + CHASTE_CONST(0.13780000000000001) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(0.13780000000000001) * var_chaste_interface__membrane__V))) : (CHASTE_CONST(0.29999999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(2.5349999999999999e-7) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(2.5349999999999999e-7) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.2000000000000002) + CHASTE_CONST(0.10000000000000001) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(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_membrane__i_stim_converted = CHASTE_STIM(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_i_NaCa__dNaCa_1 = CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * var_i_NaCa__km_Ca_o + CHASTE_CONST(1.5) * CHASTE_MATH::Pow(var_i_NaCa__km_Na_o, 3) * var_chaste_interface__Ca_i__Ca_i + CHASTE_MATH::Pow(var_i_NaCa__km_Na_i_1, 3) * (1 + CHASTE_CONST(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_i_K1__g_K1 = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::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 = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::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 = CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mp_extracellular_calcium_concentration_modifier->Calc(mParameters[4], var_chaste_interface__environment__time) + CHASTE_CONST(1.5) * CHASTE_MATH::Pow(mp_extracellular_sodium_concentration_modifier->Calc(mParameters[6], var_chaste_interface__environment__time), 3) * var_chaste_interface__Ca_i__Ca_i + CHASTE_MATH::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_equilibrium_potentials__E_K = var_model_parameters__R * var_model_parameters__T * CHASTE_MATH::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 * CHASTE_MATH::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 * CHASTE_MATH::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 = CHASTE_CONST(1.02) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.23849999999999999) * var_equilibrium_potentials__E_K)); // dimensionless + const double var_i_K1_xK1_gate__beta_xK1 = (CHASTE_CONST(0.49124000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__membrane__V - CHASTE_CONST(0.080320000000000003) * var_equilibrium_potentials__E_K) + CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.061749999999999999) * var_equilibrium_potentials__E_K)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(0.51429999999999998) * var_equilibrium_potentials__E_K - CHASTE_CONST(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_K1__i_K1 = mp_i_K1__i_K1_modifier->Calc((CHASTE_CONST(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 = CHASTE_CAP() * 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_Kr__i_Kr_converted = CHASTE_CAP() * 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_i_Ks__i_Ks_converted = CHASTE_CAP() * var_i_Ks__i_Ks; // uA_per_cm2 + const double var_i_Na__i_Na = mp_i_Na__i_Na_modifier->Calc(CHASTE_MATH::Pow(var_chaste_interface__i_Na_m_gate__m, 3) * (-var_equilibrium_potentials__E_Na + var_chaste_interface__membrane__V) * (CHASTE_CONST(0.20000000000000001) * var_chaste_interface__i_Na_j_gate__j + CHASTE_CONST(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 = CHASTE_CAP() * var_i_Na__i_Na; // uA_per_cm2 + const double var_i_NaCa__i_NaCa = mp_i_NaCa__i_NaCa_modifier->Calc((-CHASTE_CONST(1.5) * CHASTE_MATH::Pow(mp_extracellular_sodium_concentration_modifier->Calc(mParameters[6], var_chaste_interface__environment__time), 3) * var_chaste_interface__Ca_i__Ca_i * CHASTE_MATH::Exp(-CHASTE_CONST(0.65000000000000002) * var_chaste_interface__membrane__V * var_model_parameters__F / (var_model_parameters__R * var_model_parameters__T)) + CHASTE_MATH::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) * CHASTE_MATH::Exp(CHASTE_CONST(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 * CHASTE_MATH::Exp(-CHASTE_CONST(0.65000000000000002) * var_chaste_interface__membrane__V * var_model_parameters__F / (var_model_parameters__R * var_model_parameters__T))) * (1 + CHASTE_CONST(0.44444444444444442) * CHASTE_MATH::Pow(var_i_NaCa__km_Ca_act, 2) / CHASTE_MATH::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 = CHASTE_CAP() * 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) * (CHASTE_CONST(0.20000000000000001) * var_chaste_interface__i_to_1_i2_gate__i2 + CHASTE_CONST(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 = CHASTE_CAP() * 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__gamma_Cao = CHASTE_CONST(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_max = CHASTE_MATH::Pow(var_model_parameters__F, 2) * CHASTE_MATH::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 * CHASTE_MATH::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 + CHASTE_MATH::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_i_Ca_L__i_Ca_L_converted = CHASTE_CAP() * 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 + CHASTE_MATH::Exp(-CHASTE_CONST(4.375) - 25 * var_i_Ca_L__i_Ca_L)), var_chaste_interface__environment__time); // millisecond + const double var_q_rel__vg = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(2.6000000000000001) + CHASTE_CONST(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 diff --git a/chaste_codegen/data/tests/chaste_reference_models/Normal/non_dynamic_aslanidi_Purkinje_model_2009.hpp b/chaste_codegen/data/tests/chaste_reference_models/Normal/non_dynamic_aslanidi_Purkinje_model_2009.hpp index e1ee4ad73..df35ea4c3 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/Normal/non_dynamic_aslanidi_Purkinje_model_2009.hpp +++ b/chaste_codegen/data/tests/chaste_reference_models/Normal/non_dynamic_aslanidi_Purkinje_model_2009.hpp @@ -18,6 +18,9 @@ #include "AbstractCardiacCellWithModifiers.hpp" #include "AbstractModifier.hpp" #include "AbstractStimulusFunction.hpp" +#if USING_DEVICE_COMPILER +#include "StimulusEvaluatorCuda.hpp" +#endif #include "AbstractCardiacCell.hpp" class Cellaslanidi_Purkinje_model_2009FromCellML : public AbstractCardiacCellWithModifiers diff --git a/chaste_codegen/data/tests/chaste_reference_models/Normal/output_class.c b/chaste_codegen/data/tests/chaste_reference_models/Normal/output_class.c index 18c293165..3c61e82b3 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/Normal/output_class.c +++ b/chaste_codegen/data/tests/chaste_reference_models/Normal/output_class.c @@ -21,6 +21,8 @@ #include "HeartConfig.hpp" #include "IsNan.hpp" #include "MathsCustomFunctions.hpp" +#include "ChasteMathDeviceNamespaces.hpp" +#include "ChasteCpuMacros.hpp" #include "ModelFactory.hpp" @@ -35,7 +37,7 @@ bool Chaste_CG::registered = ModelFactory::Register("output_class", "Normal", (M 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_amplitude_converted = -CHASTE_CONST(0.0030000000000000001) * CHASTE_CAP() / 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 @@ -67,26 +69,26 @@ bool Chaste_CG::registered = ModelFactory::Register("output_class", "Normal", (M // 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[0] = CHASTE_CONST(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[2] = CHASTE_CONST(0.00050000000000000001); // (var_calcium_release__K_m_Ca_cyt) [millimolar] + this->mParameters[3] = CHASTE_CONST(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[9] = CHASTE_CONST(0.10000000000000001); // (var_L_type_Ca_channel__P_Ca_L) [nanoA_per_millimolar] + this->mParameters[10] = CHASTE_CONST(9.5000000000000005e-5); // (var_membrane__Cm) [microF] + this->mParameters[11] = CHASTE_CONST(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] + this->mParameters[14] = CHASTE_CONST(0.5); // (var_time_independent_potassium_current__g_K1) [microS] + this->mParameters[15] = CHASTE_CONST(0.0020999999999999999); // (var_rapid_delayed_rectifier_potassium_current__g_Kr1) [microS] + this->mParameters[16] = CHASTE_CONST(0.0012999999999999999); // (var_rapid_delayed_rectifier_potassium_current__g_Kr2) [microS] + this->mParameters[17] = CHASTE_CONST(0.0025999999999999999); // (var_slow_delayed_rectifier_potassium_current__g_Ks) [microS] + this->mParameters[18] = CHASTE_CONST(0.00050000000000000001); // (var_sodium_calcium_exchanger__k_NaCa) [nanoA] + this->mParameters[19] = CHASTE_CONST(0.0050000000000000001); // (var_transient_outward_current__g_to) [microS] } Chaste_CG::~Chaste_CG() @@ -140,7 +142,7 @@ bool Chaste_CG::registered = ModelFactory::Register("output_class", "Normal", (M // 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -174,52 +176,52 @@ bool Chaste_CG::registered = ModelFactory::Register("output_class", "Normal", (M // 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_L_type_Ca_channel__P_CaK = CHASTE_CONST(0.002); // dimensionless + const double var_L_type_Ca_channel__P_CaNa = CHASTE_CONST(0.01); // dimensionless + const double var_calcium_background_current__g_bca = CHASTE_CONST(0.00025000000000000001); // microS + const double var_membrane__F = CHASTE_CONST(96485.341499999995); // coulomb_per_mole + const double var_membrane__R = CHASTE_CONST(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_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 * CHASTE_MATH::Exp(100 * var_membrane__F / (var_membrane__R * var_membrane__T)) - mParameters[6] * CHASTE_MATH::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 - CHASTE_MATH::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 * CHASTE_MATH::Exp(100 * var_membrane__F / (var_membrane__R * var_membrane__T)) - mParameters[6] * CHASTE_MATH::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 - CHASTE_MATH::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 * CHASTE_MATH::Exp(50 * var_membrane__F / (var_membrane__R * var_membrane__T)) - mParameters[7] * CHASTE_MATH::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 - CHASTE_MATH::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 * CHASTE_MATH::Exp(50 * var_membrane__F / (var_membrane__R * var_membrane__T)) - mParameters[7] * CHASTE_MATH::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 - CHASTE_MATH::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 * CHASTE_MATH::Exp(50 * var_membrane__F / (var_membrane__R * var_membrane__T)) - mParameters[8] * CHASTE_MATH::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 - CHASTE_MATH::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 * CHASTE_MATH::Exp(50 * var_membrane__F / (var_membrane__R * var_membrane__T)) - mParameters[8] * CHASTE_MATH::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 - CHASTE_MATH::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 = CHASTE_CONST(0.0040000000000000001); // microS + const double var_reversal_potentials__E_Ca = CHASTE_CONST(0.5) * var_membrane__R * var_membrane__T * CHASTE_MATH::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_reversal_potentials__E_K = var_membrane__R * var_membrane__T * CHASTE_MATH::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 + CHASTE_MATH::Exp(CHASTE_CONST(0.4017857142857143) + CHASTE_CONST(0.044642857142857144) * var_chaste_interface__membrane__V)); // nanoA + const double var_rapid_delayed_rectifier_potassium_current__i_Kr_converted = CHASTE_CONST(0.001) * CHASTE_CAP() * 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 * CHASTE_MATH::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 + CHASTE_MATH::Exp(-CHASTE_CONST(6.5) - CHASTE_CONST(0.125) * var_chaste_interface__membrane__V)); // nanoA + const double var_reversal_potentials__E_mh = var_membrane__R * var_membrane__T * CHASTE_MATH::Log((mParameters[8] + CHASTE_CONST(0.12) * mParameters[7]) / (var_chaste_interface__intracellular_sodium_concentration__Na_i + CHASTE_CONST(0.12) * var_chaste_interface__intracellular_potassium_concentration__K_i)) / var_membrane__F; // millivolt + const double var_fast_sodium_current__i_Na = CHASTE_MATH::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 = CHASTE_CONST(0.001) * CHASTE_CAP() * var_fast_sodium_current__i_Na / mParameters[10]; // uA_per_cm2 + const double var_reversal_potentials__P_kna = CHASTE_CONST(0.029999999999999999); // dimensionless + const double var_reversal_potentials__E_Ks = var_membrane__R * var_membrane__T * CHASTE_MATH::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 = CHASTE_MATH::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 = CHASTE_CONST(0.001) * CHASTE_CAP() * var_slow_delayed_rectifier_potassium_current__i_Ks / mParameters[10]; // uA_per_cm2 + const double var_sodium_background_current__g_bna = CHASTE_CONST(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__FRiNaCa = CHASTE_CONST(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__gamma = CHASTE_CONST(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_cyt = (1 - var_sodium_calcium_exchanger__FRiNaCa) * (CHASTE_MATH::Pow(var_chaste_interface__intracellular_sodium_concentration__Na_i, var_sodium_calcium_exchanger__n_NaCa) * mParameters[6] * CHASTE_MATH::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)) - CHASTE_MATH::Pow(mParameters[8], var_sodium_calcium_exchanger__n_NaCa) * var_chaste_interface__intracellular_calcium_concentration__Ca_i * CHASTE_MATH::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 + CHASTE_CONST(144.92753623188406) * var_chaste_interface__intracellular_calcium_concentration__Ca_i) * (1 + (CHASTE_MATH::Pow(mParameters[8], var_sodium_calcium_exchanger__n_NaCa) * var_chaste_interface__intracellular_calcium_concentration__Ca_i + CHASTE_MATH::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 = (CHASTE_MATH::Pow(var_chaste_interface__intracellular_sodium_concentration__Na_i, var_sodium_calcium_exchanger__n_NaCa) * mParameters[6] * CHASTE_MATH::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)) - CHASTE_MATH::Pow(mParameters[8], var_sodium_calcium_exchanger__n_NaCa) * var_chaste_interface__intracellular_calcium_concentration__Ca_ds * CHASTE_MATH::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 + CHASTE_CONST(144.92753623188406) * var_chaste_interface__intracellular_calcium_concentration__Ca_ds) * (1 + (CHASTE_MATH::Pow(mParameters[8], var_sodium_calcium_exchanger__n_NaCa) * var_chaste_interface__intracellular_calcium_concentration__Ca_ds + CHASTE_MATH::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_max = CHASTE_CONST(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_time_independent_potassium_current__i_K1 = (-var_reversal_potentials__E_K + var_chaste_interface__membrane__V) * mParameters[7] * mParameters[14] / ((1 + CHASTE_MATH::Exp(CHASTE_CONST(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 = CHASTE_CONST(0.001) * CHASTE_CAP() * 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 var_transient_outward_current__i_to_converted = CHASTE_CONST(0.001) * CHASTE_CAP() * 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] + CHASTE_CONST(0.001) * CHASTE_CAP() * var_L_type_Ca_channel__i_Ca_L_Ca_cyt + CHASTE_CONST(0.001) * CHASTE_CAP() * var_L_type_Ca_channel__i_Ca_L_Ca_ds + CHASTE_CONST(0.001) * CHASTE_CAP() * var_L_type_Ca_channel__i_Ca_L_K_cyt + CHASTE_CONST(0.001) * CHASTE_CAP() * var_L_type_Ca_channel__i_Ca_L_K_ds + CHASTE_CONST(0.001) * CHASTE_CAP() * var_L_type_Ca_channel__i_Ca_L_Na_cyt + CHASTE_CONST(0.001) * CHASTE_CAP() * var_L_type_Ca_channel__i_Ca_L_Na_ds + CHASTE_CONST(0.001) * CHASTE_CAP() * var_calcium_background_current__i_b_Ca + CHASTE_CONST(0.001) * CHASTE_CAP() * var_persistent_sodium_current__i_p_Na + CHASTE_CONST(0.001) * CHASTE_CAP() * var_sodium_background_current__i_b_Na + CHASTE_CONST(0.001) * CHASTE_CAP() * var_sodium_calcium_exchanger__i_NaCa_cyt + CHASTE_CONST(0.001) * CHASTE_CAP() * var_sodium_calcium_exchanger__i_NaCa_ds + CHASTE_CONST(0.001) * CHASTE_CAP() * 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)); @@ -230,7 +232,7 @@ bool Chaste_CG::registered = ModelFactory::Register("output_class", "Normal", (M { // Inputs: // Time units: millisecond - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -279,148 +281,148 @@ bool Chaste_CG::registered = ModelFactory::Register("output_class", "Normal", (M 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__Km_f2ds = CHASTE_CONST(0.001); // millimolar + const double var_L_type_Ca_channel__P_CaK = CHASTE_CONST(0.002); // dimensionless + const double var_L_type_Ca_channel__P_CaNa = CHASTE_CONST(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_L_type_Ca_channel_f_gate__delta_f = CHASTE_CONST(0.0001); // millivolt + const double var_L_type_Ca_channel_f_gate__speed_f = CHASTE_CONST(0.29999999999999999); // dimensionless + const double var_calcium_background_current__g_bca = CHASTE_CONST(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_fast_sodium_current_m_gate__delta_m = CHASTE_CONST(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 d_dt_chaste_interface_var_L_type_Ca_channel_f2ds_gate__f2ds = CHASTE_CONST(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 d_dt_chaste_interface_var_L_type_Ca_channel_f2_gate__f2 = CHASTE_CONST(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_release__ActRate = 500 * CHASTE_MATH::Pow(var_calcium_release__RegBindSite, 2); // per_second + const double var_calcium_release__InactRate = 60 + 500 * CHASTE_MATH::Pow(var_calcium_release__RegBindSite, 2); // per_second + const double var_calcium_release__i_rel = (CHASTE_MATH::Pow(var_chaste_interface__calcium_release__ActFrac, 2) * mParameters[1] / CHASTE_MATH::Pow((CHASTE_CONST(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__Calmod = CHASTE_CONST(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__Trop = CHASTE_CONST(0.050000000000000003); // millimolar + const double var_intracellular_calcium_concentration__V_ds_ratio = CHASTE_CONST(0.10000000000000001); // dimensionless + const double var_intracellular_calcium_concentration__V_e_ratio = CHASTE_CONST(0.40000000000000002); // dimensionless + const double var_intracellular_calcium_concentration__V_rel_ratio = CHASTE_CONST(0.10000000000000001); // dimensionless + const double var_intracellular_calcium_concentration__V_up_ratio = CHASTE_CONST(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 d_dt_chaste_interface_var_intracellular_calcium_concentration__Ca_rel = CHASTE_CONST(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 d_dt_chaste_interface_var_intracellular_calcium_concentration__Ca_Calmod = CHASTE_CONST(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 d_dt_chaste_interface_var_intracellular_calcium_concentration__Ca_Trop = CHASTE_CONST(0.001) * var_intracellular_calcium_concentration__Ca_Trop_orig_deriv; // millimolar / millisecond + const double var_intracellular_calcium_concentration__length = CHASTE_CONST(0.073999999999999996); // micrometre + const double var_intracellular_calcium_concentration__radius = CHASTE_CONST(0.012); // micrometre + const double var_intracellular_calcium_concentration__V_Cell = CHASTE_CONST(3.1415926540000001) * CHASTE_MATH::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__F = CHASTE_CONST(96485.341499999995); // coulomb_per_mole + const double var_membrane__R = CHASTE_CONST(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_Ca_cyt = 4 * (1 - var_L_type_Ca_channel__FrICa) * (-50 + var_chaste_interface__membrane__V) * (var_chaste_interface__intracellular_calcium_concentration__Ca_i * CHASTE_MATH::Exp(100 * var_membrane__F / (var_membrane__R * var_membrane__T)) - mParameters[6] * CHASTE_MATH::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 - CHASTE_MATH::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 * CHASTE_MATH::Exp(100 * var_membrane__F / (var_membrane__R * var_membrane__T)) - mParameters[6] * CHASTE_MATH::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 - CHASTE_MATH::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 * CHASTE_MATH::Exp(50 * var_membrane__F / (var_membrane__R * var_membrane__T)) - mParameters[7] * CHASTE_MATH::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 - CHASTE_MATH::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 * CHASTE_MATH::Exp(50 * var_membrane__F / (var_membrane__R * var_membrane__T)) - mParameters[7] * CHASTE_MATH::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 - CHASTE_MATH::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 * CHASTE_MATH::Exp(50 * var_membrane__F / (var_membrane__R * var_membrane__T)) - mParameters[8] * CHASTE_MATH::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 - CHASTE_MATH::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 * CHASTE_MATH::Exp(50 * var_membrane__F / (var_membrane__R * var_membrane__T)) - mParameters[8] * CHASTE_MATH::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 - CHASTE_MATH::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__alpha_d = ((CHASTE_MATH::Abs(var_L_type_Ca_channel_d_gate__E0_d) < CHASTE_CONST(0.0001)) ? (120) : (30 * var_L_type_Ca_channel_d_gate__E0_d / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(0.25) * var_L_type_Ca_channel_d_gate__E0_d)))); // per_second + const double var_L_type_Ca_channel_d_gate__beta_d = ((CHASTE_MATH::Abs(var_L_type_Ca_channel_d_gate__E0_d) < CHASTE_CONST(0.0001)) ? (120) : (12 * var_L_type_Ca_channel_d_gate__E0_d / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(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 d_dt_chaste_interface_var_L_type_Ca_channel_d_gate__d = CHASTE_CONST(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__alpha_f = ((var_L_type_Ca_channel_f_gate__delta_f > CHASTE_MATH::Abs(var_L_type_Ca_channel_f_gate__E0_f)) ? (25) : (CHASTE_CONST(6.25) * var_L_type_Ca_channel_f_gate__E0_f / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(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 + CHASTE_MATH::Exp(-CHASTE_CONST(8.5) - CHASTE_CONST(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 d_dt_chaste_interface_var_L_type_Ca_channel_f_gate__f = CHASTE_CONST(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 d_dt_chaste_interface_var_calcium_release__ActFrac = CHASTE_CONST(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 d_dt_chaste_interface_var_calcium_release__ProdFrac = CHASTE_CONST(0.001) * var_calcium_release__ProdFrac_orig_deriv; // 1 / millisecond + const double var_fast_sodium_current_h_gate__alpha_h = 20 * CHASTE_MATH::Exp(-CHASTE_CONST(9.375) + CHASTE_CONST(0.125) * mParameters[13] - CHASTE_CONST(0.125) * var_chaste_interface__membrane__V); // per_second + const double var_fast_sodium_current_h_gate__beta_h = 2000 / (1 + 320 * CHASTE_MATH::Exp(-CHASTE_CONST(7.5) + CHASTE_CONST(0.10000000000000001) * mParameters[13] - CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V)); // per_second + const double var_fast_sodium_current_h_gate__h_inf = CHASTE_CONST(0.01) * mParameters[12] + (1 - CHASTE_CONST(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 d_dt_chaste_interface_var_fast_sodium_current_h_gate__h = CHASTE_CONST(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__alpha_m = ((var_fast_sodium_current_m_gate__delta_m > CHASTE_MATH::Abs(var_fast_sodium_current_m_gate__E0_m)) ? (2000) : (200 * var_fast_sodium_current_m_gate__E0_m / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(0.10000000000000001) * var_fast_sodium_current_m_gate__E0_m)))); // per_second + const double var_fast_sodium_current_m_gate__beta_m = 8000 * CHASTE_MATH::Exp(-CHASTE_CONST(3.6960000000000002) - CHASTE_CONST(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 d_dt_chaste_interface_var_fast_sodium_current_m_gate__m = CHASTE_CONST(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 - CHASTE_CONST(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 = CHASTE_CONST(0.001) * var_intracellular_calcium_concentration__Ca_ds_orig_deriv; // millimolar / millisecond + const double var_persistent_sodium_current__g_pna = CHASTE_CONST(0.0040000000000000001); // microS + const double var_rapid_delayed_rectifier_potassium_current_xr1_gate__alpha_xr1 = 50 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(0.55555555555555558) - CHASTE_CONST(0.1111111111111111) * var_chaste_interface__membrane__V)); // per_second + const double var_rapid_delayed_rectifier_potassium_current_xr1_gate__beta_xr1 = CHASTE_CONST(0.050000000000000003) * CHASTE_MATH::Exp(CHASTE_CONST(1.3333333333333333) - CHASTE_CONST(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 d_dt_chaste_interface_var_rapid_delayed_rectifier_potassium_current_xr1_gate__xr1 = CHASTE_CONST(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 + CHASTE_MATH::Exp(CHASTE_CONST(0.55555555555555558) - CHASTE_CONST(0.1111111111111111) * var_chaste_interface__membrane__V)); // per_second + const double var_rapid_delayed_rectifier_potassium_current_xr2_gate__beta_xr2 = CHASTE_CONST(0.40000000000000002) * CHASTE_MATH::Exp(-CHASTE_MATH::Pow((1 + CHASTE_CONST(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 d_dt_chaste_interface_var_rapid_delayed_rectifier_potassium_current_xr2_gate__xr2 = CHASTE_CONST(0.001) * var_rapid_delayed_rectifier_potassium_current_xr2_gate__xr2_orig_deriv; // 1 / millisecond + const double var_reversal_potentials__E_Ca = CHASTE_CONST(0.5) * var_membrane__R * var_membrane__T * CHASTE_MATH::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_reversal_potentials__E_K = var_membrane__R * var_membrane__T * CHASTE_MATH::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 + CHASTE_MATH::Exp(CHASTE_CONST(0.4017857142857143) + CHASTE_CONST(0.044642857142857144) * var_chaste_interface__membrane__V)); // nanoA + const double var_reversal_potentials__E_Na = var_membrane__R * var_membrane__T * CHASTE_MATH::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 + CHASTE_MATH::Exp(-CHASTE_CONST(6.5) - CHASTE_CONST(0.125) * var_chaste_interface__membrane__V)); // nanoA + const double var_reversal_potentials__E_mh = var_membrane__R * var_membrane__T * CHASTE_MATH::Log((mParameters[8] + CHASTE_CONST(0.12) * mParameters[7]) / (var_chaste_interface__intracellular_sodium_concentration__Na_i + CHASTE_CONST(0.12) * var_chaste_interface__intracellular_potassium_concentration__K_i)) / var_membrane__F; // millivolt + const double var_fast_sodium_current__i_Na = CHASTE_MATH::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 = CHASTE_CONST(0.029999999999999999); // dimensionless + const double var_reversal_potentials__E_Ks = var_membrane__R * var_membrane__T * CHASTE_MATH::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 = CHASTE_CONST(0.00029999999999999997); // millimolar + const double var_sarcoplasmic_reticulum_calcium_pump__K_srca = CHASTE_CONST(0.5); // millimolar + const double var_sarcoplasmic_reticulum_calcium_pump__K_xcs = CHASTE_CONST(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__alpha_up = CHASTE_CONST(0.40000000000000002); // millimolar_per_second + const double var_sarcoplasmic_reticulum_calcium_pump__beta_up = CHASTE_CONST(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 d_dt_chaste_interface_var_intracellular_calcium_concentration__Ca_up = CHASTE_CONST(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 + CHASTE_MATH::Exp(CHASTE_CONST(4.4444444444444446) - CHASTE_CONST(0.1111111111111111) * var_chaste_interface__membrane__V)); // per_second + const double var_slow_delayed_rectifier_potassium_current_xs_gate__beta_xs = CHASTE_MATH::Exp(-CHASTE_CONST(0.022222222222222223) * var_chaste_interface__membrane__V); // per_second + const double var_slow_delayed_rectifier_potassium_current__i_Ks = CHASTE_MATH::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 d_dt_chaste_interface_var_slow_delayed_rectifier_potassium_current_xs_gate__xs = CHASTE_CONST(0.001) * var_slow_delayed_rectifier_potassium_current_xs_gate__xs_orig_deriv; // 1 / millisecond + const double var_sodium_background_current__g_bna = CHASTE_CONST(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__FRiNaCa = CHASTE_CONST(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__gamma = CHASTE_CONST(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_calcium_exchanger__i_NaCa_cyt = (1 - var_sodium_calcium_exchanger__FRiNaCa) * (CHASTE_MATH::Pow(var_chaste_interface__intracellular_sodium_concentration__Na_i, var_sodium_calcium_exchanger__n_NaCa) * mParameters[6] * CHASTE_MATH::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)) - CHASTE_MATH::Pow(mParameters[8], var_sodium_calcium_exchanger__n_NaCa) * var_chaste_interface__intracellular_calcium_concentration__Ca_i * CHASTE_MATH::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 + CHASTE_CONST(144.92753623188406) * var_chaste_interface__intracellular_calcium_concentration__Ca_i) * (1 + (CHASTE_MATH::Pow(mParameters[8], var_sodium_calcium_exchanger__n_NaCa) * var_chaste_interface__intracellular_calcium_concentration__Ca_i + CHASTE_MATH::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 = (CHASTE_MATH::Pow(var_chaste_interface__intracellular_sodium_concentration__Na_i, var_sodium_calcium_exchanger__n_NaCa) * mParameters[6] * CHASTE_MATH::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)) - CHASTE_MATH::Pow(mParameters[8], var_sodium_calcium_exchanger__n_NaCa) * var_chaste_interface__intracellular_calcium_concentration__Ca_ds * CHASTE_MATH::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 + CHASTE_CONST(144.92753623188406) * var_chaste_interface__intracellular_calcium_concentration__Ca_ds) * (1 + (CHASTE_MATH::Pow(mParameters[8], var_sodium_calcium_exchanger__n_NaCa) * var_chaste_interface__intracellular_calcium_concentration__Ca_ds + CHASTE_MATH::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 - CHASTE_CONST(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 = CHASTE_CONST(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_max = CHASTE_CONST(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 d_dt_chaste_interface_var_intracellular_sodium_concentration__Na_i = CHASTE_CONST(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_time_independent_potassium_current__i_K1 = (-var_reversal_potentials__E_K + var_chaste_interface__membrane__V) * mParameters[7] * mParameters[14] / ((1 + CHASTE_MATH::Exp(CHASTE_CONST(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_r_gate__r_orig_deriv = 333 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.80000000000000004) - CHASTE_CONST(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 = CHASTE_CONST(0.001) * var_transient_outward_current_r_gate__r_orig_deriv; // 1 / millisecond + const double var_transient_outward_current_s_gate__alpha_s = CHASTE_CONST(0.033000000000000002) * CHASTE_MATH::Exp(-CHASTE_CONST(0.058823529411764705) * var_chaste_interface__membrane__V); // per_second + const double var_transient_outward_current_s_gate__beta_s = 33 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.25) - CHASTE_CONST(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 d_dt_chaste_interface_var_intracellular_potassium_concentration__K_i = CHASTE_CONST(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 + const double d_dt_chaste_interface_var_transient_outward_current_s_gate__s = CHASTE_CONST(0.001) * var_transient_outward_current_s_gate__s_orig_deriv; // 1 / millisecond if (mSetVoltageDerivativeToZero) { @@ -428,10 +430,10 @@ bool Chaste_CG::registered = ModelFactory::Register("output_class", "Normal", (M } 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__i_Stim_converted = CHASTE_STIM(var_chaste_interface__environment__time_converted); // uA_per_cm2 + const double var_membrane__i_Stim = 1000 * mParameters[10] * var_membrane__i_Stim_converted / CHASTE_CAP(); // 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 + d_dt_chaste_interface_var_membrane__V = CHASTE_CONST(0.001) * var_membrane__V_orig_deriv; // millivolt / millisecond } rDY[0] = d_dt_chaste_interface_var_membrane__V; @@ -462,7 +464,7 @@ bool Chaste_CG::registered = ModelFactory::Register("output_class", "Normal", (M { // Inputs: // Time units: millisecond - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -501,53 +503,53 @@ bool Chaste_CG::registered = ModelFactory::Register("output_class", "Normal", (M // 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_L_type_Ca_channel__P_CaK = CHASTE_CONST(0.002); // dimensionless + const double var_L_type_Ca_channel__P_CaNa = CHASTE_CONST(0.01); // dimensionless + const double var_L_type_Ca_channel_f_gate__delta_f = CHASTE_CONST(0.0001); // millivolt + const double var_calcium_release__i_rel = (CHASTE_MATH::Pow(var_chaste_interface__calcium_release__ActFrac, 2) * mParameters[1] / CHASTE_MATH::Pow((CHASTE_CONST(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 = CHASTE_CONST(96485.341499999995); // coulomb_per_mole + const double var_membrane__R = CHASTE_CONST(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_Ca_cyt = 4 * (1 - var_L_type_Ca_channel__FrICa) * (-50 + var_chaste_interface__membrane__V) * (var_chaste_interface__intracellular_calcium_concentration__Ca_i * CHASTE_MATH::Exp(100 * var_membrane__F / (var_membrane__R * var_membrane__T)) - mParameters[6] * CHASTE_MATH::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 - CHASTE_MATH::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 * CHASTE_MATH::Exp(100 * var_membrane__F / (var_membrane__R * var_membrane__T)) - mParameters[6] * CHASTE_MATH::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 - CHASTE_MATH::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 * CHASTE_MATH::Exp(50 * var_membrane__F / (var_membrane__R * var_membrane__T)) - mParameters[7] * CHASTE_MATH::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 - CHASTE_MATH::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 * CHASTE_MATH::Exp(50 * var_membrane__F / (var_membrane__R * var_membrane__T)) - mParameters[7] * CHASTE_MATH::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 - CHASTE_MATH::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 * CHASTE_MATH::Exp(50 * var_membrane__F / (var_membrane__R * var_membrane__T)) - mParameters[8] * CHASTE_MATH::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 - CHASTE_MATH::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 * CHASTE_MATH::Exp(50 * var_membrane__F / (var_membrane__R * var_membrane__T)) - mParameters[8] * CHASTE_MATH::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 - CHASTE_MATH::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__i_Ca_L_converted = CHASTE_CONST(0.001) * CHASTE_CAP() * 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__alpha_f = ((var_L_type_Ca_channel_f_gate__delta_f > CHASTE_MATH::Abs(var_L_type_Ca_channel_f_gate__E0_f)) ? (25) : (CHASTE_CONST(6.25) * var_L_type_Ca_channel_f_gate__E0_f / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(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 + CHASTE_MATH::Exp(-CHASTE_CONST(8.5) - CHASTE_CONST(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__alpha_h = 20 * CHASTE_MATH::Exp(-CHASTE_CONST(9.375) + CHASTE_CONST(0.125) * mParameters[13] - CHASTE_CONST(0.125) * var_chaste_interface__membrane__V); // per_second + const double var_fast_sodium_current_h_gate__beta_h = 2000 / (1 + 320 * CHASTE_MATH::Exp(-CHASTE_CONST(7.5) + CHASTE_CONST(0.10000000000000001) * mParameters[13] - CHASTE_CONST(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_membrane__i_Stim_converted = CHASTE_STIM(var_chaste_interface__environment__time_converted); // uA_per_cm2 + const double var_reversal_potentials__E_K = var_membrane__R * var_membrane__T * CHASTE_MATH::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 + CHASTE_MATH::Exp(CHASTE_CONST(0.4017857142857143) + CHASTE_CONST(0.044642857142857144) * var_chaste_interface__membrane__V)); // nanoA + const double var_rapid_delayed_rectifier_potassium_current__i_Kr_converted = CHASTE_CONST(0.001) * CHASTE_CAP() * 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 * CHASTE_MATH::Log((mParameters[8] + CHASTE_CONST(0.12) * mParameters[7]) / (var_chaste_interface__intracellular_sodium_concentration__Na_i + CHASTE_CONST(0.12) * var_chaste_interface__intracellular_potassium_concentration__K_i)) / var_membrane__F; // millivolt + const double var_fast_sodium_current__i_Na = CHASTE_MATH::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 = CHASTE_CONST(0.001) * CHASTE_CAP() * var_fast_sodium_current__i_Na / mParameters[10]; // uA_per_cm2 + const double var_reversal_potentials__P_kna = CHASTE_CONST(0.029999999999999999); // dimensionless + const double var_reversal_potentials__E_Ks = var_membrane__R * var_membrane__T * CHASTE_MATH::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 = CHASTE_MATH::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 = CHASTE_CONST(0.001) * CHASTE_CAP() * var_slow_delayed_rectifier_potassium_current__i_Ks / mParameters[10]; // uA_per_cm2 + const double var_sodium_calcium_exchanger__FRiNaCa = CHASTE_CONST(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__gamma = CHASTE_CONST(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_cyt = (1 - var_sodium_calcium_exchanger__FRiNaCa) * (CHASTE_MATH::Pow(var_chaste_interface__intracellular_sodium_concentration__Na_i, var_sodium_calcium_exchanger__n_NaCa) * mParameters[6] * CHASTE_MATH::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)) - CHASTE_MATH::Pow(mParameters[8], var_sodium_calcium_exchanger__n_NaCa) * var_chaste_interface__intracellular_calcium_concentration__Ca_i * CHASTE_MATH::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 + CHASTE_CONST(144.92753623188406) * var_chaste_interface__intracellular_calcium_concentration__Ca_i) * (1 + (CHASTE_MATH::Pow(mParameters[8], var_sodium_calcium_exchanger__n_NaCa) * var_chaste_interface__intracellular_calcium_concentration__Ca_i + CHASTE_MATH::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 = (CHASTE_MATH::Pow(var_chaste_interface__intracellular_sodium_concentration__Na_i, var_sodium_calcium_exchanger__n_NaCa) * mParameters[6] * CHASTE_MATH::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)) - CHASTE_MATH::Pow(mParameters[8], var_sodium_calcium_exchanger__n_NaCa) * var_chaste_interface__intracellular_calcium_concentration__Ca_ds * CHASTE_MATH::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 + CHASTE_CONST(144.92753623188406) * var_chaste_interface__intracellular_calcium_concentration__Ca_ds) * (1 + (CHASTE_MATH::Pow(mParameters[8], var_sodium_calcium_exchanger__n_NaCa) * var_chaste_interface__intracellular_calcium_concentration__Ca_ds + CHASTE_MATH::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_sodium_calcium_exchanger__i_NaCa_converted = CHASTE_CONST(0.001) * CHASTE_CAP() * 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_time_independent_potassium_current__i_K1 = (-var_reversal_potentials__E_K + var_chaste_interface__membrane__V) * mParameters[7] * mParameters[14] / ((1 + CHASTE_MATH::Exp(CHASTE_CONST(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 = CHASTE_CONST(0.001) * CHASTE_CAP() * 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_transient_outward_current__i_to_converted = CHASTE_CONST(0.001) * CHASTE_CAP() * var_transient_outward_current__i_to / mParameters[10]; // uA_per_cm2 std::vector dqs(12); dqs[0] = var_calcium_release__i_rel; diff --git a/chaste_codegen/data/tests/chaste_reference_models/Normal/output_class.h b/chaste_codegen/data/tests/chaste_reference_models/Normal/output_class.h index ddfabca97..cee48e00d 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/Normal/output_class.h +++ b/chaste_codegen/data/tests/chaste_reference_models/Normal/output_class.h @@ -17,6 +17,9 @@ #include #include "AbstractDynamicallyLoadableEntity.hpp" #include "AbstractStimulusFunction.hpp" +#if USING_DEVICE_COMPILER +#include "StimulusEvaluatorCuda.hpp" +#endif #include "AbstractCardiacCell.hpp" class Chaste_CG : public AbstractCardiacCell, public AbstractDynamicallyLoadableEntity diff --git a/chaste_codegen/data/tests/chaste_reference_models/Normal/test_V_not_state_derived_quant.cpp b/chaste_codegen/data/tests/chaste_reference_models/Normal/test_V_not_state_derived_quant.cpp index bef3b7f29..fe5a4f53f 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/Normal/test_V_not_state_derived_quant.cpp +++ b/chaste_codegen/data/tests/chaste_reference_models/Normal/test_V_not_state_derived_quant.cpp @@ -21,6 +21,8 @@ #include "HeartConfig.hpp" #include "IsNan.hpp" #include "MathsCustomFunctions.hpp" +#include "ChasteMathDeviceNamespaces.hpp" +#include "ChasteCpuMacros.hpp" @@ -102,7 +104,7 @@ // 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 + const double d_dt_chaste_interface_var_membrane__V1 = CHASTE_CONST(0.001) * var_membrane__V1_orig_deriv; // volt / millisecond if (mSetVoltageDerivativeToZero) { @@ -121,7 +123,7 @@ // Time units: millisecond // Mathematics - const double var_membrane__time = 0.001 * var_chaste_interface__membrane__time_converted; // second + const double var_membrane__time = CHASTE_CONST(0.001) * var_chaste_interface__membrane__time_converted; // second const double var_membrane__V_converted = 2000 * var_membrane__time; // millivolt std::vector dqs(2); diff --git a/chaste_codegen/data/tests/chaste_reference_models/Normal/test_V_not_state_derived_quant.hpp b/chaste_codegen/data/tests/chaste_reference_models/Normal/test_V_not_state_derived_quant.hpp index 02b23f2f9..064be890b 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/Normal/test_V_not_state_derived_quant.hpp +++ b/chaste_codegen/data/tests/chaste_reference_models/Normal/test_V_not_state_derived_quant.hpp @@ -16,6 +16,9 @@ #include "ChasteSerialization.hpp" #include #include "AbstractStimulusFunction.hpp" +#if USING_DEVICE_COMPILER +#include "StimulusEvaluatorCuda.hpp" +#endif #include "AbstractCardiacCell.hpp" class Celltest_V_not_state_derived_quantFromCellML : public AbstractCardiacCell diff --git a/chaste_codegen/data/tests/chaste_reference_models/Normal/test_V_not_state_mparam.cpp b/chaste_codegen/data/tests/chaste_reference_models/Normal/test_V_not_state_mparam.cpp index 53e8c534f..85a8f2f2a 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/Normal/test_V_not_state_mparam.cpp +++ b/chaste_codegen/data/tests/chaste_reference_models/Normal/test_V_not_state_mparam.cpp @@ -21,6 +21,8 @@ #include "HeartConfig.hpp" #include "IsNan.hpp" #include "MathsCustomFunctions.hpp" +#include "ChasteMathDeviceNamespaces.hpp" +#include "ChasteCpuMacros.hpp" @@ -102,7 +104,7 @@ // 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 + const double d_dt_chaste_interface_var_membrane__V1 = CHASTE_CONST(0.001) * var_membrane__V1_orig_deriv; // volt / millisecond if (mSetVoltageDerivativeToZero) { diff --git a/chaste_codegen/data/tests/chaste_reference_models/Normal/test_V_not_state_mparam.hpp b/chaste_codegen/data/tests/chaste_reference_models/Normal/test_V_not_state_mparam.hpp index cf084a0d9..660be00e1 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/Normal/test_V_not_state_mparam.hpp +++ b/chaste_codegen/data/tests/chaste_reference_models/Normal/test_V_not_state_mparam.hpp @@ -16,6 +16,9 @@ #include "ChasteSerialization.hpp" #include #include "AbstractStimulusFunction.hpp" +#if USING_DEVICE_COMPILER +#include "StimulusEvaluatorCuda.hpp" +#endif #include "AbstractCardiacCell.hpp" class Celltest_V_not_state_mparamFromCellML : public AbstractCardiacCell diff --git a/chaste_codegen/data/tests/chaste_reference_models/Opt/aslanidi_Purkinje_model_2009Opt.cpp b/chaste_codegen/data/tests/chaste_reference_models/Opt/aslanidi_Purkinje_model_2009Opt.cpp new file mode 100644 index 000000000..f5dcdcf79 --- /dev/null +++ b/chaste_codegen/data/tests/chaste_reference_models/Opt/aslanidi_Purkinje_model_2009Opt.cpp @@ -0,0 +1,1430 @@ +//! @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 "ChasteMathDeviceNamespaces.hpp" +#include "ChasteCpuMacros.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 * CHASTE_CAP(); // 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] = CHASTE_CONST(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] = CHASTE_CONST(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] = CHASTE_CONST(1.8); // (var_model_parameters__Ca_o) [millimolar] + this->mParameters[5] = CHASTE_CONST(5.4000000000000004); // (var_model_parameters__K_o) [millimolar] + this->mParameters[6] = 140; // (var_model_parameters__Na_o) [millimolar] + this->mParameters[7] = CHASTE_CONST(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] = CHASTE_CONST(0.25); // (var_i_K1__g_K1_max) [milliS_per_microF] + this->mParameters[12] = CHASTE_CONST(0.040008488000000002); // (var_i_Kr__g_Kr_max) [milliS_per_microF] + this->mParameters[13] = CHASTE_CONST(0.052581329000000003); // (var_i_Ks__g_Ks_max) [milliS_per_microF] + this->mParameters[14] = CHASTE_CONST(4.5); // (var_i_NaCa__i_NaCa_max) [microA_per_microF] + this->mParameters[15] = CHASTE_CONST(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 ? CHASTE_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 = CHASTE_CONST(26.712338705498265) * CHASTE_MATH::Log(mParameters[5] / var_chaste_interface__intracellular_ion_concentrations__K_i); // millivolt + const double var_equilibrium_potentials__E_Na = CHASTE_CONST(26.712338705498265) * CHASTE_MATH::Log(mParameters[6] / var_chaste_interface__intracellular_ion_concentrations__Na_i); // millivolt + const double var_membrane__i_tot = CHASTE_CONST(0.0077250000000000001) * var_chaste_interface__membrane__V + CHASTE_CONST(0.0060102762087371094) * CHASTE_MATH::Log(100 / var_chaste_interface__intracellular_ion_concentrations__Cl_i) - CHASTE_CONST(0.0025000000000000001) * var_equilibrium_potentials__E_Na - CHASTE_CONST(0.0050000000000000001) * var_equilibrium_potentials__E_K + (CHASTE_CONST(0.0040000000000000001) + CHASTE_CONST(0.4389381125701739) * CHASTE_MATH::Sqrt(mParameters[5]) * mParameters[11] / ((1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.23849999999999999) * var_equilibrium_potentials__E_K)) * (CHASTE_CONST(1.02) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.23849999999999999) * var_equilibrium_potentials__E_K)) + (CHASTE_CONST(0.49124000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__membrane__V - CHASTE_CONST(0.080320000000000003) * var_equilibrium_potentials__E_K) + CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.061749999999999999) * var_equilibrium_potentials__E_K)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(0.51429999999999998) * var_equilibrium_potentials__E_K - CHASTE_CONST(0.51429999999999998) * var_chaste_interface__membrane__V))))) * (-var_equilibrium_potentials__E_K + var_chaste_interface__membrane__V) + CHASTE_CONST(0.0027599999999999999) * (-var_equilibrium_potentials__E_K + var_chaste_interface__membrane__V) / (_lt_0_row[0]) + CHASTE_CONST(0.057500000000000002) * var_chaste_interface__Ca_i__Ca_i / (CHASTE_CONST(0.00050000000000000001) + var_chaste_interface__Ca_i__Ca_i) + CHASTE_CONST(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 + CHASTE_CONST(0.037374999999999999) * CHASTE_MATH::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 + CHASTE_CONST(0.0028824983370007683) * (-CHASTE_CONST(0.34100000000000003) * mParameters[4] + var_chaste_interface__Ca_i__Ca_i * _lt_0_row[1]) * var_chaste_interface__membrane__V / (_lt_0_row[2]) + (-CHASTE_CONST(1.5) * CHASTE_MATH::Pow(mParameters[6], 3) * var_chaste_interface__Ca_i__Ca_i * _lt_0_row[3] + CHASTE_CONST(0.40000000000000002) * CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mParameters[14] * mParameters[4] * _lt_0_row[4]) / ((_lt_0_row[5]) * (1 + CHASTE_CONST(6.9444444444444451e-9) / CHASTE_MATH::Pow(var_chaste_interface__Ca_i__Ca_i, 2)) * (CHASTE_CONST(1004882.8125) * var_chaste_interface__Ca_i__Ca_i + CHASTE_CONST(1.3) * CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) + CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mParameters[4] + CHASTE_CONST(1.5) * CHASTE_MATH::Pow(mParameters[6], 3) * var_chaste_interface__Ca_i__Ca_i + CHASTE_CONST(0.0035999999999999999) * CHASTE_MATH::Pow(mParameters[6], 3) * (1 + CHASTE_CONST(0.081300813008130079) * var_chaste_interface__intracellular_ion_concentrations__Na_i) + CHASTE_CONST(1860.8670000000004) * (1 + CHASTE_CONST(416.66666666666669) * var_chaste_interface__Ca_i__Ca_i) * mParameters[4])) + CHASTE_MATH::Pow(var_chaste_interface__i_Na_m_gate__m, 3) * (-var_equilibrium_potentials__E_Na + var_chaste_interface__membrane__V) * (CHASTE_CONST(0.20000000000000001) * var_chaste_interface__i_Na_j_gate__j + CHASTE_CONST(0.80000000000000004) * var_chaste_interface__i_Na_h_gate__h) * mParameters[8] + (-var_equilibrium_potentials__E_K + var_chaste_interface__membrane__V) * (CHASTE_CONST(0.20000000000000001) * var_chaste_interface__i_to_1_i2_gate__i2 + CHASTE_CONST(0.80000000000000004) * var_chaste_interface__i_to_1_i_gate__i) * mParameters[15] * var_chaste_interface__i_to_1_a_gate__a + CHASTE_CONST(0.61875000000000002) * mParameters[5] / ((1 + 100 / CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 2)) * (CHASTE_CONST(1.5) + mParameters[5]) * (1 + _lt_0_row[7] + CHASTE_CONST(0.036499999999999998) * (-CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(0.01485884101040119) * mParameters[6])) * _lt_0_row[6])) + CHASTE_CONST(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 + CHASTE_CONST(0.59999999999999998) / (1 + CHASTE_CONST(6.4818210260626455e-7) * CHASTE_MATH::Pow((1 / var_chaste_interface__Ca_i__Ca_i), CHASTE_CONST(1.3999999999999999)))) * (-CHASTE_CONST(26.712338705498265) * CHASTE_MATH::Log((CHASTE_CONST(0.018329999999999999) * mParameters[6] + mParameters[5]) / (CHASTE_CONST(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 + CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::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]) + CHASTE_CONST(3.510865186083326) * (-15 + var_chaste_interface__membrane__V) * (-CHASTE_CONST(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 = CHASTE_CAP() * 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 ? CHASTE_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 = CHASTE_CONST(0.050000000000000003) * (1 - var_chaste_interface__Ca_MK_act__Ca_MK_trap) / (1 + CHASTE_CONST(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 = -CHASTE_CONST(0.00068000000000000005) * var_chaste_interface__Ca_MK_act__Ca_MK_trap + CHASTE_CONST(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 = CHASTE_CONST(0.057500000000000002) * var_chaste_interface__Ca_i__Ca_i / (CHASTE_CONST(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 + CHASTE_CONST(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 + CHASTE_CONST(24.217200000000005) * CHASTE_MATH::Pow((-1 + CHASTE_CONST(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 + CHASTE_CONST(0.03125) * CHASTE_MATH::Pow((-1 + CHASTE_CONST(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) ? (CHASTE_CONST(0.13500000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(11.764705882352942) + CHASTE_CONST(0.14705882352941177) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(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 * CHASTE_MATH::Exp(CHASTE_CONST(0.34999999999999998) * var_chaste_interface__membrane__V - CHASTE_CONST(0.34999999999999998) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time)) + CHASTE_CONST(3.5600000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.079000000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.079000000000000001) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time))) : (CHASTE_CONST(7.6923076923076916) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.96036036036036043) + CHASTE_CONST(0.0900900900900901) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(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 + CHASTE_CONST(0.01) * mp_membrane_fast_sodium_current_reduced_inactivation_modifier->Calc(mParameters[9], var_chaste_interface__environment__time) + (1 - CHASTE_CONST(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) ? ((CHASTE_CONST(37.780000000000001) + var_chaste_interface__membrane__V) * (-127140 * CHASTE_MATH::Exp(CHASTE_CONST(0.24440000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.24440000000000001) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time)) - CHASTE_CONST(3.4740000000000003e-5) * CHASTE_MATH::Exp(CHASTE_CONST(0.043909999999999998) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(0.043909999999999998) * var_chaste_interface__membrane__V)) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(24.640530000000002) + CHASTE_CONST(0.311) * var_chaste_interface__membrane__V - CHASTE_CONST(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) ? (CHASTE_CONST(0.1212) * CHASTE_MATH::Exp(CHASTE_CONST(0.01052) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(0.01052) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(5.5312920000000005) + CHASTE_CONST(0.13780000000000001) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(0.13780000000000001) * var_chaste_interface__membrane__V))) : (CHASTE_CONST(0.29999999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(2.5349999999999999e-7) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(2.5349999999999999e-7) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.2000000000000002) + CHASTE_CONST(0.10000000000000001) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(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 + CHASTE_CONST(0.01) * mp_membrane_fast_sodium_current_reduced_inactivation_modifier->Calc(mParameters[9], var_chaste_interface__environment__time) + (1 - CHASTE_CONST(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 = -CHASTE_CONST(26.712338705498265) * CHASTE_MATH::Log(100 / var_chaste_interface__intracellular_ion_concentrations__Cl_i); // millivolt + const double var_background_currents__i_Cl_b = CHASTE_CONST(0.00022499999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.00022499999999999999) * var_equilibrium_potentials__E_Cl; // microA_per_microF + const double var_equilibrium_potentials__E_K = CHASTE_CONST(26.712338705498265) * CHASTE_MATH::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 = CHASTE_CONST(7.0755999999999996e-6) * (-var_equilibrium_potentials__E_Cl + var_equilibrium_potentials__E_K) / (CHASTE_CONST(87.825100000000006) - var_equilibrium_potentials__E_Cl + var_equilibrium_potentials__E_K); // millimolar_per_millisecond + const double var_background_currents__i_K_b = CHASTE_CONST(0.0050000000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.0050000000000000001) * var_equilibrium_potentials__E_K; // microA_per_microF + const double var_equilibrium_potentials__E_Na = CHASTE_CONST(26.712338705498265) * CHASTE_MATH::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 = CHASTE_CONST(9.8442999999999999e-6) * CHASTE_MATH::Pow((-var_equilibrium_potentials__E_Cl + var_equilibrium_potentials__E_Na), 4) / (CHASTE_CONST(59494197.640692554) + CHASTE_MATH::Pow((-var_equilibrium_potentials__E_Cl + var_equilibrium_potentials__E_Na), 4)); // millimolar_per_millisecond + const double var_background_currents__i_Na_b = CHASTE_CONST(0.0025000000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.0025000000000000001) * var_equilibrium_potentials__E_Na; // microA_per_microF + const double var_i_K1__i_K1 = mp_i_K1__i_K1_modifier->Calc((CHASTE_CONST(0.0040000000000000001) + CHASTE_CONST(0.4389381125701739) * CHASTE_MATH::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 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.23849999999999999) * var_equilibrium_potentials__E_K)) * (CHASTE_CONST(1.02) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.23849999999999999) * var_equilibrium_potentials__E_K)) + (CHASTE_CONST(0.49124000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__membrane__V - CHASTE_CONST(0.080320000000000003) * var_equilibrium_potentials__E_K) + CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.061749999999999999) * var_equilibrium_potentials__E_K)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(0.51429999999999998) * var_equilibrium_potentials__E_K - CHASTE_CONST(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 = CHASTE_CONST(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(CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::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 + CHASTE_CONST(0.59999999999999998) / (1 + CHASTE_CONST(6.4818210260626455e-7) * CHASTE_MATH::Pow((1 / var_chaste_interface__Ca_i__Ca_i), CHASTE_CONST(1.3999999999999999)))) * (-CHASTE_CONST(26.712338705498265) * CHASTE_MATH::Log((CHASTE_CONST(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)) / (CHASTE_CONST(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(CHASTE_MATH::Pow(var_chaste_interface__i_Na_m_gate__m, 3) * (-var_equilibrium_potentials__E_Na + var_chaste_interface__membrane__V) * (CHASTE_CONST(0.20000000000000001) * var_chaste_interface__i_Na_j_gate__j + CHASTE_CONST(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((-CHASTE_CONST(1.5) * CHASTE_MATH::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] + CHASTE_CONST(0.40000000000000002) * CHASTE_MATH::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 + CHASTE_CONST(6.9444444444444451e-9) / CHASTE_MATH::Pow(var_chaste_interface__Ca_i__Ca_i, 2)) * (CHASTE_CONST(1004882.8125) * var_chaste_interface__Ca_i__Ca_i + CHASTE_CONST(1.3) * CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) + CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mp_extracellular_calcium_concentration_modifier->Calc(mParameters[4], var_chaste_interface__environment__time) + CHASTE_CONST(1.5) * CHASTE_MATH::Pow(mp_extracellular_sodium_concentration_modifier->Calc(mParameters[6], var_chaste_interface__environment__time), 3) * var_chaste_interface__Ca_i__Ca_i + CHASTE_CONST(0.0035999999999999999) * CHASTE_MATH::Pow(mp_extracellular_sodium_concentration_modifier->Calc(mParameters[6], var_chaste_interface__environment__time), 3) * (1 + CHASTE_CONST(0.081300813008130079) * var_chaste_interface__intracellular_ion_concentrations__Na_i) + CHASTE_CONST(1860.8670000000004) * (1 + CHASTE_CONST(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 = CHASTE_CONST(0.61875000000000002) * mp_extracellular_potassium_concentration_modifier->Calc(mParameters[5], var_chaste_interface__environment__time) / ((1 + 100 / CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 2)) * (CHASTE_CONST(1.5) + mp_extracellular_potassium_concentration_modifier->Calc(mParameters[5], var_chaste_interface__environment__time)) * (1 + _lt_0_row[7] + CHASTE_CONST(0.036499999999999998) * (-CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(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 = CHASTE_CONST(0.037374999999999999) * CHASTE_MATH::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) * (CHASTE_CONST(0.20000000000000001) * var_chaste_interface__i_to_1_i2_gate__i2 + CHASTE_CONST(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 = CHASTE_CONST(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 = (-CHASTE_CONST(6.767281717060562e-9) * var_background_currents__i_Cl_b - CHASTE_CONST(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 = (CHASTE_CONST(1.3534563434121124e-8) * var_i_NaK__i_NaK - CHASTE_CONST(6.767281717060562e-9) * var_background_currents__i_K_b - CHASTE_CONST(6.767281717060562e-9) * var_i_K1__i_K1 - CHASTE_CONST(6.767281717060562e-9) * var_i_K_p__i_K_p - CHASTE_CONST(6.767281717060562e-9) * var_i_Kr__i_Kr - CHASTE_CONST(6.767281717060562e-9) * var_i_Ks__i_Ks - CHASTE_CONST(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 = (-CHASTE_CONST(2.0301845151181685e-8) * var_i_NaCa__i_NaCa - CHASTE_CONST(2.0301845151181685e-8) * var_i_NaK__i_NaK - CHASTE_CONST(6.767281717060562e-9) * var_background_currents__i_Na_b - CHASTE_CONST(6.767281717060562e-9) * var_i_Na__i_Na - CHASTE_CONST(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 = CHASTE_CONST(0.0028824983370007683) * (-CHASTE_CONST(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 = CHASTE_CONST(3.510865186083326) * (-15 + var_chaste_interface__membrane__V) * (-CHASTE_CONST(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 + CHASTE_MATH::Exp(-CHASTE_CONST(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 = (CHASTE_CONST(0.14999999999999999) - var_chaste_interface__i_Ca_L_f_Ca_gate__f_Ca + CHASTE_CONST(0.55000000000000004) / (1 + CHASTE_CONST(333.33333333333331) * var_chaste_interface__Ca_r__Ca_r) + CHASTE_CONST(0.29999999999999999) / (1 - 20 * var_i_Ca_L__i_Ca_L)) / (CHASTE_CONST(0.5) + 1 / (1 + CHASTE_CONST(333.33333333333331) * var_chaste_interface__Ca_r__Ca_r) + 10 * var_Ca_MK_act__Ca_MK_act / (CHASTE_CONST(0.14999999999999999) + var_Ca_MK_act__Ca_MK_act)); // 1 / millisecond + const double var_q_leak__q_leak = CHASTE_CONST(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 + CHASTE_MATH::Exp(CHASTE_CONST(3.3333333333333335) + CHASTE_CONST(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 + CHASTE_MATH::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 / (CHASTE_CONST(0.14999999999999999) + var_Ca_MK_act__Ca_MK_act)) / (1 + CHASTE_MATH::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 / (CHASTE_CONST(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 + CHASTE_MATH::Exp(CHASTE_CONST(2.6000000000000001) + CHASTE_CONST(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 + CHASTE_CONST(0.23999999999999996) * var_q_rel__q_rel - CHASTE_CONST(1.1504378919002956e-7) * var_i_Ca_L__i_Ca_L) / (1 + CHASTE_CONST(2.2480000000000002) * var_chaste_interface__Ca_r__Ca_r / CHASTE_MATH::Pow((CHASTE_CONST(0.0086999999999999994) + var_chaste_interface__Ca_r__Ca_r), 2) + CHASTE_CONST(0.094) * var_chaste_interface__Ca_r__Ca_r / CHASTE_MATH::Pow((CHASTE_CONST(0.00087000000000000001) + var_chaste_interface__Ca_r__Ca_r), 2)); // millimolar / millisecond + const double d_dt_chaste_interface_var_q_rel_ro_gate__ro = -CHASTE_CONST(0.33333333333333331) * var_chaste_interface__q_rel_ro_gate__ro + CHASTE_CONST(0.33333333333333331) * CHASTE_MATH::Pow(var_chaste_interface__Ca_JSR__Ca_JSR, CHASTE_CONST(1.8999999999999999)) * CHASTE_MATH::Pow(var_i_Ca_L__i_Ca_L, 2) / ((1 + CHASTE_MATH::Pow(var_i_Ca_L__i_Ca_L, 2)) * (CHASTE_MATH::Pow(var_chaste_interface__Ca_JSR__Ca_JSR, CHASTE_CONST(1.8999999999999999)) + CHASTE_CONST(1644.6531773416521) * CHASTE_MATH::Pow((var_chaste_interface__Ca_r__Ca_r / (CHASTE_CONST(0.0028) + var_chaste_interface__Ca_r__Ca_r)), CHASTE_CONST(1.8999999999999999)))); // 1 / millisecond + const double var_q_tr__q_tr = CHASTE_CONST(0.0083333333333333332) * var_chaste_interface__Ca_NSR__Ca_NSR - CHASTE_CONST(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 / CHASTE_MATH::Pow((CHASTE_CONST(0.80000000000000004) + var_chaste_interface__Ca_JSR__Ca_JSR), 2)); // millimolar / millisecond + const double var_q_up__q_up = CHASTE_CONST(0.5) * (1 + CHASTE_CONST(0.75) * var_Ca_MK_act__Ca_MK_act / (CHASTE_CONST(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) / (CHASTE_CONST(0.00092000000000000003) - CHASTE_CONST(0.00017000000000000001) * var_Ca_MK_act__Ca_MK_act / (CHASTE_CONST(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 - CHASTE_CONST(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 = -(CHASTE_CONST(3.383640858530281e-9) * var_background_currents__i_Ca_b + CHASTE_CONST(3.383640858530281e-9) * var_i_Ca_p__i_Ca_p + CHASTE_CONST(0.081176470588235281) * var_q_up__q_up - CHASTE_CONST(0.029411764705882353) * var_Ca_r__q_diff - CHASTE_CONST(6.767281717060562e-9) * var_i_NaCa__i_NaCa - CHASTE_CONST(0.081176470588235281) * var_q_leak__q_leak) / (1 + CHASTE_CONST(0.14000000000000001) * var_chaste_interface__Ca_i__Ca_i / CHASTE_MATH::Pow((CHASTE_CONST(0.00050000000000000001) + var_chaste_interface__Ca_i__Ca_i), 2) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__Ca_i__Ca_i / CHASTE_MATH::Pow((CHASTE_CONST(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 - CHASTE_STIM(var_chaste_interface__environment__time) / CHASTE_CAP() - CHASTE_CONST(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 ? CHASTE_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 = CHASTE_CONST(0.050000000000000003); // dimensionless + const double var_Ca_MK_act__km_Ca_MK = CHASTE_CONST(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 = CHASTE_CONST(0.018329999999999999); // dimensionless + const double var_i_Ca_L__p_Ca = CHASTE_CONST(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(CHASTE_CONST(0.5) + 1 / (1 + CHASTE_CONST(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 + CHASTE_CONST(0.59999999999999998) / (1 + CHASTE_CONST(6.4818210260626455e-7) * CHASTE_MATH::Pow((1 / var_chaste_interface__Ca_i__Ca_i), CHASTE_CONST(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 = CHASTE_CONST(0.40000000000000002); // dimensionless + const double var_i_NaCa__k_sat = CHASTE_CONST(0.27000000000000002); // dimensionless + const double var_i_NaCa__km_Ca_act = CHASTE_CONST(0.000125); // millimolar + const double var_i_NaCa__km_Ca_i = CHASTE_CONST(0.0035999999999999999); // millimolar + const double var_i_NaCa__km_Ca_o = CHASTE_CONST(1.3); // millimolar + const double var_i_NaCa__km_Na_i_1 = CHASTE_CONST(12.300000000000001); // millimolar + const double var_i_NaCa__km_Na_o = CHASTE_CONST(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 + CHASTE_CONST(24.217200000000005) * CHASTE_MATH::Pow((-1 + CHASTE_CONST(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 + CHASTE_CONST(0.03125) * CHASTE_MATH::Pow((-1 + CHASTE_CONST(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) ? (CHASTE_CONST(0.13500000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(11.764705882352942) + CHASTE_CONST(0.14705882352941177) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(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 * CHASTE_MATH::Exp(CHASTE_CONST(0.34999999999999998) * var_chaste_interface__membrane__V - CHASTE_CONST(0.34999999999999998) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time)) + CHASTE_CONST(3.5600000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.079000000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.079000000000000001) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time))) : (CHASTE_CONST(7.6923076923076916) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.96036036036036043) + CHASTE_CONST(0.0900900900900901) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(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) ? ((CHASTE_CONST(37.780000000000001) + var_chaste_interface__membrane__V) * (-127140 * CHASTE_MATH::Exp(CHASTE_CONST(0.24440000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.24440000000000001) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time)) - CHASTE_CONST(3.4740000000000003e-5) * CHASTE_MATH::Exp(CHASTE_CONST(0.043909999999999998) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(0.043909999999999998) * var_chaste_interface__membrane__V)) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(24.640530000000002) + CHASTE_CONST(0.311) * var_chaste_interface__membrane__V - CHASTE_CONST(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) ? (CHASTE_CONST(0.1212) * CHASTE_MATH::Exp(CHASTE_CONST(0.01052) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(0.01052) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(5.5312920000000005) + CHASTE_CONST(0.13780000000000001) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(0.13780000000000001) * var_chaste_interface__membrane__V))) : (CHASTE_CONST(0.29999999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(2.5349999999999999e-7) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(2.5349999999999999e-7) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.2000000000000002) + CHASTE_CONST(0.10000000000000001) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(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 = CHASTE_STIM(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_i_NaCa__dNaCa_1 = CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * var_i_NaCa__km_Ca_o + CHASTE_CONST(1.5) * CHASTE_MATH::Pow(var_i_NaCa__km_Na_o, 3) * var_chaste_interface__Ca_i__Ca_i + CHASTE_MATH::Pow(var_i_NaCa__km_Na_i_1, 3) * (1 + CHASTE_CONST(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 = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::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 = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::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 = CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mp_extracellular_calcium_concentration_modifier->Calc(mParameters[4], var_chaste_interface__environment__time) + CHASTE_CONST(1.5) * CHASTE_MATH::Pow(mp_extracellular_sodium_concentration_modifier->Calc(mParameters[6], var_chaste_interface__environment__time), 3) * var_chaste_interface__Ca_i__Ca_i + CHASTE_MATH::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 * CHASTE_MATH::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 * CHASTE_MATH::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 * CHASTE_MATH::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 = CHASTE_CONST(1.02) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.23849999999999999) * var_equilibrium_potentials__E_K)); // dimensionless + const double var_i_K1_xK1_gate__beta_xK1 = (CHASTE_CONST(0.49124000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__membrane__V - CHASTE_CONST(0.080320000000000003) * var_equilibrium_potentials__E_K) + CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.061749999999999999) * var_equilibrium_potentials__E_K)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(0.51429999999999998) * var_equilibrium_potentials__E_K - CHASTE_CONST(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((CHASTE_CONST(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 = CHASTE_CAP() * 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 = CHASTE_CAP() * 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 = CHASTE_CAP() * var_i_Ks__i_Ks; // uA_per_cm2 + const double var_i_Na__i_Na = mp_i_Na__i_Na_modifier->Calc(CHASTE_MATH::Pow(var_chaste_interface__i_Na_m_gate__m, 3) * (-var_equilibrium_potentials__E_Na + var_chaste_interface__membrane__V) * (CHASTE_CONST(0.20000000000000001) * var_chaste_interface__i_Na_j_gate__j + CHASTE_CONST(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 = CHASTE_CAP() * var_i_Na__i_Na; // uA_per_cm2 + const double var_i_NaCa__i_NaCa = mp_i_NaCa__i_NaCa_modifier->Calc((-CHASTE_CONST(1.5) * CHASTE_MATH::Pow(mp_extracellular_sodium_concentration_modifier->Calc(mParameters[6], var_chaste_interface__environment__time), 3) * var_chaste_interface__Ca_i__Ca_i * CHASTE_MATH::Exp(-CHASTE_CONST(0.65000000000000002) * var_chaste_interface__membrane__V * var_model_parameters__F / (var_model_parameters__R * var_model_parameters__T)) + CHASTE_MATH::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) * CHASTE_MATH::Exp(CHASTE_CONST(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 * CHASTE_MATH::Exp(-CHASTE_CONST(0.65000000000000002) * var_chaste_interface__membrane__V * var_model_parameters__F / (var_model_parameters__R * var_model_parameters__T))) * (1 + CHASTE_CONST(0.44444444444444442) * CHASTE_MATH::Pow(var_i_NaCa__km_Ca_act, 2) / CHASTE_MATH::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 = CHASTE_CAP() * 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) * (CHASTE_CONST(0.20000000000000001) * var_chaste_interface__i_to_1_i2_gate__i2 + CHASTE_CONST(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 = CHASTE_CAP() * 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 = CHASTE_CONST(0.34100000000000003); // dimensionless + const double var_model_parameters__z_Ca = 2; // dimensionless + const double var_i_Ca_L__i_Ca_L_max = CHASTE_MATH::Pow(var_model_parameters__F, 2) * CHASTE_MATH::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 * CHASTE_MATH::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 + CHASTE_MATH::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 = CHASTE_CAP() * 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 + CHASTE_MATH::Exp(-CHASTE_CONST(4.375) - 25 * var_i_Ca_L__i_Ca_L)), var_chaste_interface__environment__time); // millisecond + const double var_q_rel__vg = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(2.6000000000000001) + CHASTE_CONST(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/data/tests/chaste_reference_models/Opt/aslanidi_Purkinje_model_2009Opt.hpp b/chaste_codegen/data/tests/chaste_reference_models/Opt/aslanidi_Purkinje_model_2009Opt.hpp new file mode 100644 index 000000000..23fc01778 --- /dev/null +++ b/chaste_codegen/data/tests/chaste_reference_models/Opt/aslanidi_Purkinje_model_2009Opt.hpp @@ -0,0 +1,137 @@ +#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" +#if USING_DEVICE_COMPILER +#include "StimulusEvaluatorCuda.hpp" +#endif +#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/data/tests/chaste_reference_models/Opt/beeler_reuter_model_1977_lookup_tables.cpp b/chaste_codegen/data/tests/chaste_reference_models/Opt/beeler_reuter_model_1977_lookup_tables.cpp index f3598e116..25dc824b1 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/Opt/beeler_reuter_model_1977_lookup_tables.cpp +++ b/chaste_codegen/data/tests/chaste_reference_models/Opt/beeler_reuter_model_1977_lookup_tables.cpp @@ -21,6 +21,8 @@ #include "HeartConfig.hpp" #include "IsNan.hpp" #include "MathsCustomFunctions.hpp" +#include "ChasteMathDeviceNamespaces.hpp" +#include "ChasteCpuMacros.hpp" @@ -199,7 +201,7 @@ class Cellbeeler_reuter_model_1977FromCellMLOpt_LookupTables : public AbstractLo for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(1.4000000000000001 + 0.040000000000000001 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(CHASTE_CONST(1.4000000000000001) + CHASTE_CONST(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); @@ -210,7 +212,7 @@ class Cellbeeler_reuter_model_1977FromCellMLOpt_LookupTables : public AbstractLo for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return -1 + exp(3.0800000000000001 + 0.040000000000000001 * var_chaste_interface__membrane__V); + return -1 + CHASTE_MATH::Exp(CHASTE_CONST(3.0800000000000001) + CHASTE_CONST(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); @@ -221,7 +223,7 @@ class Cellbeeler_reuter_model_1977FromCellMLOpt_LookupTables : public AbstractLo for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 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)) + (((0.92000000000000004 + 0.040000000000000001 * 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)))); + return 4 * (-1 + CHASTE_MATH::Exp(CHASTE_CONST(3.3999999999999999) + CHASTE_CONST(0.040000000000000001) * var_chaste_interface__membrane__V)) / (CHASTE_MATH::Exp(CHASTE_CONST(2.1200000000000001) + CHASTE_CONST(0.040000000000000001) * var_chaste_interface__membrane__V) + CHASTE_MATH::Exp(CHASTE_CONST(4.2400000000000002) + CHASTE_CONST(0.080000000000000002) * var_chaste_interface__membrane__V)) + (((CHASTE_CONST(0.92000000000000004) + CHASTE_CONST(0.040000000000000001) * var_chaste_interface__membrane__V >= -CHASTE_CONST(9.9999999999999995e-8)) && (CHASTE_CONST(0.92000000000000004) + CHASTE_CONST(0.040000000000000001) * var_chaste_interface__membrane__V <= CHASTE_CONST(9.9999999999999995e-8))) ? (CHASTE_CONST(7.3000000000000007) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V) : (-5 * (CHASTE_CONST(0.92000000000000004) + CHASTE_CONST(0.040000000000000001) * var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.92000000000000004) - CHASTE_CONST(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); @@ -232,7 +234,7 @@ class Cellbeeler_reuter_model_1977FromCellMLOpt_LookupTables : public AbstractLo 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); + return 1 + CHASTE_MATH::Exp(CHASTE_CONST(0.35997120230381568) - CHASTE_CONST(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); @@ -243,7 +245,7 @@ class Cellbeeler_reuter_model_1977FromCellMLOpt_LookupTables : public AbstractLo 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); + return CHASTE_MATH::Exp(CHASTE_CONST(0.050000000000000003) - CHASTE_CONST(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); @@ -254,7 +256,7 @@ class Cellbeeler_reuter_model_1977FromCellMLOpt_LookupTables : public AbstractLo 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); + return 1 + CHASTE_MATH::Exp(CHASTE_CONST(2.2000000000000002) + CHASTE_CONST(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); @@ -265,7 +267,7 @@ class Cellbeeler_reuter_model_1977FromCellMLOpt_LookupTables : public AbstractLo 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); + return CHASTE_MATH::Exp(-CHASTE_CONST(0.74576271186440679) - CHASTE_CONST(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); @@ -276,7 +278,7 @@ class Cellbeeler_reuter_model_1977FromCellMLOpt_LookupTables : public AbstractLo 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); + return 1 + CHASTE_MATH::Exp(CHASTE_CONST(4.197901049475262) + CHASTE_CONST(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); @@ -287,7 +289,7 @@ class Cellbeeler_reuter_model_1977FromCellMLOpt_LookupTables : public AbstractLo 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); + return CHASTE_MATH::Exp(-CHASTE_CONST(0.224) - CHASTE_CONST(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); @@ -298,7 +300,7 @@ class Cellbeeler_reuter_model_1977FromCellMLOpt_LookupTables : public AbstractLo 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); + return 1 + CHASTE_MATH::Exp(-6 - CHASTE_CONST(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); @@ -309,7 +311,7 @@ class Cellbeeler_reuter_model_1977FromCellMLOpt_LookupTables : public AbstractLo 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); + return CHASTE_MATH::Exp(-CHASTE_CONST(0.59999999999999998) - CHASTE_CONST(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); @@ -320,7 +322,7 @@ class Cellbeeler_reuter_model_1977FromCellMLOpt_LookupTables : public AbstractLo 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)))); + return (((CHASTE_CONST(4.7000000000000002) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V >= -CHASTE_CONST(9.9999999999999995e-8)) && (CHASTE_CONST(4.7000000000000002) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V <= CHASTE_CONST(9.9999999999999995e-8))) ? (CHASTE_CONST(33.5) + CHASTE_CONST(0.5) * var_chaste_interface__membrane__V) : (-10 * (CHASTE_CONST(4.7000000000000002) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(4.7000000000000002) - CHASTE_CONST(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); @@ -342,7 +344,7 @@ class Cellbeeler_reuter_model_1977FromCellMLOpt_LookupTables : public AbstractLo for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(-4.032 - 0.056000000000000001 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(-CHASTE_CONST(4.032) - CHASTE_CONST(0.056000000000000001) * 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); @@ -353,7 +355,7 @@ class Cellbeeler_reuter_model_1977FromCellMLOpt_LookupTables : public AbstractLo for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 + exp(2.8571428571428572 + 0.057142857142857141 * var_chaste_interface__membrane__V); + return 1 + CHASTE_MATH::Exp(CHASTE_CONST(2.8571428571428572) + CHASTE_CONST(0.057142857142857141) * 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); @@ -364,7 +366,7 @@ class Cellbeeler_reuter_model_1977FromCellMLOpt_LookupTables : public AbstractLo for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(4.1322314049586781 + 0.082644628099173556 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(CHASTE_CONST(4.1322314049586781) + CHASTE_CONST(0.082644628099173556) * 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); @@ -375,7 +377,7 @@ class Cellbeeler_reuter_model_1977FromCellMLOpt_LookupTables : public AbstractLo for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 + exp(-0.80000000000000004 - 0.040000000000000001 * var_chaste_interface__membrane__V); + return 1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.80000000000000004) - CHASTE_CONST(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); @@ -386,7 +388,7 @@ class Cellbeeler_reuter_model_1977FromCellMLOpt_LookupTables : public AbstractLo for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(-1.1997600479904018 - 0.059988002399520089 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(-CHASTE_CONST(1.1997600479904018) - CHASTE_CONST(0.059988002399520089) * 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); @@ -411,7 +413,7 @@ class Cellbeeler_reuter_model_1977FromCellMLOpt_LookupTables : public AbstractLo for (unsigned i=0 ; i<_table_size_1; i++) { auto f = [](double var_chaste_interface__slow_inward_current__Cai) { - return 13.028700000000001 * log(var_chaste_interface__slow_inward_current__Cai); + return CHASTE_CONST(13.028700000000001) * CHASTE_MATH::Log(var_chaste_interface__slow_inward_current__Cai); }; const double var_chaste_interface__slow_inward_current__Cai = mTableMins[1] + i*mTableSteps[1]; double val = f(var_chaste_interface__slow_inward_current__Cai); @@ -451,7 +453,7 @@ std::shared_ptr Cellbeel 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__IstimAmplitude_converted = CHASTE_CONST(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 @@ -483,13 +485,13 @@ std::shared_ptr Cellbeel // 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[0] = CHASTE_CONST(0.00089999999999999998); // (var_slow_inward_current__g_s) [mS_per_mm2] + this->mParameters[1] = CHASTE_CONST(0.01); // (var_membrane__C) [uF_per_mm2] + this->mParameters[2] = CHASTE_CONST(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[5] = CHASTE_CONST(0.0035000000000000001); // (var_time_independent_outward_current__G_K1) [uA_per_mm2] + this->mParameters[6] = CHASTE_CONST(0.0080000000000000002); // (var_time_dependent_outward_current__G_Kr) [uA_per_mm2] this->mParameters[7] = 50; // (var_sodium_current__E_Na) [mV] } @@ -541,7 +543,7 @@ std::shared_ptr Cellbeel // 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -574,10 +576,10 @@ std::shared_ptr Cellbeel // 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_slow_inward_current__i_s_converted = CHASTE_CONST(100.00000000000001) * (-CHASTE_CONST(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 = CHASTE_CONST(100.00000000000001) * (CHASTE_CONST(3.0000000000000001e-5) + CHASTE_MATH::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 = CHASTE_CONST(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 = CHASTE_CONST(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; @@ -589,7 +591,7 @@ std::shared_ptr Cellbeel { // Inputs: // Time units: millisecond - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -624,18 +626,18 @@ std::shared_ptr Cellbeel // 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_slow_inward_current_d_gate__d = CHASTE_CONST(0.095000000000000001) * (1 - var_chaste_interface__slow_inward_current_d_gate__d) * _lt_0_row[4] / (_lt_0_row[3]) - CHASTE_CONST(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 = CHASTE_CONST(0.012) * (1 - var_chaste_interface__slow_inward_current_f_gate__f) * _lt_0_row[8] / (_lt_0_row[7]) - CHASTE_CONST(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 = (-CHASTE_CONST(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 = CHASTE_CONST(7.0000000000000007e-6) - CHASTE_CONST(0.070000000000000007) * var_chaste_interface__slow_inward_current__Cai - CHASTE_CONST(0.01) * var_slow_inward_current__i_s; // concentration_units / ms + const double var_sodium_current_h_gate__alpha_h = CHASTE_CONST(0.126) * CHASTE_MATH::Exp(-CHASTE_CONST(19.25) + CHASTE_CONST(0.25) * mParameters[4] - CHASTE_CONST(0.25) * var_chaste_interface__membrane__V); // per_ms + const double var_sodium_current_h_gate__beta_h = CHASTE_CONST(1.7) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.845) + CHASTE_CONST(0.082000000000000003) * mParameters[4] - CHASTE_CONST(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 + CHASTE_CONST(0.01) * mParameters[3] + (1 - CHASTE_CONST(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 = CHASTE_CONST(0.055) * CHASTE_MATH::Exp(-CHASTE_CONST(19.5) + CHASTE_CONST(0.25) * mParameters[4] - CHASTE_CONST(0.25) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(15.600000000000001) + CHASTE_CONST(0.20000000000000001) * mParameters[4] - CHASTE_CONST(0.20000000000000001) * var_chaste_interface__membrane__V)); // per_ms + const double var_sodium_current_j_gate__beta_j = CHASTE_CONST(0.29999999999999999) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.2000000000000002) + CHASTE_CONST(0.10000000000000001) * mParameters[4] - CHASTE_CONST(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 + CHASTE_CONST(0.01) * mParameters[3] + (1 - CHASTE_CONST(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 + const double d_dt_chaste_interface_var_time_dependent_outward_current_x1_gate__x1 = CHASTE_CONST(0.00050000000000000001) * (1 - var_chaste_interface__time_dependent_outward_current_x1_gate__x1) * _lt_0_row[14] / (_lt_0_row[13]) - CHASTE_CONST(0.0012999999999999999) * var_chaste_interface__time_dependent_outward_current_x1_gate__x1 * _lt_0_row[16] / (_lt_0_row[15]); // 1 / ms if (mSetVoltageDerivativeToZero) { @@ -643,7 +645,7 @@ std::shared_ptr Cellbeel } 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 + d_dt_chaste_interface_var_membrane__V = (-var_slow_inward_current__i_s - CHASTE_CONST(0.0099999999999999985) * CHASTE_STIM(var_chaste_interface__environment__time) - (CHASTE_CONST(3.0000000000000001e-5) + CHASTE_MATH::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; @@ -660,7 +662,7 @@ std::shared_ptr Cellbeel { // Inputs: // Time units: millisecond - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -687,28 +689,28 @@ std::shared_ptr Cellbeel // 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__E_s = CHASTE_CONST(7.6990712032745758) - CHASTE_CONST(13.028700000000001) * CHASTE_MATH::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_slow_inward_current__i_s_converted = CHASTE_CONST(100.00000000000001) * var_slow_inward_current__i_s; // uA_per_cm2 + const double var_sodium_current__g_Nac = CHASTE_CONST(3.0000000000000001e-5); // mS_per_mm2 + const double var_sodium_current_h_gate__alpha_h = CHASTE_CONST(0.126) * CHASTE_MATH::Exp(-CHASTE_CONST(19.25) + CHASTE_CONST(0.25) * mParameters[4] - CHASTE_CONST(0.25) * var_chaste_interface__membrane__V); // per_ms + const double var_sodium_current_h_gate__beta_h = CHASTE_CONST(1.7) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.845) + CHASTE_CONST(0.082000000000000003) * mParameters[4] - CHASTE_CONST(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__alpha_j = CHASTE_CONST(0.055) * CHASTE_MATH::Exp(-CHASTE_CONST(19.5) + CHASTE_CONST(0.25) * mParameters[4] - CHASTE_CONST(0.25) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(15.600000000000001) + CHASTE_CONST(0.20000000000000001) * mParameters[4] - CHASTE_CONST(0.20000000000000001) * var_chaste_interface__membrane__V)); // per_ms + const double var_sodium_current_j_gate__beta_j = CHASTE_CONST(0.29999999999999999) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.2000000000000002) + CHASTE_CONST(0.10000000000000001) * mParameters[4] - CHASTE_CONST(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_sodium_current__i_Na = (-mParameters[7] + var_chaste_interface__membrane__V) * (CHASTE_MATH::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 = CHASTE_CONST(100.00000000000001) * var_sodium_current__i_Na; // uA_per_cm2 + const double var_stimulus_protocol__Istim_converted = -CHASTE_STIM(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_dependent_outward_current__i_x1_converted = CHASTE_CONST(100.00000000000001) * var_time_dependent_outward_current__i_x1; // uA_per_cm2 + const double var_time_independent_outward_current__B = -CHASTE_CONST(0.040000000000000001); // per_mV + const double var_time_independent_outward_current__A = -CHASTE_CONST(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 + const double var_time_independent_outward_current__temp_current = (((var_time_independent_outward_current__U >= -CHASTE_CONST(9.9999999999999995e-8)) && (var_time_independent_outward_current__U <= CHASTE_CONST(9.9999999999999995e-8))) ? ((1 - CHASTE_CONST(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 + CHASTE_MATH::Exp(var_time_independent_outward_current__U)))); // dimensionless + const double var_time_independent_outward_current__i_K1 = (4 * (-1 + CHASTE_MATH::Exp(CHASTE_CONST(3.3999999999999999) + CHASTE_CONST(0.040000000000000001) * var_chaste_interface__membrane__V)) / (CHASTE_MATH::Exp(CHASTE_CONST(2.1200000000000001) + CHASTE_CONST(0.040000000000000001) * var_chaste_interface__membrane__V) + CHASTE_MATH::Exp(CHASTE_CONST(4.2400000000000002) + CHASTE_CONST(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 = CHASTE_CONST(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; diff --git a/chaste_codegen/data/tests/chaste_reference_models/Opt/beeler_reuter_model_1977_lookup_tables.hpp b/chaste_codegen/data/tests/chaste_reference_models/Opt/beeler_reuter_model_1977_lookup_tables.hpp index 0dd28675c..bfe18de81 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/Opt/beeler_reuter_model_1977_lookup_tables.hpp +++ b/chaste_codegen/data/tests/chaste_reference_models/Opt/beeler_reuter_model_1977_lookup_tables.hpp @@ -16,6 +16,9 @@ #include "ChasteSerialization.hpp" #include #include "AbstractStimulusFunction.hpp" +#if USING_DEVICE_COMPILER +#include "StimulusEvaluatorCuda.hpp" +#endif #include "AbstractCardiacCell.hpp" class Cellbeeler_reuter_model_1977FromCellMLOpt : public AbstractCardiacCell diff --git a/chaste_codegen/data/tests/chaste_reference_models/Opt/dynamic_aslanidi_Purkinje_model_2009.cpp b/chaste_codegen/data/tests/chaste_reference_models/Opt/dynamic_aslanidi_Purkinje_model_2009.cpp index 5c3fceb92..0e72fcc7d 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/Opt/dynamic_aslanidi_Purkinje_model_2009.cpp +++ b/chaste_codegen/data/tests/chaste_reference_models/Opt/dynamic_aslanidi_Purkinje_model_2009.cpp @@ -21,6 +21,8 @@ #include "HeartConfig.hpp" #include "IsNan.hpp" #include "MathsCustomFunctions.hpp" +#include "ChasteMathDeviceNamespaces.hpp" +#include "ChasteCpuMacros.hpp" #include "ModelFactory.hpp" @@ -149,7 +151,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abs for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 + exp(1.2521739130434781 - 0.16722408026755853 * var_chaste_interface__membrane__V); + return 1 + CHASTE_MATH::Exp(CHASTE_CONST(1.2521739130434781) - CHASTE_CONST(0.16722408026755853) * 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); @@ -160,7 +162,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abs for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(0.074871767015605231 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(CHASTE_CONST(0.074871767015605231) * 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); @@ -171,7 +173,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abs for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return -1 + exp(0.074871767015605231 * var_chaste_interface__membrane__V); + return -1 + CHASTE_MATH::Exp(CHASTE_CONST(0.074871767015605231) * 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); @@ -182,7 +184,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abs for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(-0.024333324280071702 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(-CHASTE_CONST(0.024333324280071702) * 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); @@ -193,7 +195,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abs for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(0.013102559227730915 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(CHASTE_CONST(0.013102559227730915) * 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); @@ -204,7 +206,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abs for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 + 0.27000000000000002 * exp(-0.024333324280071702 * var_chaste_interface__membrane__V); + return 1 + CHASTE_CONST(0.27000000000000002) * CHASTE_MATH::Exp(-CHASTE_CONST(0.024333324280071702) * 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); @@ -215,7 +217,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abs for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(-0.037435883507802616 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(-CHASTE_CONST(0.037435883507802616) * 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); @@ -226,7 +228,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abs for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 0.1245 * exp(-0.003743588350780262 * var_chaste_interface__membrane__V); + return CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(0.003743588350780262) * 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); @@ -237,7 +239,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abs for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return -100 * exp(0.037435883507802616 * var_chaste_interface__membrane__V); + return -100 * CHASTE_MATH::Exp(CHASTE_CONST(0.037435883507802616) * 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); @@ -248,7 +250,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abs for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 - exp(0.037435883507802616 * var_chaste_interface__membrane__V); + return 1 - CHASTE_MATH::Exp(CHASTE_CONST(0.037435883507802616) * 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); @@ -259,7 +261,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abs for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 + exp(-0.26470588235294124 + 0.049019607843137261 * var_chaste_interface__membrane__V); + return 1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.26470588235294124) + CHASTE_CONST(0.049019607843137261) * 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); @@ -270,7 +272,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abs for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(-1.1230765052340785 + 0.074871767015605231 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(-CHASTE_CONST(1.1230765052340785) + CHASTE_CONST(0.074871767015605231) * 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); @@ -281,7 +283,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abs for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return -1 + exp(-1.1230765052340785 + 0.074871767015605231 * var_chaste_interface__membrane__V); + return -1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.1230765052340785) + CHASTE_CONST(0.074871767015605231) * 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); @@ -292,7 +294,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abs for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 / (1 + exp(0.59347181008902072 - 0.14836795252225518 * var_chaste_interface__membrane__V)); + return 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(0.59347181008902072) - CHASTE_CONST(0.14836795252225518) * 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); @@ -303,7 +305,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abs for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 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)); + return CHASTE_CONST(0.58999999999999997) + CHASTE_CONST(0.80000000000000004) * CHASTE_MATH::Exp(CHASTE_CONST(0.67599999999999993) + CHASTE_CONST(0.051999999999999998) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.7160000000000002) + CHASTE_CONST(0.13200000000000001) * 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); @@ -314,7 +316,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abs for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 / (1 + exp(1.8 + 0.10000000000000001 * var_chaste_interface__membrane__V)); + return 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.8) + CHASTE_CONST(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); @@ -325,7 +327,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abs for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 / (1 + exp(-5.4098360655737707 - 0.16393442622950821 * var_chaste_interface__membrane__V)); + return 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(5.4098360655737707) - CHASTE_CONST(0.16393442622950821) * 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); @@ -336,7 +338,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abs for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1.0680000000000001 * exp(0.54333333333333333 + 0.033333333333333333 * var_chaste_interface__membrane__V) + 1.0680000000000001 * exp(-0.54333333333333333 - 0.033333333333333333 * var_chaste_interface__membrane__V); + return CHASTE_CONST(1.0680000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.54333333333333333) + CHASTE_CONST(0.033333333333333333) * var_chaste_interface__membrane__V) + CHASTE_CONST(1.0680000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(0.54333333333333333) - CHASTE_CONST(0.033333333333333333) * 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); @@ -347,7 +349,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abs for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 / (1 + exp(9.0909090909090917 + 0.15151515151515152 * var_chaste_interface__membrane__V)); + return 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(9.0909090909090917) + CHASTE_CONST(0.15151515151515152) * 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); @@ -358,7 +360,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abs for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 0.014999999999999999 * exp(4.6558441558441563 + 0.064935064935064929 * var_chaste_interface__membrane__V) + 0.014999999999999999 * exp(-0.86074429771908767 - 0.012004801920768308 * var_chaste_interface__membrane__V); + return CHASTE_CONST(0.014999999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(4.6558441558441563) + CHASTE_CONST(0.064935064935064929) * var_chaste_interface__membrane__V) + CHASTE_CONST(0.014999999999999999) * CHASTE_MATH::Exp(-CHASTE_CONST(0.86074429771908767) - CHASTE_CONST(0.012004801920768308) * 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); @@ -369,7 +371,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abs for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 / (1 + exp(-0.0069387755102040824 - 0.081632653061224483 * var_chaste_interface__membrane__V)); + return 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.0069387755102040824) - CHASTE_CONST(0.081632653061224483) * 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); @@ -380,7 +382,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abs for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 100 + 900 / (1 + exp(0.20000000000000001 * var_chaste_interface__membrane__V)); + return 100 + 900 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(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); @@ -391,7 +393,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abs for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 / (1 + exp(0.65693430656934315 - 0.072992700729927015 * var_chaste_interface__membrane__V)); + return 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(0.65693430656934315) - CHASTE_CONST(0.072992700729927015) * 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); @@ -402,7 +404,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abs for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 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)); + return CHASTE_CONST(7.6100000000000007e-5) * (CHASTE_CONST(44.600000000000001) + var_chaste_interface__membrane__V) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(444.66200000000003) - CHASTE_CONST(9.9700000000000006) * var_chaste_interface__membrane__V)) + CHASTE_CONST(0.00036000000000000002) * (-CHASTE_CONST(0.55000000000000004) + var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.070400000000000004) + CHASTE_CONST(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); @@ -413,7 +415,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abs for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 3.8050000000000003e-5 * (44.600000000000001 + var_chaste_interface__membrane__V) / (1 - exp(-444.66200000000003 - 9.9700000000000006 * var_chaste_interface__membrane__V)) + 0.00018000000000000001 * (-0.55000000000000004 + var_chaste_interface__membrane__V) / (-1 + exp(-0.070400000000000004 + 0.128 * var_chaste_interface__membrane__V)); + return CHASTE_CONST(3.8050000000000003e-5) * (CHASTE_CONST(44.600000000000001) + var_chaste_interface__membrane__V) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(444.66200000000003) - CHASTE_CONST(9.9700000000000006) * var_chaste_interface__membrane__V)) + CHASTE_CONST(0.00018000000000000001) * (-CHASTE_CONST(0.55000000000000004) + var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.070400000000000004) + CHASTE_CONST(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); @@ -424,7 +426,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abs for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 / (1 + exp(11.311475409836067 + 0.16393442622950821 * var_chaste_interface__membrane__V)); + return 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(11.311475409836067) + CHASTE_CONST(0.16393442622950821) * 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); @@ -435,7 +437,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abs for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 175 + 125 / (1 + exp(-4.166666666666667 - 0.16666666666666666 * var_chaste_interface__membrane__V)); + return 175 + 125 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(4.166666666666667) - CHASTE_CONST(0.16666666666666666) * 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); @@ -446,7 +448,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abs for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 0.32000000000000001 * (47.130000000000003 + var_chaste_interface__membrane__V) / (1 - exp(-4.7130000000000001 - 0.10000000000000001 * var_chaste_interface__membrane__V)); + return CHASTE_CONST(0.32000000000000001) * (CHASTE_CONST(47.130000000000003) + var_chaste_interface__membrane__V) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(4.7130000000000001) - CHASTE_CONST(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); @@ -457,7 +459,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abs for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 0.080000000000000002 * exp(-0.090909090909090912 * var_chaste_interface__membrane__V); + return CHASTE_CONST(0.080000000000000002) * CHASTE_MATH::Exp(-CHASTE_CONST(0.090909090909090912) * 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); @@ -468,7 +470,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abs for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 25 * exp(-3.7999999999999998 + 0.050000000000000003 * var_chaste_interface__membrane__V) / (1 + exp(-3.7999999999999998 + 0.050000000000000003 * var_chaste_interface__membrane__V)); + return 25 * CHASTE_MATH::Exp(-CHASTE_CONST(3.7999999999999998) + CHASTE_CONST(0.050000000000000003) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.7999999999999998) + CHASTE_CONST(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); @@ -479,7 +481,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abs for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 25 * exp(-2.7000000000000002 - 0.050000000000000003 * var_chaste_interface__membrane__V) / (1 + exp(-2.7000000000000002 - 0.050000000000000003 * var_chaste_interface__membrane__V)); + return 25 * CHASTE_MATH::Exp(-CHASTE_CONST(2.7000000000000002) - CHASTE_CONST(0.050000000000000003) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.7000000000000002) - CHASTE_CONST(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); @@ -490,7 +492,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abs for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 0.0044200000000000003 / ((1 + exp(1.7333333333333334 + 0.066666666666666666 * var_chaste_interface__membrane__V)) * (0.0044200000000000003 / (1 + exp(1.7333333333333334 + 0.066666666666666666 * var_chaste_interface__membrane__V)) + 0.050000000000000003 * exp(-0.66666666666666663 + 0.066666666666666666 * var_chaste_interface__membrane__V) / (1 + exp(-0.66666666666666663 + 0.066666666666666666 * var_chaste_interface__membrane__V)))); + return CHASTE_CONST(0.0044200000000000003) / ((1 + CHASTE_MATH::Exp(CHASTE_CONST(1.7333333333333334) + CHASTE_CONST(0.066666666666666666) * var_chaste_interface__membrane__V)) * (CHASTE_CONST(0.0044200000000000003) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.7333333333333334) + CHASTE_CONST(0.066666666666666666) * var_chaste_interface__membrane__V)) + CHASTE_CONST(0.050000000000000003) * CHASTE_MATH::Exp(-CHASTE_CONST(0.66666666666666663) + CHASTE_CONST(0.066666666666666666) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.66666666666666663) + CHASTE_CONST(0.066666666666666666) * 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); @@ -501,7 +503,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abs for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 21.5 + 30 / (1 + exp(-2.5 + 0.10000000000000001 * var_chaste_interface__membrane__V)); + return CHASTE_CONST(21.5) + 30 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.5) + CHASTE_CONST(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); @@ -512,7 +514,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abs for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 0.029999999999999999 / ((1 + exp(1.6666666666666667 + 0.066666666666666666 * var_chaste_interface__membrane__V)) * (0.029999999999999999 / (1 + exp(1.6666666666666667 + 0.066666666666666666 * var_chaste_interface__membrane__V)) + 0.10000000000000001 * exp(-2.6666666666666665 + 0.066666666666666666 * var_chaste_interface__membrane__V) / (1 + exp(-2.6666666666666665 + 0.066666666666666666 * var_chaste_interface__membrane__V)))); + return CHASTE_CONST(0.029999999999999999) / ((1 + CHASTE_MATH::Exp(CHASTE_CONST(1.6666666666666667) + CHASTE_CONST(0.066666666666666666) * var_chaste_interface__membrane__V)) * (CHASTE_CONST(0.029999999999999999) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.6666666666666667) + CHASTE_CONST(0.066666666666666666) * var_chaste_interface__membrane__V)) + CHASTE_CONST(0.10000000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(2.6666666666666665) + CHASTE_CONST(0.066666666666666666) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.6666666666666665) + CHASTE_CONST(0.066666666666666666) * 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); @@ -523,7 +525,7 @@ class Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abs for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 6 + 5 / (1 + exp(-1.6499999999999999 + 0.10000000000000001 * var_chaste_interface__membrane__V)); + return 6 + 5 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.6499999999999999) + CHASTE_CONST(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); @@ -556,7 +558,7 @@ std::shared_ptr D 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_amplitude_converted = -80 * CHASTE_CAP(); // 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 @@ -677,22 +679,22 @@ std::shared_ptr D 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[0] = CHASTE_CONST(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[2] = CHASTE_CONST(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[4] = CHASTE_CONST(1.8); // (var_model_parameters__Ca_o) [millimolar] + this->mParameters[5] = CHASTE_CONST(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[7] = CHASTE_CONST(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] + this->mParameters[11] = CHASTE_CONST(0.25); // (var_i_K1__g_K1_max) [milliS_per_microF] + this->mParameters[12] = CHASTE_CONST(0.040008488000000002); // (var_i_Kr__g_Kr_max) [milliS_per_microF] + this->mParameters[13] = CHASTE_CONST(0.052581329000000003); // (var_i_Ks__g_Ks_max) [milliS_per_microF] + this->mParameters[14] = CHASTE_CONST(4.5); // (var_i_NaCa__i_NaCa_max) [microA_per_microF] + this->mParameters[15] = CHASTE_CONST(0.14135944); // (var_i_to_1__g_to_1) [milliS_per_microF] } Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt::~Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt() @@ -743,7 +745,7 @@ std::shared_ptr D // 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -802,10 +804,10 @@ std::shared_ptr D // 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 var_equilibrium_potentials__E_K = CHASTE_CONST(26.712338705498265) * CHASTE_MATH::Log(mParameters[5] / var_chaste_interface__intracellular_ion_concentrations__K_i); // millivolt + const double var_equilibrium_potentials__E_Na = CHASTE_CONST(26.712338705498265) * CHASTE_MATH::Log(mParameters[6] / var_chaste_interface__intracellular_ion_concentrations__Na_i); // millivolt + const double var_membrane__i_tot = CHASTE_CONST(0.0077250000000000001) * var_chaste_interface__membrane__V + CHASTE_CONST(0.0060102762087371094) * CHASTE_MATH::Log(100 / var_chaste_interface__intracellular_ion_concentrations__Cl_i) - CHASTE_CONST(0.0025000000000000001) * var_equilibrium_potentials__E_Na - CHASTE_CONST(0.0050000000000000001) * var_equilibrium_potentials__E_K + (CHASTE_CONST(0.0040000000000000001) + CHASTE_CONST(0.4389381125701739) * CHASTE_MATH::Sqrt(mParameters[5]) * mParameters[11] / ((1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.23849999999999999) * var_equilibrium_potentials__E_K)) * (CHASTE_CONST(1.02) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.23849999999999999) * var_equilibrium_potentials__E_K)) + (CHASTE_CONST(0.49124000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__membrane__V - CHASTE_CONST(0.080320000000000003) * var_equilibrium_potentials__E_K) + CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.061749999999999999) * var_equilibrium_potentials__E_K)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(0.51429999999999998) * var_equilibrium_potentials__E_K - CHASTE_CONST(0.51429999999999998) * var_chaste_interface__membrane__V))))) * (-var_equilibrium_potentials__E_K + var_chaste_interface__membrane__V) + CHASTE_CONST(0.0027599999999999999) * (-var_equilibrium_potentials__E_K + var_chaste_interface__membrane__V) / (_lt_0_row[0]) + CHASTE_CONST(0.057500000000000002) * var_chaste_interface__Ca_i__Ca_i / (CHASTE_CONST(0.00050000000000000001) + var_chaste_interface__Ca_i__Ca_i) + CHASTE_CONST(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 + CHASTE_CONST(0.037374999999999999) * CHASTE_MATH::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 + CHASTE_CONST(0.0028824983370007683) * (-CHASTE_CONST(0.34100000000000003) * mParameters[4] + var_chaste_interface__Ca_i__Ca_i * _lt_0_row[1]) * var_chaste_interface__membrane__V / (_lt_0_row[2]) + (-CHASTE_CONST(1.5) * CHASTE_MATH::Pow(mParameters[6], 3) * var_chaste_interface__Ca_i__Ca_i * _lt_0_row[3] + CHASTE_CONST(0.40000000000000002) * CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mParameters[14] * mParameters[4] * _lt_0_row[4]) / ((_lt_0_row[5]) * (1 + CHASTE_CONST(6.9444444444444451e-9) / CHASTE_MATH::Pow(var_chaste_interface__Ca_i__Ca_i, 2)) * (CHASTE_CONST(1004882.8125) * var_chaste_interface__Ca_i__Ca_i + CHASTE_CONST(1.3) * CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) + CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mParameters[4] + CHASTE_CONST(1.5) * CHASTE_MATH::Pow(mParameters[6], 3) * var_chaste_interface__Ca_i__Ca_i + CHASTE_CONST(0.0035999999999999999) * CHASTE_MATH::Pow(mParameters[6], 3) * (1 + CHASTE_CONST(0.081300813008130079) * var_chaste_interface__intracellular_ion_concentrations__Na_i) + CHASTE_CONST(1860.8670000000004) * (1 + CHASTE_CONST(416.66666666666669) * var_chaste_interface__Ca_i__Ca_i) * mParameters[4])) + CHASTE_MATH::Pow(var_chaste_interface__i_Na_m_gate__m, 3) * (-var_equilibrium_potentials__E_Na + var_chaste_interface__membrane__V) * (CHASTE_CONST(0.20000000000000001) * var_chaste_interface__i_Na_j_gate__j + CHASTE_CONST(0.80000000000000004) * var_chaste_interface__i_Na_h_gate__h) * mParameters[8] + (-var_equilibrium_potentials__E_K + var_chaste_interface__membrane__V) * (CHASTE_CONST(0.20000000000000001) * var_chaste_interface__i_to_1_i2_gate__i2 + CHASTE_CONST(0.80000000000000004) * var_chaste_interface__i_to_1_i_gate__i) * mParameters[15] * var_chaste_interface__i_to_1_a_gate__a + CHASTE_CONST(0.61875000000000002) * mParameters[5] / ((1 + 100 / CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 2)) * (CHASTE_CONST(1.5) + mParameters[5]) * (1 + _lt_0_row[7] + CHASTE_CONST(0.036499999999999998) * (-CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(0.01485884101040119) * mParameters[6])) * _lt_0_row[6])) + CHASTE_CONST(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 + CHASTE_CONST(0.59999999999999998) / (1 + CHASTE_CONST(6.4818210260626455e-7) * CHASTE_MATH::Pow((1 / var_chaste_interface__Ca_i__Ca_i), CHASTE_CONST(1.3999999999999999)))) * (-CHASTE_CONST(26.712338705498265) * CHASTE_MATH::Log((CHASTE_CONST(0.018329999999999999) * mParameters[6] + mParameters[5]) / (CHASTE_CONST(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 + CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::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]) + CHASTE_CONST(3.510865186083326) * (-15 + var_chaste_interface__membrane__V) * (-CHASTE_CONST(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 = CHASTE_CAP() * var_membrane__i_tot; // uA_per_cm2 const double i_ionic = var_chaste_interface__i_ionic; EXCEPT_IF_NOT(!std::isnan(i_ionic)); @@ -816,7 +818,7 @@ std::shared_ptr D { // 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)); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -887,15 +889,15 @@ std::shared_ptr D // 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_bound = CHASTE_CONST(0.050000000000000003) * (1 - var_chaste_interface__Ca_MK_act__Ca_MK_trap) / (1 + CHASTE_CONST(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_Ca_MK_act__Ca_MK_trap = -CHASTE_CONST(0.00068000000000000005) * var_chaste_interface__Ca_MK_act__Ca_MK_trap + CHASTE_CONST(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 = CHASTE_CONST(0.057500000000000002) * var_chaste_interface__Ca_i__Ca_i / (CHASTE_CONST(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 + CHASTE_CONST(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_L_f2_gate__f2 = (-var_chaste_interface__i_Ca_L_f2_gate__f2 + _lt_0_row[15]) / (38 + CHASTE_CONST(24.217200000000005) * CHASTE_MATH::Pow((-1 + CHASTE_CONST(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 + CHASTE_CONST(0.03125) * CHASTE_MATH::Pow((-1 + CHASTE_CONST(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 @@ -905,12 +907,12 @@ std::shared_ptr D 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_h_gate__alpha_h = ((var_chaste_interface__membrane__V < -40) ? (CHASTE_CONST(0.13500000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(11.764705882352942) + CHASTE_CONST(0.14705882352941177) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(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 * CHASTE_MATH::Exp(CHASTE_CONST(0.34999999999999998) * var_chaste_interface__membrane__V - CHASTE_CONST(0.34999999999999998) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time)) + CHASTE_CONST(3.5600000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.079000000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.079000000000000001) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time))) : (CHASTE_CONST(7.6923076923076916) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.96036036036036043) + CHASTE_CONST(0.0900900900900901) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(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 + CHASTE_CONST(0.01) * mp_membrane_fast_sodium_current_reduced_inactivation_modifier->Calc(mParameters[9], var_chaste_interface__environment__time) + (1 - CHASTE_CONST(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) ? ((CHASTE_CONST(37.780000000000001) + var_chaste_interface__membrane__V) * (-127140 * CHASTE_MATH::Exp(CHASTE_CONST(0.24440000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.24440000000000001) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time)) - CHASTE_CONST(3.4740000000000003e-5) * CHASTE_MATH::Exp(CHASTE_CONST(0.043909999999999998) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(0.043909999999999998) * var_chaste_interface__membrane__V)) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(24.640530000000002) + CHASTE_CONST(0.311) * var_chaste_interface__membrane__V - CHASTE_CONST(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) ? (CHASTE_CONST(0.1212) * CHASTE_MATH::Exp(CHASTE_CONST(0.01052) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(0.01052) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(5.5312920000000005) + CHASTE_CONST(0.13780000000000001) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(0.13780000000000001) * var_chaste_interface__membrane__V))) : (CHASTE_CONST(0.29999999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(2.5349999999999999e-7) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(2.5349999999999999e-7) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.2000000000000002) + CHASTE_CONST(0.10000000000000001) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(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 + CHASTE_CONST(0.01) * mp_membrane_fast_sodium_current_reduced_inactivation_modifier->Calc(mParameters[9], var_chaste_interface__environment__time) + (1 - CHASTE_CONST(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 @@ -919,43 +921,43 @@ std::shared_ptr D 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_equilibrium_potentials__E_Cl = -CHASTE_CONST(26.712338705498265) * CHASTE_MATH::Log(100 / var_chaste_interface__intracellular_ion_concentrations__Cl_i); // millivolt + const double var_background_currents__i_Cl_b = CHASTE_CONST(0.00022499999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.00022499999999999999) * var_equilibrium_potentials__E_Cl; // microA_per_microF + const double var_equilibrium_potentials__E_K = CHASTE_CONST(26.712338705498265) * CHASTE_MATH::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 = CHASTE_CONST(7.0755999999999996e-6) * (-var_equilibrium_potentials__E_Cl + var_equilibrium_potentials__E_K) / (CHASTE_CONST(87.825100000000006) - var_equilibrium_potentials__E_Cl + var_equilibrium_potentials__E_K); // millimolar_per_millisecond + const double var_background_currents__i_K_b = CHASTE_CONST(0.0050000000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.0050000000000000001) * var_equilibrium_potentials__E_K; // microA_per_microF + const double var_equilibrium_potentials__E_Na = CHASTE_CONST(26.712338705498265) * CHASTE_MATH::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 = CHASTE_CONST(9.8442999999999999e-6) * CHASTE_MATH::Pow((-var_equilibrium_potentials__E_Cl + var_equilibrium_potentials__E_Na), 4) / (CHASTE_CONST(59494197.640692554) + CHASTE_MATH::Pow((-var_equilibrium_potentials__E_Cl + var_equilibrium_potentials__E_Na), 4)); // millimolar_per_millisecond + const double var_background_currents__i_Na_b = CHASTE_CONST(0.0025000000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.0025000000000000001) * var_equilibrium_potentials__E_Na; // microA_per_microF + const double var_i_K1__i_K1 = mp_i_K1__i_K1_modifier->Calc((CHASTE_CONST(0.0040000000000000001) + CHASTE_CONST(0.4389381125701739) * CHASTE_MATH::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 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.23849999999999999) * var_equilibrium_potentials__E_K)) * (CHASTE_CONST(1.02) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.23849999999999999) * var_equilibrium_potentials__E_K)) + (CHASTE_CONST(0.49124000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__membrane__V - CHASTE_CONST(0.080320000000000003) * var_equilibrium_potentials__E_K) + CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.061749999999999999) * var_equilibrium_potentials__E_K)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(0.51429999999999998) * var_equilibrium_potentials__E_K - CHASTE_CONST(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 = CHASTE_CONST(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(CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::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 + CHASTE_CONST(0.59999999999999998) / (1 + CHASTE_CONST(6.4818210260626455e-7) * CHASTE_MATH::Pow((1 / var_chaste_interface__Ca_i__Ca_i), CHASTE_CONST(1.3999999999999999)))) * (-CHASTE_CONST(26.712338705498265) * CHASTE_MATH::Log((CHASTE_CONST(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)) / (CHASTE_CONST(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(CHASTE_MATH::Pow(var_chaste_interface__i_Na_m_gate__m, 3) * (-var_equilibrium_potentials__E_Na + var_chaste_interface__membrane__V) * (CHASTE_CONST(0.20000000000000001) * var_chaste_interface__i_Na_j_gate__j + CHASTE_CONST(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((-CHASTE_CONST(1.5) * CHASTE_MATH::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] + CHASTE_CONST(0.40000000000000002) * CHASTE_MATH::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 + CHASTE_CONST(6.9444444444444451e-9) / CHASTE_MATH::Pow(var_chaste_interface__Ca_i__Ca_i, 2)) * (CHASTE_CONST(1004882.8125) * var_chaste_interface__Ca_i__Ca_i + CHASTE_CONST(1.3) * CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) + CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mp_extracellular_calcium_concentration_modifier->Calc(mParameters[4], var_chaste_interface__environment__time) + CHASTE_CONST(1.5) * CHASTE_MATH::Pow(mp_extracellular_sodium_concentration_modifier->Calc(mParameters[6], var_chaste_interface__environment__time), 3) * var_chaste_interface__Ca_i__Ca_i + CHASTE_CONST(0.0035999999999999999) * CHASTE_MATH::Pow(mp_extracellular_sodium_concentration_modifier->Calc(mParameters[6], var_chaste_interface__environment__time), 3) * (1 + CHASTE_CONST(0.081300813008130079) * var_chaste_interface__intracellular_ion_concentrations__Na_i) + CHASTE_CONST(1860.8670000000004) * (1 + CHASTE_CONST(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 = CHASTE_CONST(0.61875000000000002) * mp_extracellular_potassium_concentration_modifier->Calc(mParameters[5], var_chaste_interface__environment__time) / ((1 + 100 / CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 2)) * (CHASTE_CONST(1.5) + mp_extracellular_potassium_concentration_modifier->Calc(mParameters[5], var_chaste_interface__environment__time)) * (1 + _lt_0_row[7] + CHASTE_CONST(0.036499999999999998) * (-CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(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 = CHASTE_CONST(0.037374999999999999) * CHASTE_MATH::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) * (CHASTE_CONST(0.20000000000000001) * var_chaste_interface__i_to_1_i2_gate__i2 + CHASTE_CONST(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 = CHASTE_CONST(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 = (-CHASTE_CONST(6.767281717060562e-9) * var_background_currents__i_Cl_b - CHASTE_CONST(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 = (CHASTE_CONST(1.3534563434121124e-8) * var_i_NaK__i_NaK - CHASTE_CONST(6.767281717060562e-9) * var_background_currents__i_K_b - CHASTE_CONST(6.767281717060562e-9) * var_i_K1__i_K1 - CHASTE_CONST(6.767281717060562e-9) * var_i_K_p__i_K_p - CHASTE_CONST(6.767281717060562e-9) * var_i_Kr__i_Kr - CHASTE_CONST(6.767281717060562e-9) * var_i_Ks__i_Ks - CHASTE_CONST(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 = (-CHASTE_CONST(2.0301845151181685e-8) * var_i_NaCa__i_NaCa - CHASTE_CONST(2.0301845151181685e-8) * var_i_NaK__i_NaK - CHASTE_CONST(6.767281717060562e-9) * var_background_currents__i_Na_b - CHASTE_CONST(6.767281717060562e-9) * var_i_Na__i_Na - CHASTE_CONST(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 = CHASTE_CONST(0.0028824983370007683) * (-CHASTE_CONST(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 = CHASTE_CONST(3.510865186083326) * (-15 + var_chaste_interface__membrane__V) * (-CHASTE_CONST(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 + 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 + CHASTE_MATH::Exp(-CHASTE_CONST(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 = (CHASTE_CONST(0.14999999999999999) - var_chaste_interface__i_Ca_L_f_Ca_gate__f_Ca + CHASTE_CONST(0.55000000000000004) / (1 + CHASTE_CONST(333.33333333333331) * var_chaste_interface__Ca_r__Ca_r) + CHASTE_CONST(0.29999999999999999) / (1 - 20 * var_i_Ca_L__i_Ca_L)) / (CHASTE_CONST(0.5) + 1 / (1 + CHASTE_CONST(333.33333333333331) * var_chaste_interface__Ca_r__Ca_r) + 10 * var_Ca_MK_act__Ca_MK_act / (CHASTE_CONST(0.14999999999999999) + var_Ca_MK_act__Ca_MK_act)); // 1 / millisecond + const double var_q_leak__q_leak = CHASTE_CONST(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 + CHASTE_MATH::Exp(CHASTE_CONST(3.3333333333333335) + CHASTE_CONST(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 + CHASTE_MATH::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 / (CHASTE_CONST(0.14999999999999999) + var_Ca_MK_act__Ca_MK_act)) / (1 + CHASTE_MATH::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 / (CHASTE_CONST(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 + CHASTE_MATH::Exp(CHASTE_CONST(2.6000000000000001) + CHASTE_CONST(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 + CHASTE_CONST(0.23999999999999996) * var_q_rel__q_rel - CHASTE_CONST(1.1504378919002956e-7) * var_i_Ca_L__i_Ca_L) / (1 + CHASTE_CONST(2.2480000000000002) * var_chaste_interface__Ca_r__Ca_r / CHASTE_MATH::Pow((CHASTE_CONST(0.0086999999999999994) + var_chaste_interface__Ca_r__Ca_r), 2) + CHASTE_CONST(0.094) * var_chaste_interface__Ca_r__Ca_r / CHASTE_MATH::Pow((CHASTE_CONST(0.00087000000000000001) + var_chaste_interface__Ca_r__Ca_r), 2)); // millimolar / millisecond + const double d_dt_chaste_interface_var_q_rel_ro_gate__ro = -CHASTE_CONST(0.33333333333333331) * var_chaste_interface__q_rel_ro_gate__ro + CHASTE_CONST(0.33333333333333331) * CHASTE_MATH::Pow(var_chaste_interface__Ca_JSR__Ca_JSR, CHASTE_CONST(1.8999999999999999)) * CHASTE_MATH::Pow(var_i_Ca_L__i_Ca_L, 2) / ((1 + CHASTE_MATH::Pow(var_i_Ca_L__i_Ca_L, 2)) * (CHASTE_MATH::Pow(var_chaste_interface__Ca_JSR__Ca_JSR, CHASTE_CONST(1.8999999999999999)) + CHASTE_CONST(1644.6531773416521) * CHASTE_MATH::Pow((var_chaste_interface__Ca_r__Ca_r / (CHASTE_CONST(0.0028) + var_chaste_interface__Ca_r__Ca_r)), CHASTE_CONST(1.8999999999999999)))); // 1 / millisecond + const double var_q_tr__q_tr = CHASTE_CONST(0.0083333333333333332) * var_chaste_interface__Ca_NSR__Ca_NSR - CHASTE_CONST(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 / CHASTE_MATH::Pow((CHASTE_CONST(0.80000000000000004) + var_chaste_interface__Ca_JSR__Ca_JSR), 2)); // millimolar / millisecond + const double var_q_up__q_up = CHASTE_CONST(0.5) * (1 + CHASTE_CONST(0.75) * var_Ca_MK_act__Ca_MK_act / (CHASTE_CONST(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) / (CHASTE_CONST(0.00092000000000000003) - CHASTE_CONST(0.00017000000000000001) * var_Ca_MK_act__Ca_MK_act / (CHASTE_CONST(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 - CHASTE_CONST(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 = -(CHASTE_CONST(3.383640858530281e-9) * var_background_currents__i_Ca_b + CHASTE_CONST(3.383640858530281e-9) * var_i_Ca_p__i_Ca_p + CHASTE_CONST(0.081176470588235281) * var_q_up__q_up - CHASTE_CONST(0.029411764705882353) * var_Ca_r__q_diff - CHASTE_CONST(6.767281717060562e-9) * var_i_NaCa__i_NaCa - CHASTE_CONST(0.081176470588235281) * var_q_leak__q_leak) / (1 + CHASTE_CONST(0.14000000000000001) * var_chaste_interface__Ca_i__Ca_i / CHASTE_MATH::Pow((CHASTE_CONST(0.00050000000000000001) + var_chaste_interface__Ca_i__Ca_i), 2) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__Ca_i__Ca_i / CHASTE_MATH::Pow((CHASTE_CONST(0.0023800000000000002) + var_chaste_interface__Ca_i__Ca_i), 2)); // millimolar / millisecond if (mSetVoltageDerivativeToZero) { @@ -963,7 +965,7 @@ std::shared_ptr D } 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 + 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 - CHASTE_STIM(var_chaste_interface__environment__time) / CHASTE_CAP() - CHASTE_CONST(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; @@ -1002,7 +1004,7 @@ std::shared_ptr D { // 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)); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -1058,65 +1060,65 @@ std::shared_ptr D 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_0 = CHASTE_CONST(0.050000000000000003); // dimensionless + const double var_Ca_MK_act__km_Ca_MK = CHASTE_CONST(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_equilibrium_potentials__r_NaK = CHASTE_CONST(0.018329999999999999); // dimensionless + const double var_i_Ca_L__p_Ca = CHASTE_CONST(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(CHASTE_CONST(0.5) + 1 / (1 + CHASTE_CONST(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 + CHASTE_CONST(0.59999999999999998) / (1 + CHASTE_CONST(6.4818210260626455e-7) * CHASTE_MATH::Pow((1 / var_chaste_interface__Ca_i__Ca_i), CHASTE_CONST(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 = CHASTE_CONST(0.40000000000000002); // dimensionless + const double var_i_NaCa__k_sat = CHASTE_CONST(0.27000000000000002); // dimensionless + const double var_i_NaCa__km_Ca_act = CHASTE_CONST(0.000125); // millimolar + const double var_i_NaCa__km_Ca_i = CHASTE_CONST(0.0035999999999999999); // millimolar + const double var_i_NaCa__km_Ca_o = CHASTE_CONST(1.3); // millimolar + const double var_i_NaCa__km_Na_i_1 = CHASTE_CONST(12.300000000000001); // millimolar + const double var_i_NaCa__km_Na_o = CHASTE_CONST(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 + CHASTE_CONST(24.217200000000005) * CHASTE_MATH::Pow((-1 + CHASTE_CONST(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 + CHASTE_CONST(0.03125) * CHASTE_MATH::Pow((-1 + CHASTE_CONST(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__alpha_h = ((var_chaste_interface__membrane__V < -40) ? (CHASTE_CONST(0.13500000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(11.764705882352942) + CHASTE_CONST(0.14705882352941177) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(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 * CHASTE_MATH::Exp(CHASTE_CONST(0.34999999999999998) * var_chaste_interface__membrane__V - CHASTE_CONST(0.34999999999999998) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time)) + CHASTE_CONST(3.5600000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.079000000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.079000000000000001) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time))) : (CHASTE_CONST(7.6923076923076916) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.96036036036036043) + CHASTE_CONST(0.0900900900900901) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(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__alpha_j = ((var_chaste_interface__membrane__V < -40) ? ((CHASTE_CONST(37.780000000000001) + var_chaste_interface__membrane__V) * (-127140 * CHASTE_MATH::Exp(CHASTE_CONST(0.24440000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.24440000000000001) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time)) - CHASTE_CONST(3.4740000000000003e-5) * CHASTE_MATH::Exp(CHASTE_CONST(0.043909999999999998) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(0.043909999999999998) * var_chaste_interface__membrane__V)) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(24.640530000000002) + CHASTE_CONST(0.311) * var_chaste_interface__membrane__V - CHASTE_CONST(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) ? (CHASTE_CONST(0.1212) * CHASTE_MATH::Exp(CHASTE_CONST(0.01052) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(0.01052) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(5.5312920000000005) + CHASTE_CONST(0.13780000000000001) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(0.13780000000000001) * var_chaste_interface__membrane__V))) : (CHASTE_CONST(0.29999999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(2.5349999999999999e-7) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(2.5349999999999999e-7) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.2000000000000002) + CHASTE_CONST(0.10000000000000001) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(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_membrane__i_stim_converted = CHASTE_STIM(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_i_NaCa__dNaCa_1 = CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * var_i_NaCa__km_Ca_o + CHASTE_CONST(1.5) * CHASTE_MATH::Pow(var_i_NaCa__km_Na_o, 3) * var_chaste_interface__Ca_i__Ca_i + CHASTE_MATH::Pow(var_i_NaCa__km_Na_i_1, 3) * (1 + CHASTE_CONST(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_i_K1__g_K1 = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::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 = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::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 = CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mp_extracellular_calcium_concentration_modifier->Calc(mParameters[4], var_chaste_interface__environment__time) + CHASTE_CONST(1.5) * CHASTE_MATH::Pow(mp_extracellular_sodium_concentration_modifier->Calc(mParameters[6], var_chaste_interface__environment__time), 3) * var_chaste_interface__Ca_i__Ca_i + CHASTE_MATH::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_equilibrium_potentials__E_K = var_model_parameters__R * var_model_parameters__T * CHASTE_MATH::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 * CHASTE_MATH::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 * CHASTE_MATH::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 = CHASTE_CONST(1.02) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.23849999999999999) * var_equilibrium_potentials__E_K)); // dimensionless + const double var_i_K1_xK1_gate__beta_xK1 = (CHASTE_CONST(0.49124000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__membrane__V - CHASTE_CONST(0.080320000000000003) * var_equilibrium_potentials__E_K) + CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.061749999999999999) * var_equilibrium_potentials__E_K)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(0.51429999999999998) * var_equilibrium_potentials__E_K - CHASTE_CONST(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_K1__i_K1 = mp_i_K1__i_K1_modifier->Calc((CHASTE_CONST(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 = CHASTE_CAP() * 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_Kr__i_Kr_converted = CHASTE_CAP() * 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_i_Ks__i_Ks_converted = CHASTE_CAP() * var_i_Ks__i_Ks; // uA_per_cm2 + const double var_i_Na__i_Na = mp_i_Na__i_Na_modifier->Calc(CHASTE_MATH::Pow(var_chaste_interface__i_Na_m_gate__m, 3) * (-var_equilibrium_potentials__E_Na + var_chaste_interface__membrane__V) * (CHASTE_CONST(0.20000000000000001) * var_chaste_interface__i_Na_j_gate__j + CHASTE_CONST(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 = CHASTE_CAP() * var_i_Na__i_Na; // uA_per_cm2 + const double var_i_NaCa__i_NaCa = mp_i_NaCa__i_NaCa_modifier->Calc((-CHASTE_CONST(1.5) * CHASTE_MATH::Pow(mp_extracellular_sodium_concentration_modifier->Calc(mParameters[6], var_chaste_interface__environment__time), 3) * var_chaste_interface__Ca_i__Ca_i * CHASTE_MATH::Exp(-CHASTE_CONST(0.65000000000000002) * var_chaste_interface__membrane__V * var_model_parameters__F / (var_model_parameters__R * var_model_parameters__T)) + CHASTE_MATH::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) * CHASTE_MATH::Exp(CHASTE_CONST(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 * CHASTE_MATH::Exp(-CHASTE_CONST(0.65000000000000002) * var_chaste_interface__membrane__V * var_model_parameters__F / (var_model_parameters__R * var_model_parameters__T))) * (1 + CHASTE_CONST(0.44444444444444442) * CHASTE_MATH::Pow(var_i_NaCa__km_Ca_act, 2) / CHASTE_MATH::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 = CHASTE_CAP() * 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) * (CHASTE_CONST(0.20000000000000001) * var_chaste_interface__i_to_1_i2_gate__i2 + CHASTE_CONST(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 = CHASTE_CAP() * 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__gamma_Cao = CHASTE_CONST(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_max = CHASTE_MATH::Pow(var_model_parameters__F, 2) * CHASTE_MATH::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 * CHASTE_MATH::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 + CHASTE_MATH::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_i_Ca_L__i_Ca_L_converted = CHASTE_CAP() * 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 + CHASTE_MATH::Exp(-CHASTE_CONST(4.375) - 25 * var_i_Ca_L__i_Ca_L)), var_chaste_interface__environment__time); // millisecond + const double var_q_rel__vg = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(2.6000000000000001) + CHASTE_CONST(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 diff --git a/chaste_codegen/data/tests/chaste_reference_models/Opt/dynamic_aslanidi_Purkinje_model_2009.hpp b/chaste_codegen/data/tests/chaste_reference_models/Opt/dynamic_aslanidi_Purkinje_model_2009.hpp index 4bfdf1ff9..fcae39e1c 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/Opt/dynamic_aslanidi_Purkinje_model_2009.hpp +++ b/chaste_codegen/data/tests/chaste_reference_models/Opt/dynamic_aslanidi_Purkinje_model_2009.hpp @@ -19,6 +19,9 @@ #include "AbstractModifier.hpp" #include "AbstractDynamicallyLoadableEntity.hpp" #include "AbstractStimulusFunction.hpp" +#if USING_DEVICE_COMPILER +#include "StimulusEvaluatorCuda.hpp" +#endif #include "AbstractCardiacCell.hpp" class Dynamicaslanidi_Purkinje_model_2009FromCellMLOpt : public AbstractCardiacCellWithModifiers, public AbstractDynamicallyLoadableEntity diff --git a/chaste_codegen/data/tests/chaste_reference_models/Opt/dynamic_aslanidi_Purkinje_model_2009Opt.cpp b/chaste_codegen/data/tests/chaste_reference_models/Opt/dynamic_aslanidi_Purkinje_model_2009Opt.cpp new file mode 100644 index 000000000..0e72fcc7d --- /dev/null +++ b/chaste_codegen/data/tests/chaste_reference_models/Opt/dynamic_aslanidi_Purkinje_model_2009Opt.cpp @@ -0,0 +1,1445 @@ +//! @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 "ChasteMathDeviceNamespaces.hpp" +#include "ChasteCpuMacros.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 * CHASTE_CAP(); // 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] = CHASTE_CONST(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] = CHASTE_CONST(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] = CHASTE_CONST(1.8); // (var_model_parameters__Ca_o) [millimolar] + this->mParameters[5] = CHASTE_CONST(5.4000000000000004); // (var_model_parameters__K_o) [millimolar] + this->mParameters[6] = 140; // (var_model_parameters__Na_o) [millimolar] + this->mParameters[7] = CHASTE_CONST(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] = CHASTE_CONST(0.25); // (var_i_K1__g_K1_max) [milliS_per_microF] + this->mParameters[12] = CHASTE_CONST(0.040008488000000002); // (var_i_Kr__g_Kr_max) [milliS_per_microF] + this->mParameters[13] = CHASTE_CONST(0.052581329000000003); // (var_i_Ks__g_Ks_max) [milliS_per_microF] + this->mParameters[14] = CHASTE_CONST(4.5); // (var_i_NaCa__i_NaCa_max) [microA_per_microF] + this->mParameters[15] = CHASTE_CONST(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 ? CHASTE_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 = CHASTE_CONST(26.712338705498265) * CHASTE_MATH::Log(mParameters[5] / var_chaste_interface__intracellular_ion_concentrations__K_i); // millivolt + const double var_equilibrium_potentials__E_Na = CHASTE_CONST(26.712338705498265) * CHASTE_MATH::Log(mParameters[6] / var_chaste_interface__intracellular_ion_concentrations__Na_i); // millivolt + const double var_membrane__i_tot = CHASTE_CONST(0.0077250000000000001) * var_chaste_interface__membrane__V + CHASTE_CONST(0.0060102762087371094) * CHASTE_MATH::Log(100 / var_chaste_interface__intracellular_ion_concentrations__Cl_i) - CHASTE_CONST(0.0025000000000000001) * var_equilibrium_potentials__E_Na - CHASTE_CONST(0.0050000000000000001) * var_equilibrium_potentials__E_K + (CHASTE_CONST(0.0040000000000000001) + CHASTE_CONST(0.4389381125701739) * CHASTE_MATH::Sqrt(mParameters[5]) * mParameters[11] / ((1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.23849999999999999) * var_equilibrium_potentials__E_K)) * (CHASTE_CONST(1.02) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.23849999999999999) * var_equilibrium_potentials__E_K)) + (CHASTE_CONST(0.49124000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__membrane__V - CHASTE_CONST(0.080320000000000003) * var_equilibrium_potentials__E_K) + CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.061749999999999999) * var_equilibrium_potentials__E_K)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(0.51429999999999998) * var_equilibrium_potentials__E_K - CHASTE_CONST(0.51429999999999998) * var_chaste_interface__membrane__V))))) * (-var_equilibrium_potentials__E_K + var_chaste_interface__membrane__V) + CHASTE_CONST(0.0027599999999999999) * (-var_equilibrium_potentials__E_K + var_chaste_interface__membrane__V) / (_lt_0_row[0]) + CHASTE_CONST(0.057500000000000002) * var_chaste_interface__Ca_i__Ca_i / (CHASTE_CONST(0.00050000000000000001) + var_chaste_interface__Ca_i__Ca_i) + CHASTE_CONST(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 + CHASTE_CONST(0.037374999999999999) * CHASTE_MATH::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 + CHASTE_CONST(0.0028824983370007683) * (-CHASTE_CONST(0.34100000000000003) * mParameters[4] + var_chaste_interface__Ca_i__Ca_i * _lt_0_row[1]) * var_chaste_interface__membrane__V / (_lt_0_row[2]) + (-CHASTE_CONST(1.5) * CHASTE_MATH::Pow(mParameters[6], 3) * var_chaste_interface__Ca_i__Ca_i * _lt_0_row[3] + CHASTE_CONST(0.40000000000000002) * CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mParameters[14] * mParameters[4] * _lt_0_row[4]) / ((_lt_0_row[5]) * (1 + CHASTE_CONST(6.9444444444444451e-9) / CHASTE_MATH::Pow(var_chaste_interface__Ca_i__Ca_i, 2)) * (CHASTE_CONST(1004882.8125) * var_chaste_interface__Ca_i__Ca_i + CHASTE_CONST(1.3) * CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) + CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mParameters[4] + CHASTE_CONST(1.5) * CHASTE_MATH::Pow(mParameters[6], 3) * var_chaste_interface__Ca_i__Ca_i + CHASTE_CONST(0.0035999999999999999) * CHASTE_MATH::Pow(mParameters[6], 3) * (1 + CHASTE_CONST(0.081300813008130079) * var_chaste_interface__intracellular_ion_concentrations__Na_i) + CHASTE_CONST(1860.8670000000004) * (1 + CHASTE_CONST(416.66666666666669) * var_chaste_interface__Ca_i__Ca_i) * mParameters[4])) + CHASTE_MATH::Pow(var_chaste_interface__i_Na_m_gate__m, 3) * (-var_equilibrium_potentials__E_Na + var_chaste_interface__membrane__V) * (CHASTE_CONST(0.20000000000000001) * var_chaste_interface__i_Na_j_gate__j + CHASTE_CONST(0.80000000000000004) * var_chaste_interface__i_Na_h_gate__h) * mParameters[8] + (-var_equilibrium_potentials__E_K + var_chaste_interface__membrane__V) * (CHASTE_CONST(0.20000000000000001) * var_chaste_interface__i_to_1_i2_gate__i2 + CHASTE_CONST(0.80000000000000004) * var_chaste_interface__i_to_1_i_gate__i) * mParameters[15] * var_chaste_interface__i_to_1_a_gate__a + CHASTE_CONST(0.61875000000000002) * mParameters[5] / ((1 + 100 / CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 2)) * (CHASTE_CONST(1.5) + mParameters[5]) * (1 + _lt_0_row[7] + CHASTE_CONST(0.036499999999999998) * (-CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(0.01485884101040119) * mParameters[6])) * _lt_0_row[6])) + CHASTE_CONST(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 + CHASTE_CONST(0.59999999999999998) / (1 + CHASTE_CONST(6.4818210260626455e-7) * CHASTE_MATH::Pow((1 / var_chaste_interface__Ca_i__Ca_i), CHASTE_CONST(1.3999999999999999)))) * (-CHASTE_CONST(26.712338705498265) * CHASTE_MATH::Log((CHASTE_CONST(0.018329999999999999) * mParameters[6] + mParameters[5]) / (CHASTE_CONST(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 + CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::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]) + CHASTE_CONST(3.510865186083326) * (-15 + var_chaste_interface__membrane__V) * (-CHASTE_CONST(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 = CHASTE_CAP() * 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 ? CHASTE_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 = CHASTE_CONST(0.050000000000000003) * (1 - var_chaste_interface__Ca_MK_act__Ca_MK_trap) / (1 + CHASTE_CONST(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 = -CHASTE_CONST(0.00068000000000000005) * var_chaste_interface__Ca_MK_act__Ca_MK_trap + CHASTE_CONST(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 = CHASTE_CONST(0.057500000000000002) * var_chaste_interface__Ca_i__Ca_i / (CHASTE_CONST(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 + CHASTE_CONST(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 + CHASTE_CONST(24.217200000000005) * CHASTE_MATH::Pow((-1 + CHASTE_CONST(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 + CHASTE_CONST(0.03125) * CHASTE_MATH::Pow((-1 + CHASTE_CONST(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) ? (CHASTE_CONST(0.13500000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(11.764705882352942) + CHASTE_CONST(0.14705882352941177) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(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 * CHASTE_MATH::Exp(CHASTE_CONST(0.34999999999999998) * var_chaste_interface__membrane__V - CHASTE_CONST(0.34999999999999998) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time)) + CHASTE_CONST(3.5600000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.079000000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.079000000000000001) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time))) : (CHASTE_CONST(7.6923076923076916) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.96036036036036043) + CHASTE_CONST(0.0900900900900901) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(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 + CHASTE_CONST(0.01) * mp_membrane_fast_sodium_current_reduced_inactivation_modifier->Calc(mParameters[9], var_chaste_interface__environment__time) + (1 - CHASTE_CONST(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) ? ((CHASTE_CONST(37.780000000000001) + var_chaste_interface__membrane__V) * (-127140 * CHASTE_MATH::Exp(CHASTE_CONST(0.24440000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.24440000000000001) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time)) - CHASTE_CONST(3.4740000000000003e-5) * CHASTE_MATH::Exp(CHASTE_CONST(0.043909999999999998) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(0.043909999999999998) * var_chaste_interface__membrane__V)) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(24.640530000000002) + CHASTE_CONST(0.311) * var_chaste_interface__membrane__V - CHASTE_CONST(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) ? (CHASTE_CONST(0.1212) * CHASTE_MATH::Exp(CHASTE_CONST(0.01052) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(0.01052) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(5.5312920000000005) + CHASTE_CONST(0.13780000000000001) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(0.13780000000000001) * var_chaste_interface__membrane__V))) : (CHASTE_CONST(0.29999999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(2.5349999999999999e-7) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(2.5349999999999999e-7) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.2000000000000002) + CHASTE_CONST(0.10000000000000001) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(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 + CHASTE_CONST(0.01) * mp_membrane_fast_sodium_current_reduced_inactivation_modifier->Calc(mParameters[9], var_chaste_interface__environment__time) + (1 - CHASTE_CONST(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 = -CHASTE_CONST(26.712338705498265) * CHASTE_MATH::Log(100 / var_chaste_interface__intracellular_ion_concentrations__Cl_i); // millivolt + const double var_background_currents__i_Cl_b = CHASTE_CONST(0.00022499999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.00022499999999999999) * var_equilibrium_potentials__E_Cl; // microA_per_microF + const double var_equilibrium_potentials__E_K = CHASTE_CONST(26.712338705498265) * CHASTE_MATH::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 = CHASTE_CONST(7.0755999999999996e-6) * (-var_equilibrium_potentials__E_Cl + var_equilibrium_potentials__E_K) / (CHASTE_CONST(87.825100000000006) - var_equilibrium_potentials__E_Cl + var_equilibrium_potentials__E_K); // millimolar_per_millisecond + const double var_background_currents__i_K_b = CHASTE_CONST(0.0050000000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.0050000000000000001) * var_equilibrium_potentials__E_K; // microA_per_microF + const double var_equilibrium_potentials__E_Na = CHASTE_CONST(26.712338705498265) * CHASTE_MATH::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 = CHASTE_CONST(9.8442999999999999e-6) * CHASTE_MATH::Pow((-var_equilibrium_potentials__E_Cl + var_equilibrium_potentials__E_Na), 4) / (CHASTE_CONST(59494197.640692554) + CHASTE_MATH::Pow((-var_equilibrium_potentials__E_Cl + var_equilibrium_potentials__E_Na), 4)); // millimolar_per_millisecond + const double var_background_currents__i_Na_b = CHASTE_CONST(0.0025000000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.0025000000000000001) * var_equilibrium_potentials__E_Na; // microA_per_microF + const double var_i_K1__i_K1 = mp_i_K1__i_K1_modifier->Calc((CHASTE_CONST(0.0040000000000000001) + CHASTE_CONST(0.4389381125701739) * CHASTE_MATH::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 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.23849999999999999) * var_equilibrium_potentials__E_K)) * (CHASTE_CONST(1.02) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.23849999999999999) * var_equilibrium_potentials__E_K)) + (CHASTE_CONST(0.49124000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__membrane__V - CHASTE_CONST(0.080320000000000003) * var_equilibrium_potentials__E_K) + CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.061749999999999999) * var_equilibrium_potentials__E_K)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(0.51429999999999998) * var_equilibrium_potentials__E_K - CHASTE_CONST(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 = CHASTE_CONST(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(CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::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 + CHASTE_CONST(0.59999999999999998) / (1 + CHASTE_CONST(6.4818210260626455e-7) * CHASTE_MATH::Pow((1 / var_chaste_interface__Ca_i__Ca_i), CHASTE_CONST(1.3999999999999999)))) * (-CHASTE_CONST(26.712338705498265) * CHASTE_MATH::Log((CHASTE_CONST(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)) / (CHASTE_CONST(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(CHASTE_MATH::Pow(var_chaste_interface__i_Na_m_gate__m, 3) * (-var_equilibrium_potentials__E_Na + var_chaste_interface__membrane__V) * (CHASTE_CONST(0.20000000000000001) * var_chaste_interface__i_Na_j_gate__j + CHASTE_CONST(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((-CHASTE_CONST(1.5) * CHASTE_MATH::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] + CHASTE_CONST(0.40000000000000002) * CHASTE_MATH::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 + CHASTE_CONST(6.9444444444444451e-9) / CHASTE_MATH::Pow(var_chaste_interface__Ca_i__Ca_i, 2)) * (CHASTE_CONST(1004882.8125) * var_chaste_interface__Ca_i__Ca_i + CHASTE_CONST(1.3) * CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) + CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mp_extracellular_calcium_concentration_modifier->Calc(mParameters[4], var_chaste_interface__environment__time) + CHASTE_CONST(1.5) * CHASTE_MATH::Pow(mp_extracellular_sodium_concentration_modifier->Calc(mParameters[6], var_chaste_interface__environment__time), 3) * var_chaste_interface__Ca_i__Ca_i + CHASTE_CONST(0.0035999999999999999) * CHASTE_MATH::Pow(mp_extracellular_sodium_concentration_modifier->Calc(mParameters[6], var_chaste_interface__environment__time), 3) * (1 + CHASTE_CONST(0.081300813008130079) * var_chaste_interface__intracellular_ion_concentrations__Na_i) + CHASTE_CONST(1860.8670000000004) * (1 + CHASTE_CONST(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 = CHASTE_CONST(0.61875000000000002) * mp_extracellular_potassium_concentration_modifier->Calc(mParameters[5], var_chaste_interface__environment__time) / ((1 + 100 / CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 2)) * (CHASTE_CONST(1.5) + mp_extracellular_potassium_concentration_modifier->Calc(mParameters[5], var_chaste_interface__environment__time)) * (1 + _lt_0_row[7] + CHASTE_CONST(0.036499999999999998) * (-CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(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 = CHASTE_CONST(0.037374999999999999) * CHASTE_MATH::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) * (CHASTE_CONST(0.20000000000000001) * var_chaste_interface__i_to_1_i2_gate__i2 + CHASTE_CONST(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 = CHASTE_CONST(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 = (-CHASTE_CONST(6.767281717060562e-9) * var_background_currents__i_Cl_b - CHASTE_CONST(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 = (CHASTE_CONST(1.3534563434121124e-8) * var_i_NaK__i_NaK - CHASTE_CONST(6.767281717060562e-9) * var_background_currents__i_K_b - CHASTE_CONST(6.767281717060562e-9) * var_i_K1__i_K1 - CHASTE_CONST(6.767281717060562e-9) * var_i_K_p__i_K_p - CHASTE_CONST(6.767281717060562e-9) * var_i_Kr__i_Kr - CHASTE_CONST(6.767281717060562e-9) * var_i_Ks__i_Ks - CHASTE_CONST(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 = (-CHASTE_CONST(2.0301845151181685e-8) * var_i_NaCa__i_NaCa - CHASTE_CONST(2.0301845151181685e-8) * var_i_NaK__i_NaK - CHASTE_CONST(6.767281717060562e-9) * var_background_currents__i_Na_b - CHASTE_CONST(6.767281717060562e-9) * var_i_Na__i_Na - CHASTE_CONST(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 = CHASTE_CONST(0.0028824983370007683) * (-CHASTE_CONST(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 = CHASTE_CONST(3.510865186083326) * (-15 + var_chaste_interface__membrane__V) * (-CHASTE_CONST(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 + CHASTE_MATH::Exp(-CHASTE_CONST(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 = (CHASTE_CONST(0.14999999999999999) - var_chaste_interface__i_Ca_L_f_Ca_gate__f_Ca + CHASTE_CONST(0.55000000000000004) / (1 + CHASTE_CONST(333.33333333333331) * var_chaste_interface__Ca_r__Ca_r) + CHASTE_CONST(0.29999999999999999) / (1 - 20 * var_i_Ca_L__i_Ca_L)) / (CHASTE_CONST(0.5) + 1 / (1 + CHASTE_CONST(333.33333333333331) * var_chaste_interface__Ca_r__Ca_r) + 10 * var_Ca_MK_act__Ca_MK_act / (CHASTE_CONST(0.14999999999999999) + var_Ca_MK_act__Ca_MK_act)); // 1 / millisecond + const double var_q_leak__q_leak = CHASTE_CONST(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 + CHASTE_MATH::Exp(CHASTE_CONST(3.3333333333333335) + CHASTE_CONST(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 + CHASTE_MATH::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 / (CHASTE_CONST(0.14999999999999999) + var_Ca_MK_act__Ca_MK_act)) / (1 + CHASTE_MATH::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 / (CHASTE_CONST(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 + CHASTE_MATH::Exp(CHASTE_CONST(2.6000000000000001) + CHASTE_CONST(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 + CHASTE_CONST(0.23999999999999996) * var_q_rel__q_rel - CHASTE_CONST(1.1504378919002956e-7) * var_i_Ca_L__i_Ca_L) / (1 + CHASTE_CONST(2.2480000000000002) * var_chaste_interface__Ca_r__Ca_r / CHASTE_MATH::Pow((CHASTE_CONST(0.0086999999999999994) + var_chaste_interface__Ca_r__Ca_r), 2) + CHASTE_CONST(0.094) * var_chaste_interface__Ca_r__Ca_r / CHASTE_MATH::Pow((CHASTE_CONST(0.00087000000000000001) + var_chaste_interface__Ca_r__Ca_r), 2)); // millimolar / millisecond + const double d_dt_chaste_interface_var_q_rel_ro_gate__ro = -CHASTE_CONST(0.33333333333333331) * var_chaste_interface__q_rel_ro_gate__ro + CHASTE_CONST(0.33333333333333331) * CHASTE_MATH::Pow(var_chaste_interface__Ca_JSR__Ca_JSR, CHASTE_CONST(1.8999999999999999)) * CHASTE_MATH::Pow(var_i_Ca_L__i_Ca_L, 2) / ((1 + CHASTE_MATH::Pow(var_i_Ca_L__i_Ca_L, 2)) * (CHASTE_MATH::Pow(var_chaste_interface__Ca_JSR__Ca_JSR, CHASTE_CONST(1.8999999999999999)) + CHASTE_CONST(1644.6531773416521) * CHASTE_MATH::Pow((var_chaste_interface__Ca_r__Ca_r / (CHASTE_CONST(0.0028) + var_chaste_interface__Ca_r__Ca_r)), CHASTE_CONST(1.8999999999999999)))); // 1 / millisecond + const double var_q_tr__q_tr = CHASTE_CONST(0.0083333333333333332) * var_chaste_interface__Ca_NSR__Ca_NSR - CHASTE_CONST(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 / CHASTE_MATH::Pow((CHASTE_CONST(0.80000000000000004) + var_chaste_interface__Ca_JSR__Ca_JSR), 2)); // millimolar / millisecond + const double var_q_up__q_up = CHASTE_CONST(0.5) * (1 + CHASTE_CONST(0.75) * var_Ca_MK_act__Ca_MK_act / (CHASTE_CONST(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) / (CHASTE_CONST(0.00092000000000000003) - CHASTE_CONST(0.00017000000000000001) * var_Ca_MK_act__Ca_MK_act / (CHASTE_CONST(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 - CHASTE_CONST(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 = -(CHASTE_CONST(3.383640858530281e-9) * var_background_currents__i_Ca_b + CHASTE_CONST(3.383640858530281e-9) * var_i_Ca_p__i_Ca_p + CHASTE_CONST(0.081176470588235281) * var_q_up__q_up - CHASTE_CONST(0.029411764705882353) * var_Ca_r__q_diff - CHASTE_CONST(6.767281717060562e-9) * var_i_NaCa__i_NaCa - CHASTE_CONST(0.081176470588235281) * var_q_leak__q_leak) / (1 + CHASTE_CONST(0.14000000000000001) * var_chaste_interface__Ca_i__Ca_i / CHASTE_MATH::Pow((CHASTE_CONST(0.00050000000000000001) + var_chaste_interface__Ca_i__Ca_i), 2) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__Ca_i__Ca_i / CHASTE_MATH::Pow((CHASTE_CONST(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 - CHASTE_STIM(var_chaste_interface__environment__time) / CHASTE_CAP() - CHASTE_CONST(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 ? CHASTE_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 = CHASTE_CONST(0.050000000000000003); // dimensionless + const double var_Ca_MK_act__km_Ca_MK = CHASTE_CONST(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 = CHASTE_CONST(0.018329999999999999); // dimensionless + const double var_i_Ca_L__p_Ca = CHASTE_CONST(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(CHASTE_CONST(0.5) + 1 / (1 + CHASTE_CONST(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 + CHASTE_CONST(0.59999999999999998) / (1 + CHASTE_CONST(6.4818210260626455e-7) * CHASTE_MATH::Pow((1 / var_chaste_interface__Ca_i__Ca_i), CHASTE_CONST(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 = CHASTE_CONST(0.40000000000000002); // dimensionless + const double var_i_NaCa__k_sat = CHASTE_CONST(0.27000000000000002); // dimensionless + const double var_i_NaCa__km_Ca_act = CHASTE_CONST(0.000125); // millimolar + const double var_i_NaCa__km_Ca_i = CHASTE_CONST(0.0035999999999999999); // millimolar + const double var_i_NaCa__km_Ca_o = CHASTE_CONST(1.3); // millimolar + const double var_i_NaCa__km_Na_i_1 = CHASTE_CONST(12.300000000000001); // millimolar + const double var_i_NaCa__km_Na_o = CHASTE_CONST(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 + CHASTE_CONST(24.217200000000005) * CHASTE_MATH::Pow((-1 + CHASTE_CONST(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 + CHASTE_CONST(0.03125) * CHASTE_MATH::Pow((-1 + CHASTE_CONST(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) ? (CHASTE_CONST(0.13500000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(11.764705882352942) + CHASTE_CONST(0.14705882352941177) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(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 * CHASTE_MATH::Exp(CHASTE_CONST(0.34999999999999998) * var_chaste_interface__membrane__V - CHASTE_CONST(0.34999999999999998) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time)) + CHASTE_CONST(3.5600000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.079000000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.079000000000000001) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time))) : (CHASTE_CONST(7.6923076923076916) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.96036036036036043) + CHASTE_CONST(0.0900900900900901) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(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) ? ((CHASTE_CONST(37.780000000000001) + var_chaste_interface__membrane__V) * (-127140 * CHASTE_MATH::Exp(CHASTE_CONST(0.24440000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.24440000000000001) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time)) - CHASTE_CONST(3.4740000000000003e-5) * CHASTE_MATH::Exp(CHASTE_CONST(0.043909999999999998) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(0.043909999999999998) * var_chaste_interface__membrane__V)) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(24.640530000000002) + CHASTE_CONST(0.311) * var_chaste_interface__membrane__V - CHASTE_CONST(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) ? (CHASTE_CONST(0.1212) * CHASTE_MATH::Exp(CHASTE_CONST(0.01052) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(0.01052) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(5.5312920000000005) + CHASTE_CONST(0.13780000000000001) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(0.13780000000000001) * var_chaste_interface__membrane__V))) : (CHASTE_CONST(0.29999999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(2.5349999999999999e-7) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(2.5349999999999999e-7) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.2000000000000002) + CHASTE_CONST(0.10000000000000001) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(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 = CHASTE_STIM(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_i_NaCa__dNaCa_1 = CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * var_i_NaCa__km_Ca_o + CHASTE_CONST(1.5) * CHASTE_MATH::Pow(var_i_NaCa__km_Na_o, 3) * var_chaste_interface__Ca_i__Ca_i + CHASTE_MATH::Pow(var_i_NaCa__km_Na_i_1, 3) * (1 + CHASTE_CONST(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 = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::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 = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::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 = CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mp_extracellular_calcium_concentration_modifier->Calc(mParameters[4], var_chaste_interface__environment__time) + CHASTE_CONST(1.5) * CHASTE_MATH::Pow(mp_extracellular_sodium_concentration_modifier->Calc(mParameters[6], var_chaste_interface__environment__time), 3) * var_chaste_interface__Ca_i__Ca_i + CHASTE_MATH::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 * CHASTE_MATH::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 * CHASTE_MATH::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 * CHASTE_MATH::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 = CHASTE_CONST(1.02) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.23849999999999999) * var_equilibrium_potentials__E_K)); // dimensionless + const double var_i_K1_xK1_gate__beta_xK1 = (CHASTE_CONST(0.49124000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__membrane__V - CHASTE_CONST(0.080320000000000003) * var_equilibrium_potentials__E_K) + CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.061749999999999999) * var_equilibrium_potentials__E_K)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(0.51429999999999998) * var_equilibrium_potentials__E_K - CHASTE_CONST(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((CHASTE_CONST(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 = CHASTE_CAP() * 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 = CHASTE_CAP() * 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 = CHASTE_CAP() * var_i_Ks__i_Ks; // uA_per_cm2 + const double var_i_Na__i_Na = mp_i_Na__i_Na_modifier->Calc(CHASTE_MATH::Pow(var_chaste_interface__i_Na_m_gate__m, 3) * (-var_equilibrium_potentials__E_Na + var_chaste_interface__membrane__V) * (CHASTE_CONST(0.20000000000000001) * var_chaste_interface__i_Na_j_gate__j + CHASTE_CONST(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 = CHASTE_CAP() * var_i_Na__i_Na; // uA_per_cm2 + const double var_i_NaCa__i_NaCa = mp_i_NaCa__i_NaCa_modifier->Calc((-CHASTE_CONST(1.5) * CHASTE_MATH::Pow(mp_extracellular_sodium_concentration_modifier->Calc(mParameters[6], var_chaste_interface__environment__time), 3) * var_chaste_interface__Ca_i__Ca_i * CHASTE_MATH::Exp(-CHASTE_CONST(0.65000000000000002) * var_chaste_interface__membrane__V * var_model_parameters__F / (var_model_parameters__R * var_model_parameters__T)) + CHASTE_MATH::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) * CHASTE_MATH::Exp(CHASTE_CONST(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 * CHASTE_MATH::Exp(-CHASTE_CONST(0.65000000000000002) * var_chaste_interface__membrane__V * var_model_parameters__F / (var_model_parameters__R * var_model_parameters__T))) * (1 + CHASTE_CONST(0.44444444444444442) * CHASTE_MATH::Pow(var_i_NaCa__km_Ca_act, 2) / CHASTE_MATH::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 = CHASTE_CAP() * 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) * (CHASTE_CONST(0.20000000000000001) * var_chaste_interface__i_to_1_i2_gate__i2 + CHASTE_CONST(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 = CHASTE_CAP() * 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 = CHASTE_CONST(0.34100000000000003); // dimensionless + const double var_model_parameters__z_Ca = 2; // dimensionless + const double var_i_Ca_L__i_Ca_L_max = CHASTE_MATH::Pow(var_model_parameters__F, 2) * CHASTE_MATH::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 * CHASTE_MATH::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 + CHASTE_MATH::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 = CHASTE_CAP() * 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 + CHASTE_MATH::Exp(-CHASTE_CONST(4.375) - 25 * var_i_Ca_L__i_Ca_L)), var_chaste_interface__environment__time); // millisecond + const double var_q_rel__vg = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(2.6000000000000001) + CHASTE_CONST(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/data/tests/chaste_reference_models/Opt/dynamic_aslanidi_Purkinje_model_2009Opt.hpp b/chaste_codegen/data/tests/chaste_reference_models/Opt/dynamic_aslanidi_Purkinje_model_2009Opt.hpp new file mode 100644 index 000000000..fcae39e1c --- /dev/null +++ b/chaste_codegen/data/tests/chaste_reference_models/Opt/dynamic_aslanidi_Purkinje_model_2009Opt.hpp @@ -0,0 +1,140 @@ +#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" +#if USING_DEVICE_COMPILER +#include "StimulusEvaluatorCuda.hpp" +#endif +#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/data/tests/chaste_reference_models/Opt/hodgkin_huxley_squid_axon_model_1952_modified.cpp b/chaste_codegen/data/tests/chaste_reference_models/Opt/hodgkin_huxley_squid_axon_model_1952_modified.cpp index dfc0e14ce..aa0512119 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/Opt/hodgkin_huxley_squid_axon_model_1952_modified.cpp +++ b/chaste_codegen/data/tests/chaste_reference_models/Opt/hodgkin_huxley_squid_axon_model_1952_modified.cpp @@ -21,6 +21,8 @@ #include "HeartConfig.hpp" #include "IsNan.hpp" #include "MathsCustomFunctions.hpp" +#include "ChasteMathDeviceNamespaces.hpp" +#include "ChasteCpuMacros.hpp" @@ -143,7 +145,7 @@ class Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLOpt_LookupTable for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return (((6.5 + 0.10000000000000001 * 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)))); + return (((CHASTE_CONST(6.5) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V >= -CHASTE_CONST(9.9999999999999995e-8)) && (CHASTE_CONST(6.5) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V <= CHASTE_CONST(9.9999999999999995e-8))) ? (CHASTE_CONST(0.42499999999999999) + CHASTE_CONST(0.0050000000000000001) * var_chaste_interface__membrane__V) : (-CHASTE_CONST(0.099999999999999992) * (CHASTE_CONST(6.5) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(6.5) - CHASTE_CONST(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); @@ -165,7 +167,7 @@ class Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLOpt_LookupTable for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(0.9375 + 0.012500000000000001 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(CHASTE_CONST(0.9375) + CHASTE_CONST(0.012500000000000001) * 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); @@ -176,7 +178,7 @@ class Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLOpt_LookupTable for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(-3.75 - 0.050000000000000003 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(-CHASTE_CONST(3.75) - CHASTE_CONST(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); @@ -187,7 +189,7 @@ class Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLOpt_LookupTable for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 + exp(-4.5 - 0.10000000000000001 * var_chaste_interface__membrane__V); + return 1 + CHASTE_MATH::Exp(-CHASTE_CONST(4.5) - CHASTE_CONST(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); @@ -198,7 +200,7 @@ class Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLOpt_LookupTable for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return (((5 + 0.10000000000000001 * var_chaste_interface__membrane__V >= -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)))); + return (((5 + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V >= -CHASTE_CONST(9.9999999999999995e-8)) && (5 + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V <= CHASTE_CONST(9.9999999999999995e-8))) ? (CHASTE_CONST(3.5) + CHASTE_CONST(0.050000000000000003) * var_chaste_interface__membrane__V) : (-(5 + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(-5 - CHASTE_CONST(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); @@ -220,7 +222,7 @@ class Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLOpt_LookupTable for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(-4.166666666666667 - 0.055555555555555552 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(-CHASTE_CONST(4.166666666666667) - CHASTE_CONST(0.055555555555555552) * 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); @@ -254,7 +256,7 @@ std::shared_ptr p_cellml_stim(new RegularStimulus( @@ -284,7 +286,7 @@ std::shared_ptrmParameters[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[2] = CHASTE_CONST(0.29999999999999999); // (var_leakage_current__g_L) [milliS_per_cm2] this->mParameters[3] = 36; // (var_potassium_channel__g_K) [milliS_per_cm2] } @@ -336,7 +338,7 @@ std::shared_ptr& rY = *pStateVariables; - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -346,9 +348,9 @@ std::shared_ptrmFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -379,8 +381,8 @@ std::shared_ptrmFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -414,13 +416,13 @@ std::shared_ptr dqs(5); dqs[0] = var_sodium_channel__i_Na; diff --git a/chaste_codegen/data/tests/chaste_reference_models/Opt/hodgkin_huxley_squid_axon_model_1952_modified.hpp b/chaste_codegen/data/tests/chaste_reference_models/Opt/hodgkin_huxley_squid_axon_model_1952_modified.hpp index 8f9a681f0..492e54280 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/Opt/hodgkin_huxley_squid_axon_model_1952_modified.hpp +++ b/chaste_codegen/data/tests/chaste_reference_models/Opt/hodgkin_huxley_squid_axon_model_1952_modified.hpp @@ -16,6 +16,9 @@ #include "ChasteSerialization.hpp" #include #include "AbstractStimulusFunction.hpp" +#if USING_DEVICE_COMPILER +#include "StimulusEvaluatorCuda.hpp" +#endif #include "AbstractCardiacCell.hpp" class Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLOpt : public AbstractCardiacCell diff --git a/chaste_codegen/data/tests/chaste_reference_models/Opt/non_dynamic_aslanidi_Purkinje_model_2009.cpp b/chaste_codegen/data/tests/chaste_reference_models/Opt/non_dynamic_aslanidi_Purkinje_model_2009.cpp index 697a88b18..f5dcdcf79 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/Opt/non_dynamic_aslanidi_Purkinje_model_2009.cpp +++ b/chaste_codegen/data/tests/chaste_reference_models/Opt/non_dynamic_aslanidi_Purkinje_model_2009.cpp @@ -21,6 +21,8 @@ #include "HeartConfig.hpp" #include "IsNan.hpp" #include "MathsCustomFunctions.hpp" +#include "ChasteMathDeviceNamespaces.hpp" +#include "ChasteCpuMacros.hpp" @@ -143,7 +145,7 @@ class Cellaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abstra for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 + exp(1.2521739130434781 - 0.16722408026755853 * var_chaste_interface__membrane__V); + return 1 + CHASTE_MATH::Exp(CHASTE_CONST(1.2521739130434781) - CHASTE_CONST(0.16722408026755853) * 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); @@ -154,7 +156,7 @@ class Cellaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abstra for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(0.074871767015605231 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(CHASTE_CONST(0.074871767015605231) * 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); @@ -165,7 +167,7 @@ class Cellaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abstra for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return -1 + exp(0.074871767015605231 * var_chaste_interface__membrane__V); + return -1 + CHASTE_MATH::Exp(CHASTE_CONST(0.074871767015605231) * 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); @@ -176,7 +178,7 @@ class Cellaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abstra for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(-0.024333324280071702 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(-CHASTE_CONST(0.024333324280071702) * 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); @@ -187,7 +189,7 @@ class Cellaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abstra for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(0.013102559227730915 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(CHASTE_CONST(0.013102559227730915) * 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); @@ -198,7 +200,7 @@ class Cellaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abstra for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 + 0.27000000000000002 * exp(-0.024333324280071702 * var_chaste_interface__membrane__V); + return 1 + CHASTE_CONST(0.27000000000000002) * CHASTE_MATH::Exp(-CHASTE_CONST(0.024333324280071702) * 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); @@ -209,7 +211,7 @@ class Cellaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abstra for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(-0.037435883507802616 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(-CHASTE_CONST(0.037435883507802616) * 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); @@ -220,7 +222,7 @@ class Cellaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abstra for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 0.1245 * exp(-0.003743588350780262 * var_chaste_interface__membrane__V); + return CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(0.003743588350780262) * 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); @@ -231,7 +233,7 @@ class Cellaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abstra for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return -100 * exp(0.037435883507802616 * var_chaste_interface__membrane__V); + return -100 * CHASTE_MATH::Exp(CHASTE_CONST(0.037435883507802616) * 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); @@ -242,7 +244,7 @@ class Cellaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abstra for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 - exp(0.037435883507802616 * var_chaste_interface__membrane__V); + return 1 - CHASTE_MATH::Exp(CHASTE_CONST(0.037435883507802616) * 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); @@ -253,7 +255,7 @@ class Cellaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abstra for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 + exp(-0.26470588235294124 + 0.049019607843137261 * var_chaste_interface__membrane__V); + return 1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.26470588235294124) + CHASTE_CONST(0.049019607843137261) * 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); @@ -264,7 +266,7 @@ class Cellaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abstra for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(-1.1230765052340785 + 0.074871767015605231 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(-CHASTE_CONST(1.1230765052340785) + CHASTE_CONST(0.074871767015605231) * 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); @@ -275,7 +277,7 @@ class Cellaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abstra for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return -1 + exp(-1.1230765052340785 + 0.074871767015605231 * var_chaste_interface__membrane__V); + return -1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.1230765052340785) + CHASTE_CONST(0.074871767015605231) * 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); @@ -286,7 +288,7 @@ class Cellaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abstra for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 / (1 + exp(0.59347181008902072 - 0.14836795252225518 * var_chaste_interface__membrane__V)); + return 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(0.59347181008902072) - CHASTE_CONST(0.14836795252225518) * 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); @@ -297,7 +299,7 @@ class Cellaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abstra for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 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)); + return CHASTE_CONST(0.58999999999999997) + CHASTE_CONST(0.80000000000000004) * CHASTE_MATH::Exp(CHASTE_CONST(0.67599999999999993) + CHASTE_CONST(0.051999999999999998) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.7160000000000002) + CHASTE_CONST(0.13200000000000001) * 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); @@ -308,7 +310,7 @@ class Cellaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abstra for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 / (1 + exp(1.8 + 0.10000000000000001 * var_chaste_interface__membrane__V)); + return 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.8) + CHASTE_CONST(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); @@ -319,7 +321,7 @@ class Cellaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abstra for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 / (1 + exp(-5.4098360655737707 - 0.16393442622950821 * var_chaste_interface__membrane__V)); + return 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(5.4098360655737707) - CHASTE_CONST(0.16393442622950821) * 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); @@ -330,7 +332,7 @@ class Cellaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abstra for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1.0680000000000001 * exp(0.54333333333333333 + 0.033333333333333333 * var_chaste_interface__membrane__V) + 1.0680000000000001 * exp(-0.54333333333333333 - 0.033333333333333333 * var_chaste_interface__membrane__V); + return CHASTE_CONST(1.0680000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.54333333333333333) + CHASTE_CONST(0.033333333333333333) * var_chaste_interface__membrane__V) + CHASTE_CONST(1.0680000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(0.54333333333333333) - CHASTE_CONST(0.033333333333333333) * 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); @@ -341,7 +343,7 @@ class Cellaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abstra for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 / (1 + exp(9.0909090909090917 + 0.15151515151515152 * var_chaste_interface__membrane__V)); + return 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(9.0909090909090917) + CHASTE_CONST(0.15151515151515152) * 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); @@ -352,7 +354,7 @@ class Cellaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abstra for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 0.014999999999999999 * exp(4.6558441558441563 + 0.064935064935064929 * var_chaste_interface__membrane__V) + 0.014999999999999999 * exp(-0.86074429771908767 - 0.012004801920768308 * var_chaste_interface__membrane__V); + return CHASTE_CONST(0.014999999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(4.6558441558441563) + CHASTE_CONST(0.064935064935064929) * var_chaste_interface__membrane__V) + CHASTE_CONST(0.014999999999999999) * CHASTE_MATH::Exp(-CHASTE_CONST(0.86074429771908767) - CHASTE_CONST(0.012004801920768308) * 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); @@ -363,7 +365,7 @@ class Cellaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abstra for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 / (1 + exp(-0.0069387755102040824 - 0.081632653061224483 * var_chaste_interface__membrane__V)); + return 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.0069387755102040824) - CHASTE_CONST(0.081632653061224483) * 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); @@ -374,7 +376,7 @@ class Cellaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abstra for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 100 + 900 / (1 + exp(0.20000000000000001 * var_chaste_interface__membrane__V)); + return 100 + 900 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(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); @@ -385,7 +387,7 @@ class Cellaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abstra for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 / (1 + exp(0.65693430656934315 - 0.072992700729927015 * var_chaste_interface__membrane__V)); + return 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(0.65693430656934315) - CHASTE_CONST(0.072992700729927015) * 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); @@ -396,7 +398,7 @@ class Cellaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abstra for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 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)); + return CHASTE_CONST(7.6100000000000007e-5) * (CHASTE_CONST(44.600000000000001) + var_chaste_interface__membrane__V) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(444.66200000000003) - CHASTE_CONST(9.9700000000000006) * var_chaste_interface__membrane__V)) + CHASTE_CONST(0.00036000000000000002) * (-CHASTE_CONST(0.55000000000000004) + var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.070400000000000004) + CHASTE_CONST(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); @@ -407,7 +409,7 @@ class Cellaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abstra for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 3.8050000000000003e-5 * (44.600000000000001 + var_chaste_interface__membrane__V) / (1 - exp(-444.66200000000003 - 9.9700000000000006 * var_chaste_interface__membrane__V)) + 0.00018000000000000001 * (-0.55000000000000004 + var_chaste_interface__membrane__V) / (-1 + exp(-0.070400000000000004 + 0.128 * var_chaste_interface__membrane__V)); + return CHASTE_CONST(3.8050000000000003e-5) * (CHASTE_CONST(44.600000000000001) + var_chaste_interface__membrane__V) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(444.66200000000003) - CHASTE_CONST(9.9700000000000006) * var_chaste_interface__membrane__V)) + CHASTE_CONST(0.00018000000000000001) * (-CHASTE_CONST(0.55000000000000004) + var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.070400000000000004) + CHASTE_CONST(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); @@ -418,7 +420,7 @@ class Cellaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abstra for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 / (1 + exp(11.311475409836067 + 0.16393442622950821 * var_chaste_interface__membrane__V)); + return 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(11.311475409836067) + CHASTE_CONST(0.16393442622950821) * 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); @@ -429,7 +431,7 @@ class Cellaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abstra for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 175 + 125 / (1 + exp(-4.166666666666667 - 0.16666666666666666 * var_chaste_interface__membrane__V)); + return 175 + 125 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(4.166666666666667) - CHASTE_CONST(0.16666666666666666) * 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); @@ -440,7 +442,7 @@ class Cellaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abstra for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 0.32000000000000001 * (47.130000000000003 + var_chaste_interface__membrane__V) / (1 - exp(-4.7130000000000001 - 0.10000000000000001 * var_chaste_interface__membrane__V)); + return CHASTE_CONST(0.32000000000000001) * (CHASTE_CONST(47.130000000000003) + var_chaste_interface__membrane__V) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(4.7130000000000001) - CHASTE_CONST(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); @@ -451,7 +453,7 @@ class Cellaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abstra for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 0.080000000000000002 * exp(-0.090909090909090912 * var_chaste_interface__membrane__V); + return CHASTE_CONST(0.080000000000000002) * CHASTE_MATH::Exp(-CHASTE_CONST(0.090909090909090912) * 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); @@ -462,7 +464,7 @@ class Cellaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abstra for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 25 * exp(-3.7999999999999998 + 0.050000000000000003 * var_chaste_interface__membrane__V) / (1 + exp(-3.7999999999999998 + 0.050000000000000003 * var_chaste_interface__membrane__V)); + return 25 * CHASTE_MATH::Exp(-CHASTE_CONST(3.7999999999999998) + CHASTE_CONST(0.050000000000000003) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.7999999999999998) + CHASTE_CONST(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); @@ -473,7 +475,7 @@ class Cellaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abstra for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 25 * exp(-2.7000000000000002 - 0.050000000000000003 * var_chaste_interface__membrane__V) / (1 + exp(-2.7000000000000002 - 0.050000000000000003 * var_chaste_interface__membrane__V)); + return 25 * CHASTE_MATH::Exp(-CHASTE_CONST(2.7000000000000002) - CHASTE_CONST(0.050000000000000003) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.7000000000000002) - CHASTE_CONST(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); @@ -484,7 +486,7 @@ class Cellaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abstra for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 0.0044200000000000003 / ((1 + exp(1.7333333333333334 + 0.066666666666666666 * var_chaste_interface__membrane__V)) * (0.0044200000000000003 / (1 + exp(1.7333333333333334 + 0.066666666666666666 * var_chaste_interface__membrane__V)) + 0.050000000000000003 * exp(-0.66666666666666663 + 0.066666666666666666 * var_chaste_interface__membrane__V) / (1 + exp(-0.66666666666666663 + 0.066666666666666666 * var_chaste_interface__membrane__V)))); + return CHASTE_CONST(0.0044200000000000003) / ((1 + CHASTE_MATH::Exp(CHASTE_CONST(1.7333333333333334) + CHASTE_CONST(0.066666666666666666) * var_chaste_interface__membrane__V)) * (CHASTE_CONST(0.0044200000000000003) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.7333333333333334) + CHASTE_CONST(0.066666666666666666) * var_chaste_interface__membrane__V)) + CHASTE_CONST(0.050000000000000003) * CHASTE_MATH::Exp(-CHASTE_CONST(0.66666666666666663) + CHASTE_CONST(0.066666666666666666) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.66666666666666663) + CHASTE_CONST(0.066666666666666666) * 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); @@ -495,7 +497,7 @@ class Cellaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abstra for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 21.5 + 30 / (1 + exp(-2.5 + 0.10000000000000001 * var_chaste_interface__membrane__V)); + return CHASTE_CONST(21.5) + 30 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.5) + CHASTE_CONST(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); @@ -506,7 +508,7 @@ class Cellaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abstra for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 0.029999999999999999 / ((1 + exp(1.6666666666666667 + 0.066666666666666666 * var_chaste_interface__membrane__V)) * (0.029999999999999999 / (1 + exp(1.6666666666666667 + 0.066666666666666666 * var_chaste_interface__membrane__V)) + 0.10000000000000001 * exp(-2.6666666666666665 + 0.066666666666666666 * var_chaste_interface__membrane__V) / (1 + exp(-2.6666666666666665 + 0.066666666666666666 * var_chaste_interface__membrane__V)))); + return CHASTE_CONST(0.029999999999999999) / ((1 + CHASTE_MATH::Exp(CHASTE_CONST(1.6666666666666667) + CHASTE_CONST(0.066666666666666666) * var_chaste_interface__membrane__V)) * (CHASTE_CONST(0.029999999999999999) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.6666666666666667) + CHASTE_CONST(0.066666666666666666) * var_chaste_interface__membrane__V)) + CHASTE_CONST(0.10000000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(2.6666666666666665) + CHASTE_CONST(0.066666666666666666) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.6666666666666665) + CHASTE_CONST(0.066666666666666666) * 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); @@ -517,7 +519,7 @@ class Cellaslanidi_Purkinje_model_2009FromCellMLOpt_LookupTables : public Abstra for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 6 + 5 / (1 + exp(-1.6499999999999999 + 0.10000000000000001 * var_chaste_interface__membrane__V)); + return 6 + 5 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.6499999999999999) + CHASTE_CONST(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); @@ -550,7 +552,7 @@ std::shared_ptr Cell 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_amplitude_converted = -80 * CHASTE_CAP(); // 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 @@ -671,22 +673,22 @@ std::shared_ptr Cell 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[0] = CHASTE_CONST(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[2] = CHASTE_CONST(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[4] = CHASTE_CONST(1.8); // (var_model_parameters__Ca_o) [millimolar] + this->mParameters[5] = CHASTE_CONST(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[7] = CHASTE_CONST(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] + this->mParameters[11] = CHASTE_CONST(0.25); // (var_i_K1__g_K1_max) [milliS_per_microF] + this->mParameters[12] = CHASTE_CONST(0.040008488000000002); // (var_i_Kr__g_Kr_max) [milliS_per_microF] + this->mParameters[13] = CHASTE_CONST(0.052581329000000003); // (var_i_Ks__g_Ks_max) [milliS_per_microF] + this->mParameters[14] = CHASTE_CONST(4.5); // (var_i_NaCa__i_NaCa_max) [microA_per_microF] + this->mParameters[15] = CHASTE_CONST(0.14135944); // (var_i_to_1__g_to_1) [milliS_per_microF] } Cellaslanidi_Purkinje_model_2009FromCellMLOpt::~Cellaslanidi_Purkinje_model_2009FromCellMLOpt() @@ -737,7 +739,7 @@ std::shared_ptr Cell // 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -796,10 +798,10 @@ std::shared_ptr Cell // 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 var_equilibrium_potentials__E_K = CHASTE_CONST(26.712338705498265) * CHASTE_MATH::Log(mParameters[5] / var_chaste_interface__intracellular_ion_concentrations__K_i); // millivolt + const double var_equilibrium_potentials__E_Na = CHASTE_CONST(26.712338705498265) * CHASTE_MATH::Log(mParameters[6] / var_chaste_interface__intracellular_ion_concentrations__Na_i); // millivolt + const double var_membrane__i_tot = CHASTE_CONST(0.0077250000000000001) * var_chaste_interface__membrane__V + CHASTE_CONST(0.0060102762087371094) * CHASTE_MATH::Log(100 / var_chaste_interface__intracellular_ion_concentrations__Cl_i) - CHASTE_CONST(0.0025000000000000001) * var_equilibrium_potentials__E_Na - CHASTE_CONST(0.0050000000000000001) * var_equilibrium_potentials__E_K + (CHASTE_CONST(0.0040000000000000001) + CHASTE_CONST(0.4389381125701739) * CHASTE_MATH::Sqrt(mParameters[5]) * mParameters[11] / ((1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.23849999999999999) * var_equilibrium_potentials__E_K)) * (CHASTE_CONST(1.02) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.23849999999999999) * var_equilibrium_potentials__E_K)) + (CHASTE_CONST(0.49124000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__membrane__V - CHASTE_CONST(0.080320000000000003) * var_equilibrium_potentials__E_K) + CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.061749999999999999) * var_equilibrium_potentials__E_K)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(0.51429999999999998) * var_equilibrium_potentials__E_K - CHASTE_CONST(0.51429999999999998) * var_chaste_interface__membrane__V))))) * (-var_equilibrium_potentials__E_K + var_chaste_interface__membrane__V) + CHASTE_CONST(0.0027599999999999999) * (-var_equilibrium_potentials__E_K + var_chaste_interface__membrane__V) / (_lt_0_row[0]) + CHASTE_CONST(0.057500000000000002) * var_chaste_interface__Ca_i__Ca_i / (CHASTE_CONST(0.00050000000000000001) + var_chaste_interface__Ca_i__Ca_i) + CHASTE_CONST(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 + CHASTE_CONST(0.037374999999999999) * CHASTE_MATH::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 + CHASTE_CONST(0.0028824983370007683) * (-CHASTE_CONST(0.34100000000000003) * mParameters[4] + var_chaste_interface__Ca_i__Ca_i * _lt_0_row[1]) * var_chaste_interface__membrane__V / (_lt_0_row[2]) + (-CHASTE_CONST(1.5) * CHASTE_MATH::Pow(mParameters[6], 3) * var_chaste_interface__Ca_i__Ca_i * _lt_0_row[3] + CHASTE_CONST(0.40000000000000002) * CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mParameters[14] * mParameters[4] * _lt_0_row[4]) / ((_lt_0_row[5]) * (1 + CHASTE_CONST(6.9444444444444451e-9) / CHASTE_MATH::Pow(var_chaste_interface__Ca_i__Ca_i, 2)) * (CHASTE_CONST(1004882.8125) * var_chaste_interface__Ca_i__Ca_i + CHASTE_CONST(1.3) * CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) + CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mParameters[4] + CHASTE_CONST(1.5) * CHASTE_MATH::Pow(mParameters[6], 3) * var_chaste_interface__Ca_i__Ca_i + CHASTE_CONST(0.0035999999999999999) * CHASTE_MATH::Pow(mParameters[6], 3) * (1 + CHASTE_CONST(0.081300813008130079) * var_chaste_interface__intracellular_ion_concentrations__Na_i) + CHASTE_CONST(1860.8670000000004) * (1 + CHASTE_CONST(416.66666666666669) * var_chaste_interface__Ca_i__Ca_i) * mParameters[4])) + CHASTE_MATH::Pow(var_chaste_interface__i_Na_m_gate__m, 3) * (-var_equilibrium_potentials__E_Na + var_chaste_interface__membrane__V) * (CHASTE_CONST(0.20000000000000001) * var_chaste_interface__i_Na_j_gate__j + CHASTE_CONST(0.80000000000000004) * var_chaste_interface__i_Na_h_gate__h) * mParameters[8] + (-var_equilibrium_potentials__E_K + var_chaste_interface__membrane__V) * (CHASTE_CONST(0.20000000000000001) * var_chaste_interface__i_to_1_i2_gate__i2 + CHASTE_CONST(0.80000000000000004) * var_chaste_interface__i_to_1_i_gate__i) * mParameters[15] * var_chaste_interface__i_to_1_a_gate__a + CHASTE_CONST(0.61875000000000002) * mParameters[5] / ((1 + 100 / CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 2)) * (CHASTE_CONST(1.5) + mParameters[5]) * (1 + _lt_0_row[7] + CHASTE_CONST(0.036499999999999998) * (-CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(0.01485884101040119) * mParameters[6])) * _lt_0_row[6])) + CHASTE_CONST(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 + CHASTE_CONST(0.59999999999999998) / (1 + CHASTE_CONST(6.4818210260626455e-7) * CHASTE_MATH::Pow((1 / var_chaste_interface__Ca_i__Ca_i), CHASTE_CONST(1.3999999999999999)))) * (-CHASTE_CONST(26.712338705498265) * CHASTE_MATH::Log((CHASTE_CONST(0.018329999999999999) * mParameters[6] + mParameters[5]) / (CHASTE_CONST(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 + CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::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]) + CHASTE_CONST(3.510865186083326) * (-15 + var_chaste_interface__membrane__V) * (-CHASTE_CONST(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 = CHASTE_CAP() * var_membrane__i_tot; // uA_per_cm2 const double i_ionic = var_chaste_interface__i_ionic; EXCEPT_IF_NOT(!std::isnan(i_ionic)); @@ -810,7 +812,7 @@ std::shared_ptr Cell { // 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)); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -881,15 +883,15 @@ std::shared_ptr Cell // 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_bound = CHASTE_CONST(0.050000000000000003) * (1 - var_chaste_interface__Ca_MK_act__Ca_MK_trap) / (1 + CHASTE_CONST(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_Ca_MK_act__Ca_MK_trap = -CHASTE_CONST(0.00068000000000000005) * var_chaste_interface__Ca_MK_act__Ca_MK_trap + CHASTE_CONST(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 = CHASTE_CONST(0.057500000000000002) * var_chaste_interface__Ca_i__Ca_i / (CHASTE_CONST(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 + CHASTE_CONST(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_L_f2_gate__f2 = (-var_chaste_interface__i_Ca_L_f2_gate__f2 + _lt_0_row[15]) / (38 + CHASTE_CONST(24.217200000000005) * CHASTE_MATH::Pow((-1 + CHASTE_CONST(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 + CHASTE_CONST(0.03125) * CHASTE_MATH::Pow((-1 + CHASTE_CONST(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 @@ -899,12 +901,12 @@ std::shared_ptr Cell 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_h_gate__alpha_h = ((var_chaste_interface__membrane__V < -40) ? (CHASTE_CONST(0.13500000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(11.764705882352942) + CHASTE_CONST(0.14705882352941177) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(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 * CHASTE_MATH::Exp(CHASTE_CONST(0.34999999999999998) * var_chaste_interface__membrane__V - CHASTE_CONST(0.34999999999999998) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time)) + CHASTE_CONST(3.5600000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.079000000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.079000000000000001) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time))) : (CHASTE_CONST(7.6923076923076916) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.96036036036036043) + CHASTE_CONST(0.0900900900900901) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(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 + CHASTE_CONST(0.01) * mp_membrane_fast_sodium_current_reduced_inactivation_modifier->Calc(mParameters[9], var_chaste_interface__environment__time) + (1 - CHASTE_CONST(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) ? ((CHASTE_CONST(37.780000000000001) + var_chaste_interface__membrane__V) * (-127140 * CHASTE_MATH::Exp(CHASTE_CONST(0.24440000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.24440000000000001) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time)) - CHASTE_CONST(3.4740000000000003e-5) * CHASTE_MATH::Exp(CHASTE_CONST(0.043909999999999998) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(0.043909999999999998) * var_chaste_interface__membrane__V)) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(24.640530000000002) + CHASTE_CONST(0.311) * var_chaste_interface__membrane__V - CHASTE_CONST(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) ? (CHASTE_CONST(0.1212) * CHASTE_MATH::Exp(CHASTE_CONST(0.01052) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(0.01052) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(5.5312920000000005) + CHASTE_CONST(0.13780000000000001) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(0.13780000000000001) * var_chaste_interface__membrane__V))) : (CHASTE_CONST(0.29999999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(2.5349999999999999e-7) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(2.5349999999999999e-7) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.2000000000000002) + CHASTE_CONST(0.10000000000000001) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(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 + CHASTE_CONST(0.01) * mp_membrane_fast_sodium_current_reduced_inactivation_modifier->Calc(mParameters[9], var_chaste_interface__environment__time) + (1 - CHASTE_CONST(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 @@ -913,43 +915,43 @@ std::shared_ptr Cell 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_equilibrium_potentials__E_Cl = -CHASTE_CONST(26.712338705498265) * CHASTE_MATH::Log(100 / var_chaste_interface__intracellular_ion_concentrations__Cl_i); // millivolt + const double var_background_currents__i_Cl_b = CHASTE_CONST(0.00022499999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.00022499999999999999) * var_equilibrium_potentials__E_Cl; // microA_per_microF + const double var_equilibrium_potentials__E_K = CHASTE_CONST(26.712338705498265) * CHASTE_MATH::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 = CHASTE_CONST(7.0755999999999996e-6) * (-var_equilibrium_potentials__E_Cl + var_equilibrium_potentials__E_K) / (CHASTE_CONST(87.825100000000006) - var_equilibrium_potentials__E_Cl + var_equilibrium_potentials__E_K); // millimolar_per_millisecond + const double var_background_currents__i_K_b = CHASTE_CONST(0.0050000000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.0050000000000000001) * var_equilibrium_potentials__E_K; // microA_per_microF + const double var_equilibrium_potentials__E_Na = CHASTE_CONST(26.712338705498265) * CHASTE_MATH::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 = CHASTE_CONST(9.8442999999999999e-6) * CHASTE_MATH::Pow((-var_equilibrium_potentials__E_Cl + var_equilibrium_potentials__E_Na), 4) / (CHASTE_CONST(59494197.640692554) + CHASTE_MATH::Pow((-var_equilibrium_potentials__E_Cl + var_equilibrium_potentials__E_Na), 4)); // millimolar_per_millisecond + const double var_background_currents__i_Na_b = CHASTE_CONST(0.0025000000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.0025000000000000001) * var_equilibrium_potentials__E_Na; // microA_per_microF + const double var_i_K1__i_K1 = mp_i_K1__i_K1_modifier->Calc((CHASTE_CONST(0.0040000000000000001) + CHASTE_CONST(0.4389381125701739) * CHASTE_MATH::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 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.23849999999999999) * var_equilibrium_potentials__E_K)) * (CHASTE_CONST(1.02) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.23849999999999999) * var_equilibrium_potentials__E_K)) + (CHASTE_CONST(0.49124000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__membrane__V - CHASTE_CONST(0.080320000000000003) * var_equilibrium_potentials__E_K) + CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.061749999999999999) * var_equilibrium_potentials__E_K)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(0.51429999999999998) * var_equilibrium_potentials__E_K - CHASTE_CONST(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 = CHASTE_CONST(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(CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::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 + CHASTE_CONST(0.59999999999999998) / (1 + CHASTE_CONST(6.4818210260626455e-7) * CHASTE_MATH::Pow((1 / var_chaste_interface__Ca_i__Ca_i), CHASTE_CONST(1.3999999999999999)))) * (-CHASTE_CONST(26.712338705498265) * CHASTE_MATH::Log((CHASTE_CONST(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)) / (CHASTE_CONST(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(CHASTE_MATH::Pow(var_chaste_interface__i_Na_m_gate__m, 3) * (-var_equilibrium_potentials__E_Na + var_chaste_interface__membrane__V) * (CHASTE_CONST(0.20000000000000001) * var_chaste_interface__i_Na_j_gate__j + CHASTE_CONST(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((-CHASTE_CONST(1.5) * CHASTE_MATH::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] + CHASTE_CONST(0.40000000000000002) * CHASTE_MATH::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 + CHASTE_CONST(6.9444444444444451e-9) / CHASTE_MATH::Pow(var_chaste_interface__Ca_i__Ca_i, 2)) * (CHASTE_CONST(1004882.8125) * var_chaste_interface__Ca_i__Ca_i + CHASTE_CONST(1.3) * CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) + CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mp_extracellular_calcium_concentration_modifier->Calc(mParameters[4], var_chaste_interface__environment__time) + CHASTE_CONST(1.5) * CHASTE_MATH::Pow(mp_extracellular_sodium_concentration_modifier->Calc(mParameters[6], var_chaste_interface__environment__time), 3) * var_chaste_interface__Ca_i__Ca_i + CHASTE_CONST(0.0035999999999999999) * CHASTE_MATH::Pow(mp_extracellular_sodium_concentration_modifier->Calc(mParameters[6], var_chaste_interface__environment__time), 3) * (1 + CHASTE_CONST(0.081300813008130079) * var_chaste_interface__intracellular_ion_concentrations__Na_i) + CHASTE_CONST(1860.8670000000004) * (1 + CHASTE_CONST(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 = CHASTE_CONST(0.61875000000000002) * mp_extracellular_potassium_concentration_modifier->Calc(mParameters[5], var_chaste_interface__environment__time) / ((1 + 100 / CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 2)) * (CHASTE_CONST(1.5) + mp_extracellular_potassium_concentration_modifier->Calc(mParameters[5], var_chaste_interface__environment__time)) * (1 + _lt_0_row[7] + CHASTE_CONST(0.036499999999999998) * (-CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(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 = CHASTE_CONST(0.037374999999999999) * CHASTE_MATH::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) * (CHASTE_CONST(0.20000000000000001) * var_chaste_interface__i_to_1_i2_gate__i2 + CHASTE_CONST(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 = CHASTE_CONST(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 = (-CHASTE_CONST(6.767281717060562e-9) * var_background_currents__i_Cl_b - CHASTE_CONST(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 = (CHASTE_CONST(1.3534563434121124e-8) * var_i_NaK__i_NaK - CHASTE_CONST(6.767281717060562e-9) * var_background_currents__i_K_b - CHASTE_CONST(6.767281717060562e-9) * var_i_K1__i_K1 - CHASTE_CONST(6.767281717060562e-9) * var_i_K_p__i_K_p - CHASTE_CONST(6.767281717060562e-9) * var_i_Kr__i_Kr - CHASTE_CONST(6.767281717060562e-9) * var_i_Ks__i_Ks - CHASTE_CONST(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 = (-CHASTE_CONST(2.0301845151181685e-8) * var_i_NaCa__i_NaCa - CHASTE_CONST(2.0301845151181685e-8) * var_i_NaK__i_NaK - CHASTE_CONST(6.767281717060562e-9) * var_background_currents__i_Na_b - CHASTE_CONST(6.767281717060562e-9) * var_i_Na__i_Na - CHASTE_CONST(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 = CHASTE_CONST(0.0028824983370007683) * (-CHASTE_CONST(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 = CHASTE_CONST(3.510865186083326) * (-15 + var_chaste_interface__membrane__V) * (-CHASTE_CONST(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 + 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 + CHASTE_MATH::Exp(-CHASTE_CONST(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 = (CHASTE_CONST(0.14999999999999999) - var_chaste_interface__i_Ca_L_f_Ca_gate__f_Ca + CHASTE_CONST(0.55000000000000004) / (1 + CHASTE_CONST(333.33333333333331) * var_chaste_interface__Ca_r__Ca_r) + CHASTE_CONST(0.29999999999999999) / (1 - 20 * var_i_Ca_L__i_Ca_L)) / (CHASTE_CONST(0.5) + 1 / (1 + CHASTE_CONST(333.33333333333331) * var_chaste_interface__Ca_r__Ca_r) + 10 * var_Ca_MK_act__Ca_MK_act / (CHASTE_CONST(0.14999999999999999) + var_Ca_MK_act__Ca_MK_act)); // 1 / millisecond + const double var_q_leak__q_leak = CHASTE_CONST(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 + CHASTE_MATH::Exp(CHASTE_CONST(3.3333333333333335) + CHASTE_CONST(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 + CHASTE_MATH::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 / (CHASTE_CONST(0.14999999999999999) + var_Ca_MK_act__Ca_MK_act)) / (1 + CHASTE_MATH::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 / (CHASTE_CONST(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 + CHASTE_MATH::Exp(CHASTE_CONST(2.6000000000000001) + CHASTE_CONST(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 + CHASTE_CONST(0.23999999999999996) * var_q_rel__q_rel - CHASTE_CONST(1.1504378919002956e-7) * var_i_Ca_L__i_Ca_L) / (1 + CHASTE_CONST(2.2480000000000002) * var_chaste_interface__Ca_r__Ca_r / CHASTE_MATH::Pow((CHASTE_CONST(0.0086999999999999994) + var_chaste_interface__Ca_r__Ca_r), 2) + CHASTE_CONST(0.094) * var_chaste_interface__Ca_r__Ca_r / CHASTE_MATH::Pow((CHASTE_CONST(0.00087000000000000001) + var_chaste_interface__Ca_r__Ca_r), 2)); // millimolar / millisecond + const double d_dt_chaste_interface_var_q_rel_ro_gate__ro = -CHASTE_CONST(0.33333333333333331) * var_chaste_interface__q_rel_ro_gate__ro + CHASTE_CONST(0.33333333333333331) * CHASTE_MATH::Pow(var_chaste_interface__Ca_JSR__Ca_JSR, CHASTE_CONST(1.8999999999999999)) * CHASTE_MATH::Pow(var_i_Ca_L__i_Ca_L, 2) / ((1 + CHASTE_MATH::Pow(var_i_Ca_L__i_Ca_L, 2)) * (CHASTE_MATH::Pow(var_chaste_interface__Ca_JSR__Ca_JSR, CHASTE_CONST(1.8999999999999999)) + CHASTE_CONST(1644.6531773416521) * CHASTE_MATH::Pow((var_chaste_interface__Ca_r__Ca_r / (CHASTE_CONST(0.0028) + var_chaste_interface__Ca_r__Ca_r)), CHASTE_CONST(1.8999999999999999)))); // 1 / millisecond + const double var_q_tr__q_tr = CHASTE_CONST(0.0083333333333333332) * var_chaste_interface__Ca_NSR__Ca_NSR - CHASTE_CONST(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 / CHASTE_MATH::Pow((CHASTE_CONST(0.80000000000000004) + var_chaste_interface__Ca_JSR__Ca_JSR), 2)); // millimolar / millisecond + const double var_q_up__q_up = CHASTE_CONST(0.5) * (1 + CHASTE_CONST(0.75) * var_Ca_MK_act__Ca_MK_act / (CHASTE_CONST(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) / (CHASTE_CONST(0.00092000000000000003) - CHASTE_CONST(0.00017000000000000001) * var_Ca_MK_act__Ca_MK_act / (CHASTE_CONST(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 - CHASTE_CONST(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 = -(CHASTE_CONST(3.383640858530281e-9) * var_background_currents__i_Ca_b + CHASTE_CONST(3.383640858530281e-9) * var_i_Ca_p__i_Ca_p + CHASTE_CONST(0.081176470588235281) * var_q_up__q_up - CHASTE_CONST(0.029411764705882353) * var_Ca_r__q_diff - CHASTE_CONST(6.767281717060562e-9) * var_i_NaCa__i_NaCa - CHASTE_CONST(0.081176470588235281) * var_q_leak__q_leak) / (1 + CHASTE_CONST(0.14000000000000001) * var_chaste_interface__Ca_i__Ca_i / CHASTE_MATH::Pow((CHASTE_CONST(0.00050000000000000001) + var_chaste_interface__Ca_i__Ca_i), 2) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__Ca_i__Ca_i / CHASTE_MATH::Pow((CHASTE_CONST(0.0023800000000000002) + var_chaste_interface__Ca_i__Ca_i), 2)); // millimolar / millisecond if (mSetVoltageDerivativeToZero) { @@ -957,7 +959,7 @@ std::shared_ptr Cell } 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 + 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 - CHASTE_STIM(var_chaste_interface__environment__time) / CHASTE_CAP() - CHASTE_CONST(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; @@ -996,7 +998,7 @@ std::shared_ptr Cell { // 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)); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -1052,65 +1054,65 @@ std::shared_ptr Cell 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_0 = CHASTE_CONST(0.050000000000000003); // dimensionless + const double var_Ca_MK_act__km_Ca_MK = CHASTE_CONST(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_equilibrium_potentials__r_NaK = CHASTE_CONST(0.018329999999999999); // dimensionless + const double var_i_Ca_L__p_Ca = CHASTE_CONST(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(CHASTE_CONST(0.5) + 1 / (1 + CHASTE_CONST(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 + CHASTE_CONST(0.59999999999999998) / (1 + CHASTE_CONST(6.4818210260626455e-7) * CHASTE_MATH::Pow((1 / var_chaste_interface__Ca_i__Ca_i), CHASTE_CONST(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 = CHASTE_CONST(0.40000000000000002); // dimensionless + const double var_i_NaCa__k_sat = CHASTE_CONST(0.27000000000000002); // dimensionless + const double var_i_NaCa__km_Ca_act = CHASTE_CONST(0.000125); // millimolar + const double var_i_NaCa__km_Ca_i = CHASTE_CONST(0.0035999999999999999); // millimolar + const double var_i_NaCa__km_Ca_o = CHASTE_CONST(1.3); // millimolar + const double var_i_NaCa__km_Na_i_1 = CHASTE_CONST(12.300000000000001); // millimolar + const double var_i_NaCa__km_Na_o = CHASTE_CONST(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 + CHASTE_CONST(24.217200000000005) * CHASTE_MATH::Pow((-1 + CHASTE_CONST(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 + CHASTE_CONST(0.03125) * CHASTE_MATH::Pow((-1 + CHASTE_CONST(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__alpha_h = ((var_chaste_interface__membrane__V < -40) ? (CHASTE_CONST(0.13500000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(11.764705882352942) + CHASTE_CONST(0.14705882352941177) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(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 * CHASTE_MATH::Exp(CHASTE_CONST(0.34999999999999998) * var_chaste_interface__membrane__V - CHASTE_CONST(0.34999999999999998) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time)) + CHASTE_CONST(3.5600000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.079000000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.079000000000000001) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time))) : (CHASTE_CONST(7.6923076923076916) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.96036036036036043) + CHASTE_CONST(0.0900900900900901) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(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__alpha_j = ((var_chaste_interface__membrane__V < -40) ? ((CHASTE_CONST(37.780000000000001) + var_chaste_interface__membrane__V) * (-127140 * CHASTE_MATH::Exp(CHASTE_CONST(0.24440000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.24440000000000001) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time)) - CHASTE_CONST(3.4740000000000003e-5) * CHASTE_MATH::Exp(CHASTE_CONST(0.043909999999999998) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(0.043909999999999998) * var_chaste_interface__membrane__V)) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(24.640530000000002) + CHASTE_CONST(0.311) * var_chaste_interface__membrane__V - CHASTE_CONST(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) ? (CHASTE_CONST(0.1212) * CHASTE_MATH::Exp(CHASTE_CONST(0.01052) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(0.01052) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(5.5312920000000005) + CHASTE_CONST(0.13780000000000001) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(0.13780000000000001) * var_chaste_interface__membrane__V))) : (CHASTE_CONST(0.29999999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(2.5349999999999999e-7) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(2.5349999999999999e-7) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.2000000000000002) + CHASTE_CONST(0.10000000000000001) * mp_membrane_fast_sodium_current_shift_inactivation_modifier->Calc(mParameters[10], var_chaste_interface__environment__time) - CHASTE_CONST(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_membrane__i_stim_converted = CHASTE_STIM(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_i_NaCa__dNaCa_1 = CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * var_i_NaCa__km_Ca_o + CHASTE_CONST(1.5) * CHASTE_MATH::Pow(var_i_NaCa__km_Na_o, 3) * var_chaste_interface__Ca_i__Ca_i + CHASTE_MATH::Pow(var_i_NaCa__km_Na_i_1, 3) * (1 + CHASTE_CONST(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_i_K1__g_K1 = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::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 = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::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 = CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mp_extracellular_calcium_concentration_modifier->Calc(mParameters[4], var_chaste_interface__environment__time) + CHASTE_CONST(1.5) * CHASTE_MATH::Pow(mp_extracellular_sodium_concentration_modifier->Calc(mParameters[6], var_chaste_interface__environment__time), 3) * var_chaste_interface__Ca_i__Ca_i + CHASTE_MATH::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_equilibrium_potentials__E_K = var_model_parameters__R * var_model_parameters__T * CHASTE_MATH::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 * CHASTE_MATH::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 * CHASTE_MATH::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 = CHASTE_CONST(1.02) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.23849999999999999) * var_equilibrium_potentials__E_K)); // dimensionless + const double var_i_K1_xK1_gate__beta_xK1 = (CHASTE_CONST(0.49124000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__membrane__V - CHASTE_CONST(0.080320000000000003) * var_equilibrium_potentials__E_K) + CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.061749999999999999) * var_equilibrium_potentials__E_K)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(0.51429999999999998) * var_equilibrium_potentials__E_K - CHASTE_CONST(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_K1__i_K1 = mp_i_K1__i_K1_modifier->Calc((CHASTE_CONST(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 = CHASTE_CAP() * 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_Kr__i_Kr_converted = CHASTE_CAP() * 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_i_Ks__i_Ks_converted = CHASTE_CAP() * var_i_Ks__i_Ks; // uA_per_cm2 + const double var_i_Na__i_Na = mp_i_Na__i_Na_modifier->Calc(CHASTE_MATH::Pow(var_chaste_interface__i_Na_m_gate__m, 3) * (-var_equilibrium_potentials__E_Na + var_chaste_interface__membrane__V) * (CHASTE_CONST(0.20000000000000001) * var_chaste_interface__i_Na_j_gate__j + CHASTE_CONST(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 = CHASTE_CAP() * var_i_Na__i_Na; // uA_per_cm2 + const double var_i_NaCa__i_NaCa = mp_i_NaCa__i_NaCa_modifier->Calc((-CHASTE_CONST(1.5) * CHASTE_MATH::Pow(mp_extracellular_sodium_concentration_modifier->Calc(mParameters[6], var_chaste_interface__environment__time), 3) * var_chaste_interface__Ca_i__Ca_i * CHASTE_MATH::Exp(-CHASTE_CONST(0.65000000000000002) * var_chaste_interface__membrane__V * var_model_parameters__F / (var_model_parameters__R * var_model_parameters__T)) + CHASTE_MATH::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) * CHASTE_MATH::Exp(CHASTE_CONST(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 * CHASTE_MATH::Exp(-CHASTE_CONST(0.65000000000000002) * var_chaste_interface__membrane__V * var_model_parameters__F / (var_model_parameters__R * var_model_parameters__T))) * (1 + CHASTE_CONST(0.44444444444444442) * CHASTE_MATH::Pow(var_i_NaCa__km_Ca_act, 2) / CHASTE_MATH::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 = CHASTE_CAP() * 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) * (CHASTE_CONST(0.20000000000000001) * var_chaste_interface__i_to_1_i2_gate__i2 + CHASTE_CONST(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 = CHASTE_CAP() * 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__gamma_Cao = CHASTE_CONST(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_max = CHASTE_MATH::Pow(var_model_parameters__F, 2) * CHASTE_MATH::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 * CHASTE_MATH::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 + CHASTE_MATH::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_i_Ca_L__i_Ca_L_converted = CHASTE_CAP() * 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 + CHASTE_MATH::Exp(-CHASTE_CONST(4.375) - 25 * var_i_Ca_L__i_Ca_L)), var_chaste_interface__environment__time); // millisecond + const double var_q_rel__vg = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(2.6000000000000001) + CHASTE_CONST(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 diff --git a/chaste_codegen/data/tests/chaste_reference_models/Opt/non_dynamic_aslanidi_Purkinje_model_2009.hpp b/chaste_codegen/data/tests/chaste_reference_models/Opt/non_dynamic_aslanidi_Purkinje_model_2009.hpp index 7c38bf4df..23fc01778 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/Opt/non_dynamic_aslanidi_Purkinje_model_2009.hpp +++ b/chaste_codegen/data/tests/chaste_reference_models/Opt/non_dynamic_aslanidi_Purkinje_model_2009.hpp @@ -18,6 +18,9 @@ #include "AbstractCardiacCellWithModifiers.hpp" #include "AbstractModifier.hpp" #include "AbstractStimulusFunction.hpp" +#if USING_DEVICE_COMPILER +#include "StimulusEvaluatorCuda.hpp" +#endif #include "AbstractCardiacCell.hpp" class Cellaslanidi_Purkinje_model_2009FromCellMLOpt : public AbstractCardiacCellWithModifiers diff --git a/chaste_codegen/data/tests/chaste_reference_models/Opt/test_luo_rudy_1991_with_range_cap_dimensionless.cpp b/chaste_codegen/data/tests/chaste_reference_models/Opt/test_luo_rudy_1991_with_range_cap_dimensionless.cpp index b4bf7b0ce..d3eaa9ec9 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/Opt/test_luo_rudy_1991_with_range_cap_dimensionless.cpp +++ b/chaste_codegen/data/tests/chaste_reference_models/Opt/test_luo_rudy_1991_with_range_cap_dimensionless.cpp @@ -21,6 +21,8 @@ #include "HeartConfig.hpp" #include "IsNan.hpp" #include "MathsCustomFunctions.hpp" +#include "ChasteMathDeviceNamespaces.hpp" +#include "ChasteCpuMacros.hpp" @@ -143,7 +145,7 @@ class Celltest_luo_rudy_1991_with_range_cap_dimensionlessFromCellMLOpt_LookupTab for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return (((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))); + return (((var_chaste_interface__membrane__V > -100) && (CHASTE_CONST(3.0800000000000001) + CHASTE_CONST(0.040000000000000001) * var_chaste_interface__membrane__V >= -CHASTE_CONST(9.9999999999999995e-8)) && (CHASTE_CONST(3.0800000000000001) + CHASTE_CONST(0.040000000000000001) * var_chaste_interface__membrane__V <= CHASTE_CONST(9.9999999999999995e-8))) ? ((CHASTE_CONST(0.28823920000000003) + CHASTE_CONST(0.0022696000000000001) * var_chaste_interface__membrane__V) / CHASTE_MATH::Exp(CHASTE_CONST(1.4000000000000001) + CHASTE_CONST(0.040000000000000001) * var_chaste_interface__membrane__V)) : ((var_chaste_interface__membrane__V > -100) ? (CHASTE_CONST(0.11348000000000001) * (-1 + CHASTE_MATH::Exp(CHASTE_CONST(3.0800000000000001) + CHASTE_CONST(0.040000000000000001) * var_chaste_interface__membrane__V)) / ((CHASTE_CONST(3.0800000000000001) + CHASTE_CONST(0.040000000000000001) * var_chaste_interface__membrane__V) * CHASTE_MATH::Exp(CHASTE_CONST(1.4000000000000001) + CHASTE_CONST(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); @@ -165,7 +167,7 @@ class Celltest_luo_rudy_1991_with_range_cap_dimensionlessFromCellMLOpt_LookupTab for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 + exp(1.2521739130434781 - 0.16722408026755853 * var_chaste_interface__membrane__V); + return 1 + CHASTE_MATH::Exp(CHASTE_CONST(1.2521739130434781) - CHASTE_CONST(0.16722408026755853) * 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); @@ -176,7 +178,7 @@ class Celltest_luo_rudy_1991_with_range_cap_dimensionlessFromCellMLOpt_LookupTab for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return (((4.7130000000000001 + 0.10000000000000001 * var_chaste_interface__membrane__V >= -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)))); + return (((CHASTE_CONST(4.7130000000000001) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V >= -CHASTE_CONST(9.9999999999999995e-8)) && (CHASTE_CONST(4.7130000000000001) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V <= CHASTE_CONST(9.9999999999999995e-8))) ? (CHASTE_CONST(10.7408) + CHASTE_CONST(0.16) * var_chaste_interface__membrane__V) : (-CHASTE_CONST(3.1999999999999997) * (CHASTE_CONST(4.7130000000000001) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(4.7130000000000001) - CHASTE_CONST(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); @@ -198,7 +200,7 @@ class Celltest_luo_rudy_1991_with_range_cap_dimensionlessFromCellMLOpt_LookupTab for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(-0.090909090909090912 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(-CHASTE_CONST(0.090909090909090912) * 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); @@ -209,7 +211,7 @@ class Celltest_luo_rudy_1991_with_range_cap_dimensionlessFromCellMLOpt_LookupTab for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 + exp(0.35999999999999999 - 0.071999999999999995 * var_chaste_interface__membrane__V); + return 1 + CHASTE_MATH::Exp(CHASTE_CONST(0.35999999999999999) - CHASTE_CONST(0.071999999999999995) * 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); @@ -220,7 +222,7 @@ class Celltest_luo_rudy_1991_with_range_cap_dimensionlessFromCellMLOpt_LookupTab 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); + return CHASTE_MATH::Exp(CHASTE_CONST(0.050000000000000003) - CHASTE_CONST(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); @@ -231,7 +233,7 @@ class Celltest_luo_rudy_1991_with_range_cap_dimensionlessFromCellMLOpt_LookupTab 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); + return 1 + CHASTE_MATH::Exp(CHASTE_CONST(2.2000000000000002) + CHASTE_CONST(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); @@ -242,7 +244,7 @@ class Celltest_luo_rudy_1991_with_range_cap_dimensionlessFromCellMLOpt_LookupTab for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(-0.748 - 0.017000000000000001 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(-CHASTE_CONST(0.748) - CHASTE_CONST(0.017000000000000001) * 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); @@ -253,7 +255,7 @@ class Celltest_luo_rudy_1991_with_range_cap_dimensionlessFromCellMLOpt_LookupTab for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 + exp(4.2000000000000002 + 0.14999999999999999 * var_chaste_interface__membrane__V); + return 1 + CHASTE_MATH::Exp(CHASTE_CONST(4.2000000000000002) + CHASTE_CONST(0.14999999999999999) * 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); @@ -264,7 +266,7 @@ class Celltest_luo_rudy_1991_with_range_cap_dimensionlessFromCellMLOpt_LookupTab 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); + return CHASTE_MATH::Exp(-CHASTE_CONST(0.224) - CHASTE_CONST(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); @@ -275,7 +277,7 @@ class Celltest_luo_rudy_1991_with_range_cap_dimensionlessFromCellMLOpt_LookupTab 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); + return 1 + CHASTE_MATH::Exp(-6 - CHASTE_CONST(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); @@ -286,7 +288,7 @@ class Celltest_luo_rudy_1991_with_range_cap_dimensionlessFromCellMLOpt_LookupTab 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); + return CHASTE_MATH::Exp(-CHASTE_CONST(0.59999999999999998) - CHASTE_CONST(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); @@ -297,7 +299,7 @@ class Celltest_luo_rudy_1991_with_range_cap_dimensionlessFromCellMLOpt_LookupTab for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 + exp(2.8500000000000001 + 0.057000000000000002 * var_chaste_interface__membrane__V); + return 1 + CHASTE_MATH::Exp(CHASTE_CONST(2.8500000000000001) + CHASTE_CONST(0.057000000000000002) * 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); @@ -308,7 +310,7 @@ class Celltest_luo_rudy_1991_with_range_cap_dimensionlessFromCellMLOpt_LookupTab for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(4.1500000000000004 + 0.083000000000000004 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(CHASTE_CONST(4.1500000000000004) + CHASTE_CONST(0.083000000000000004) * 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); @@ -319,7 +321,7 @@ class Celltest_luo_rudy_1991_with_range_cap_dimensionlessFromCellMLOpt_LookupTab for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 + exp(-0.80000000000000004 - 0.040000000000000001 * var_chaste_interface__membrane__V); + return 1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.80000000000000004) - CHASTE_CONST(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); @@ -330,7 +332,7 @@ class Celltest_luo_rudy_1991_with_range_cap_dimensionlessFromCellMLOpt_LookupTab for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(-1.2 - 0.059999999999999998 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(-CHASTE_CONST(1.2) - CHASTE_CONST(0.059999999999999998) * 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); @@ -363,9 +365,9 @@ std::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_amplitude = -CHASTE_CONST(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_end = CHASTE_CONST(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( @@ -398,17 +400,17 @@ std::shared_ptrmParameters[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[2] = CHASTE_CONST(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[4] = CHASTE_CONST(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[6] = CHASTE_CONST(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] + this->mParameters[10] = CHASTE_CONST(0.60470000000000002); // (var_time_independent_potassium_current__g_K1_max) [milliS_per_cm2] + this->mParameters[11] = CHASTE_CONST(0.039210000000000002); // (var_background_current__g_b) [milliS_per_cm2] + this->mParameters[12] = CHASTE_CONST(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() @@ -466,7 +468,7 @@ std::shared_ptr& rY = *pStateVariables; - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -491,13 +493,13 @@ std::shared_ptrIndexTable0(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_background_current__i_b = (CHASTE_CONST(59.869999999999997) + var_chaste_interface__membrane__V) * mParameters[11]; // microA_per_cm2 + const double var_fast_sodium_current__i_Na = CHASTE_MATH::Pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3) * (-CHASTE_CONST(26.712449447891164) * CHASTE_MATH::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 = (-CHASTE_CONST(7.7000000000000002) + CHASTE_CONST(13.028700000000001) * CHASTE_MATH::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 = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::Sqrt(mParameters[2]) * (-CHASTE_CONST(26.712449447891164) * CHASTE_MATH::Log((CHASTE_CONST(0.018329999999999999) * mParameters[3] + mParameters[2]) / (CHASTE_CONST(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 = CHASTE_CONST(26.712449447891164) * CHASTE_MATH::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_time_independent_potassium_current__i_K1 = CHASTE_CONST(0.4389381125701739) * CHASTE_MATH::Sqrt(mParameters[2]) * (-var_time_independent_potassium_current__E_K1 + var_chaste_interface__membrane__V) * mParameters[10] / ((1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.23849999999999999) * var_time_independent_potassium_current__E_K1)) * (CHASTE_CONST(1.02) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.23849999999999999) * var_time_independent_potassium_current__E_K1)) + (CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.061749999999999999) * var_time_independent_potassium_current__E_K1) + CHASTE_CONST(0.49124000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__membrane__V - CHASTE_CONST(0.080320000000000003) * var_time_independent_potassium_current__E_K1)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(0.51429999999999998) * var_time_independent_potassium_current__E_K1 - CHASTE_CONST(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; @@ -509,7 +511,7 @@ std::shared_ptrmFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -536,18 +538,18 @@ std::shared_ptrmFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -599,42 +601,42 @@ std::shared_ptrIndexTable0(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_background_current__E_b = -CHASTE_CONST(59.869999999999997); // millivolt + const double var_membrane__F = CHASTE_CONST(96484.600000000006); // coulomb_per_mole + const double var_membrane__I_stim = CHASTE_STIM(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_fast_sodium_current__E_Na = var_membrane__R * var_membrane__T * CHASTE_MATH::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__i_Na = CHASTE_MATH::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) ? (CHASTE_CONST(0.13500000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(11.764705882352942) + CHASTE_CONST(0.14705882352941177) * mParameters[9] - CHASTE_CONST(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 * CHASTE_MATH::Exp(CHASTE_CONST(0.34999999999999998) * var_chaste_interface__membrane__V - CHASTE_CONST(0.34999999999999998) * mParameters[9]) + CHASTE_CONST(3.5600000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.079000000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.079000000000000001) * mParameters[9])) : (CHASTE_CONST(7.6923076923076916) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.96036036036036043) + CHASTE_CONST(0.0900900900900901) * mParameters[9] - CHASTE_CONST(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__alpha_j = ((var_chaste_interface__membrane__V < -40) ? ((CHASTE_CONST(37.780000000000001) + var_chaste_interface__membrane__V) * (-127140 * CHASTE_MATH::Exp(CHASTE_CONST(0.24440000000000001) * var_chaste_interface__membrane__V - CHASTE_CONST(0.24440000000000001) * mParameters[9]) - CHASTE_CONST(3.4740000000000003e-5) * CHASTE_MATH::Exp(CHASTE_CONST(0.043909999999999998) * mParameters[9] - CHASTE_CONST(0.043909999999999998) * var_chaste_interface__membrane__V)) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(24.640530000000002) + CHASTE_CONST(0.311) * var_chaste_interface__membrane__V - CHASTE_CONST(0.311) * mParameters[9]))) : (0)); // per_millisecond + const double var_fast_sodium_current_j_gate__beta_j = ((var_chaste_interface__membrane__V < -40) ? (CHASTE_CONST(0.1212) * CHASTE_MATH::Exp(CHASTE_CONST(0.01052) * mParameters[9] - CHASTE_CONST(0.01052) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(5.5312920000000005) + CHASTE_CONST(0.13780000000000001) * mParameters[9] - CHASTE_CONST(0.13780000000000001) * var_chaste_interface__membrane__V))) : (CHASTE_CONST(0.29999999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(2.5349999999999999e-7) * mParameters[9] - CHASTE_CONST(2.5349999999999999e-7) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.2000000000000002) + CHASTE_CONST(0.10000000000000001) * mParameters[9] - CHASTE_CONST(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__E_si = CHASTE_CONST(7.7000000000000002) - CHASTE_CONST(13.028700000000001) * CHASTE_MATH::Log(var_chaste_interface__intracellular_calcium_concentration__Cai); // millivolt + const double var_slow_inward_current_f_gate__alpha_f = CHASTE_CONST(0.012) * _lt_0_row[9] / (_lt_0_row[8]); // per_millisecond + const double var_slow_inward_current_f_gate__beta_f = CHASTE_CONST(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__PR_NaK = CHASTE_CONST(0.018329999999999999); // dimensionless + const double var_time_dependent_potassium_current__E_K = var_membrane__R * var_membrane__T * CHASTE_MATH::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 = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::Sqrt(mParameters[2]) * mParameters[6]; // milliS_per_cm2 + const double var_time_dependent_potassium_current_Xi_gate__B = CHASTE_CONST(0.040000000000000001); // per_millivolt + const double var_time_dependent_potassium_current_Xi_gate__A = CHASTE_CONST(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_Xi_gate__temp_Xi = (((var_time_dependent_potassium_current_Xi_gate__U >= -CHASTE_CONST(9.9999999999999995e-8)) && (var_time_dependent_potassium_current_Xi_gate__U <= CHASTE_CONST(9.9999999999999995e-8))) ? ((1 + CHASTE_CONST(0.5) * var_time_dependent_potassium_current_Xi_gate__U) * var_time_dependent_potassium_current_Xi_gate__A) : ((-1 + CHASTE_MATH::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 / CHASTE_MATH::Exp(CHASTE_CONST(1.4000000000000001) + CHASTE_CONST(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_time_independent_potassium_current__E_K1 = var_membrane__R * var_membrane__T * CHASTE_MATH::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__g_K1 = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::Sqrt(mParameters[2]) * mParameters[10]; // milliS_per_cm2 + const double var_time_independent_potassium_current_K1_gate__alpha_K1 = CHASTE_CONST(1.02) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.23849999999999999) * var_time_independent_potassium_current__E_K1)); // per_millisecond + const double var_time_independent_potassium_current_K1_gate__beta_K1 = (CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.061749999999999999) * var_time_independent_potassium_current__E_K1) + CHASTE_CONST(0.49124000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__membrane__V - CHASTE_CONST(0.080320000000000003) * var_time_independent_potassium_current__E_K1)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(0.51429999999999998) * var_time_independent_potassium_current__E_K1 - CHASTE_CONST(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 diff --git a/chaste_codegen/data/tests/chaste_reference_models/Opt/test_luo_rudy_1991_with_range_cap_dimensionless.hpp b/chaste_codegen/data/tests/chaste_reference_models/Opt/test_luo_rudy_1991_with_range_cap_dimensionless.hpp index fd71687b4..ccd57be2b 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/Opt/test_luo_rudy_1991_with_range_cap_dimensionless.hpp +++ b/chaste_codegen/data/tests/chaste_reference_models/Opt/test_luo_rudy_1991_with_range_cap_dimensionless.hpp @@ -16,6 +16,9 @@ #include "ChasteSerialization.hpp" #include #include "AbstractStimulusFunction.hpp" +#if USING_DEVICE_COMPILER +#include "StimulusEvaluatorCuda.hpp" +#endif #include "AbstractCardiacCell.hpp" class Celltest_luo_rudy_1991_with_range_cap_dimensionlessFromCellMLOpt : public AbstractCardiacCell diff --git a/chaste_codegen/data/tests/chaste_reference_models/RL/dynamic_livshitz_rudy_2007.cpp b/chaste_codegen/data/tests/chaste_reference_models/RL/dynamic_livshitz_rudy_2007.cpp index e2f8136fa..50fc447ab 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/RL/dynamic_livshitz_rudy_2007.cpp +++ b/chaste_codegen/data/tests/chaste_reference_models/RL/dynamic_livshitz_rudy_2007.cpp @@ -21,6 +21,8 @@ #include "HeartConfig.hpp" #include "IsNan.hpp" #include "MathsCustomFunctions.hpp" +#include "ChasteMathDeviceNamespaces.hpp" +#include "ChasteCpuMacros.hpp" @@ -29,7 +31,7 @@ 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_amplitude_converted = -15 * CHASTE_CAP(); // 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 @@ -58,19 +60,19 @@ 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[1] = CHASTE_CONST(0.125); // (var_Irel__kappa) [mM_per_mV_ms] + this->mParameters[2] = CHASTE_CONST(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[4] = CHASTE_CONST(1.8); // (var_Environment__Ca_o) [mM] + this->mParameters[5] = CHASTE_CONST(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[7] = CHASTE_CONST(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] + this->mParameters[11] = CHASTE_CONST(0.02614); // (var_IKr__gkrmax) [mS_per_uF] + this->mParameters[12] = CHASTE_CONST(0.433); // (var_IKs__GKsmax) [mS_per_uF] + this->mParameters[13] = CHASTE_CONST(0.00025000000000000001); // (var_INaCa__c1) [uA_per_uF] } Dynamiclivshitz_rudy_2007FromCellMLRushLarsen::~Dynamiclivshitz_rudy_2007FromCellMLRushLarsen() @@ -117,7 +119,7 @@ // 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]); + double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? CHASTE_THIS(mFixedVoltage) : rY[0]); // Units: mV; Initial value: -89.4356034692784 double var_chaste_interface__INa__H = rY[1]; // Units: dimensionless; Initial value: 0.994401369032678 @@ -146,76 +148,76 @@ 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__cmdnbar = CHASTE_CONST(0.050000000000000003); // mM + const double var_Ca__kmcmdn = CHASTE_CONST(0.0023800000000000002); // mM + const double var_Ca__kmtrpn = CHASTE_CONST(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__trpnbar = CHASTE_CONST(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_Ca__Ca_i = -CHASTE_CONST(0.33333333333333331) * var_Ca__bmyo + CHASTE_CONST(1.1547005383792515) * CHASTE_MATH::Sqrt(-var_Ca__cmyo + CHASTE_CONST(0.33333333333333331) * CHASTE_MATH::Pow(var_Ca__bmyo, 2)) * CHASTE_MATH::Cos(CHASTE_CONST(0.33333333333333331) * CHASTE_MATH::Acos(CHASTE_CONST(0.096225044864937631) * CHASTE_MATH::Pow((-var_Ca__cmyo + CHASTE_CONST(0.33333333333333331) * CHASTE_MATH::Pow(var_Ca__bmyo, 2)), (-CHASTE_CONST(1.5))) * (-2 * CHASTE_MATH::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__gacao = CHASTE_CONST(0.34100000000000003); // dimensionless + const double var_ICaL__gaki = CHASTE_CONST(0.75); // dimensionless + const double var_ICaL__gako = CHASTE_CONST(0.75); // dimensionless + const double var_ICaL__ganai = CHASTE_CONST(0.75); // dimensionless + const double var_ICaL__ganao = CHASTE_CONST(0.75); // dimensionless + const double var_ICaL__kmca = CHASTE_CONST(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_ICaL__pk = CHASTE_CONST(1.9299999999999999e-7); // L_per_F_ms + const double var_ICaL__pna = CHASTE_CONST(6.75e-7); // L_per_F_ms + const double var_ICaT__gcat = CHASTE_CONST(0.050000000000000003); // mS_per_uF + const double var_ICab__gcab = CHASTE_CONST(0.003016); // mS_per_uF + const double var_IK1__GK1max = CHASTE_CONST(0.75); // mS_per_uF + const double var_IK1__GK1_ = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::Sqrt(mParameters[5]) * var_IK1__GK1max; // mS_per_uF + const double var_IKp__GKpmax = CHASTE_CONST(0.0055199999999999997); // mS_per_uF + const double var_IKr__gkr = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::Sqrt(mParameters[5]) * mParameters[11]; // mS_per_uF + const double var_IKs__gks = (1 + CHASTE_CONST(0.59999999999999998) / (1 + CHASTE_CONST(6.4818210260626455e-7) * CHASTE_MATH::Pow((1 / var_Ca__Ca_i), CHASTE_CONST(1.3999999999999999)))) * mParameters[12]; // mS_per_uF + const double var_INaCa__c2 = CHASTE_CONST(0.0001); // dimensionless + const double var_INaCa__gammas = CHASTE_CONST(0.14999999999999999); // dimensionless + const double var_INaK__ibarnak = CHASTE_CONST(2.25); // uA_per_uF + const double var_INaK__kmko = CHASTE_CONST(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_INaK__sigma = -CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(0.01485884101040119) * mParameters[6]); // dimensionless + const double var_INab__GNab = CHASTE_CONST(0.0040000000000000001); // mS_per_uF + const double var_IpCa__ibarpca = CHASTE_CONST(1.1499999999999999); // uA_per_uF + const double var_IpCa__kmpca = CHASTE_CONST(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__ibarca = 4 * (-mParameters[4] * var_ICaL__gacao + var_Ca__Ca_i * var_ICaL__gacai * CHASTE_MATH::Exp(2 * var_Environment__FonRT * var_chaste_interface__cell__V)) * var_Environment__F * var_Environment__FonRT * mParameters[7] * var_chaste_interface__cell__V / (-1 + CHASTE_MATH::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 * CHASTE_MATH::Exp(var_Environment__FonRT * var_chaste_interface__cell__V)) * var_Environment__F * var_Environment__FonRT * var_ICaL__pk * var_chaste_interface__cell__V / (-1 + CHASTE_MATH::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 * CHASTE_MATH::Exp(var_Environment__FonRT * var_chaste_interface__cell__V)) * var_Environment__F * var_Environment__FonRT * var_ICaL__pna * var_chaste_interface__cell__V / (-1 + CHASTE_MATH::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_ICab__icab = (-CHASTE_CONST(0.5) * CHASTE_MATH::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 + CHASTE_MATH::Exp(CHASTE_CONST(0.4017857142857143) + CHASTE_CONST(0.044642857142857144) * var_chaste_interface__cell__V)); // dimensionless + const double var_INaCa__inaca = (-CHASTE_MATH::Pow(mParameters[6], 3) * var_Ca__Ca_i + CHASTE_MATH::Pow(var_chaste_interface__Na__Na_i, 3) * mParameters[4] * CHASTE_MATH::Exp(var_Environment__FonRT * var_chaste_interface__cell__V)) * mParameters[13] * CHASTE_MATH::Exp((-1 + var_INaCa__gammas) * var_Environment__FonRT * var_chaste_interface__cell__V) / (1 + (CHASTE_MATH::Pow(mParameters[6], 3) * var_Ca__Ca_i + CHASTE_MATH::Pow(var_chaste_interface__Na__Na_i, 3) * mParameters[4] * CHASTE_MATH::Exp(var_Environment__FonRT * var_chaste_interface__cell__V)) * var_INaCa__c2 * CHASTE_MATH::Exp((-1 + var_INaCa__gammas) * var_Environment__FonRT * var_chaste_interface__cell__V)); // uA_per_uF + const double var_INaK__fnak = 1 / (1 + CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(0.10000000000000001) * var_Environment__FonRT * var_chaste_interface__cell__V) + CHASTE_CONST(0.036499999999999998) * var_INaK__sigma * CHASTE_MATH::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 + CHASTE_MATH::Pow(var_INaK__kmnai, 2) / CHASTE_MATH::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_reversal_potentials__ECa = CHASTE_CONST(0.5) * CHASTE_MATH::Log(mParameters[4] / var_Ca__Ca_i) / var_Environment__FonRT; // mV + const double var_ICaT__icat = CHASTE_MATH::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_reversal_potentials__EK = CHASTE_MATH::Log(mParameters[5] / var_chaste_interface__K__K_i) / var_Environment__FonRT; // mV + const double var_IK1__ak1 = CHASTE_CONST(1.02) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__cell__V - CHASTE_CONST(0.23849999999999999) * var_reversal_potentials__EK)); // per_ms + const double var_IK1__bk1 = (CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__cell__V - CHASTE_CONST(0.061749999999999999) * var_reversal_potentials__EK) + CHASTE_CONST(0.49124000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__cell__V - CHASTE_CONST(0.080320000000000003) * var_reversal_potentials__EK)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(0.51429999999999998) * var_reversal_potentials__EK - CHASTE_CONST(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_IKp__ikp = (-var_reversal_potentials__EK + var_chaste_interface__cell__V) * var_IKp__GKpmax / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.2521739130434781) - CHASTE_CONST(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_reversal_potentials__ENa = CHASTE_MATH::Log(mParameters[6] / var_chaste_interface__Na__Na_i) / var_Environment__FonRT; // mV + const double var_INa__ina = CHASTE_MATH::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_reversal_potentials__prnak = CHASTE_CONST(0.018329999999999999); // dimensionless + const double var_reversal_potentials__EKs = CHASTE_MATH::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 var_chaste_interface__i_ionic = (var_cell__caiont + var_cell__kiont + var_cell__naiont) * CHASTE_CAP(); // uA_per_cm2 const double i_ionic = var_chaste_interface__i_ionic; EXCEPT_IF_NOT(!std::isnan(i_ionic)); @@ -225,7 +227,7 @@ 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]); + double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? CHASTE_THIS(mFixedVoltage) : rY[0]); // Units: mV; Initial value: -89.4356034692784 double var_chaste_interface__INa__H = rY[1]; // Units: dimensionless; Initial value: 0.994401369032678 @@ -263,132 +265,132 @@ // 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__cmdnbar = CHASTE_CONST(0.050000000000000003); // mM + const double var_Ca__kmcmdn = CHASTE_CONST(0.0023800000000000002); // mM + const double var_Ca__kmtrpn = CHASTE_CONST(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__trpnbar = CHASTE_CONST(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_Ca__Ca_i = -CHASTE_CONST(0.33333333333333331) * var_Ca__bmyo + CHASTE_CONST(1.1547005383792515) * CHASTE_MATH::Sqrt(-var_Ca__cmyo + CHASTE_CONST(0.33333333333333331) * CHASTE_MATH::Pow(var_Ca__bmyo, 2)) * CHASTE_MATH::Cos(CHASTE_CONST(0.33333333333333331) * CHASTE_MATH::Acos(CHASTE_CONST(0.096225044864937631) * CHASTE_MATH::Pow((-var_Ca__cmyo + CHASTE_CONST(0.33333333333333331) * CHASTE_MATH::Pow(var_Ca__bmyo, 2)), (-CHASTE_CONST(1.5))) * (-2 * CHASTE_MATH::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__gacao = CHASTE_CONST(0.34100000000000003); // dimensionless + const double var_ICaL__gaki = CHASTE_CONST(0.75); // dimensionless + const double var_ICaL__gako = CHASTE_CONST(0.75); // dimensionless + const double var_ICaL__ganai = CHASTE_CONST(0.75); // dimensionless + const double var_ICaL__ganao = CHASTE_CONST(0.75); // dimensionless + const double var_ICaL__kmca = CHASTE_CONST(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_ICaL__pk = CHASTE_CONST(1.9299999999999999e-7); // L_per_F_ms + const double var_ICaL__pna = CHASTE_CONST(6.75e-7); // L_per_F_ms + const double var_ICaT__gcat = CHASTE_CONST(0.050000000000000003); // mS_per_uF + const double var_ICab__gcab = CHASTE_CONST(0.003016); // mS_per_uF + const double var_IK1__GK1max = CHASTE_CONST(0.75); // mS_per_uF + const double var_IK1__GK1_ = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::Sqrt(mParameters[5]) * var_IK1__GK1max; // mS_per_uF + const double var_IKp__GKpmax = CHASTE_CONST(0.0055199999999999997); // mS_per_uF + const double var_IKr__gkr = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::Sqrt(mParameters[5]) * mParameters[11]; // mS_per_uF + const double var_IKs__gks = (1 + CHASTE_CONST(0.59999999999999998) / (1 + CHASTE_CONST(6.4818210260626455e-7) * CHASTE_MATH::Pow((1 / var_Ca__Ca_i), CHASTE_CONST(1.3999999999999999)))) * mParameters[12]; // mS_per_uF + const double var_INaCa__c2 = CHASTE_CONST(0.0001); // dimensionless + const double var_INaCa__gammas = CHASTE_CONST(0.14999999999999999); // dimensionless + const double var_INaK__ibarnak = CHASTE_CONST(2.25); // uA_per_uF + const double var_INaK__kmko = CHASTE_CONST(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_INaK__sigma = -CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(0.01485884101040119) * mParameters[6]); // dimensionless + const double var_INab__GNab = CHASTE_CONST(0.0040000000000000001); // mS_per_uF + const double var_IpCa__ibarpca = CHASTE_CONST(1.1499999999999999); // uA_per_uF + const double var_IpCa__kmpca = CHASTE_CONST(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__kmcsqn = CHASTE_CONST(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__Ca_JSR_free = CHASTE_MATH::Sqrt(CHASTE_CONST(0.25) * CHASTE_MATH::Pow(var_Irel__bbb, 2) + var_Irel__c) - CHASTE_CONST(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__tau = CHASTE_CONST(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_Irel__tau_Rel = var_Irel__tau / (1 + CHASTE_CONST(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__kmup = CHASTE_CONST(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__dss0 = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.6025641025641024) - CHASTE_CONST(0.16025641025641024) * var_chaste_interface__cell__V)); // dimensionless + const double var_ICaL__dss1 = 1 / (1 + CHASTE_MATH::Exp(-2500 - CHASTE_CONST(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__fss = 1 / (1 + CHASTE_MATH::Exp(4 + CHASTE_CONST(0.125) * var_chaste_interface__cell__V)) + CHASTE_CONST(0.59999999999999998) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(2.5) - CHASTE_CONST(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 * CHASTE_MATH::Exp(2 * var_Environment__FonRT * var_chaste_interface__cell__V)) * var_Environment__F * var_Environment__FonRT * mParameters[7] * var_chaste_interface__cell__V / (-1 + CHASTE_MATH::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 * CHASTE_MATH::Exp(var_Environment__FonRT * var_chaste_interface__cell__V)) * var_Environment__F * var_Environment__FonRT * var_ICaL__pk * var_chaste_interface__cell__V / (-1 + CHASTE_MATH::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 * CHASTE_MATH::Exp(var_Environment__FonRT * var_chaste_interface__cell__V)) * var_Environment__F * var_Environment__FonRT * var_ICaL__pna * var_chaste_interface__cell__V / (-1 + CHASTE_MATH::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_ICaL__taud = CHASTE_CONST(28.571428571428569) * (1 - CHASTE_MATH::Exp(-CHASTE_CONST(1.6025641025641024) - CHASTE_CONST(0.16025641025641024) * var_chaste_interface__cell__V)) * var_ICaL__dss0 / (10 + var_chaste_interface__cell__V); // ms + const double var_ICaL__tauf = 1 / (CHASTE_CONST(0.02) + CHASTE_CONST(0.019699999999999999) * CHASTE_MATH::Exp(-CHASTE_CONST(0.113569) * CHASTE_MATH::Pow((1 + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__cell__V), 2))); // ms + const double var_ICaT__aa = 1 - 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(416.66666666666669) * var_chaste_interface__cell__V)); // dimensionless + const double var_ICaT__bss = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.2962962962962963) - CHASTE_CONST(0.092592592592592587) * var_chaste_interface__cell__V)); // dimensionless + const double var_ICaT__gss = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(10.714285714285715) + CHASTE_CONST(0.17857142857142858) * var_chaste_interface__cell__V)); // dimensionless + const double var_ICaT__taub = CHASTE_CONST(3.7000000000000002) + CHASTE_CONST(6.0999999999999996) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(5.5555555555555554) + CHASTE_CONST(0.22222222222222221) * var_chaste_interface__cell__V)); // ms + const double var_ICaT__taug = 12 - 12 * var_ICaT__aa + (12 - CHASTE_CONST(0.875) * var_chaste_interface__cell__V) * var_ICaT__aa; // ms + const double var_ICab__icab = (-CHASTE_CONST(0.5) * CHASTE_MATH::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 + CHASTE_MATH::Exp(CHASTE_CONST(0.4017857142857143) + CHASTE_CONST(0.044642857142857144) * var_chaste_interface__cell__V)); // dimensionless + const double var_IKr__tauxr = 1 / (CHASTE_CONST(0.00060999999999999997) * (CHASTE_CONST(38.899999999999999) + var_chaste_interface__cell__V) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(5.6404999999999994) + CHASTE_CONST(0.14499999999999999) * var_chaste_interface__cell__V)) + CHASTE_CONST(0.0013799999999999999) * (CHASTE_CONST(14.199999999999999) + var_chaste_interface__cell__V) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(1.7465999999999999) - CHASTE_CONST(0.123) * var_chaste_interface__cell__V))); // ms + const double var_IKr__xrss = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.3729411764705883) - CHASTE_CONST(0.23529411764705882) * var_chaste_interface__cell__V)); // dimensionless + const double var_IKs__tauxs = 1 / (CHASTE_CONST(0.00013100000000000001) * (30 + var_chaste_interface__cell__V) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(2.0609999999999999) + CHASTE_CONST(0.068699999999999997) * var_chaste_interface__cell__V)) + CHASTE_CONST(7.1899999999999999e-5) * (30 + var_chaste_interface__cell__V) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(4.4399999999999995) - CHASTE_CONST(0.14799999999999999) * var_chaste_interface__cell__V))); // ms + const double var_IKs__xss = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(0.089820359281437126) - CHASTE_CONST(0.059880239520958084) * var_chaste_interface__cell__V)); // dimensionless + const double var_INa__a = 1 - 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(1666.6666666666667) - CHASTE_CONST(41.666666666666664) * var_chaste_interface__cell__V)); // per_ms + const double var_INa__aH = CHASTE_CONST(0.13500000000000001) * var_INa__a * CHASTE_MATH::Exp(-CHASTE_CONST(11.764705882352942) + CHASTE_CONST(0.14705882352941177) * mParameters[10] - CHASTE_CONST(0.14705882352941177) * var_chaste_interface__cell__V); // per_ms + const double var_INa__aj = (CHASTE_CONST(37.780000000000001) + var_chaste_interface__cell__V) * (-127140 * CHASTE_MATH::Exp(CHASTE_CONST(0.24440000000000001) * var_chaste_interface__cell__V - CHASTE_CONST(0.24440000000000001) * mParameters[10]) - CHASTE_CONST(3.4740000000000003e-5) * CHASTE_MATH::Exp(CHASTE_CONST(0.043909999999999998) * mParameters[10] - CHASTE_CONST(0.043909999999999998) * var_chaste_interface__cell__V)) * var_INa__a / (1 + CHASTE_MATH::Exp(CHASTE_CONST(24.640530000000002) + CHASTE_CONST(0.311) * var_chaste_interface__cell__V)); // per_ms + const double var_INa__am = CHASTE_CONST(0.32000000000000001) * (CHASTE_CONST(47.130000000000003) + var_chaste_interface__cell__V) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(4.7130000000000001) - CHASTE_CONST(0.10000000000000001) * var_chaste_interface__cell__V)); // per_ms + const double var_INa__bH = (CHASTE_CONST(3.5600000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.079000000000000001) * var_chaste_interface__cell__V - CHASTE_CONST(0.079000000000000001) * mParameters[10]) + 310000 * CHASTE_MATH::Exp(CHASTE_CONST(0.34999999999999998) * var_chaste_interface__cell__V - CHASTE_CONST(0.34999999999999998) * mParameters[10])) * var_INa__a + CHASTE_CONST(7.6923076923076916) * (1 - var_INa__a) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.96036036036036043) - CHASTE_CONST(0.0900900900900901) * var_chaste_interface__cell__V)); // per_ms + const double var_INa__H_inf = CHASTE_CONST(0.01) * mParameters[9] + (1 - CHASTE_CONST(0.01) * mParameters[9]) * var_INa__aH / (var_INa__aH + var_INa__bH); // dimensionless + const double var_INa__bj = CHASTE_CONST(0.1212) * var_INa__a * CHASTE_MATH::Exp(CHASTE_CONST(0.01052) * mParameters[10] - CHASTE_CONST(0.01052) * var_chaste_interface__cell__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(5.5312920000000005) - CHASTE_CONST(0.13780000000000001) * var_chaste_interface__cell__V)) + CHASTE_CONST(0.29999999999999999) * (1 - var_INa__a) * CHASTE_MATH::Exp(CHASTE_CONST(2.5349999999999999e-7) * mParameters[10] - CHASTE_CONST(2.5349999999999999e-7) * var_chaste_interface__cell__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.2000000000000002) - CHASTE_CONST(0.10000000000000001) * var_chaste_interface__cell__V)); // per_ms + const double var_INa__bm = CHASTE_CONST(0.080000000000000002) * CHASTE_MATH::Exp(-CHASTE_CONST(0.090909090909090912) * var_chaste_interface__cell__V); // per_ms + const double var_INa__j_inf = CHASTE_CONST(0.01) * mParameters[9] + (1 - CHASTE_CONST(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 var_INaCa__inaca = (-CHASTE_MATH::Pow(mParameters[6], 3) * var_Ca__Ca_i + CHASTE_MATH::Pow(var_chaste_interface__Na__Na_i, 3) * mParameters[4] * CHASTE_MATH::Exp(var_Environment__FonRT * var_chaste_interface__cell__V)) * mParameters[13] * CHASTE_MATH::Exp((-1 + var_INaCa__gammas) * var_Environment__FonRT * var_chaste_interface__cell__V) / (1 + (CHASTE_MATH::Pow(mParameters[6], 3) * var_Ca__Ca_i + CHASTE_MATH::Pow(var_chaste_interface__Na__Na_i, 3) * mParameters[4] * CHASTE_MATH::Exp(var_Environment__FonRT * var_chaste_interface__cell__V)) * var_INaCa__c2 * CHASTE_MATH::Exp((-1 + var_INaCa__gammas) * var_Environment__FonRT * var_chaste_interface__cell__V)); // uA_per_uF + const double var_INaK__fnak = 1 / (1 + CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(0.10000000000000001) * var_Environment__FonRT * var_chaste_interface__cell__V) + CHASTE_CONST(0.036499999999999998) * var_INaK__sigma * CHASTE_MATH::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 + CHASTE_MATH::Pow(var_INaK__kmnai, 2) / CHASTE_MATH::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 + CHASTE_MATH::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__i_Stim_converted = CHASTE_STIM(var_chaste_interface__Environment__time); // uA_per_cm2 + const double var_cell__i_Stim = var_cell__i_Stim_converted / CHASTE_CAP(); // uA_per_uF + const double var_cell__l = CHASTE_CONST(0.01); // cm + const double var_cell__ra = CHASTE_CONST(0.0011000000000000001); // cm + const double var_cell__ageo = 2 * CHASTE_CONST(CHASTE_MATH::Pi) * CHASTE_MATH::Pow(var_cell__ra, 2) + 2 * CHASTE_CONST(CHASTE_MATH::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 var_cell__vcell = 1000 * CHASTE_CONST(CHASTE_MATH::Pi) * CHASTE_MATH::Pow(var_cell__ra, 2) * var_cell__l; // uL + const double var_cell__vjsr = CHASTE_CONST(0.0047999999999999996) * var_cell__vcell; // uL + const double var_cell__vmyo = CHASTE_CONST(0.68000000000000005) * var_cell__vcell; // uL + const double var_cell__vnsr = CHASTE_CONST(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_reversal_potentials__ECa = CHASTE_CONST(0.5) * CHASTE_MATH::Log(mParameters[4] / var_Ca__Ca_i) / var_Environment__FonRT; // mV + const double var_ICaT__icat = CHASTE_MATH::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 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 - CHASTE_CONST(0.5) * var_cell__AF * var_cell__caiont / var_cell__vmyo; // mM / ms + const double var_reversal_potentials__EK = CHASTE_MATH::Log(mParameters[5] / var_chaste_interface__K__K_i) / var_Environment__FonRT; // mV + const double var_IK1__ak1 = CHASTE_CONST(1.02) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__cell__V - CHASTE_CONST(0.23849999999999999) * var_reversal_potentials__EK)); // per_ms + const double var_IK1__bk1 = (CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__cell__V - CHASTE_CONST(0.061749999999999999) * var_reversal_potentials__EK) + CHASTE_CONST(0.49124000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__cell__V - CHASTE_CONST(0.080320000000000003) * var_reversal_potentials__EK)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(0.51429999999999998) * var_reversal_potentials__EK - CHASTE_CONST(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_IKp__ikp = (-var_reversal_potentials__EK + var_chaste_interface__cell__V) * var_IKp__GKpmax / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.2521739130434781) - CHASTE_CONST(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_reversal_potentials__ENa = CHASTE_MATH::Log(mParameters[6] / var_chaste_interface__Na__Na_i) / var_Environment__FonRT; // mV + const double var_INa__ina = CHASTE_MATH::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_reversal_potentials__prnak = CHASTE_CONST(0.018329999999999999); // dimensionless + const double var_reversal_potentials__EKs = CHASTE_MATH::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 @@ -462,7 +464,7 @@ { // Inputs: // Time units: millisecond - double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? CHASTE_THIS(mFixedVoltage) : rY[0]); // Units: mV; Initial value: -89.4356034692784 double var_chaste_interface__INa__H = rY[1]; // Units: dimensionless; Initial value: 0.994401369032678 @@ -488,58 +490,58 @@ // 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__cmdnbar = CHASTE_CONST(0.050000000000000003); // mM + const double var_Ca__kmcmdn = CHASTE_CONST(0.0023800000000000002); // mM + const double var_Ca__kmtrpn = CHASTE_CONST(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__trpnbar = CHASTE_CONST(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_Ca__Ca_i = -CHASTE_CONST(0.33333333333333331) * var_Ca__bmyo + CHASTE_CONST(1.1547005383792515) * CHASTE_MATH::Sqrt(-var_Ca__cmyo + CHASTE_CONST(0.33333333333333331) * CHASTE_MATH::Pow(var_Ca__bmyo, 2)) * CHASTE_MATH::Cos(CHASTE_CONST(0.33333333333333331) * CHASTE_MATH::Acos(CHASTE_CONST(0.096225044864937631) * CHASTE_MATH::Pow((-var_Ca__cmyo + CHASTE_CONST(0.33333333333333331) * CHASTE_MATH::Pow(var_Ca__bmyo, 2)), (-CHASTE_CONST(1.5))) * (-2 * CHASTE_MATH::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__gacao = CHASTE_CONST(0.34100000000000003); // dimensionless + const double var_ICaL__kmca = CHASTE_CONST(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_IK1__GK1max = CHASTE_CONST(0.75); // mS_per_uF + const double var_IK1__GK1_ = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::Sqrt(mParameters[5]) * var_IK1__GK1max; // mS_per_uF + const double var_IKr__gkr = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::Sqrt(mParameters[5]) * mParameters[11]; // mS_per_uF + const double var_IKs__gks = (1 + CHASTE_CONST(0.59999999999999998) / (1 + CHASTE_CONST(6.4818210260626455e-7) * CHASTE_MATH::Pow((1 / var_Ca__Ca_i), CHASTE_CONST(1.3999999999999999)))) * mParameters[12]; // mS_per_uF + const double var_INaCa__c2 = CHASTE_CONST(0.0001); // dimensionless + const double var_INaCa__gammas = CHASTE_CONST(0.14999999999999999); // dimensionless + const double var_ICaL__ibarca = 4 * (-mParameters[4] * var_ICaL__gacao + var_Ca__Ca_i * var_ICaL__gacai * CHASTE_MATH::Exp(2 * var_Environment__FonRT * var_chaste_interface__cell__V)) * var_Environment__F * var_Environment__FonRT * mParameters[7] * var_chaste_interface__cell__V / (-1 + CHASTE_MATH::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_ICaL__ilca_converted = CHASTE_CAP() * var_ICaL__ilca; // uA_per_cm2 + const double var_ICaL__tauf = 1 / (CHASTE_CONST(0.02) + CHASTE_CONST(0.019699999999999999) * CHASTE_MATH::Exp(-CHASTE_CONST(0.113569) * CHASTE_MATH::Pow((1 + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__cell__V), 2))); // ms + const double var_IKr__r = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(0.4017857142857143) + CHASTE_CONST(0.044642857142857144) * var_chaste_interface__cell__V)); // dimensionless + const double var_INa__a = 1 - 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(1666.6666666666667) - CHASTE_CONST(41.666666666666664) * var_chaste_interface__cell__V)); // per_ms + const double var_INa__aH = CHASTE_CONST(0.13500000000000001) * var_INa__a * CHASTE_MATH::Exp(-CHASTE_CONST(11.764705882352942) + CHASTE_CONST(0.14705882352941177) * mParameters[10] - CHASTE_CONST(0.14705882352941177) * var_chaste_interface__cell__V); // per_ms + const double var_INa__aj = (CHASTE_CONST(37.780000000000001) + var_chaste_interface__cell__V) * (-127140 * CHASTE_MATH::Exp(CHASTE_CONST(0.24440000000000001) * var_chaste_interface__cell__V - CHASTE_CONST(0.24440000000000001) * mParameters[10]) - CHASTE_CONST(3.4740000000000003e-5) * CHASTE_MATH::Exp(CHASTE_CONST(0.043909999999999998) * mParameters[10] - CHASTE_CONST(0.043909999999999998) * var_chaste_interface__cell__V)) * var_INa__a / (1 + CHASTE_MATH::Exp(CHASTE_CONST(24.640530000000002) + CHASTE_CONST(0.311) * var_chaste_interface__cell__V)); // per_ms + const double var_INa__bH = (CHASTE_CONST(3.5600000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.079000000000000001) * var_chaste_interface__cell__V - CHASTE_CONST(0.079000000000000001) * mParameters[10]) + 310000 * CHASTE_MATH::Exp(CHASTE_CONST(0.34999999999999998) * var_chaste_interface__cell__V - CHASTE_CONST(0.34999999999999998) * mParameters[10])) * var_INa__a + CHASTE_CONST(7.6923076923076916) * (1 - var_INa__a) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.96036036036036043) - CHASTE_CONST(0.0900900900900901) * var_chaste_interface__cell__V)); // per_ms + const double var_INa__bj = CHASTE_CONST(0.1212) * var_INa__a * CHASTE_MATH::Exp(CHASTE_CONST(0.01052) * mParameters[10] - CHASTE_CONST(0.01052) * var_chaste_interface__cell__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(5.5312920000000005) - CHASTE_CONST(0.13780000000000001) * var_chaste_interface__cell__V)) + CHASTE_CONST(0.29999999999999999) * (1 - var_INa__a) * CHASTE_MATH::Exp(CHASTE_CONST(2.5349999999999999e-7) * mParameters[10] - CHASTE_CONST(2.5349999999999999e-7) * var_chaste_interface__cell__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.2000000000000002) - CHASTE_CONST(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_INaCa__inaca = (-CHASTE_MATH::Pow(mParameters[6], 3) * var_Ca__Ca_i + CHASTE_MATH::Pow(var_chaste_interface__Na__Na_i, 3) * mParameters[4] * CHASTE_MATH::Exp(var_Environment__FonRT * var_chaste_interface__cell__V)) * mParameters[13] * CHASTE_MATH::Exp((-1 + var_INaCa__gammas) * var_Environment__FonRT * var_chaste_interface__cell__V) / (1 + (CHASTE_MATH::Pow(mParameters[6], 3) * var_Ca__Ca_i + CHASTE_MATH::Pow(var_chaste_interface__Na__Na_i, 3) * mParameters[4] * CHASTE_MATH::Exp(var_Environment__FonRT * var_chaste_interface__cell__V)) * var_INaCa__c2 * CHASTE_MATH::Exp((-1 + var_INaCa__gammas) * var_Environment__FonRT * var_chaste_interface__cell__V)); // uA_per_uF + const double var_INaCa__inaca_converted = CHASTE_CAP() * var_INaCa__inaca; // uA_per_cm2 + const double var_cell__i_Stim_converted = CHASTE_STIM(var_chaste_interface__Environment__time); // uA_per_cm2 + const double var_reversal_potentials__EK = CHASTE_MATH::Log(mParameters[5] / var_chaste_interface__K__K_i) / var_Environment__FonRT; // mV + const double var_IK1__ak1 = CHASTE_CONST(1.02) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__cell__V - CHASTE_CONST(0.23849999999999999) * var_reversal_potentials__EK)); // per_ms + const double var_IK1__bk1 = (CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__cell__V - CHASTE_CONST(0.061749999999999999) * var_reversal_potentials__EK) + CHASTE_CONST(0.49124000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__cell__V - CHASTE_CONST(0.080320000000000003) * var_reversal_potentials__EK)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(0.51429999999999998) * var_reversal_potentials__EK - CHASTE_CONST(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_IK1__IK1_converted = CHASTE_CAP() * 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_IKr__ikr_converted = CHASTE_CAP() * var_IKr__ikr; // uA_per_cm2 + const double var_reversal_potentials__ENa = CHASTE_MATH::Log(mParameters[6] / var_chaste_interface__Na__Na_i) / var_Environment__FonRT; // mV + const double var_INa__ina = CHASTE_MATH::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 = CHASTE_CAP() * var_INa__ina; // uA_per_cm2 + const double var_reversal_potentials__prnak = CHASTE_CONST(0.018329999999999999); // dimensionless + const double var_reversal_potentials__EKs = CHASTE_MATH::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 + const double var_IKs__iks_converted = CHASTE_CAP() * var_IKs__iks; // uA_per_cm2 std::vector dqs(16); dqs[0] = var_Ca__Ca_i; diff --git a/chaste_codegen/data/tests/chaste_reference_models/RL/dynamic_livshitz_rudy_2007.hpp b/chaste_codegen/data/tests/chaste_reference_models/RL/dynamic_livshitz_rudy_2007.hpp index 9b9971f27..227d6b3a2 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/RL/dynamic_livshitz_rudy_2007.hpp +++ b/chaste_codegen/data/tests/chaste_reference_models/RL/dynamic_livshitz_rudy_2007.hpp @@ -17,6 +17,9 @@ #include #include "AbstractDynamicallyLoadableEntity.hpp" #include "AbstractStimulusFunction.hpp" +#if USING_DEVICE_COMPILER +#include "StimulusEvaluatorCuda.hpp" +#endif #include "AbstractRushLarsenCardiacCell.hpp" class Dynamiclivshitz_rudy_2007FromCellMLRushLarsen : public AbstractRushLarsenCardiacCell, public AbstractDynamicallyLoadableEntity diff --git a/chaste_codegen/data/tests/chaste_reference_models/RL/hodgkin_huxley_squid_axon_model_1952_modified.cpp b/chaste_codegen/data/tests/chaste_reference_models/RL/hodgkin_huxley_squid_axon_model_1952_modified.cpp index 063bcd9eb..f48decd5c 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/RL/hodgkin_huxley_squid_axon_model_1952_modified.cpp +++ b/chaste_codegen/data/tests/chaste_reference_models/RL/hodgkin_huxley_squid_axon_model_1952_modified.cpp @@ -21,6 +21,8 @@ #include "HeartConfig.hpp" #include "IsNan.hpp" #include "MathsCustomFunctions.hpp" +#include "ChasteMathDeviceNamespaces.hpp" +#include "ChasteCpuMacros.hpp" @@ -30,7 +32,7 @@ { // 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_duration = CHASTE_CONST(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( @@ -59,7 +61,7 @@ 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[2] = CHASTE_CONST(0.29999999999999999); // (var_leakage_current__g_L) [milliS_per_cm2] this->mParameters[3] = 36; // (var_potassium_channel__g_K) [milliS_per_cm2] } @@ -107,7 +109,7 @@ // 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -117,12 +119,12 @@ // 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__E_L = CHASTE_CONST(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_potassium_channel__i_K = CHASTE_MATH::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_sodium_channel__i_Na = CHASTE_MATH::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; @@ -133,7 +135,7 @@ 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]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -144,20 +146,20 @@ // 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__B = -CHASTE_CONST(0.10000000000000001); // per_millivolt + const double var_potassium_channel_n_gate__A = -CHASTE_CONST(0.01) / var_potassium_channel_n_gate__B; // per_millisecond + const double var_potassium_channel_n_gate__beta_n = CHASTE_CONST(0.125) * CHASTE_MATH::Exp(CHASTE_CONST(0.9375) + CHASTE_CONST(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_potassium_channel_n_gate__alpha_n = (((var_potassium_channel_n_gate__U >= -CHASTE_CONST(9.9999999999999995e-8)) && (var_potassium_channel_n_gate__U <= CHASTE_CONST(9.9999999999999995e-8))) ? ((1 - CHASTE_CONST(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 + CHASTE_MATH::Exp(var_potassium_channel_n_gate__U)))); // per_millisecond + const double var_sodium_channel_h_gate__alpha_h = CHASTE_CONST(0.070000000000000007) * CHASTE_MATH::Exp(-CHASTE_CONST(3.75) - CHASTE_CONST(0.050000000000000003) * var_chaste_interface__membrane__V); // per_millisecond + const double var_sodium_channel_h_gate__beta_h = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(4.5) - CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V)); // per_millisecond + const double var_sodium_channel_m_gate__B = -CHASTE_CONST(0.10000000000000001); // per_millivolt + const double var_sodium_channel_m_gate__A = -CHASTE_CONST(0.10000000000000001) / var_sodium_channel_m_gate__B; // per_millisecond + const double var_sodium_channel_m_gate__beta_m = 4 * CHASTE_MATH::Exp(-CHASTE_CONST(4.166666666666667) - CHASTE_CONST(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 var_sodium_channel_m_gate__alpha_m = (((var_sodium_channel_m_gate__U >= -CHASTE_CONST(9.9999999999999995e-8)) && (var_sodium_channel_m_gate__U <= CHASTE_CONST(9.9999999999999995e-8))) ? ((1 - CHASTE_CONST(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 + CHASTE_MATH::Exp(var_sodium_channel_m_gate__U)))); // per_millisecond if (mSetVoltageDerivativeToZero) { @@ -166,13 +168,13 @@ 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__E_L = CHASTE_CONST(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_membrane__i_Stim = CHASTE_STIM(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_potassium_channel__i_K = CHASTE_MATH::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_sodium_channel__i_Na = CHASTE_MATH::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 } @@ -209,7 +211,7 @@ { // Inputs: // Time units: millisecond - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -220,13 +222,13 @@ // 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__E_L = CHASTE_CONST(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_membrane__i_Stim = CHASTE_STIM(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_potassium_channel__i_K = CHASTE_MATH::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_sodium_channel__i_Na = CHASTE_MATH::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; diff --git a/chaste_codegen/data/tests/chaste_reference_models/RL/hodgkin_huxley_squid_axon_model_1952_modified.hpp b/chaste_codegen/data/tests/chaste_reference_models/RL/hodgkin_huxley_squid_axon_model_1952_modified.hpp index 93d2b4a7d..29ef54664 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/RL/hodgkin_huxley_squid_axon_model_1952_modified.hpp +++ b/chaste_codegen/data/tests/chaste_reference_models/RL/hodgkin_huxley_squid_axon_model_1952_modified.hpp @@ -16,6 +16,9 @@ #include "ChasteSerialization.hpp" #include #include "AbstractStimulusFunction.hpp" +#if USING_DEVICE_COMPILER +#include "StimulusEvaluatorCuda.hpp" +#endif #include "AbstractRushLarsenCardiacCell.hpp" class Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLRushLarsen : public AbstractRushLarsenCardiacCell diff --git a/chaste_codegen/data/tests/chaste_reference_models/RLopt/dynamic_bondarenko_szigeti_bett_kim_rasmusson_2004_apical.cpp b/chaste_codegen/data/tests/chaste_reference_models/RLopt/dynamic_bondarenko_szigeti_bett_kim_rasmusson_2004_apical.cpp index 2f0b9d76f..4da72058b 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/RLopt/dynamic_bondarenko_szigeti_bett_kim_rasmusson_2004_apical.cpp +++ b/chaste_codegen/data/tests/chaste_reference_models/RLopt/dynamic_bondarenko_szigeti_bett_kim_rasmusson_2004_apical.cpp @@ -21,6 +21,8 @@ #include "HeartConfig.hpp" #include "IsNan.hpp" #include "MathsCustomFunctions.hpp" +#include "ChasteMathDeviceNamespaces.hpp" +#include "ChasteCpuMacros.hpp" #include "ModelFactory.hpp" @@ -149,7 +151,7 @@ class Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLars for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 + exp(5.9871794871794881 - 0.12820512820512822 * var_chaste_interface__membrane__V); + return 1 + CHASTE_MATH::Exp(CHASTE_CONST(5.9871794871794881) - CHASTE_CONST(0.12820512820512822) * 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); @@ -160,7 +162,7 @@ class Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLars for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(0.013632298072467722 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(CHASTE_CONST(0.013632298072467722) * 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); @@ -171,7 +173,7 @@ class Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLars for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(-0.025317124991725771 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(-CHASTE_CONST(0.025317124991725771) * 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); @@ -182,7 +184,7 @@ class Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLars for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 + 0.10000000000000001 * exp(-0.025317124991725771 * var_chaste_interface__membrane__V); + return 1 + CHASTE_CONST(0.10000000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(0.025317124991725771) * 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); @@ -193,7 +195,7 @@ class Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLars for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(-0.038949423064193495 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(-CHASTE_CONST(0.038949423064193495) * 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); @@ -204,7 +206,7 @@ class Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLars for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 0.1245 * exp(-0.0038949423064193493 * var_chaste_interface__membrane__V); + return CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(0.0038949423064193493) * 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); @@ -215,7 +217,7 @@ class Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLars for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 13 - 13 * exp(-2.1025 * pow((1 + 0.068965517241379309 * var_chaste_interface__membrane__V), 2)); + return 13 - 13 * CHASTE_MATH::Exp(-CHASTE_CONST(2.1025) * CHASTE_MATH::Pow((1 + CHASTE_CONST(0.068965517241379309) * var_chaste_interface__membrane__V), 2)); }; const double var_chaste_interface__membrane__V = mTableMins[0] + i*mTableSteps[0]; double val = f(var_chaste_interface__membrane__V); @@ -226,7 +228,7 @@ class Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLars for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 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)); + return CHASTE_CONST(0.40000000000000002) * (1 + CHASTE_CONST(0.69999999999999996) * CHASTE_MATH::Exp(-160 * CHASTE_MATH::Pow((1 + CHASTE_CONST(0.025000000000000001) * var_chaste_interface__membrane__V), 2)) - CHASTE_CONST(0.75) * CHASTE_MATH::Exp(-CHASTE_MATH::Pow((1 + CHASTE_CONST(0.050000000000000003) * var_chaste_interface__membrane__V), 2))) * CHASTE_MATH::Exp(CHASTE_CONST(1.2) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V) / (1 + CHASTE_CONST(0.12) * CHASTE_MATH::Exp(CHASTE_CONST(1.2) + CHASTE_CONST(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); @@ -237,7 +239,7 @@ class Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLars for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 0.050000000000000003 * exp(-0.92307692307692313 - 0.076923076923076927 * var_chaste_interface__membrane__V); + return CHASTE_CONST(0.050000000000000003) * CHASTE_MATH::Exp(-CHASTE_CONST(0.92307692307692313) - CHASTE_CONST(0.076923076923076927) * 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); @@ -248,7 +250,7 @@ class Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLars for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(-0.038580246913580245 * pow((-1 + 0.20000000000000001 * var_chaste_interface__membrane__V), 2)); + return CHASTE_MATH::Exp(-CHASTE_CONST(0.038580246913580245) * CHASTE_MATH::Pow((-1 + CHASTE_CONST(0.20000000000000001) * var_chaste_interface__membrane__V), 2)); }; const double var_chaste_interface__membrane__V = mTableMins[0] + i*mTableSteps[0]; double val = f(var_chaste_interface__membrane__V); @@ -259,7 +261,7 @@ class Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLars for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 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)); + return CHASTE_CONST(3.802) / (CHASTE_CONST(0.20000000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(0.016666666666666666) - CHASTE_CONST(0.0066666666666666671) * var_chaste_interface__membrane__V) + CHASTE_CONST(0.1027) * CHASTE_MATH::Exp(-CHASTE_CONST(0.14705882352941177) - CHASTE_CONST(0.058823529411764705) * 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); @@ -270,7 +272,7 @@ class Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLars for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 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)); + return CHASTE_CONST(3.802) / (CHASTE_CONST(0.1027) * CHASTE_MATH::Exp(-CHASTE_CONST(0.16666666666666666) - CHASTE_CONST(0.066666666666666666) * var_chaste_interface__membrane__V) + CHASTE_CONST(0.23000000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(0.016666666666666666) - CHASTE_CONST(0.0066666666666666671) * 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); @@ -281,7 +283,7 @@ class Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLars for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 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)); + return CHASTE_CONST(3.802) / (CHASTE_CONST(0.25) * CHASTE_MATH::Exp(-CHASTE_CONST(0.016666666666666666) - CHASTE_CONST(0.0066666666666666671) * var_chaste_interface__membrane__V) + CHASTE_CONST(0.1027) * CHASTE_MATH::Exp(-CHASTE_CONST(0.20833333333333334) - CHASTE_CONST(0.083333333333333329) * 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); @@ -292,7 +294,7 @@ class Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLars for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 6.9999999999999997e-7 * exp(-0.90909090909090906 - 0.12987012987012986 * var_chaste_interface__membrane__V); + return CHASTE_CONST(6.9999999999999997e-7) * CHASTE_MATH::Exp(-CHASTE_CONST(0.90909090909090906) - CHASTE_CONST(0.12987012987012986) * 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); @@ -303,7 +305,7 @@ class Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLars for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 0.19170000000000001 * exp(-0.12315270935960591 - 0.04926108374384236 * var_chaste_interface__membrane__V); + return CHASTE_CONST(0.19170000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(0.12315270935960591) - CHASTE_CONST(0.04926108374384236) * 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); @@ -314,7 +316,7 @@ class Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLars for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 0.20000000000000001 * exp(0.12315270935960591 - 0.04926108374384236 * var_chaste_interface__membrane__V); + return CHASTE_CONST(0.20000000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.12315270935960591) - CHASTE_CONST(0.04926108374384236) * 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); @@ -325,7 +327,7 @@ class Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLars for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 0.22 * exp(0.36945812807881773 - 0.04926108374384236 * var_chaste_interface__membrane__V); + return CHASTE_CONST(0.22) * CHASTE_MATH::Exp(CHASTE_CONST(0.36945812807881773) - CHASTE_CONST(0.04926108374384236) * 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); @@ -336,7 +338,7 @@ class Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLars for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(1.0731000000000002 + 0.035770000000000003 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(CHASTE_CONST(1.0731000000000002) + CHASTE_CONST(0.035770000000000003) * 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); @@ -347,7 +349,7 @@ class Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLars for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(-1.8711 - 0.062370000000000002 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(-CHASTE_CONST(1.8711) - CHASTE_CONST(0.062370000000000002) * 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); @@ -358,7 +360,7 @@ class Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLars for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 + 0.0067083000000000004 * exp(-4.7857142857142856 - 0.14285714285714285 * var_chaste_interface__membrane__V); + return 1 + CHASTE_CONST(0.0067083000000000004) * CHASTE_MATH::Exp(-CHASTE_CONST(4.7857142857142856) - CHASTE_CONST(0.14285714285714285) * 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); @@ -369,7 +371,7 @@ class Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLars for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(-1.9285714285714286 - 0.14285714285714285 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(-CHASTE_CONST(1.9285714285714286) - CHASTE_CONST(0.14285714285714285) * 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); @@ -380,7 +382,7 @@ class Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLars for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 + 0.051334999999999999 * exp(4.7857142857142856 + 0.14285714285714285 * var_chaste_interface__membrane__V); + return 1 + CHASTE_CONST(0.051334999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(4.7857142857142856) + CHASTE_CONST(0.14285714285714285) * 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); @@ -391,7 +393,7 @@ class Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLars for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(4.7857142857142856 + 0.14285714285714285 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(CHASTE_CONST(4.7857142857142856) + CHASTE_CONST(0.14285714285714285) * 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); @@ -402,7 +404,7 @@ class Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLars for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 0.013733 * exp(0.038198000000000003 * var_chaste_interface__membrane__V); + return CHASTE_CONST(0.013733) * CHASTE_MATH::Exp(CHASTE_CONST(0.038198000000000003) * 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); @@ -413,7 +415,7 @@ class Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLars for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 0.090820999999999999 * exp(0.11695499999999999 + 0.023390999999999999 * var_chaste_interface__membrane__V); + return CHASTE_CONST(0.090820999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(0.11695499999999999) + CHASTE_CONST(0.023390999999999999) * 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); @@ -424,7 +426,7 @@ class Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLars for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 6.8899999999999994e-5 * exp(-0.041779999999999998 * var_chaste_interface__membrane__V); + return CHASTE_CONST(6.8899999999999994e-5) * CHASTE_MATH::Exp(-CHASTE_CONST(0.041779999999999998) * 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); @@ -435,7 +437,7 @@ class Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLars for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 0.0064970000000000002 * exp(-0.16339999999999999 - 0.032680000000000001 * var_chaste_interface__membrane__V); + return CHASTE_CONST(0.0064970000000000002) * CHASTE_MATH::Exp(-CHASTE_CONST(0.16339999999999999) - CHASTE_CONST(0.032680000000000001) * 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); @@ -446,7 +448,7 @@ class Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLars for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(0.01176 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(CHASTE_CONST(0.01176) * 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); @@ -457,7 +459,7 @@ class Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLars for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(-0.063100000000000003 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(-CHASTE_CONST(0.063100000000000003) * 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); @@ -468,7 +470,7 @@ class Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLars for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(-1.0069999999999999 - 0.037999999999999999 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(-CHASTE_CONST(1.0069999999999999) - CHASTE_CONST(0.037999999999999999) * 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); @@ -479,7 +481,7 @@ class Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLars for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 - exp(-3.3919999999999999 - 0.128 * var_chaste_interface__membrane__V); + return 1 - CHASTE_MATH::Exp(-CHASTE_CONST(3.3919999999999999) - CHASTE_CONST(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); @@ -490,7 +492,7 @@ class Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLars for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 / (1 + exp(-2.9220779220779218 - 0.12987012987012986 * var_chaste_interface__membrane__V)); + return 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.9220779220779218) - CHASTE_CONST(0.12987012987012986) * 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); @@ -501,7 +503,7 @@ class Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLars for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 13.17 + 39.299999999999997 * exp(-0.086199999999999999 * var_chaste_interface__membrane__V); + return CHASTE_CONST(13.17) + CHASTE_CONST(39.299999999999997) * CHASTE_MATH::Exp(-CHASTE_CONST(0.086199999999999999) * 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); @@ -512,7 +514,7 @@ class Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLars for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 / (1 + exp(7.9298245614035094 + 0.17543859649122806 * var_chaste_interface__membrane__V)); + return 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(7.9298245614035094) + CHASTE_CONST(0.17543859649122806) * 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); @@ -523,7 +525,7 @@ class Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLars for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 2.0579999999999998 + 0.49299999999999999 * exp(-0.062899999999999998 * var_chaste_interface__membrane__V); + return CHASTE_CONST(2.0579999999999998) + CHASTE_CONST(0.49299999999999999) * CHASTE_MATH::Exp(-CHASTE_CONST(0.062899999999999998) * 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); @@ -534,7 +536,7 @@ class Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLars for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 270 + 1050 / (1 + exp(7.9298245614035094 + 0.17543859649122806 * var_chaste_interface__membrane__V)); + return 270 + 1050 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(7.9298245614035094) + CHASTE_CONST(0.17543859649122806) * 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); @@ -545,7 +547,7 @@ class Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLars for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1200 - 170 / (1 + exp(7.9298245614035094 + 0.17543859649122806 * var_chaste_interface__membrane__V)); + return 1200 - 170 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(7.9298245614035094) + CHASTE_CONST(0.17543859649122806) * 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); @@ -578,9 +580,9 @@ std::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_amplitude_converted = -80 * CHASTE_CAP(); // uA_per_cm2 + const double var_chaste_interface__membrane__stim_duration = CHASTE_CONST(0.5); // millisecond + const double var_chaste_interface__membrane__stim_period = CHASTE_CONST(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), @@ -609,23 +611,23 @@ std::shared_ptrmHasDefaultStimulusFromCellML = 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[0] = CHASTE_CONST(1.7399999999999999e-5); // (var_calcium_fluxes__v2) [per_millisecond] + this->mParameters[1] = CHASTE_CONST(4.5); // (var_calcium_fluxes__v1) [per_millisecond] + this->mParameters[2] = CHASTE_CONST(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[7] = CHASTE_CONST(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] + this->mParameters[11] = CHASTE_CONST(0.29380000000000001); // (var_time_independent_potassium_current__g_K1) [milliS_per_microF] + this->mParameters[12] = CHASTE_CONST(0.050000000000000003); // (var_non_inactivating_steady_state_potassium_current__g_Kss) [milliS_per_microF] + this->mParameters[13] = CHASTE_CONST(0.078); // (var_rapid_delayed_rectifier_potassium_current__g_Kr) [milliS_per_microF] + this->mParameters[14] = CHASTE_CONST(0.0057499999999999999); // (var_slow_delayed_rectifier_potassium_current__g_Ks) [milliS_per_microF] + this->mParameters[15] = CHASTE_CONST(292.80000000000001); // (var_sodium_calcium_exchange_current__k_NaCa) [picoA_per_picoF] + this->mParameters[16] = CHASTE_CONST(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() @@ -676,7 +678,7 @@ std::shared_ptr& rY = *pStateVariables; - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -714,24 +716,24 @@ std::shared_ptrIndexTable0(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_pump_current__i_pCa = CHASTE_MATH::Pow(var_calcium_concentration__Cai, 2) / (CHASTE_CONST(0.25) + CHASTE_MATH::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) * CHASTE_CAP() * 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_calcium_background_current__i_Cab = CHASTE_CONST(0.00036699999999999998) * var_chaste_interface__membrane__V - CHASTE_CONST(0.0047112379481865285) * CHASTE_MATH::Log(mParameters[4] / var_calcium_concentration__Cai); // picoA_per_picoF + const double var_fast_transient_outward_potassium_current__E_K = CHASTE_CONST(25.674321243523316) * CHASTE_MATH::Log(mParameters[5] / var_chaste_interface__potassium_concentration__Ki); // millivolt + const double var_fast_transient_outward_potassium_current__i_Kto_f_converted = CHASTE_MATH::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) * CHASTE_CAP() * 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) * CHASTE_CAP() * 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 = CHASTE_MATH::Pow(var_chaste_interface__slow_delayed_rectifier_potassium_current__nKs, 2) * (-var_fast_transient_outward_potassium_current__E_K + var_chaste_interface__membrane__V) * CHASTE_CAP() * 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 var_fast_sodium_current__E_Na = CHASTE_CONST(25.674321243523316) * CHASTE_MATH::Log((mParameters[6] + CHASTE_CONST(0.1111111111111111) * mParameters[5]) / (var_chaste_interface__sodium_concentration__Nai + CHASTE_CONST(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) * CHASTE_CAP() * var_chaste_interface__fast_sodium_current__O_Na * mParameters[9]; // uA_per_cm2 + const double var_rapid_delayed_rectifier_potassium_current__i_Kr_converted = (-CHASTE_CONST(25.674321243523316) * CHASTE_MATH::Log((mParameters[5] + CHASTE_CONST(0.020408163265306124) * mParameters[6]) / (var_chaste_interface__potassium_concentration__Ki + CHASTE_CONST(0.020408163265306124) * var_chaste_interface__sodium_concentration__Nai)) + var_chaste_interface__membrane__V) * CHASTE_CAP() * var_chaste_interface__rapid_delayed_rectifier_potassium_current__O_K * mParameters[13]; // uA_per_cm2 + const double var_sodium_background_current__i_Nab = CHASTE_CONST(0.0025999999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.0025999999999999999) * var_fast_sodium_current__E_Na; // picoA_per_picoF + const double var_sodium_calcium_exchange_current__i_NaCa_converted = (CHASTE_MATH::Pow(var_chaste_interface__sodium_concentration__Nai, 3) * mParameters[4] * _lt_0_row[1] - CHASTE_MATH::Pow(mParameters[6], 3) * var_calcium_concentration__Cai * _lt_0_row[2]) * CHASTE_CAP() * mParameters[15] / ((_lt_0_row[3]) * (1380 + mParameters[4]) * (CHASTE_CONST(669921875000000.0) + CHASTE_MATH::Pow(mParameters[6], 3))); // uA_per_cm2 + const double var_sodium_potassium_pump_current__i_NaK = CHASTE_CONST(0.88) * mParameters[5] / ((1 + CHASTE_CONST(3043189.1166997822) * CHASTE_MATH::Pow((1 / var_chaste_interface__sodium_concentration__Nai), CHASTE_CONST(1.5))) * (1500 + mParameters[5]) * (1 + _lt_0_row[5] + CHASTE_CONST(0.036499999999999998) * (-CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(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) * CHASTE_CAP() * mParameters[5] * mParameters[11] / ((1 + CHASTE_MATH::Exp(CHASTE_CONST(0.089599999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(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 = CHASTE_CONST(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 = CHASTE_CAP() * var_calcium_activated_chloride_current__i_ClCa + CHASTE_CAP() * var_calcium_background_current__i_Cab + CHASTE_CAP() * var_calcium_pump_current__i_pCa + CHASTE_CAP() * var_slow_transient_outward_potassium_current__i_Kto_s + CHASTE_CAP() * var_sodium_background_current__i_Nab + CHASTE_CAP() * var_sodium_potassium_pump_current__i_NaK + CHASTE_CAP() * 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)); @@ -741,7 +743,7 @@ std::shared_ptr &rDY, std::vector &rAlphaOrTau, std::vector &rBetaOrInf) { std::vector& rY = rGetStateVariables(); - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -837,28 +839,28 @@ std::shared_ptrGetCapacitance(); // picoA_per_picoF + const double var_membrane__i_stim_converted = CHASTE_STIM(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_membrane__i_stim = var_membrane__i_stim_converted / CHASTE_CAP(); // 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 } @@ -1116,7 +1118,7 @@ std::shared_ptrmFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -1155,33 +1157,33 @@ std::shared_ptrGetCapacitance() * 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_L_type_calcium_current__i_CaL_converted = CHASTE_CAP() * var_L_type_calcium_current__i_CaL; // uA_per_cm2 + const double var_membrane__i_stim_converted = CHASTE_STIM(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_fast_transient_outward_potassium_current__E_K = var_membrane__R * var_membrane__T * CHASTE_MATH::Log(mParameters[5] / var_chaste_interface__potassium_concentration__Ki) / var_membrane__F; // millivolt + const double var_fast_transient_outward_potassium_current__i_Kto_f = CHASTE_MATH::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 = CHASTE_CAP() * 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_non_inactivating_steady_state_potassium_current__i_Kss_converted = CHASTE_CAP() * 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_slow_delayed_rectifier_potassium_current__i_Ks = CHASTE_MATH::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 = CHASTE_CAP() * 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_sodium_calcium_exchange_current__eta = CHASTE_CONST(0.34999999999999998); // dimensionless + const double var_sodium_calcium_exchange_current__k_sat = CHASTE_CONST(0.10000000000000001); // dimensionless + const double var_fast_sodium_current__E_Na = var_membrane__R * var_membrane__T * CHASTE_MATH::Log((mParameters[6] + CHASTE_CONST(0.1111111111111111) * mParameters[5]) / (var_chaste_interface__sodium_concentration__Nai + CHASTE_CONST(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 + const double var_fast_sodium_current__i_Na_converted = CHASTE_CAP() * 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 * CHASTE_MATH::Log((mParameters[5] + CHASTE_CONST(0.020408163265306124) * mParameters[6]) / (var_chaste_interface__potassium_concentration__Ki + CHASTE_CONST(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 = CHASTE_CAP() * var_rapid_delayed_rectifier_potassium_current__i_Kr; // uA_per_cm2 + const double var_sodium_calcium_exchange_current__i_NaCa = (CHASTE_MATH::Pow(var_chaste_interface__sodium_concentration__Nai, 3) * mParameters[4] * CHASTE_MATH::Exp(var_membrane__F * var_chaste_interface__membrane__V * var_sodium_calcium_exchange_current__eta / (var_membrane__R * var_membrane__T)) - CHASTE_MATH::Pow(mParameters[6], 3) * var_calcium_concentration__Cai * CHASTE_MATH::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 * CHASTE_MATH::Exp((-1 + var_sodium_calcium_exchange_current__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (CHASTE_MATH::Pow(mParameters[6], 3) + CHASTE_MATH::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 = CHASTE_CAP() * 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 + CHASTE_MATH::Exp(CHASTE_CONST(0.089599999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(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 = CHASTE_CAP() * var_time_independent_potassium_current__i_K1; // uA_per_cm2 std::vector dqs(12); dqs[0] = var_calcium_fluxes__J_rel; diff --git a/chaste_codegen/data/tests/chaste_reference_models/RLopt/dynamic_bondarenko_szigeti_bett_kim_rasmusson_2004_apical.hpp b/chaste_codegen/data/tests/chaste_reference_models/RLopt/dynamic_bondarenko_szigeti_bett_kim_rasmusson_2004_apical.hpp index 07d17da55..e3f352edf 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/RLopt/dynamic_bondarenko_szigeti_bett_kim_rasmusson_2004_apical.hpp +++ b/chaste_codegen/data/tests/chaste_reference_models/RLopt/dynamic_bondarenko_szigeti_bett_kim_rasmusson_2004_apical.hpp @@ -17,6 +17,9 @@ #include #include "AbstractDynamicallyLoadableEntity.hpp" #include "AbstractStimulusFunction.hpp" +#if USING_DEVICE_COMPILER +#include "StimulusEvaluatorCuda.hpp" +#endif #include "AbstractRushLarsenCardiacCell.hpp" class Dynamicbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLRushLarsenOpt : public AbstractRushLarsenCardiacCell, public AbstractDynamicallyLoadableEntity diff --git a/chaste_codegen/data/tests/chaste_reference_models/RLopt/hodgkin_huxley_squid_axon_model_1952_modified.cpp b/chaste_codegen/data/tests/chaste_reference_models/RLopt/hodgkin_huxley_squid_axon_model_1952_modified.cpp index c1662264f..9d83a0de4 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/RLopt/hodgkin_huxley_squid_axon_model_1952_modified.cpp +++ b/chaste_codegen/data/tests/chaste_reference_models/RLopt/hodgkin_huxley_squid_axon_model_1952_modified.cpp @@ -21,6 +21,8 @@ #include "HeartConfig.hpp" #include "IsNan.hpp" #include "MathsCustomFunctions.hpp" +#include "ChasteMathDeviceNamespaces.hpp" +#include "ChasteCpuMacros.hpp" @@ -143,7 +145,7 @@ class Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLRushLarsenOpt_L for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return (((6.5 + 0.10000000000000001 * 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)))); + return (((CHASTE_CONST(6.5) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V >= -CHASTE_CONST(9.9999999999999995e-8)) && (CHASTE_CONST(6.5) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V <= CHASTE_CONST(9.9999999999999995e-8))) ? (CHASTE_CONST(0.42499999999999999) + CHASTE_CONST(0.0050000000000000001) * var_chaste_interface__membrane__V) : (-CHASTE_CONST(0.099999999999999992) * (CHASTE_CONST(6.5) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(6.5) - CHASTE_CONST(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); @@ -165,7 +167,7 @@ class Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLRushLarsenOpt_L for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(0.9375 + 0.012500000000000001 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(CHASTE_CONST(0.9375) + CHASTE_CONST(0.012500000000000001) * 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); @@ -176,7 +178,7 @@ class Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLRushLarsenOpt_L for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(-3.75 - 0.050000000000000003 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(-CHASTE_CONST(3.75) - CHASTE_CONST(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); @@ -187,7 +189,7 @@ class Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLRushLarsenOpt_L for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return 1 + exp(-4.5 - 0.10000000000000001 * var_chaste_interface__membrane__V); + return 1 + CHASTE_MATH::Exp(-CHASTE_CONST(4.5) - CHASTE_CONST(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); @@ -198,7 +200,7 @@ class Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLRushLarsenOpt_L for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return (((5 + 0.10000000000000001 * var_chaste_interface__membrane__V >= -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)))); + return (((5 + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V >= -CHASTE_CONST(9.9999999999999995e-8)) && (5 + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V <= CHASTE_CONST(9.9999999999999995e-8))) ? (CHASTE_CONST(3.5) + CHASTE_CONST(0.050000000000000003) * var_chaste_interface__membrane__V) : (-(5 + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(-5 - CHASTE_CONST(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); @@ -220,7 +222,7 @@ class Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLRushLarsenOpt_L for (unsigned i=0 ; i<_table_size_0; i++) { auto f = [](double var_chaste_interface__membrane__V) { - return exp(-4.166666666666667 - 0.055555555555555552 * var_chaste_interface__membrane__V); + return CHASTE_MATH::Exp(-CHASTE_CONST(4.166666666666667) - CHASTE_CONST(0.055555555555555552) * 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); @@ -254,7 +256,7 @@ std::shared_ptr p_cellml_stim(new RegularStimulus( @@ -283,7 +285,7 @@ std::shared_ptrmParameters[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[2] = CHASTE_CONST(0.29999999999999999); // (var_leakage_current__g_L) [milliS_per_cm2] this->mParameters[3] = 36; // (var_potassium_channel__g_K) [milliS_per_cm2] } @@ -335,7 +337,7 @@ std::shared_ptr& rY = *pStateVariables; - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -345,9 +347,9 @@ std::shared_ptr &rDY, std::vector &rAlphaOrTau, std::vector &rBetaOrInf) { std::vector& rY = rGetStateVariables(); - double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? this->mFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -377,20 +379,20 @@ std::shared_ptr= -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_potassium_channel_n_gate__alpha_n = (((var_potassium_channel_n_gate__U >= -CHASTE_CONST(9.9999999999999995e-8)) && (var_potassium_channel_n_gate__U <= CHASTE_CONST(9.9999999999999995e-8))) ? ((1 - CHASTE_CONST(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 + CHASTE_MATH::Exp(var_potassium_channel_n_gate__U)))); // per_millisecond + const double var_sodium_channel_h_gate__alpha_h = CHASTE_CONST(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__B = -CHASTE_CONST(0.10000000000000001); // per_millivolt + const double var_sodium_channel_m_gate__A = -CHASTE_CONST(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 + const double var_sodium_channel_m_gate__alpha_m = (((var_sodium_channel_m_gate__U >= -CHASTE_CONST(9.9999999999999995e-8)) && (var_sodium_channel_m_gate__U <= CHASTE_CONST(9.9999999999999995e-8))) ? ((1 - CHASTE_CONST(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 + CHASTE_MATH::Exp(var_sodium_channel_m_gate__U)))); // per_millisecond if (mSetVoltageDerivativeToZero) { @@ -399,13 +401,13 @@ std::shared_ptrmFixedVoltage : rY[0]); + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 @@ -455,13 +457,13 @@ std::shared_ptr dqs(5); dqs[0] = var_sodium_channel__i_Na; diff --git a/chaste_codegen/data/tests/chaste_reference_models/RLopt/hodgkin_huxley_squid_axon_model_1952_modified.hpp b/chaste_codegen/data/tests/chaste_reference_models/RLopt/hodgkin_huxley_squid_axon_model_1952_modified.hpp index 106cc8a20..c43307e2c 100644 --- a/chaste_codegen/data/tests/chaste_reference_models/RLopt/hodgkin_huxley_squid_axon_model_1952_modified.hpp +++ b/chaste_codegen/data/tests/chaste_reference_models/RLopt/hodgkin_huxley_squid_axon_model_1952_modified.hpp @@ -16,6 +16,9 @@ #include "ChasteSerialization.hpp" #include #include "AbstractStimulusFunction.hpp" +#if USING_DEVICE_COMPILER +#include "StimulusEvaluatorCuda.hpp" +#endif #include "AbstractRushLarsenCardiacCell.hpp" class Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLRushLarsenOpt : public AbstractRushLarsenCardiacCell From 0b0d8f19fdbde2d691e6c6fbccc7c363fa1cbc5c Mon Sep 17 00:00:00 2001 From: Joseph Simkin Date: Mon, 2 Mar 2026 20:51:21 +0000 Subject: [PATCH 26/28] Modified how generate_kernels is passed to chaste_model --- chaste_codegen/_command_line_script.py | 2 ++ chaste_codegen/chaste_model.py | 21 ++++++++++++--------- chaste_codegen/cvode_chaste_model.py | 4 ++-- 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/chaste_codegen/_command_line_script.py b/chaste_codegen/_command_line_script.py index 48f2be445..bbc5dadbd 100644 --- a/chaste_codegen/_command_line_script.py +++ b/chaste_codegen/_command_line_script.py @@ -202,6 +202,8 @@ def process_command_line(): ext = list(ext) if ext else list(translator_class.DEFAULT_EXTENSIONS) # Make sure we generate GPU kernels for models that provide kernel templates (if they are wanted) + # TODO: Maybe make this look more like use_modifiers by adding an extra entry to the TRANSLATORS tuples + args.will_generate_kernels = args.generate_kernels and translator[1] in TRANSLATORS_WITH_KERNELS if args.generate_kernels and translator[1] in TRANSLATORS_WITH_KERNELS: ext.append('Kernels.hpp') diff --git a/chaste_codegen/chaste_model.py b/chaste_codegen/chaste_model.py index 64a62b24a..f8dda016b 100644 --- a/chaste_codegen/chaste_model.py +++ b/chaste_codegen/chaste_model.py @@ -52,24 +52,24 @@ def __enter__(self): @contextmanager def _device_mode(self): - """ Creates an _is_generating_device_code context where we can run methods under 'with' and if the method contains - any branches like: if self._is_generating_device_code:, the if part will run when the method is called in this context + """ Creates an _is_currently_generating_kernel_code context where we can run methods under 'with' and if the method contains + any branches like: if self._is_currently_generating_kernel_code:, the if part will run when the method is called in this context Example: with self._device_mode(): - # Any call here will execute code the if parts of if self._is_generating_device_code: + # Any call here will execute code the if parts of if self._is_currently_generating_kernel_code: device_eqs = self._format_derivative_equations(self._derivative_equations) """ - original_state = getattr(self, '_is_generating_device_code', False) - self._is_generating_device_code = True + original_state = getattr(self, '_is_currently_generating_kernel_code', False) + self._is_currently_generating_kernel_code = True try: yield finally: - self._is_generating_device_code = original_state + self._is_currently_generating_kernel_code = original_state def _in_device_mode(self, func): - """ Thin wrapper to allow use of the _is_generating_device_code context in one line + """ Thin wrapper to allow use of the _is_currently_generating_kernel_code context in one line Example: self._in_device_mode(lambda: self._format_derivative_equations(self._derivative_equations)) @@ -104,7 +104,8 @@ def __init__(self, model, file_name, **kwargs): self._model = model # By default we are generating CPU code, the context manager handles setting and unsetting this for device generation - self._is_generating_device_code = False + self._is_currently_generating_kernel_code = False + self.will_generate_kernels = kwargs.get('will_generate_kernels', False) # retrieve probabilities that don't stay in 0 ... 1 range and shouldn't be checked not_quite_probabilities = \ @@ -324,7 +325,7 @@ def _format_rY_entry(self, index): def _format_rY_lookup(self, index, var, use_modifier=True): """ Formatting of rY lookup for printing""" - if self._is_generating_device_code: + if self._is_currently_generating_kernel_code: entry = 'rY[' + str(index) + ']' else: entry = self._format_rY_entry(index) @@ -496,6 +497,8 @@ def _format_derived_quant_eqs(self): def generate_chaste_code(self): """ Generates and stores chaste code""" for templ in self._templates: + if templ.endswith("kernels.hpp") and not self.will_generate_kernels: + continue template = cg.load_template(templ) self.generated_code.append(template.render(self._vars_for_template)) diff --git a/chaste_codegen/cvode_chaste_model.py b/chaste_codegen/cvode_chaste_model.py index 8ce1ce740..e9d150ecf 100644 --- a/chaste_codegen/cvode_chaste_model.py +++ b/chaste_codegen/cvode_chaste_model.py @@ -183,12 +183,12 @@ def _print_jacobian(self): modifiers_with_defining_eqs=modifiers_with_defining_eqs)) def _print_modifiable_parameters(self, variable): - if self._is_generating_device_code: + if self._is_currently_generating_kernel_code: return 'mParameters[' + self._modifiable_parameter_lookup[variable] + ']' return 'NV_Ith_S(mParameters, ' + self._modifiable_parameter_lookup[variable] + ')' def _format_rY_entry(self, index): - if self._is_generating_device_code: + if self._is_currently_generating_kernel_code: return 'rY[' + str(index) + ']' return 'NV_Ith_S(rY, ' + str(index) + ')' From ea1d4d5162424b6379ff6b955e9c8d674dd734c2 Mon Sep 17 00:00:00 2001 From: Joseph Simkin Date: Mon, 2 Mar 2026 20:53:25 +0000 Subject: [PATCH 27/28] Made kernel generating prettier and added test to check kernels against references --- .../BE/aslanidi_atrial_model_2009Kernels.hpp | 448 ++++++ ..._bett_kim_rasmusson_2004_apicalKernels.hpp | 532 +++++++ .../BE/li_mouse_2010Kernels.hpp | 567 +++++++ .../sachse_moreno_abildskov_2008_bKernels.hpp | 164 +++ .../difrancesco_noble_model_1985Kernels.hpp | 200 +++ .../Cvode/faber_rudy_2000Kernels.hpp | 283 ++++ ..._squid_axon_model_1952_modifiedKernels.hpp | 72 + ...etala_severi_ventricularVersionKernels.hpp | 230 +++ .../aslanidi_atrial_model_2009Kernels.hpp | 1302 +++++++++++++++++ ..._squid_axon_model_1952_modifiedKernels.hpp | 161 ++ .../kernels/ComputeOneStepExceptVoltageDevice | 12 +- .../BE/kernels/ComputeResidualDevice | 1 - .../UpdateTransmembranePotentialDevice | 1 - .../kernels/EvaluateAnalyticJacobianDevice | 30 +- .../EvaluateSparseAnalyticJacobianDevice | 32 +- .../Shared/kernels/EvaluateYDerivativesDevice | 13 +- .../templates/backward_euler_kernels.hpp | 1 + .../templates/cvode_model_kernels.hpp | 2 +- chaste_codegen/tests/conftest.py | 12 +- chaste_codegen/tests/test_codegen.py | 7 +- 20 files changed, 4015 insertions(+), 55 deletions(-) create mode 100644 chaste_codegen/data/tests/chaste_reference_models/BE/aslanidi_atrial_model_2009Kernels.hpp create mode 100644 chaste_codegen/data/tests/chaste_reference_models/BE/bondarenko_szigeti_bett_kim_rasmusson_2004_apicalKernels.hpp create mode 100644 chaste_codegen/data/tests/chaste_reference_models/BE/li_mouse_2010Kernels.hpp create mode 100644 chaste_codegen/data/tests/chaste_reference_models/BE/sachse_moreno_abildskov_2008_bKernels.hpp create mode 100644 chaste_codegen/data/tests/chaste_reference_models/Cvode/difrancesco_noble_model_1985Kernels.hpp create mode 100644 chaste_codegen/data/tests/chaste_reference_models/Cvode/faber_rudy_2000Kernels.hpp create mode 100644 chaste_codegen/data/tests/chaste_reference_models/Cvode/hodgkin_huxley_squid_axon_model_1952_modifiedKernels.hpp create mode 100644 chaste_codegen/data/tests/chaste_reference_models/Cvode/paci_hyttinen_aaltosetala_severi_ventricularVersionKernels.hpp create mode 100644 chaste_codegen/data/tests/chaste_reference_models/Cvode_with_jacobian/aslanidi_atrial_model_2009Kernels.hpp create mode 100644 chaste_codegen/data/tests/chaste_reference_models/Cvode_with_jacobian/hodgkin_huxley_squid_axon_model_1952_modifiedKernels.hpp diff --git a/chaste_codegen/data/tests/chaste_reference_models/BE/aslanidi_atrial_model_2009Kernels.hpp b/chaste_codegen/data/tests/chaste_reference_models/BE/aslanidi_atrial_model_2009Kernels.hpp new file mode 100644 index 000000000..5eafd199f --- /dev/null +++ b/chaste_codegen/data/tests/chaste_reference_models/BE/aslanidi_atrial_model_2009Kernels.hpp @@ -0,0 +1,448 @@ +#ifndef CELLASLANIDI_ATRIAL_MODEL_2009FROMCELLMLBACKWARDEULERKERNELS_HPP_ +#define CELLASLANIDI_ATRIAL_MODEL_2009FROMCELLMLBACKWARDEULERKERNELS_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 "MathsCustomFunctions.hpp" +#include "ChasteDeviceMacros.hpp" + + +template +DEVICE +void Cellaslanidi_atrial_model_2009FromCellMLBackwardEuler::SolveClosedFormVarsDevice(ValueType rY[Cellaslanidi_atrial_model_2009FromCellMLBackwardEuler::TOTAL_SIZE], + ValueType mDt, + const ValueType mParameters[], + bool mSetVoltageDerivativeToZero, + ValueType mFixedVoltage, + ValueType capacitance) +{ + ValueType var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_THIS(mFixedVoltage) : rY[0]); + // Units: millivolt; Initial value: -80.0 + ValueType var_chaste_interface__sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.01309 + ValueType var_chaste_interface__sodium_current_h1_gate__h1 = rY[3]; + // Units: dimensionless; Initial value: 0.706 + ValueType var_chaste_interface__sodium_current_h2_gate__h2 = rY[4]; + // Units: dimensionless; Initial value: 0.61493 + ValueType var_chaste_interface__L_type_Ca_channel_d_L_gate__d_L = rY[5]; + // Units: dimensionless; Initial value: 3e-05 + ValueType var_chaste_interface__L_type_Ca_channel_f_L_gate__f_L = rY[6]; + // Units: dimensionless; Initial value: 0.99981 + ValueType var_chaste_interface__T_type_Ca_channel_d_T_gate__d_T = rY[7]; + // Units: dimensionless; Initial value: 0.00046 + ValueType var_chaste_interface__T_type_Ca_channel_f_T_gate__f_T = rY[8]; + // Units: dimensionless; Initial value: 0.30752 + ValueType var_chaste_interface__Ca_independent_transient_outward_K_current_r_gate__r = rY[9]; + // Units: dimensionless; Initial value: 6e-05 + ValueType var_chaste_interface__Ca_independent_transient_outward_K_current_s1_gate__s1 = rY[10]; + // Units: dimensionless; Initial value: 0.5753 + ValueType var_chaste_interface__Ca_independent_transient_outward_K_current_s2_gate__s2 = rY[11]; + // Units: dimensionless; Initial value: 0.39871 + ValueType var_chaste_interface__Ca_independent_transient_outward_K_current_s3_gate__s3 = rY[12]; + // Units: dimensionless; Initial value: 0.57363 + ValueType var_chaste_interface__delayed_rectifier_K_current_z_gate__z = rY[13]; + // Units: dimensionless; Initial value: 0.02032 + ValueType var_chaste_interface__delayed_rectifier_K_current_pa_gate__p_a = rY[14]; + // Units: dimensionless; Initial value: 0.00016 + ValueType var_chaste_interface__delayed_rectifier_K_current_pi_gate__p_i = rY[15]; + // Units: dimensionless; Initial value: 0.76898 + + const ValueType var_Ca_independent_transient_outward_K_current_r_gate__alpha_r = CHASTE_CONST(386.60000000000002) * CHASTE_MATH::Exp(CHASTE_CONST(0.083333333333333329) * var_chaste_interface__membrane__V);const ValueType var_Ca_independent_transient_outward_K_current_r_gate__beta_r = CHASTE_CONST(8.0109999999999992) * CHASTE_MATH::Exp(-CHASTE_CONST(0.1388888888888889) * var_chaste_interface__membrane__V);const ValueType var_Ca_independent_transient_outward_K_current_r_gate__r_infinity = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.6628794603230959) - CHASTE_CONST(0.17752529735487307) * var_chaste_interface__membrane__V));const ValueType var_Ca_independent_transient_outward_K_current_r_gate__tau_r = CHASTE_CONST(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 ValueType var_Ca_independent_transient_outward_K_current_s1_gate__s1_infinity = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(4.0070821529745047) + CHASTE_CONST(0.14164305949008499) * var_chaste_interface__membrane__V));const ValueType var_Ca_independent_transient_outward_K_current_s1_gate__tau_s1 = CHASTE_CONST(0.020400000000000001) + CHASTE_CONST(0.54659999999999997) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(327.99999999999994) + 10 * var_chaste_interface__membrane__V));const ValueType var_Ca_independent_transient_outward_K_current_s2_gate__s2_infinity = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(4.0070821529745047) + CHASTE_CONST(0.14164305949008499) * var_chaste_interface__membrane__V));const ValueType var_Ca_independent_transient_outward_K_current_s2_gate__tau_s2 = CHASTE_CONST(5.75) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(327.99999999999994) + 10 * var_chaste_interface__membrane__V)) + CHASTE_CONST(0.45000000000000001) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(0.96921975662133131) - CHASTE_CONST(0.071581961345740866) * var_chaste_interface__membrane__V));const ValueType var_Ca_independent_transient_outward_K_current_s3_gate__s3_infinity = CHASTE_CONST(0.39975990396158467) + CHASTE_CONST(0.60024009603841544) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.8506208911614319) + CHASTE_CONST(0.036523009495982472) * var_chaste_interface__membrane__V));const ValueType var_Ca_independent_transient_outward_K_current_s3_gate__tau_s3 = CHASTE_CONST(0.5) + CHASTE_CONST(7.5) / (1 + CHASTE_MATH::Exp(46 + 2 * var_chaste_interface__membrane__V));const ValueType var_L_type_Ca_channel_d_L_gate__E10 = 10 + var_chaste_interface__membrane__V;const ValueType var_L_type_Ca_channel_d_L_gate__alpha_d_L = (((var_chaste_interface__membrane__V >= -CHASTE_CONST(10.000000480800001)) && (var_chaste_interface__membrane__V <= -CHASTE_CONST(9.9999995191999993))) ? (CHASTE_CONST(2.4040000000391526e-5) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(1.0000000000162864e-7))) + CHASTE_CONST(1039933.4442576389) * (CHASTE_CONST(10.000000480800001) + var_chaste_interface__membrane__V) * (-CHASTE_CONST(2.4040000000391526e-5) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(1.0000000000162864e-7))) - CHASTE_CONST(2.4039999999697637e-5) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999998742257e-8))))) : (-50 * (10 + var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.0798668885191347) - CHASTE_CONST(0.20798668885191349) * var_chaste_interface__membrane__V)))) + (((var_chaste_interface__membrane__V >= -CHASTE_CONST(45.000000249999999)) && (var_chaste_interface__membrane__V <= -CHASTE_CONST(44.999999750000001))) ? (CHASTE_CONST(4.1799999996561256e-6) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999991773334e-8))) + CHASTE_CONST(1999999.9999424887) * (CHASTE_CONST(45.000000249999999) + var_chaste_interface__membrane__V) * (-CHASTE_CONST(4.1800000005842713e-6) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.000000000139778e-7))) - CHASTE_CONST(4.1799999996561256e-6) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999991773334e-8))))) : (-CHASTE_CONST(16.719999999999999) * (45 + var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(-18 - CHASTE_CONST(0.40000000000000002) * var_chaste_interface__membrane__V))));const ValueType var_L_type_Ca_channel_d_L_gate__beta_d_L = (((var_chaste_interface__membrane__V >= -CHASTE_CONST(5.0000002500000003)) && (var_chaste_interface__membrane__V <= -CHASTE_CONST(4.9999997499999997))) ? (-CHASTE_CONST(1.1200000000011203e-6) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.0000000000010001e-7))) + CHASTE_CONST(1999999.9999979998) * (CHASTE_CONST(5.0000002500000003) + var_chaste_interface__membrane__V) * (CHASTE_CONST(1.1200000000011203e-6) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(1.0000000000010001e-7))) + CHASTE_CONST(1.1200000000011203e-6) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.0000000000010001e-7))))) : (CHASTE_CONST(4.4800000000000004) * (5 + var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(2 + CHASTE_CONST(0.40000000000000002) * var_chaste_interface__membrane__V))));const ValueType var_L_type_Ca_channel_d_L_gate__d_L_infinity = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.14393939393939395) - CHASTE_CONST(0.15151515151515152) * var_L_type_Ca_channel_d_L_gate__E10));const ValueType 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 ValueType var_L_type_Ca_channel_f_L_gate__E0_f_L = 18 + var_chaste_interface__membrane__V;const ValueType var_L_type_Ca_channel_f_L_gate__alpha_f_L = (((var_chaste_interface__membrane__V >= -CHASTE_CONST(18.000000400000001)) && (var_chaste_interface__membrane__V <= -CHASTE_CONST(17.999999599999999))) ? (-CHASTE_CONST(3.3960000000976542e-6) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.0000000000287557e-7))) + CHASTE_CONST(1249999.9999640554) * (CHASTE_CONST(18.000000400000001) + var_chaste_interface__membrane__V) * (CHASTE_CONST(3.3960000000976542e-6) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(1.0000000000287557e-7))) + CHASTE_CONST(3.3960000000976542e-6) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.0000000000287557e-7))))) : (CHASTE_CONST(8.4900000000000002) * (18 + var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(4.5) + CHASTE_CONST(0.25) * var_chaste_interface__membrane__V))));const ValueType var_L_type_Ca_channel_f_L_gate__beta_f_L = CHASTE_CONST(67.921999999999997) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.25) * var_L_type_Ca_channel_f_L_gate__E0_f_L));const ValueType 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 ValueType 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 ValueType var_T_type_Ca_channel_d_T_gate__E0_d_T = CHASTE_CONST(23.300000000000001) + var_chaste_interface__membrane__V;const ValueType var_T_type_Ca_channel_d_T_gate__alpha_d_T = CHASTE_CONST(674.173) * CHASTE_MATH::Exp(CHASTE_CONST(0.033333333333333333) * var_T_type_Ca_channel_d_T_gate__E0_d_T);const ValueType var_T_type_Ca_channel_d_T_gate__beta_d_T = CHASTE_CONST(674.173) * CHASTE_MATH::Exp(-CHASTE_CONST(0.033333333333333333) * var_T_type_Ca_channel_d_T_gate__E0_d_T);const ValueType var_T_type_Ca_channel_d_T_gate__d_T_infinity = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(0.049180327868852458) - CHASTE_CONST(0.16393442622950821) * var_T_type_Ca_channel_d_T_gate__E0_d_T));const ValueType 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 ValueType var_T_type_Ca_channel_f_T_gate__E0_f_T = 75 + var_chaste_interface__membrane__V;const ValueType var_T_type_Ca_channel_f_T_gate__alpha_f_T = CHASTE_CONST(9.6370000000000005) * CHASTE_MATH::Exp(-CHASTE_CONST(0.012004801920768308) * var_T_type_Ca_channel_f_T_gate__E0_f_T);const ValueType var_T_type_Ca_channel_f_T_gate__beta_f_T = CHASTE_CONST(9.6370000000000005) * CHASTE_MATH::Exp(CHASTE_CONST(0.065019505851755519) * var_T_type_Ca_channel_f_T_gate__E0_f_T);const ValueType 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 ValueType 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 ValueType var_delayed_rectifier_K_current_pa_gate__alpha_p_a = 9 * CHASTE_MATH::Exp(CHASTE_CONST(0.03941508020968823) * var_chaste_interface__membrane__V);const ValueType var_delayed_rectifier_K_current_pa_gate__beta_p_a = CHASTE_CONST(1.3) * CHASTE_MATH::Exp(-CHASTE_CONST(0.076769537847382163) * var_chaste_interface__membrane__V);const ValueType var_delayed_rectifier_K_current_pa_gate__p_a_infinity = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.68918918918918914) - CHASTE_CONST(0.13513513513513511) * var_chaste_interface__membrane__V));const ValueType 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 ValueType var_delayed_rectifier_K_current_pi_gate__alpha_p_i = 100 * CHASTE_MATH::Exp(-CHASTE_CONST(0.018299935950224173) * var_chaste_interface__membrane__V);const ValueType var_delayed_rectifier_K_current_pi_gate__beta_p_i = 656 * CHASTE_MATH::Exp(CHASTE_CONST(0.009420009985210585) * var_chaste_interface__membrane__V);const ValueType var_delayed_rectifier_K_current_pi_gate__p_i_infinity = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(2.539728728905752) + CHASTE_CONST(0.05358970648917756) * var_chaste_interface__membrane__V));const ValueType 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 ValueType var_delayed_rectifier_K_current_z_gate__alpha_z = CHASTE_CONST(1.6599999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(0.014398433450440593) * var_chaste_interface__membrane__V);const ValueType var_delayed_rectifier_K_current_z_gate__beta_z = CHASTE_CONST(0.29999999999999999) * CHASTE_MATH::Exp(-CHASTE_CONST(0.045816915605241454) * var_chaste_interface__membrane__V);const ValueType var_delayed_rectifier_K_current_z_gate__tau_z = CHASTE_CONST(0.059999999999999998) + 1 / (var_delayed_rectifier_K_current_z_gate__alpha_z + var_delayed_rectifier_K_current_z_gate__beta_z);const ValueType var_delayed_rectifier_K_current_z_gate__z_infinity = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(0.065217391304347824) - CHASTE_CONST(0.072463768115942032) * var_chaste_interface__membrane__V));const ValueType var_sodium_current_h1_gate__alpha_h = CHASTE_CONST(44.899999999999999) * CHASTE_MATH::Exp(-CHASTE_CONST(12.010771992818672) - CHASTE_CONST(0.17953321364452424) * var_chaste_interface__membrane__V);const ValueType var_sodium_current_h1_gate__beta_h = 1491 / (1 + CHASTE_CONST(323.30000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(7.333333333333333) - CHASTE_CONST(0.077519379844961239) * var_chaste_interface__membrane__V));const ValueType 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 ValueType var_sodium_current_h1_gate__tau_h1 = CHASTE_CONST(0.00014999999999999999) + CHASTE_CONST(0.029999999999999999) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(6.666666666666667) + CHASTE_CONST(0.16666666666666666) * var_chaste_interface__membrane__V));const ValueType var_sodium_current_h2_gate__tau_h2 = CHASTE_CONST(0.00044999999999999999) + CHASTE_CONST(0.12) / (1 + CHASTE_MATH::Exp(30 + CHASTE_CONST(0.5) * var_chaste_interface__membrane__V));const ValueType var_sodium_current_m_gate__E0_m = CHASTE_CONST(44.399999999999999) + var_chaste_interface__membrane__V;const ValueType var_sodium_current_m_gate__alpha_m = (((var_chaste_interface__membrane__V >= -CHASTE_CONST(44.400001267299999)) && (var_chaste_interface__membrane__V <= -CHASTE_CONST(44.399998732699999))) ? (CHASTE_CONST(0.00058295799999830145) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999708629e-8))) + CHASTE_CONST(394539.57232025318) * (CHASTE_CONST(44.400001267299999) + var_chaste_interface__membrane__V) * (-CHASTE_CONST(0.00058295799999830145) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999708629e-8))) - CHASTE_CONST(0.00058295799999830145) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999708629e-8))))) : (-460 * (CHASTE_CONST(44.399999999999999) + var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.5035114021936398) - CHASTE_CONST(0.078907914463820727) * var_chaste_interface__membrane__V))));const ValueType var_sodium_current_m_gate__beta_m = 18400 * CHASTE_MATH::Exp(-CHASTE_CONST(0.078907914463820727) * var_sodium_current_m_gate__E0_m); + + rY[9] = (var_chaste_interface__Ca_independent_transient_outward_K_current_r_gate__r + ((CHASTE_CONST(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 - ((-CHASTE_CONST(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 + ((CHASTE_CONST(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 - ((-CHASTE_CONST(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 + ((CHASTE_CONST(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 - ((-CHASTE_CONST(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 + ((CHASTE_CONST(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 - ((-CHASTE_CONST(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 + ((CHASTE_CONST(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 - ((-CHASTE_CONST(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 + ((CHASTE_CONST(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 - ((-CHASTE_CONST(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 + ((CHASTE_CONST(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 - ((-CHASTE_CONST(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 + ((CHASTE_CONST(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 - ((-CHASTE_CONST(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 + ((CHASTE_CONST(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 - ((-CHASTE_CONST(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 + ((CHASTE_CONST(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 - ((-CHASTE_CONST(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 + ((CHASTE_CONST(0.001) * var_delayed_rectifier_K_current_z_gate__z_infinity / var_delayed_rectifier_K_current_z_gate__tau_z) * mDt)) / (1.0 - ((-CHASTE_CONST(0.001) / var_delayed_rectifier_K_current_z_gate__tau_z) * mDt));rY[3] = (var_chaste_interface__sodium_current_h1_gate__h1 + ((CHASTE_CONST(0.001) * var_sodium_current_h1_gate__h_infinity / var_sodium_current_h1_gate__tau_h1) * mDt)) / (1.0 - ((-CHASTE_CONST(0.001) / var_sodium_current_h1_gate__tau_h1) * mDt));rY[4] = (var_chaste_interface__sodium_current_h2_gate__h2 + ((CHASTE_CONST(0.001) * var_sodium_current_h1_gate__h_infinity / var_sodium_current_h2_gate__tau_h2) * mDt)) / (1.0 - ((-CHASTE_CONST(0.001) / var_sodium_current_h2_gate__tau_h2) * mDt));rY[2] = (var_chaste_interface__sodium_current_m_gate__m + ((CHASTE_CONST(0.001) * var_sodium_current_m_gate__alpha_m) * mDt)) / (1.0 - ((-CHASTE_CONST(0.001) * var_sodium_current_m_gate__alpha_m - CHASTE_CONST(0.001) * var_sodium_current_m_gate__beta_m) * mDt)); +} + +template +DEVICE +void Cellaslanidi_atrial_model_2009FromCellMLBackwardEuler::FillInitialGuessDevice(ValueType _guess[Cellaslanidi_atrial_model_2009FromCellMLBackwardEuler::NONLINEAR_SIZE], + const ValueType rY[Cellaslanidi_atrial_model_2009FromCellMLBackwardEuler::TOTAL_SIZE]) +{ + _guess[0] = rY[23];_guess[1] = rY[24];_guess[2] = rY[26];_guess[3] = rY[27];_guess[4] = rY[28];_guess[5] = rY[25];_guess[6] = rY[22];_guess[7] = rY[18];_guess[8] = rY[19];_guess[9] = rY[20];_guess[10] = rY[21];_guess[11] = rY[1];_guess[12] = rY[17];_guess[13] = rY[16]; +} + +template +DEVICE +void Cellaslanidi_atrial_model_2009FromCellMLBackwardEuler::ScatterSolutionDevice(const ValueType _guess[Cellaslanidi_atrial_model_2009FromCellMLBackwardEuler::NONLINEAR_SIZE], + ValueType rY[Cellaslanidi_atrial_model_2009FromCellMLBackwardEuler::TOTAL_SIZE]) +{ + 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]; +} + +template +DEVICE +void Cellaslanidi_atrial_model_2009FromCellMLBackwardEuler::ComputeResidualDevice(ValueType var_chaste_interface__environment__time_converted, + const ValueType rCurrentGuess[Cellaslanidi_atrial_model_2009FromCellMLBackwardEuler::NONLINEAR_SIZE], + const ValueType rY[], + ValueType rResidual[Cellaslanidi_atrial_model_2009FromCellMLBackwardEuler::NONLINEAR_SIZE], + ValueType mDt, + const ValueType mParameters[], + bool mSetVoltageDerivativeToZero, + ValueType mFixedVoltage, + ValueType capacitance, + const DeviceStimulusFunctor stim) +{ + ValueType var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_THIS(mFixedVoltage) : rY[0]); // Units: millivolt + ValueType var_chaste_interface__sodium_current_m_gate__m = rY[2]; // Units: dimensionless + ValueType var_chaste_interface__sodium_current_h1_gate__h1 = rY[3]; // Units: dimensionless + ValueType var_chaste_interface__sodium_current_h2_gate__h2 = rY[4]; // Units: dimensionless + ValueType var_chaste_interface__L_type_Ca_channel_d_L_gate__d_L = rY[5]; // Units: dimensionless + ValueType var_chaste_interface__L_type_Ca_channel_f_L_gate__f_L = rY[6]; // Units: dimensionless + ValueType var_chaste_interface__T_type_Ca_channel_d_T_gate__d_T = rY[7]; // Units: dimensionless + ValueType var_chaste_interface__T_type_Ca_channel_f_T_gate__f_T = rY[8]; // Units: dimensionless + ValueType var_chaste_interface__Ca_independent_transient_outward_K_current_r_gate__r = rY[9]; // Units: dimensionless + ValueType var_chaste_interface__Ca_independent_transient_outward_K_current_s1_gate__s1 = rY[10]; // Units: dimensionless + ValueType var_chaste_interface__Ca_independent_transient_outward_K_current_s2_gate__s2 = rY[11]; // Units: dimensionless + ValueType var_chaste_interface__Ca_independent_transient_outward_K_current_s3_gate__s3 = rY[12]; // Units: dimensionless + ValueType var_chaste_interface__delayed_rectifier_K_current_z_gate__z = rY[13]; // Units: dimensionless + ValueType var_chaste_interface__delayed_rectifier_K_current_pa_gate__p_a = rY[14]; // Units: dimensionless + ValueType var_chaste_interface__delayed_rectifier_K_current_pi_gate__p_i = rY[15]; // Units: dimensionless + + ValueType var_chaste_interface__Ca_handling_by_the_SR__Ca_rel = rCurrentGuess[0]; + ValueType var_chaste_interface__Ca_handling_by_the_SR__Ca_up = rCurrentGuess[1]; + ValueType var_chaste_interface__Ca_handling_by_the_SR__F1 = rCurrentGuess[2]; + ValueType var_chaste_interface__Ca_handling_by_the_SR__F2 = rCurrentGuess[3]; + ValueType var_chaste_interface__Ca_handling_by_the_SR__F3 = rCurrentGuess[4]; + ValueType var_chaste_interface__Ca_handling_by_the_SR__O_Calse = rCurrentGuess[5]; + ValueType var_chaste_interface__cleft_space_ion_concentrations__K_c = rCurrentGuess[6]; + ValueType var_chaste_interface__intracellular_Ca_buffering__O_C = rCurrentGuess[7]; + ValueType var_chaste_interface__intracellular_Ca_buffering__O_TC = rCurrentGuess[8]; + ValueType var_chaste_interface__intracellular_Ca_buffering__O_TMgC = rCurrentGuess[9]; + ValueType var_chaste_interface__intracellular_Ca_buffering__O_TMgMg = rCurrentGuess[10]; + ValueType var_chaste_interface__intracellular_ion_concentrations__Ca_i = rCurrentGuess[11]; + ValueType var_chaste_interface__intracellular_ion_concentrations__K_i = rCurrentGuess[12]; + ValueType var_chaste_interface__intracellular_ion_concentrations__Na_i = rCurrentGuess[13]; + + const ValueType var_Ca_handling_by_the_SR__I_up_max = CHASTE_CONST(2.7999999999999998); // picoA + const ValueType 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 ValueType var_Ca_handling_by_the_SR__Vol_rel = CHASTE_CONST(4.3999999999999997e-8); // nanolitre + const ValueType var_Ca_handling_by_the_SR__Vol_up = CHASTE_CONST(3.9690000000000001e-7); // nanolitre + const ValueType var_Ca_handling_by_the_SR__k_F3 = CHASTE_CONST(0.81499999999999995); // per_second + const ValueType var_Ca_handling_by_the_SR__k_cyca = CHASTE_CONST(0.00029999999999999997); // millimolar + const ValueType var_Ca_handling_by_the_SR__k_rel = CHASTE_CONST(0.00029999999999999997); // millimolar + const ValueType var_Ca_handling_by_the_SR__k_srca = CHASTE_CONST(0.5); // millimolar + const ValueType var_Ca_handling_by_the_SR__k_xcs = CHASTE_CONST(0.40000000000000002); // dimensionless + const ValueType var_Ca_handling_by_the_SR__tau_tr = CHASTE_CONST(0.01); // second + const ValueType var_Ca_independent_transient_outward_K_current__g_to = CHASTE_CONST(0.050001999999999998); // nanoS + const ValueType d_dt_chaste_interface_var_Ca_handling_by_the_SR__O_Calse = CHASTE_CONST(0.001) * var_Ca_handling_by_the_SR__O_Calse_orig_deriv; // 1 / millisecond + const ValueType var_L_type_Ca_channel__E_Ca_app = 50; // millivolt + const ValueType var_Na_Ca_ion_exchanger_current__d_NaCa = CHASTE_CONST(0.00029999999999999997); // per_millimolar_4 + const ValueType var_Na_Ca_ion_exchanger_current__gamma = CHASTE_CONST(0.45000000000000001); // dimensionless + const ValueType var_T_type_Ca_channel__E_Ca_T = 38; // millivolt + const ValueType var_T_type_Ca_channel__g_Ca_T = CHASTE_CONST(0.0060000000000000001); // nanoS + const ValueType var_background_currents__g_B_Ca = CHASTE_CONST(3.1000000000000001e-5); // nanoS + const ValueType var_background_currents__g_B_Na = CHASTE_CONST(6.3999999999999997e-5); // nanoS + const ValueType var_cleft_space_ion_concentrations__Vol_c = CHASTE_CONST(2.5000000000000002e-6); // nanolitre + const ValueType var_environment__CT = 1; // dimensionless + const ValueType var_environment__PM = 0; // dimensionless + const ValueType var_intracellular_Ca_buffering__Mg_i = CHASTE_CONST(2.5); // millimolar + const ValueType 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 ValueType d_dt_chaste_interface_var_intracellular_Ca_buffering__O_TMgMg = CHASTE_CONST(0.001) * var_intracellular_Ca_buffering__O_TMgMg_orig_deriv; // 1 / millisecond + const ValueType var_Ca_handling_by_the_SR__i_rel = CHASTE_MATH::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] / CHASTE_MATH::Pow((CHASTE_CONST(0.25) + var_chaste_interface__Ca_handling_by_the_SR__F2), 2); // picoA + const ValueType var_Ca_handling_by_the_SR__i_up = (var_chaste_interface__intracellular_ion_concentrations__Ca_i / var_Ca_handling_by_the_SR__k_cyca - CHASTE_MATH::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 ValueType var_Ca_handling_by_the_SR__r_inact = CHASTE_CONST(33.960000000000001) + CHASTE_CONST(339.60000000000002) * CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Ca_i, 4) / CHASTE_MATH::Pow((var_Ca_handling_by_the_SR__k_rel + var_chaste_interface__intracellular_ion_concentrations__Ca_i), 4); // per_second + const ValueType 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 ValueType d_dt_chaste_interface_var_Ca_handling_by_the_SR__F3 = CHASTE_CONST(0.001) * var_Ca_handling_by_the_SR__F3_orig_deriv; // 1 / millisecond + const ValueType 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 ValueType var_intracellular_Ca_buffering__O_C_orig_deriv = var_intracellular_Ca_buffering__dOCdt; // 1 / second + const ValueType d_dt_chaste_interface_var_intracellular_Ca_buffering__O_C = CHASTE_CONST(0.001) * var_intracellular_Ca_buffering__O_C_orig_deriv; // 1 / millisecond + const ValueType 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 ValueType var_intracellular_Ca_buffering__O_TC_orig_deriv = var_intracellular_Ca_buffering__dOTCdt; // 1 / second + const ValueType d_dt_chaste_interface_var_intracellular_Ca_buffering__O_TC = CHASTE_CONST(0.001) * var_intracellular_Ca_buffering__O_TC_orig_deriv; // 1 / millisecond + const ValueType var_intracellular_Ca_buffering__dOTMgCdt = -CHASTE_CONST(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 ValueType var_intracellular_Ca_buffering__O_TMgC_orig_deriv = var_intracellular_Ca_buffering__dOTMgCdt; // 1 / second + const ValueType d_dt_chaste_interface_var_intracellular_Ca_buffering__O_TMgC = CHASTE_CONST(0.001) * var_intracellular_Ca_buffering__O_TMgC_orig_deriv; // 1 / millisecond + const ValueType var_intracellular_ion_concentrations__Vol_Ca = CHASTE_CONST(5.8839999999999999e-6); // nanolitre + const ValueType var_intracellular_ion_concentrations__Vol_i = CHASTE_CONST(1.26e-5); // nanolitre + const ValueType var_inward_rectifier__KmK1 = CHASTE_CONST(0.58999999999999997); // millimolar + const ValueType var_inward_rectifier__shiftK1 = -CHASTE_CONST(3.6000000000000001); // millivolt + const ValueType var_inward_rectifier__steepK1 = CHASTE_CONST(1.393); // dimensionless + const ValueType var_membrane__F = 96487; // coulomb_per_mole + const ValueType 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 ValueType var_Ca_handling_by_the_SR__Ca_rel_orig_deriv = -31 * var_Ca_handling_by_the_SR__O_Calse_orig_deriv + CHASTE_CONST(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 ValueType var_Ca_handling_by_the_SR__Ca_up_orig_deriv = CHASTE_CONST(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 ValueType d_dt_chaste_interface_var_Ca_handling_by_the_SR__Ca_rel = CHASTE_CONST(0.001) * var_Ca_handling_by_the_SR__Ca_rel_orig_deriv; // millimolar / millisecond + const ValueType d_dt_chaste_interface_var_Ca_handling_by_the_SR__Ca_up = CHASTE_CONST(0.001) * var_Ca_handling_by_the_SR__Ca_up_orig_deriv; // millimolar / millisecond + const ValueType var_membrane__R = 8314; // millijoule_per_mole_kelvin + const ValueType var_membrane__T = 308; // kelvin + const ValueType var_Ca_independent_transient_outward_K_current__E_K = var_membrane__R * var_membrane__T * CHASTE_MATH::Log(var_chaste_interface__cleft_space_ion_concentrations__K_c / var_chaste_interface__intracellular_ion_concentrations__K_i) / var_membrane__F; // millivolt + const ValueType var_background_currents__E_Ca = CHASTE_CONST(0.5) * var_membrane__R * var_membrane__T * CHASTE_MATH::Log(mParameters[1] / var_chaste_interface__intracellular_ion_concentrations__Ca_i) / var_membrane__F; // millivolt + const ValueType var_Ca_handling_by_the_SR__r_act = 240 * CHASTE_MATH::Exp(-CHASTE_CONST(1.6000000000000001) + CHASTE_CONST(0.080000000000000002) * var_chaste_interface__membrane__V) + CHASTE_CONST(203.80000000000001) * CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Ca_i, 4) / CHASTE_MATH::Pow((var_Ca_handling_by_the_SR__k_rel + var_chaste_interface__intracellular_ion_concentrations__Ca_i), 4); // per_second + const ValueType 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 ValueType 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 ValueType var_Ca_independent_transient_outward_K_current__i_sus = (((var_environment__CT == 1) && (var_environment__PM == 0)) ? (CHASTE_CONST(0.098000000000000004) + CHASTE_CONST(0.0014) * var_chaste_interface__membrane__V) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (CHASTE_CONST(0.16799999999999998) + CHASTE_CONST(0.0023999999999999998) * var_chaste_interface__membrane__V) : (CHASTE_CONST(0.070000000000000007) + CHASTE_CONST(0.001) * var_chaste_interface__membrane__V))); // picoA + const ValueType var_Ca_independent_transient_outward_K_current__i_to = (((var_environment__CT == 1) && (var_environment__PM == 0)) ? (CHASTE_CONST(0.20000000000000001) * (CHASTE_CONST(0.40000000000000002) + CHASTE_CONST(0.59999999999999998) * CHASTE_MATH::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) * (CHASTE_CONST(0.58999999999999997) * CHASTE_MATH::Pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s1_gate__s1, 3) + CHASTE_CONST(0.40999999999999998) * CHASTE_MATH::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)) ? (CHASTE_CONST(0.34999999999999998) * (CHASTE_CONST(0.40000000000000002) + CHASTE_CONST(0.59999999999999998) * CHASTE_MATH::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) * (CHASTE_CONST(0.58999999999999997) * CHASTE_MATH::Pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s1_gate__s1, 3) + CHASTE_CONST(0.40999999999999998) * CHASTE_MATH::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) : ((CHASTE_CONST(0.40000000000000002) + CHASTE_CONST(0.59999999999999998) * CHASTE_MATH::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) * (CHASTE_CONST(0.58999999999999997) * CHASTE_MATH::Pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s1_gate__s1, 3) + CHASTE_CONST(0.40999999999999998) * CHASTE_MATH::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 ValueType d_dt_chaste_interface_var_Ca_handling_by_the_SR__F1 = CHASTE_CONST(0.001) * var_Ca_handling_by_the_SR__F1_orig_deriv; // 1 / millisecond + const ValueType d_dt_chaste_interface_var_Ca_handling_by_the_SR__F2 = CHASTE_CONST(0.001) * var_Ca_handling_by_the_SR__F2_orig_deriv; // 1 / millisecond + const ValueType var_L_type_Ca_channel__d_prime = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.9166666666666667) - CHASTE_CONST(0.083333333333333329) * var_chaste_interface__membrane__V)); // dimensionless + const ValueType var_L_type_Ca_channel__i_Ca_L = (((var_environment__CT == 1) && (var_environment__PM == 0)) ? (CHASTE_CONST(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)) ? (CHASTE_CONST(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 ValueType var_Na_Ca_ion_exchanger_current__i_NaCa = (CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mParameters[1] * CHASTE_MATH::Exp(var_Na_Ca_ion_exchanger_current__gamma * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - CHASTE_MATH::Pow(mParameters[2], 3) * var_chaste_interface__intracellular_ion_concentrations__Ca_i * CHASTE_MATH::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 + (CHASTE_MATH::Pow(mParameters[2], 3) * var_chaste_interface__intracellular_ion_concentrations__Ca_i + CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mParameters[1]) * var_Na_Ca_ion_exchanger_current__d_NaCa); // picoA + const ValueType 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 ValueType var_background_currents__i_B_Ca = (((var_environment__CT == 1) && (var_environment__PM == 0)) ? (CHASTE_CONST(2.0000000000000002e-5) * var_chaste_interface__membrane__V - CHASTE_CONST(2.0000000000000002e-5) * var_background_currents__E_Ca) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (CHASTE_CONST(3.0000000000000001e-5) * var_chaste_interface__membrane__V - CHASTE_CONST(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 ValueType 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 ValueType 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 ValueType var_inward_rectifier__i_K1 = (((var_environment__CT == 1) && (var_environment__PM == 0)) ? (2 * CHASTE_MATH::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 + CHASTE_MATH::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))) * CHASTE_MATH::Pow((var_chaste_interface__cleft_space_ion_concentrations__K_c + var_inward_rectifier__KmK1), 3))) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (CHASTE_CONST(2.5) * CHASTE_MATH::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 + CHASTE_MATH::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))) * CHASTE_MATH::Pow((var_chaste_interface__cleft_space_ion_concentrations__K_c + var_inward_rectifier__KmK1), 3))) : (CHASTE_MATH::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 + CHASTE_MATH::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))) * CHASTE_MATH::Pow((var_chaste_interface__cleft_space_ion_concentrations__K_c + var_inward_rectifier__KmK1), 3))))); // picoA + const ValueType var_sarcolemmal_calcium_pump_current__i_CaP_max = CHASTE_CONST(0.0095090000000000001); // picoA + const ValueType var_sarcolemmal_calcium_pump_current__k_CaP = CHASTE_CONST(0.00020000000000000001); // millimolar + const ValueType 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 ValueType var_intracellular_ion_concentrations__Ca_i_orig_deriv = -CHASTE_CONST(0.044999999999999998) * var_intracellular_Ca_buffering__dOCdt - CHASTE_CONST(0.080000000000000002) * var_intracellular_Ca_buffering__dOTCdt - CHASTE_CONST(0.16) * var_intracellular_Ca_buffering__dOTMgCdt + CHASTE_CONST(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 ValueType d_dt_chaste_interface_var_intracellular_ion_concentrations__Ca_i = CHASTE_CONST(0.001) * var_intracellular_ion_concentrations__Ca_i_orig_deriv; // millimolar / millisecond + const ValueType var_sodium_current__E_Na = var_membrane__R * var_membrane__T * CHASTE_MATH::Log(mParameters[2] / var_chaste_interface__intracellular_ion_concentrations__Na_i) / var_membrane__F; // millivolt + const ValueType var_background_currents__i_B_Na = (((var_environment__CT == 1) && (var_environment__PM == 0)) ? (CHASTE_CONST(2.0000000000000002e-5) * var_chaste_interface__membrane__V - CHASTE_CONST(2.0000000000000002e-5) * var_sodium_current__E_Na) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (CHASTE_CONST(3.0000000000000001e-5) * var_chaste_interface__membrane__V - CHASTE_CONST(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 ValueType var_sodium_current__i_Na = (((var_chaste_interface__membrane__V >= -CHASTE_CONST(2.6539450910485349e-6)) && (var_chaste_interface__membrane__V <= CHASTE_CONST(2.6539450910485349e-6))) ? (CHASTE_CONST(188398.77346612973) * (CHASTE_CONST(2.6539450910485349e-6) + var_chaste_interface__membrane__V) * (CHASTE_CONST(0.0096486999999999996) * CHASTE_MATH::Pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8) - CHASTE_MATH::Log(mParameters[2] / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (CHASTE_CONST(0.36499999999999999) * var_chaste_interface__sodium_current_h2_gate__h2 + CHASTE_CONST(0.63500000000000001) * var_chaste_interface__sodium_current_h1_gate__h1) * mParameters[2] * mParameters[5] / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) + CHASTE_CONST(0.0096486999999999996) * CHASTE_MATH::Pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8) - CHASTE_MATH::Log(mParameters[2] / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (CHASTE_CONST(0.36499999999999999) * var_chaste_interface__sodium_current_h2_gate__h2 + CHASTE_CONST(0.63500000000000001) * var_chaste_interface__sodium_current_h1_gate__h1) * mParameters[2] * mParameters[5] / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) - CHASTE_CONST(0.0096486999999999996) * CHASTE_MATH::Pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8) - CHASTE_MATH::Log(mParameters[2] / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (CHASTE_CONST(0.36499999999999999) * var_chaste_interface__sodium_current_h2_gate__h2 + CHASTE_CONST(0.63500000000000001) * var_chaste_interface__sodium_current_h1_gate__h1) * mParameters[2] * mParameters[5] / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) : (CHASTE_CONST(3635.606491085292) * CHASTE_MATH::Pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + CHASTE_MATH::Exp(CHASTE_CONST(0.037679754693225945) * var_chaste_interface__membrane__V - CHASTE_MATH::Log(mParameters[2] / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (CHASTE_CONST(0.36499999999999999) * var_chaste_interface__sodium_current_h2_gate__h2 + CHASTE_CONST(0.63500000000000001) * var_chaste_interface__sodium_current_h1_gate__h1) * mParameters[2] * var_chaste_interface__membrane__V * mParameters[5] / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(0.037679754693225945) * var_chaste_interface__membrane__V)))); // picoA + const ValueType var_sodium_potassium_pump__i_NaK_max = CHASTE_CONST(0.064409999999999995); // picoA + const ValueType var_sodium_potassium_pump__k_NaK_K = 1; // millimolar + const ValueType var_sodium_potassium_pump__k_NaK_Na = 11; // millimolar + const ValueType var_sodium_potassium_pump__i_p = CHASTE_CONST(1.6000000000000001) * CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, CHASTE_CONST(1.5)) * var_chaste_interface__cleft_space_ion_concentrations__K_c * var_sodium_potassium_pump__i_NaK_max / ((CHASTE_CONST(1.5) + CHASTE_MATH::Exp(-CHASTE_CONST(1.5) - CHASTE_CONST(0.025000000000000001) * var_chaste_interface__membrane__V)) * (CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, CHASTE_CONST(1.5)) + CHASTE_MATH::Pow(var_sodium_potassium_pump__k_NaK_Na, CHASTE_CONST(1.5))) * (var_chaste_interface__cleft_space_ion_concentrations__K_c + var_sodium_potassium_pump__k_NaK_K)); // picoA + const ValueType 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 ValueType d_dt_chaste_interface_var_cleft_space_ion_concentrations__K_c = CHASTE_CONST(0.001) * var_cleft_space_ion_concentrations__K_c_orig_deriv; // millimolar / millisecond + const ValueType 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 ValueType d_dt_chaste_interface_var_intracellular_ion_concentrations__K_i = CHASTE_CONST(0.001) * var_intracellular_ion_concentrations__K_i_orig_deriv; // millimolar / millisecond + const ValueType 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 ValueType d_dt_chaste_interface_var_intracellular_ion_concentrations__Na_i = CHASTE_CONST(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; +} + +template +DEVICE +void Cellaslanidi_atrial_model_2009FromCellMLBackwardEuler::ComputeJacobianDevice(ValueType var_chaste_interface__environment__time_converted, + const ValueType rCurrentGuess[Cellaslanidi_atrial_model_2009FromCellMLBackwardEuler::NONLINEAR_SIZE], + const ValueType rY[], + ValueType rJacobian[Cellaslanidi_atrial_model_2009FromCellMLBackwardEuler::NONLINEAR_SIZE][Cellaslanidi_atrial_model_2009FromCellMLBackwardEuler::NONLINEAR_SIZE], + ValueType mDt, + const ValueType mParameters[], + bool mSetVoltageDerivativeToZero, + ValueType mFixedVoltage, + ValueType capacitance, + const DeviceStimulusFunctor stim) +{ + ValueType var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_THIS(mFixedVoltage) : rY[0]); // Units: millivolt + ValueType var_chaste_interface__sodium_current_m_gate__m = rY[2]; // Units: dimensionless + ValueType var_chaste_interface__sodium_current_h1_gate__h1 = rY[3]; // Units: dimensionless + ValueType var_chaste_interface__sodium_current_h2_gate__h2 = rY[4]; // Units: dimensionless + ValueType var_chaste_interface__Ca_independent_transient_outward_K_current_r_gate__r = rY[9]; // Units: dimensionless + ValueType var_chaste_interface__Ca_independent_transient_outward_K_current_s1_gate__s1 = rY[10]; // Units: dimensionless + ValueType var_chaste_interface__Ca_independent_transient_outward_K_current_s2_gate__s2 = rY[11]; // Units: dimensionless + ValueType var_chaste_interface__Ca_independent_transient_outward_K_current_s3_gate__s3 = rY[12]; // Units: dimensionless + ValueType var_chaste_interface__delayed_rectifier_K_current_z_gate__z = rY[13]; // Units: dimensionless + ValueType var_chaste_interface__delayed_rectifier_K_current_pa_gate__p_a = rY[14]; // Units: dimensionless + ValueType var_chaste_interface__delayed_rectifier_K_current_pi_gate__p_i = rY[15]; // Units: dimensionless + + ValueType var_chaste_interface__Ca_handling_by_the_SR__Ca_rel = rCurrentGuess[0]; + ValueType var_chaste_interface__Ca_handling_by_the_SR__Ca_up = rCurrentGuess[1]; + ValueType var_chaste_interface__Ca_handling_by_the_SR__F1 = rCurrentGuess[2]; + ValueType var_chaste_interface__Ca_handling_by_the_SR__F2 = rCurrentGuess[3]; + ValueType var_chaste_interface__Ca_handling_by_the_SR__O_Calse = rCurrentGuess[4]; + ValueType var_chaste_interface__cleft_space_ion_concentrations__K_c = rCurrentGuess[5]; + ValueType var_chaste_interface__intracellular_Ca_buffering__O_C = rCurrentGuess[6]; + ValueType var_chaste_interface__intracellular_Ca_buffering__O_TC = rCurrentGuess[7]; + ValueType var_chaste_interface__intracellular_Ca_buffering__O_TMgC = rCurrentGuess[8]; + ValueType var_chaste_interface__intracellular_Ca_buffering__O_TMgMg = rCurrentGuess[9]; + ValueType var_chaste_interface__intracellular_ion_concentrations__Ca_i = rCurrentGuess[10]; + ValueType var_chaste_interface__intracellular_ion_concentrations__K_i = rCurrentGuess[11]; + ValueType var_chaste_interface__intracellular_ion_concentrations__Na_i = rCurrentGuess[12]; + + const ValueType var_x0 = CHASTE_CONST(0.25) + var_chaste_interface__Ca_handling_by_the_SR__F2; + const ValueType var_x1 = CHASTE_MATH::Pow(var_x0, (-2)); + const ValueType var_x2 = CHASTE_MATH::Pow(var_chaste_interface__Ca_handling_by_the_SR__F2, 2) * mParameters[0]; + const ValueType var_x3 = var_x1 * var_x2; + const ValueType var_x4 = CHASTE_CONST(0.11777375567316183) * var_x3; + const ValueType var_x5 = -var_chaste_interface__intracellular_ion_concentrations__Ca_i + var_chaste_interface__Ca_handling_by_the_SR__Ca_rel; + const ValueType var_x6 = CHASTE_CONST(0.23554751134632365) * var_x5; + const ValueType var_x7 = var_x2 / CHASTE_MATH::Pow(var_x0, 3); + const ValueType var_x8 = 1 / (CHASTE_CONST(1.3999999999999999) + CHASTE_CONST(0.80000000000000004) * var_chaste_interface__Ca_handling_by_the_SR__Ca_up + CHASTE_CONST(3333.3333333333335) * var_chaste_interface__intracellular_ion_concentrations__Ca_i); + const ValueType var_x9 = CHASTE_MATH::Pow((CHASTE_CONST(0.00041999999999999996) + CHASTE_CONST(0.00023999999999999998) * var_chaste_interface__Ca_handling_by_the_SR__Ca_up + var_chaste_interface__intracellular_ion_concentrations__Ca_i), (-2)); + const ValueType var_x10 = CHASTE_CONST(3333.3333333333335) * var_chaste_interface__intracellular_ion_concentrations__Ca_i - CHASTE_CONST(0.32000000000000006) * var_chaste_interface__Ca_handling_by_the_SR__Ca_up; + const ValueType var_x11 = var_x10 * var_x9; + const ValueType var_x12 = CHASTE_CONST(0.00029999999999999997) + var_chaste_interface__intracellular_ion_concentrations__Ca_i; + const ValueType var_x13 = CHASTE_MATH::Pow(var_x12, (-4)); + const ValueType var_x14 = CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Ca_i, 4); + const ValueType var_x15 = var_x13 * var_x14; + const ValueType var_x16 = CHASTE_CONST(0.20380000000000001) * var_x15 + CHASTE_CONST(0.23999999999999999) * CHASTE_MATH::Exp(-CHASTE_CONST(1.6000000000000001) + CHASTE_CONST(0.080000000000000002) * var_chaste_interface__membrane__V); + const ValueType var_x17 = var_x14 / CHASTE_MATH::Pow(var_x12, 5); + const ValueType var_x18 = var_x13 * CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Ca_i, 3); + const ValueType var_x19 = CHASTE_CONST(0.81520000000000004) * var_x17 - CHASTE_CONST(0.81520000000000004) * var_x18; + const ValueType var_x20 = CHASTE_CONST(0.033960000000000004) + CHASTE_CONST(0.33960000000000001) * var_x15; + const ValueType var_x21 = CHASTE_CONST(1.3584000000000001) * var_x17 - CHASTE_CONST(1.3584000000000001) * var_x18; + const ValueType var_x22 = mParameters[8] * var_chaste_interface__delayed_rectifier_K_current_z_gate__z; + const ValueType var_x23 = 1 / var_chaste_interface__cleft_space_ion_concentrations__K_c; + const ValueType var_x24 = CHASTE_CONST(0.11002290841454433) * var_x23; + const ValueType var_x25 = CHASTE_MATH::Pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s3_gate__s3, 6); + const ValueType var_x26 = CHASTE_CONST(0.58999999999999997) * CHASTE_MATH::Pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s1_gate__s1, 3) + CHASTE_CONST(0.40999999999999998) * CHASTE_MATH::Pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s2_gate__s2, 3); + const ValueType var_x27 = CHASTE_CONST(26.53945091048535) * var_x26 * var_chaste_interface__Ca_independent_transient_outward_K_current_r_gate__r; + const ValueType var_x28 = var_x27 * (CHASTE_CONST(1.6583208100573134e-5) + CHASTE_CONST(2.4874812150859699e-5) * var_x25); + const ValueType var_x29 = CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, CHASTE_CONST(1.5)); + const ValueType var_x30 = 1 / (CHASTE_CONST(36.4828726939094) + var_x29); + const ValueType var_x31 = 1 + var_chaste_interface__cleft_space_ion_concentrations__K_c; + const ValueType var_x32 = 1 / var_x31; + const ValueType var_x33 = 1 / (CHASTE_CONST(1.5) + CHASTE_MATH::Exp(-CHASTE_CONST(1.5) - CHASTE_CONST(0.025000000000000001) * var_chaste_interface__membrane__V)); + const ValueType var_x34 = var_x32 * var_x33; + const ValueType var_x35 = var_x30 * var_x34; + const ValueType var_x36 = var_x29 * var_x35; + const ValueType 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 ValueType var_x38 = CHASTE_MATH::Pow(var_chaste_interface__cleft_space_ion_concentrations__K_c, 2); + const ValueType var_x39 = CHASTE_CONST(0.58999999999999997) + var_chaste_interface__cleft_space_ion_concentrations__K_c; + const ValueType var_x40 = CHASTE_MATH::Pow(var_x39, (-3)); + const ValueType var_x41 = 1 / var_chaste_interface__intracellular_ion_concentrations__K_i; + const ValueType var_x42 = CHASTE_MATH::Log(var_x41 * var_chaste_interface__cleft_space_ion_concentrations__K_c); + const ValueType var_x43 = CHASTE_MATH::Exp(CHASTE_CONST(0.18895643383558949) + CHASTE_CONST(0.052487898287663745) * var_chaste_interface__membrane__V - CHASTE_CONST(1.393) * var_x42); + const ValueType var_x44 = 1 + var_x43; + const ValueType var_x45 = 1 / var_x44; + const ValueType var_x46 = var_x45 * mParameters[6]; + const ValueType var_x47 = var_x40 * var_x46; + const ValueType var_x48 = var_x38 * var_x47; + const ValueType var_x49 = -CHASTE_CONST(26.53945091048535) * var_x42 + var_chaste_interface__membrane__V; + const ValueType var_x50 = CHASTE_MATH::Pow(var_chaste_interface__cleft_space_ion_concentrations__K_c, 3); + const ValueType var_x51 = var_x46 * var_x50 / CHASTE_MATH::Pow(var_x39, 4); + const ValueType var_x52 = CHASTE_MATH::Pow(var_x31, (-2)); + const ValueType var_x53 = CHASTE_MATH::Pow(var_x44, (-2)); + const ValueType var_x54 = var_x22 * var_x41; + const ValueType var_x55 = var_x37 * var_x41; + const ValueType var_x56 = var_x41 * var_x50; + const ValueType var_x57 = var_x47 * var_x56; + const ValueType var_x58 = var_x40 * var_x43 * var_x49 * var_x53 * mParameters[6]; + const ValueType var_x59 = var_x35 * CHASTE_MATH::Sqrt(var_chaste_interface__intracellular_ion_concentrations__Na_i) * var_chaste_interface__cleft_space_ion_concentrations__K_c; + const ValueType var_x60 = CHASTE_MATH::Pow((1 + CHASTE_CONST(0.027410122234342148) * var_x29), (-2)); + const ValueType var_x61 = CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 2); + const ValueType var_x62 = 200 * var_chaste_interface__intracellular_ion_concentrations__Ca_i; + const ValueType var_x63 = CHASTE_CONST(0.00088070109612833447) * var_x3; + const ValueType var_x64 = 32 * var_chaste_interface__intracellular_ion_concentrations__Ca_i; + const ValueType var_x65 = CHASTE_CONST(0.00020000000000000001) + var_chaste_interface__intracellular_ion_concentrations__Ca_i; + const ValueType var_x66 = CHASTE_MATH::Pow(mParameters[2], 3); + const ValueType var_x67 = var_x66 * mParameters[9]; + const ValueType var_x68 = var_x66 * var_chaste_interface__intracellular_ion_concentrations__Ca_i; + const ValueType var_x69 = CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mParameters[1]; + const ValueType var_x70 = 1 + CHASTE_CONST(0.00029999999999999997) * var_x68 + CHASTE_CONST(0.00029999999999999997) * var_x69; + const ValueType var_x71 = CHASTE_MATH::Pow(var_x70, (-2)); + const ValueType var_x72 = CHASTE_MATH::Exp(CHASTE_CONST(0.016955889611951675) * var_chaste_interface__membrane__V); + const ValueType var_x73 = CHASTE_MATH::Exp(-CHASTE_CONST(0.02072386508127427) * var_chaste_interface__membrane__V); + const ValueType var_x74 = var_x69 * var_x72 - var_x68 * var_x73; + const ValueType var_x75 = var_x71 * var_x74; + const ValueType var_x76 = var_x67 * var_x75; + const ValueType var_x77 = 1 / var_x70; + const ValueType var_x78 = var_x67 * var_x73 * var_x77; + const ValueType var_x79 = CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 2); + const ValueType var_x80 = var_x79 * mParameters[9] * mParameters[1]; + const ValueType var_x81 = CHASTE_CONST(0.021829942145742926) * var_x23; + const ValueType var_x82 = -CHASTE_CONST(3.290319067574035e-6) - CHASTE_CONST(4.9354786013610522e-6) * var_x25; + const ValueType var_x83 = CHASTE_CONST(0.0049352811901134472) * var_x49; + const ValueType var_x84 = var_x29 * var_x30 * var_x33 * var_x52 * var_chaste_interface__cleft_space_ion_concentrations__K_c; + const ValueType var_x85 = 1 / var_chaste_interface__intracellular_ion_concentrations__Na_i; + const ValueType var_x86 = var_x85 * mParameters[2]; + const ValueType var_x87 = CHASTE_MATH::Log(var_x86); + const ValueType var_x88 = var_x86 * CHASTE_MATH::Pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (CHASTE_CONST(0.36499999999999999) * var_chaste_interface__sodium_current_h2_gate__h2 + CHASTE_CONST(0.63500000000000001) * var_chaste_interface__sodium_current_h1_gate__h1) * mParameters[5]; + const ValueType var_x89 = CHASTE_CONST(0.0096486999999999996) * var_x88; + const ValueType var_x90 = var_x89 * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8) - var_x87) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8))); + const ValueType var_x91 = CHASTE_CONST(0.037679754693225945) * var_chaste_interface__membrane__V; + + rJacobian[0][0] = 1.0 - (mDt * (-CHASTE_CONST(14.98) - var_x4 + CHASTE_CONST(14.880000000000001) * var_chaste_interface__Ca_handling_by_the_SR__O_Calse));rJacobian[0][1] = -(mDt * (CHASTE_CONST(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 * (CHASTE_CONST(12.4) + CHASTE_CONST(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 * (CHASTE_CONST(0.011085915847820609)));rJacobian[1][1] = 1.0 - (mDt * (-CHASTE_CONST(0.011085915847820609) - CHASTE_CONST(2.6321499680605046e-9) * var_x11 - CHASTE_CONST(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 * (CHASTE_CONST(121.85879481761599) * var_x8 - CHASTE_CONST(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 * (CHASTE_CONST(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 * (-CHASTE_CONST(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 * (CHASTE_CONST(0.47999999999999998) - CHASTE_CONST(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 * (-CHASTE_CONST(0.40000000000000002) - CHASTE_CONST(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 * (-CHASTE_CONST(0.00085446536839159674) * var_x36 - CHASTE_CONST(0.22004581682908866) * var_x48 - var_x22 * var_x24 - var_x23 * var_x28 - var_x24 * var_x37 - CHASTE_CONST(0.024873817198171774) * var_x49 * var_x51 + CHASTE_CONST(0.024873817198171774) * var_x38 * var_x40 * var_x45 * var_x49 * mParameters[6] + CHASTE_CONST(0.00085446536839159674) * var_x29 * var_x30 * var_x33 * var_x52 * var_chaste_interface__cleft_space_ion_concentrations__K_c + CHASTE_CONST(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 * (CHASTE_CONST(0.11002290841454433) * var_x54 + CHASTE_CONST(0.11002290841454433) * var_x55 + CHASTE_CONST(0.22004581682908866) * var_x57 + var_x28 * var_x41 - CHASTE_CONST(0.011549742452351092) * var_x56 * var_x58));rJacobian[6][13] = -(mDt * (-CHASTE_CONST(0.0012816980525873951) * var_x59 + CHASTE_CONST(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 * (-CHASTE_CONST(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 * (-CHASTE_CONST(0.39200000000000002) - CHASTE_CONST(78.400000000000006) * var_chaste_interface__intracellular_ion_concentrations__Ca_i));rJacobian[8][9] = 0.0;rJacobian[8][10] = 0.0;rJacobian[8][11] = -(mDt * (CHASTE_CONST(78.400000000000006) - CHASTE_CONST(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 * (-CHASTE_CONST(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 * (-CHASTE_CONST(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 * (CHASTE_CONST(1.7754934097947219e-10) * var_x11 + CHASTE_CONST(0.00078910818213098765) * var_x8));rJacobian[11][2] = 0.0;rJacobian[11][3] = -(mDt * (-CHASTE_CONST(0.0017614021922566689) * var_x5 * var_x7 + CHASTE_CONST(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 * (CHASTE_CONST(0.021419999999999998) + 9 * var_chaste_interface__intracellular_ion_concentrations__Ca_i));rJacobian[11][8] = -(mDt * (CHASTE_CONST(0.031359999999999999) + CHASTE_CONST(6.2720000000000002) * var_chaste_interface__intracellular_ion_concentrations__Ca_i));rJacobian[11][9] = -(mDt * (CHASTE_CONST(0.0010559999999999999) + var_x64));rJacobian[11][10] = -(mDt * (var_x64));rJacobian[11][11] = 1.0 - (mDt * (-CHASTE_CONST(47.271999999999998) - var_x63 + CHASTE_CONST(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 - CHASTE_CONST(8.3745867230843319e-6) / var_x65 - CHASTE_CONST(5.2842065767700058e-7) * var_x76 - CHASTE_CONST(8.2198768971977874) * var_x8 - CHASTE_CONST(0.0017614021922566689) * var_x78 - CHASTE_CONST(2.3373323507508574e-7) / var_chaste_interface__intracellular_ion_concentrations__Ca_i + CHASTE_CONST(8.3745867230843319e-6) * var_chaste_interface__intracellular_ion_concentrations__Ca_i / CHASTE_MATH::Pow(var_x65, 2) + CHASTE_CONST(7.3978892074780085e-7) * var_x10 * var_x9));rJacobian[11][12] = 0.0;rJacobian[11][13] = -(mDt * (-CHASTE_CONST(1.5852619730310017e-6) * var_x75 * var_x80 + CHASTE_CONST(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 * (CHASTE_CONST(0.043659884291485852) * var_x48 + CHASTE_CONST(0.00016953677944277714) * var_x36 - CHASTE_CONST(0.00016953677944277714) * var_x84 + var_x22 * var_x81 + var_x37 * var_x81 + var_x51 * var_x83 - var_x48 * var_x83 - CHASTE_CONST(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 * (-CHASTE_CONST(0.021829942145742926) * var_x54 - CHASTE_CONST(0.021829942145742926) * var_x55 - CHASTE_CONST(0.043659884291485852) * var_x57 + CHASTE_CONST(26.53945091048535) * var_x26 * var_x41 * var_x82 * var_chaste_interface__Ca_independent_transient_outward_K_current_r_gate__r + CHASTE_CONST(0.0022916155659426776) * var_x40 * var_x41 * var_x43 * var_x49 * var_x50 * var_x53 * mParameters[6]));rJacobian[12][13] = -(mDt * (CHASTE_CONST(0.00025430516916416572) * var_x59 - CHASTE_CONST(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 * (CHASTE_CONST(0.00025430516916416572) * var_x84 - CHASTE_CONST(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 * (CHASTE_CONST(0.0024676405950567236) * var_x78 + CHASTE_CONST(7.4029217851701709e-7) * var_x76));rJacobian[13][12] = 0.0;rJacobian[13][13] = 1.0 - (mDt * (-CHASTE_CONST(0.00038145775374624855) * var_x59 - CHASTE_CONST(4.3659884291485854e-7) * var_x85 - CHASTE_CONST(0.00082254686501890791) * (((var_chaste_interface__membrane__V >= -CHASTE_CONST(2.6539450910485349e-6)) && (var_chaste_interface__membrane__V <= CHASTE_CONST(2.6539450910485349e-6))) ? (-var_x90 + (CHASTE_CONST(0.5) + CHASTE_CONST(188398.77346612973) * var_chaste_interface__membrane__V) * (var_x90 + var_x89 * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8) - var_x87) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))))) : (CHASTE_CONST(3635.606491085292) * var_x88 * var_chaste_interface__membrane__V * CHASTE_MATH::Exp(var_x91 - var_x87) / (-1 + CHASTE_MATH::Exp(var_x91)))) - CHASTE_CONST(0.0074029217851701709) * var_x72 * var_x77 * var_x80 + CHASTE_CONST(2.2208765355510512e-6) * var_x71 * var_x74 * var_x79 * mParameters[9] * mParameters[1] + CHASTE_CONST(2.8659485630822583e-7) * var_x32 * var_x33 * var_x60 * var_x61 * var_chaste_interface__cleft_space_ion_concentrations__K_c)); +} + +template +DEVICE +void Cellaslanidi_atrial_model_2009FromCellMLBackwardEuler::UpdateTransmembranePotentialDevice(ValueType var_chaste_interface__environment__time_converted, + ValueType rY[], + ValueType mDt, + const ValueType mParameters[], + bool mSetVoltageDerivativeToZero, + ValueType mFixedVoltage, + DeviceStimulusFunctor stim, + ValueType capacitance) +{ + ValueType var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_THIS(mFixedVoltage) : rY[0]); + // Units: millivolt; Initial value: -80.0 + ValueType var_chaste_interface__intracellular_ion_concentrations__Ca_i = rY[1]; + // Units: millimolar; Initial value: 7.1e-05 + ValueType var_chaste_interface__sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.01309 + ValueType var_chaste_interface__sodium_current_h1_gate__h1 = rY[3]; + // Units: dimensionless; Initial value: 0.706 + ValueType var_chaste_interface__sodium_current_h2_gate__h2 = rY[4]; + // Units: dimensionless; Initial value: 0.61493 + ValueType var_chaste_interface__L_type_Ca_channel_d_L_gate__d_L = rY[5]; + // Units: dimensionless; Initial value: 3e-05 + ValueType var_chaste_interface__L_type_Ca_channel_f_L_gate__f_L = rY[6]; + // Units: dimensionless; Initial value: 0.99981 + ValueType var_chaste_interface__T_type_Ca_channel_d_T_gate__d_T = rY[7]; + // Units: dimensionless; Initial value: 0.00046 + ValueType var_chaste_interface__T_type_Ca_channel_f_T_gate__f_T = rY[8]; + // Units: dimensionless; Initial value: 0.30752 + ValueType var_chaste_interface__Ca_independent_transient_outward_K_current_r_gate__r = rY[9]; + // Units: dimensionless; Initial value: 6e-05 + ValueType var_chaste_interface__Ca_independent_transient_outward_K_current_s1_gate__s1 = rY[10]; + // Units: dimensionless; Initial value: 0.5753 + ValueType var_chaste_interface__Ca_independent_transient_outward_K_current_s2_gate__s2 = rY[11]; + // Units: dimensionless; Initial value: 0.39871 + ValueType var_chaste_interface__Ca_independent_transient_outward_K_current_s3_gate__s3 = rY[12]; + // Units: dimensionless; Initial value: 0.57363 + ValueType var_chaste_interface__delayed_rectifier_K_current_z_gate__z = rY[13]; + // Units: dimensionless; Initial value: 0.02032 + ValueType var_chaste_interface__delayed_rectifier_K_current_pa_gate__p_a = rY[14]; + // Units: dimensionless; Initial value: 0.00016 + ValueType var_chaste_interface__delayed_rectifier_K_current_pi_gate__p_i = rY[15]; + // Units: dimensionless; Initial value: 0.76898 + ValueType var_chaste_interface__intracellular_ion_concentrations__Na_i = rY[16]; + // Units: millimolar; Initial value: 8.4 + ValueType var_chaste_interface__intracellular_ion_concentrations__K_i = rY[17]; + // Units: millimolar; Initial value: 100.0 + ValueType var_chaste_interface__cleft_space_ion_concentrations__K_c = rY[22]; + // Units: millimolar; Initial value: 5.0 + + const ValueType var_Ca_independent_transient_outward_K_current__g_to = CHASTE_CONST(0.050001999999999998); // nanoS + const ValueType var_L_type_Ca_channel__E_Ca_app = 50; // millivolt + const ValueType var_Na_Ca_ion_exchanger_current__d_NaCa = CHASTE_CONST(0.00029999999999999997); // per_millimolar_4 + const ValueType var_Na_Ca_ion_exchanger_current__gamma = CHASTE_CONST(0.45000000000000001); // dimensionless + const ValueType var_T_type_Ca_channel__E_Ca_T = 38; // millivolt + const ValueType var_T_type_Ca_channel__g_Ca_T = CHASTE_CONST(0.0060000000000000001); // nanoS + const ValueType var_background_currents__g_B_Ca = CHASTE_CONST(3.1000000000000001e-5); // nanoS + const ValueType var_background_currents__g_B_Na = CHASTE_CONST(6.3999999999999997e-5); // nanoS + const ValueType var_environment__CT = 1; // dimensionless + const ValueType var_environment__PM = 0; // dimensionless + const ValueType var_inward_rectifier__KmK1 = CHASTE_CONST(0.58999999999999997); // millimolar + const ValueType var_inward_rectifier__shiftK1 = -CHASTE_CONST(3.6000000000000001); // millivolt + const ValueType var_inward_rectifier__steepK1 = CHASTE_CONST(1.393); // dimensionless + const ValueType var_membrane__Cm_converted = CHASTE_CONST(0.001) * mParameters[4]; // uF + const ValueType var_membrane__F = 96487; // coulomb_per_mole + const ValueType var_membrane__R = 8314; // millijoule_per_mole_kelvin + const ValueType var_membrane__T = 308; // kelvin + const ValueType var_Ca_independent_transient_outward_K_current__E_K = var_membrane__R * var_membrane__T * CHASTE_MATH::Log(var_chaste_interface__cleft_space_ion_concentrations__K_c / var_chaste_interface__intracellular_ion_concentrations__K_i) / var_membrane__F; // millivolt + const ValueType var_background_currents__E_Ca = CHASTE_CONST(0.5) * var_membrane__R * var_membrane__T * CHASTE_MATH::Log(mParameters[1] / var_chaste_interface__intracellular_ion_concentrations__Ca_i) / var_membrane__F; // millivolt + const ValueType var_Ca_independent_transient_outward_K_current__i_sus = (((var_environment__CT == 1) && (var_environment__PM == 0)) ? (CHASTE_CONST(0.098000000000000004) + CHASTE_CONST(0.0014) * var_chaste_interface__membrane__V) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (CHASTE_CONST(0.16799999999999998) + CHASTE_CONST(0.0023999999999999998) * var_chaste_interface__membrane__V) : (CHASTE_CONST(0.070000000000000007) + CHASTE_CONST(0.001) * var_chaste_interface__membrane__V))); // picoA + const ValueType var_Ca_independent_transient_outward_K_current__i_to = (((var_environment__CT == 1) && (var_environment__PM == 0)) ? (CHASTE_CONST(0.20000000000000001) * (CHASTE_CONST(0.40000000000000002) + CHASTE_CONST(0.59999999999999998) * CHASTE_MATH::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) * (CHASTE_CONST(0.58999999999999997) * CHASTE_MATH::Pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s1_gate__s1, 3) + CHASTE_CONST(0.40999999999999998) * CHASTE_MATH::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)) ? (CHASTE_CONST(0.34999999999999998) * (CHASTE_CONST(0.40000000000000002) + CHASTE_CONST(0.59999999999999998) * CHASTE_MATH::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) * (CHASTE_CONST(0.58999999999999997) * CHASTE_MATH::Pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s1_gate__s1, 3) + CHASTE_CONST(0.40999999999999998) * CHASTE_MATH::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) : ((CHASTE_CONST(0.40000000000000002) + CHASTE_CONST(0.59999999999999998) * CHASTE_MATH::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) * (CHASTE_CONST(0.58999999999999997) * CHASTE_MATH::Pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s1_gate__s1, 3) + CHASTE_CONST(0.40999999999999998) * CHASTE_MATH::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 ValueType var_L_type_Ca_channel__d_prime = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.9166666666666667) - CHASTE_CONST(0.083333333333333329) * var_chaste_interface__membrane__V)); // dimensionless + const ValueType var_L_type_Ca_channel__i_Ca_L = (((var_environment__CT == 1) && (var_environment__PM == 0)) ? (CHASTE_CONST(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)) ? (CHASTE_CONST(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 ValueType var_Na_Ca_ion_exchanger_current__i_NaCa = (CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mParameters[1] * CHASTE_MATH::Exp(var_Na_Ca_ion_exchanger_current__gamma * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - CHASTE_MATH::Pow(mParameters[2], 3) * var_chaste_interface__intracellular_ion_concentrations__Ca_i * CHASTE_MATH::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 + (CHASTE_MATH::Pow(mParameters[2], 3) * var_chaste_interface__intracellular_ion_concentrations__Ca_i + CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mParameters[1]) * var_Na_Ca_ion_exchanger_current__d_NaCa); // picoA + const ValueType 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 ValueType var_background_currents__i_B_Ca = (((var_environment__CT == 1) && (var_environment__PM == 0)) ? (CHASTE_CONST(2.0000000000000002e-5) * var_chaste_interface__membrane__V - CHASTE_CONST(2.0000000000000002e-5) * var_background_currents__E_Ca) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (CHASTE_CONST(3.0000000000000001e-5) * var_chaste_interface__membrane__V - CHASTE_CONST(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 ValueType 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 ValueType 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 ValueType var_inward_rectifier__i_K1 = (((var_environment__CT == 1) && (var_environment__PM == 0)) ? (2 * CHASTE_MATH::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 + CHASTE_MATH::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))) * CHASTE_MATH::Pow((var_chaste_interface__cleft_space_ion_concentrations__K_c + var_inward_rectifier__KmK1), 3))) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (CHASTE_CONST(2.5) * CHASTE_MATH::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 + CHASTE_MATH::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))) * CHASTE_MATH::Pow((var_chaste_interface__cleft_space_ion_concentrations__K_c + var_inward_rectifier__KmK1), 3))) : (CHASTE_MATH::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 + CHASTE_MATH::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))) * CHASTE_MATH::Pow((var_chaste_interface__cleft_space_ion_concentrations__K_c + var_inward_rectifier__KmK1), 3))))); // picoA + const ValueType var_membrane__i_Stim_converted = CHASTE_STIM(var_chaste_interface__environment__time_converted); // uA_per_cm2 + const ValueType var_membrane__i_Stim = 1000000 * var_membrane__Cm_converted * var_membrane__i_Stim_converted / CHASTE_CAP(); // picoA + const ValueType var_sarcolemmal_calcium_pump_current__i_CaP_max = CHASTE_CONST(0.0095090000000000001); // picoA + const ValueType var_sarcolemmal_calcium_pump_current__k_CaP = CHASTE_CONST(0.00020000000000000001); // millimolar + const ValueType 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 ValueType var_sodium_current__E_Na = var_membrane__R * var_membrane__T * CHASTE_MATH::Log(mParameters[2] / var_chaste_interface__intracellular_ion_concentrations__Na_i) / var_membrane__F; // millivolt + const ValueType var_background_currents__i_B_Na = (((var_environment__CT == 1) && (var_environment__PM == 0)) ? (CHASTE_CONST(2.0000000000000002e-5) * var_chaste_interface__membrane__V - CHASTE_CONST(2.0000000000000002e-5) * var_sodium_current__E_Na) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (CHASTE_CONST(3.0000000000000001e-5) * var_chaste_interface__membrane__V - CHASTE_CONST(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 ValueType var_sodium_current__i_Na = (((var_chaste_interface__membrane__V >= -CHASTE_CONST(2.6539450910485349e-6)) && (var_chaste_interface__membrane__V <= CHASTE_CONST(2.6539450910485349e-6))) ? (CHASTE_CONST(188398.77346612973) * (CHASTE_CONST(2.6539450910485349e-6) + var_chaste_interface__membrane__V) * (CHASTE_CONST(0.0096486999999999996) * CHASTE_MATH::Pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8) - CHASTE_MATH::Log(mParameters[2] / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (CHASTE_CONST(0.36499999999999999) * var_chaste_interface__sodium_current_h2_gate__h2 + CHASTE_CONST(0.63500000000000001) * var_chaste_interface__sodium_current_h1_gate__h1) * mParameters[2] * mParameters[5] / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) + CHASTE_CONST(0.0096486999999999996) * CHASTE_MATH::Pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8) - CHASTE_MATH::Log(mParameters[2] / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (CHASTE_CONST(0.36499999999999999) * var_chaste_interface__sodium_current_h2_gate__h2 + CHASTE_CONST(0.63500000000000001) * var_chaste_interface__sodium_current_h1_gate__h1) * mParameters[2] * mParameters[5] / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) - CHASTE_CONST(0.0096486999999999996) * CHASTE_MATH::Pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8) - CHASTE_MATH::Log(mParameters[2] / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (CHASTE_CONST(0.36499999999999999) * var_chaste_interface__sodium_current_h2_gate__h2 + CHASTE_CONST(0.63500000000000001) * var_chaste_interface__sodium_current_h1_gate__h1) * mParameters[2] * mParameters[5] / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) : (CHASTE_CONST(3635.606491085292) * CHASTE_MATH::Pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + CHASTE_MATH::Exp(CHASTE_CONST(0.037679754693225945) * var_chaste_interface__membrane__V - CHASTE_MATH::Log(mParameters[2] / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (CHASTE_CONST(0.36499999999999999) * var_chaste_interface__sodium_current_h2_gate__h2 + CHASTE_CONST(0.63500000000000001) * var_chaste_interface__sodium_current_h1_gate__h1) * mParameters[2] * var_chaste_interface__membrane__V * mParameters[5] / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(0.037679754693225945) * var_chaste_interface__membrane__V)))); // picoA + const ValueType var_sodium_potassium_pump__i_NaK_max = CHASTE_CONST(0.064409999999999995); // picoA + const ValueType var_sodium_potassium_pump__k_NaK_K = 1; // millimolar + const ValueType var_sodium_potassium_pump__k_NaK_Na = 11; // millimolar + const ValueType var_sodium_potassium_pump__i_p = CHASTE_CONST(1.6000000000000001) * CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, CHASTE_CONST(1.5)) * var_chaste_interface__cleft_space_ion_concentrations__K_c * var_sodium_potassium_pump__i_NaK_max / ((CHASTE_CONST(1.5) + CHASTE_MATH::Exp(-CHASTE_CONST(1.5) - CHASTE_CONST(0.025000000000000001) * var_chaste_interface__membrane__V)) * (CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, CHASTE_CONST(1.5)) + CHASTE_MATH::Pow(var_sodium_potassium_pump__k_NaK_Na, CHASTE_CONST(1.5))) * (var_chaste_interface__cleft_space_ion_concentrations__K_c + var_sodium_potassium_pump__k_NaK_K)); // picoA + const ValueType 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 ValueType d_dt_chaste_interface_var_membrane__V = CHASTE_CONST(0.001) * var_membrane__V_orig_deriv; // millivolt / millisecond + + rY[0] += mDt*d_dt_chaste_interface_var_membrane__V; +} + +#include "ChasteCpuMacros.hpp" +#endif // CELLASLANIDI_ATRIAL_MODEL_2009FROMCELLMLBACKWARDEULERKERNELS_HPP_ \ No newline at end of file diff --git a/chaste_codegen/data/tests/chaste_reference_models/BE/bondarenko_szigeti_bett_kim_rasmusson_2004_apicalKernels.hpp b/chaste_codegen/data/tests/chaste_reference_models/BE/bondarenko_szigeti_bett_kim_rasmusson_2004_apicalKernels.hpp new file mode 100644 index 000000000..7909e7114 --- /dev/null +++ b/chaste_codegen/data/tests/chaste_reference_models/BE/bondarenko_szigeti_bett_kim_rasmusson_2004_apicalKernels.hpp @@ -0,0 +1,532 @@ +#ifndef CELLBONDARENKO_SZIGETI_BETT_KIM_RASMUSSON_2004_APICALFROMCELLMLBACKWARDEULERKERNELS_HPP_ +#define CELLBONDARENKO_SZIGETI_BETT_KIM_RASMUSSON_2004_APICALFROMCELLMLBACKWARDEULERKERNELS_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 "MathsCustomFunctions.hpp" +#include "ChasteDeviceMacros.hpp" + + +template +DEVICE +void Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEuler::SolveClosedFormVarsDevice(ValueType rY[Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEuler::TOTAL_SIZE], + ValueType mDt, + const ValueType mParameters[], + bool mSetVoltageDerivativeToZero, + ValueType mFixedVoltage, + ValueType capacitance) +{ + ValueType var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_THIS(mFixedVoltage) : rY[0]); + // Units: millivolt; Initial value: -82.4202 + ValueType var_chaste_interface__fast_transient_outward_potassium_current__ato_f = rY[28]; + // Units: dimensionless; Initial value: 0.00265563 + ValueType var_chaste_interface__fast_transient_outward_potassium_current__ito_f = rY[29]; + // Units: dimensionless; Initial value: 0.999977 + ValueType var_chaste_interface__slow_transient_outward_potassium_current__ato_s = rY[30]; + // Units: dimensionless; Initial value: 0.000417069 + ValueType var_chaste_interface__slow_transient_outward_potassium_current__ito_s = rY[31]; + // Units: dimensionless; Initial value: 0.998543 + ValueType var_chaste_interface__slow_delayed_rectifier_potassium_current__nKs = rY[32]; + // Units: dimensionless; Initial value: 0.000262753 + ValueType var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_potassium_current__aur = rY[33]; + // Units: dimensionless; Initial value: 0.000417069 + ValueType var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_potassium_current__iur = rY[34]; + // Units: dimensionless; Initial value: 0.998543 + ValueType var_chaste_interface__non_inactivating_steady_state_potassium_current__aKss = rY[35]; + // Units: dimensionless; Initial value: 0.000417069 + + const ValueType var_fast_transient_outward_potassium_current__alpha_a = CHASTE_CONST(0.18064) * CHASTE_MATH::Exp(CHASTE_CONST(1.0731000000000002) + CHASTE_CONST(0.035770000000000003) * var_chaste_interface__membrane__V);const ValueType var_fast_transient_outward_potassium_current__alpha_i = CHASTE_CONST(0.00015200000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(1.9285714285714286) - CHASTE_CONST(0.14285714285714285) * var_chaste_interface__membrane__V) / (1 + CHASTE_CONST(0.0067083000000000004) * CHASTE_MATH::Exp(-CHASTE_CONST(4.7857142857142856) - CHASTE_CONST(0.14285714285714285) * var_chaste_interface__membrane__V));const ValueType var_fast_transient_outward_potassium_current__beta_a = CHASTE_CONST(0.39560000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(1.8711) - CHASTE_CONST(0.062370000000000002) * var_chaste_interface__membrane__V);const ValueType var_fast_transient_outward_potassium_current__beta_i = CHASTE_CONST(0.00095) * CHASTE_MATH::Exp(CHASTE_CONST(4.7857142857142856) + CHASTE_CONST(0.14285714285714285) * var_chaste_interface__membrane__V) / (1 + CHASTE_CONST(0.051334999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(4.7857142857142856) + CHASTE_CONST(0.14285714285714285) * var_chaste_interface__membrane__V));const ValueType var_non_inactivating_steady_state_potassium_current__tau_Kss = CHASTE_CONST(13.17) + CHASTE_CONST(39.299999999999997) * CHASTE_MATH::Exp(-CHASTE_CONST(0.086199999999999999) * var_chaste_interface__membrane__V);const ValueType var_slow_delayed_rectifier_potassium_current__alpha_n = (((var_chaste_interface__membrane__V >= -CHASTE_CONST(26.500000781250002)) && (var_chaste_interface__membrane__V <= -CHASTE_CONST(26.499999218749998))) ? (-CHASTE_CONST(3.7604140624912359e-12) / (1 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999766942e-8))) + CHASTE_CONST(640000.00000149151) * (CHASTE_CONST(26.500000781250002) + var_chaste_interface__membrane__V) * (CHASTE_CONST(3.7604140624912359e-12) / (1 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999766942e-8))) + CHASTE_CONST(3.7604140624912359e-12) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999766942e-8))))) : (CHASTE_CONST(4.8133299999999997e-6) * (CHASTE_CONST(26.5) + var_chaste_interface__membrane__V) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(3.3919999999999999) - CHASTE_CONST(0.128) * var_chaste_interface__membrane__V))));const ValueType var_slow_delayed_rectifier_potassium_current__beta_n = CHASTE_CONST(9.5333299999999997e-5) * CHASTE_MATH::Exp(-CHASTE_CONST(1.0069999999999999) - CHASTE_CONST(0.037999999999999999) * var_chaste_interface__membrane__V);const ValueType var_slow_transient_outward_potassium_current__ass = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.9220779220779218) - CHASTE_CONST(0.12987012987012986) * var_chaste_interface__membrane__V));const ValueType var_slow_transient_outward_potassium_current__iss = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(7.9298245614035094) + CHASTE_CONST(0.17543859649122806) * var_chaste_interface__membrane__V));const ValueType var_slow_transient_outward_potassium_current__tau_ta_s = CHASTE_CONST(2.0579999999999998) + CHASTE_CONST(0.49299999999999999) * CHASTE_MATH::Exp(-CHASTE_CONST(0.062899999999999998) * var_chaste_interface__membrane__V);const ValueType var_slow_transient_outward_potassium_current__tau_ti_s = 270 + 1050 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(7.9298245614035094) + CHASTE_CONST(0.17543859649122806) * var_chaste_interface__membrane__V));const ValueType var_ultra_rapidly_activating_delayed_rectifier_potassium_current__tau_aur = CHASTE_CONST(2.0579999999999998) + CHASTE_CONST(0.49299999999999999) * CHASTE_MATH::Exp(-CHASTE_CONST(0.062899999999999998) * var_chaste_interface__membrane__V);const ValueType var_ultra_rapidly_activating_delayed_rectifier_potassium_current__tau_iur = 1200 - 170 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(7.9298245614035094) + CHASTE_CONST(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)); +} + +template +DEVICE +void Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEuler::FillInitialGuessDevice(ValueType _guess[Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEuler::NONLINEAR_SIZE], + const ValueType rY[Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEuler::TOTAL_SIZE]) +{ + _guess[0] = rY[12];_guess[1] = rY[13];_guess[2] = rY[14];_guess[3] = rY[15];_guess[4] = rY[16];_guess[5] = rY[17];_guess[6] = rY[11];_guess[7] = rY[7];_guess[8] = rY[6];_guess[9] = rY[3];_guess[10] = rY[4];_guess[11] = rY[1];_guess[12] = rY[2];_guess[13] = rY[5];_guess[14] = rY[20];_guess[15] = rY[21];_guess[16] = rY[22];_guess[17] = rY[23];_guess[18] = rY[25];_guess[19] = rY[26];_guess[20] = rY[24];_guess[21] = rY[19];_guess[22] = rY[36];_guess[23] = rY[27];_guess[24] = rY[38];_guess[25] = rY[39];_guess[26] = rY[40];_guess[27] = rY[37];_guess[28] = rY[10];_guess[29] = rY[8];_guess[30] = rY[9];_guess[31] = rY[18]; +} + +template +DEVICE +void Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEuler::ScatterSolutionDevice(const ValueType _guess[Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEuler::NONLINEAR_SIZE], + ValueType rY[Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEuler::TOTAL_SIZE]) +{ + 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]; +} + +template +DEVICE +void Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEuler::ComputeResidualDevice(ValueType var_chaste_interface__environment__time, + const ValueType rCurrentGuess[Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEuler::NONLINEAR_SIZE], + const ValueType rY[], + ValueType rResidual[Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEuler::NONLINEAR_SIZE], + ValueType mDt, + const ValueType mParameters[], + bool mSetVoltageDerivativeToZero, + ValueType mFixedVoltage, + ValueType capacitance, + const DeviceStimulusFunctor stim) +{ + ValueType var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_THIS(mFixedVoltage) : rY[0]); // Units: millivolt + ValueType var_chaste_interface__fast_transient_outward_potassium_current__ato_f = rY[28]; // Units: dimensionless + ValueType var_chaste_interface__fast_transient_outward_potassium_current__ito_f = rY[29]; // Units: dimensionless + ValueType var_chaste_interface__slow_transient_outward_potassium_current__ato_s = rY[30]; // Units: dimensionless + ValueType var_chaste_interface__slow_transient_outward_potassium_current__ito_s = rY[31]; // Units: dimensionless + ValueType var_chaste_interface__slow_delayed_rectifier_potassium_current__nKs = rY[32]; // Units: dimensionless + ValueType var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_potassium_current__aur = rY[33]; // Units: dimensionless + ValueType var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_potassium_current__iur = rY[34]; // Units: dimensionless + ValueType var_chaste_interface__non_inactivating_steady_state_potassium_current__aKss = rY[35]; // Units: dimensionless + + ValueType var_chaste_interface__L_type_calcium_current__C2 = rCurrentGuess[0]; + ValueType var_chaste_interface__L_type_calcium_current__C3 = rCurrentGuess[1]; + ValueType var_chaste_interface__L_type_calcium_current__C4 = rCurrentGuess[2]; + ValueType var_chaste_interface__L_type_calcium_current__I1 = rCurrentGuess[3]; + ValueType var_chaste_interface__L_type_calcium_current__I2 = rCurrentGuess[4]; + ValueType var_chaste_interface__L_type_calcium_current__I3 = rCurrentGuess[5]; + ValueType var_chaste_interface__L_type_calcium_current__O = rCurrentGuess[6]; + ValueType var_chaste_interface__calcium_buffering__HTRPN_Ca = rCurrentGuess[7]; + ValueType var_chaste_interface__calcium_buffering__LTRPN_Ca = rCurrentGuess[8]; + ValueType var_chaste_interface__calcium_concentration__CaJSR = rCurrentGuess[9]; + ValueType var_chaste_interface__calcium_concentration__CaNSR = rCurrentGuess[10]; + ValueType var_chaste_interface__calcium_concentration__Cai_converted = rCurrentGuess[11]; + ValueType var_chaste_interface__calcium_concentration__Cass = rCurrentGuess[12]; + ValueType var_chaste_interface__calcium_fluxes__P_RyR = rCurrentGuess[13]; + ValueType var_chaste_interface__fast_sodium_current__C_Na1 = rCurrentGuess[14]; + ValueType var_chaste_interface__fast_sodium_current__C_Na2 = rCurrentGuess[15]; + ValueType var_chaste_interface__fast_sodium_current__I1_Na = rCurrentGuess[16]; + ValueType var_chaste_interface__fast_sodium_current__I2_Na = rCurrentGuess[17]; + ValueType var_chaste_interface__fast_sodium_current__IC_Na2 = rCurrentGuess[18]; + ValueType var_chaste_interface__fast_sodium_current__IC_Na3 = rCurrentGuess[19]; + ValueType var_chaste_interface__fast_sodium_current__IF_Na = rCurrentGuess[20]; + ValueType var_chaste_interface__fast_sodium_current__O_Na = rCurrentGuess[21]; + ValueType var_chaste_interface__non_inactivating_steady_state_potassium_current__iKss = rCurrentGuess[22]; + ValueType var_chaste_interface__potassium_concentration__Ki = rCurrentGuess[23]; + ValueType var_chaste_interface__rapid_delayed_rectifier_potassium_current__C_K1 = rCurrentGuess[24]; + ValueType var_chaste_interface__rapid_delayed_rectifier_potassium_current__C_K2 = rCurrentGuess[25]; + ValueType var_chaste_interface__rapid_delayed_rectifier_potassium_current__I_K = rCurrentGuess[26]; + ValueType var_chaste_interface__rapid_delayed_rectifier_potassium_current__O_K = rCurrentGuess[27]; + ValueType var_chaste_interface__ryanodine_receptors__P_C2 = rCurrentGuess[28]; + ValueType var_chaste_interface__ryanodine_receptors__P_O1 = rCurrentGuess[29]; + ValueType var_chaste_interface__ryanodine_receptors__P_O2 = rCurrentGuess[30]; + ValueType var_chaste_interface__sodium_concentration__Nai = rCurrentGuess[31]; + + const ValueType d_dt_chaste_interface_var_non_inactivating_steady_state_potassium_current__iKss = 0; // 1 / millisecond + const ValueType var_L_type_calcium_current__E_CaL = 63; // millivolt + const ValueType var_L_type_calcium_current__Kpc_half = 20; // micromolar + const ValueType var_L_type_calcium_current__Kpc_max = CHASTE_CONST(0.23324); // per_millisecond + const ValueType var_L_type_calcium_current__Kpcb = CHASTE_CONST(0.00050000000000000001); // per_millisecond + const ValueType 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 ValueType var_L_type_calcium_current__i_CaL_max = 7; // picoA_per_picoF + const ValueType var_calcium_background_current__g_Cab = CHASTE_CONST(0.00036699999999999998); // milliS_per_microF + const ValueType var_calcium_buffering__HTRPN_tot = 140; // micromolar + const ValueType var_calcium_buffering__LTRPN_tot = 70; // micromolar + const ValueType var_calcium_concentration__CMDN_tot = 50; // micromolar + const ValueType var_calcium_concentration__CSQN_tot = 15000; // micromolar + const ValueType var_calcium_concentration__Cai = 1000 * var_chaste_interface__calcium_concentration__Cai_converted; // micromolar + const ValueType 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 ValueType var_calcium_concentration__Km_CMDN = CHASTE_CONST(0.23799999999999999); // micromolar + const ValueType var_calcium_concentration__Bi = 1 / (1 + var_calcium_concentration__CMDN_tot * var_calcium_concentration__Km_CMDN / CHASTE_MATH::Pow((var_calcium_concentration__Cai + var_calcium_concentration__Km_CMDN), 2)); // dimensionless + const ValueType var_calcium_concentration__Bss = 1 / (1 + var_calcium_concentration__CMDN_tot * var_calcium_concentration__Km_CMDN / CHASTE_MATH::Pow((var_chaste_interface__calcium_concentration__Cass + var_calcium_concentration__Km_CMDN), 2)); // dimensionless + const ValueType var_calcium_concentration__Km_CSQN = 800; // micromolar + const ValueType var_calcium_concentration__BJSR = 1 / (1 + var_calcium_concentration__CSQN_tot * var_calcium_concentration__Km_CSQN / CHASTE_MATH::Pow((var_chaste_interface__calcium_concentration__CaJSR + var_calcium_concentration__Km_CSQN), 2)); // dimensionless + const ValueType var_calcium_fluxes__Km_up = CHASTE_CONST(0.5); // micromolar + const ValueType var_calcium_fluxes__k_minus_htrpn = CHASTE_CONST(3.1999999999999999e-5); // per_millisecond + const ValueType var_calcium_fluxes__k_minus_ltrpn = CHASTE_CONST(0.019599999999999999); // per_millisecond + const ValueType var_calcium_fluxes__k_plus_htrpn = CHASTE_CONST(0.0023700000000000001); // per_micromolar_millisecond + const ValueType 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 ValueType var_calcium_fluxes__k_plus_ltrpn = CHASTE_CONST(0.0327); // per_micromolar_millisecond + const ValueType 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 ValueType 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 ValueType var_calcium_fluxes__tau_tr = 20; // millisecond + const ValueType 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 ValueType var_calcium_fluxes__tau_xfer = 8; // millisecond + const ValueType var_calcium_fluxes__J_xfer = (-var_calcium_concentration__Cai + var_chaste_interface__calcium_concentration__Cass) / var_calcium_fluxes__tau_xfer; // micromolar_per_millisecond + const ValueType var_calcium_fluxes__J_leak = (-var_calcium_concentration__Cai + var_chaste_interface__calcium_concentration__CaNSR) * mParameters[0]; // micromolar_per_millisecond + const ValueType var_calcium_fluxes__J_up = CHASTE_MATH::Pow(var_calcium_concentration__Cai, 2) * mParameters[2] / (CHASTE_MATH::Pow(var_calcium_concentration__Cai, 2) + CHASTE_MATH::Pow(var_calcium_fluxes__Km_up, 2)); // micromolar_per_millisecond + const ValueType var_calcium_pump_current__Km_pCa = CHASTE_CONST(0.5); // micromolar + const ValueType var_calcium_pump_current__i_pCa_max = 1; // picoA_per_picoF + const ValueType var_calcium_pump_current__i_pCa = CHASTE_MATH::Pow(var_calcium_concentration__Cai, 2) * var_calcium_pump_current__i_pCa_max / (CHASTE_MATH::Pow(var_calcium_concentration__Cai, 2) + CHASTE_MATH::Pow(var_calcium_pump_current__Km_pCa, 2)); // picoA_per_picoF + const ValueType 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 ValueType var_membrane__Acap = CHASTE_CONST(0.00015339999999999999); // cm2 + const ValueType var_membrane__F = CHASTE_CONST(96.5); // coulomb_per_millimole + const ValueType var_membrane__R = CHASTE_CONST(8.3140000000000001); // joule_per_mole_kelvin + const ValueType var_membrane__T = 298; // kelvin + const ValueType var_calcium_background_current__E_CaN = CHASTE_CONST(0.5) * var_membrane__R * var_membrane__T * CHASTE_MATH::Log(mParameters[4] / var_calcium_concentration__Cai) / var_membrane__F; // millivolt + const ValueType var_L_type_calcium_current__Kpcf = 13 - 13 * CHASTE_MATH::Exp(-CHASTE_CONST(2.1025) * CHASTE_MATH::Pow((1 + CHASTE_CONST(0.068965517241379309) * var_chaste_interface__membrane__V), 2)); // per_millisecond + const ValueType var_L_type_calcium_current__alpha = CHASTE_CONST(0.40000000000000002) * (1 + CHASTE_CONST(0.69999999999999996) * CHASTE_MATH::Exp(-160 * CHASTE_MATH::Pow((1 + CHASTE_CONST(0.025000000000000001) * var_chaste_interface__membrane__V), 2)) - CHASTE_CONST(0.75) * CHASTE_MATH::Exp(-CHASTE_MATH::Pow((1 + CHASTE_CONST(0.050000000000000003) * var_chaste_interface__membrane__V), 2))) * CHASTE_MATH::Exp(CHASTE_CONST(1.2) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V) / (1 + CHASTE_CONST(0.12) * CHASTE_MATH::Exp(CHASTE_CONST(1.2) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V)); // per_millisecond + const ValueType var_L_type_calcium_current__beta = CHASTE_CONST(0.050000000000000003) * CHASTE_MATH::Exp(-CHASTE_CONST(0.92307692307692313) - CHASTE_CONST(0.076923076923076927) * var_chaste_interface__membrane__V); // per_millisecond + const ValueType 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 ValueType 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 ValueType 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 + CHASTE_CONST(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 - CHASTE_CONST(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 + CHASTE_CONST(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 - CHASTE_CONST(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 ValueType 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 + CHASTE_CONST(0.001) * var_chaste_interface__L_type_calcium_current__I3 * var_L_type_calcium_current__alpha - CHASTE_CONST(0.001) * var_chaste_interface__L_type_calcium_current__I1 * var_L_type_calcium_current__Kpcf + CHASTE_CONST(0.01) * var_chaste_interface__L_type_calcium_current__C4 * var_L_type_calcium_current__alpha * var_L_type_calcium_current__gamma - CHASTE_CONST(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 ValueType 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 + CHASTE_CONST(0.001) * var_L_type_calcium_current__Kpcf * var_chaste_interface__L_type_calcium_current__O + CHASTE_CONST(0.002) * var_chaste_interface__L_type_calcium_current__C4 * var_L_type_calcium_current__Kpcf - CHASTE_CONST(0.001) * var_chaste_interface__L_type_calcium_current__I2 * var_L_type_calcium_current__alpha - CHASTE_CONST(0.0080000000000000002) * var_chaste_interface__L_type_calcium_current__I2 * var_L_type_calcium_current__beta; // 1 / millisecond + const ValueType 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 + CHASTE_CONST(0.001) * var_chaste_interface__L_type_calcium_current__I1 * var_L_type_calcium_current__Kpcf - CHASTE_CONST(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 ValueType 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 + CHASTE_CONST(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 - CHASTE_CONST(0.001) * var_L_type_calcium_current__Kpcf * var_chaste_interface__L_type_calcium_current__O; // 1 / millisecond + const ValueType 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 ValueType d_dt_chaste_interface_var_calcium_fluxes__P_RyR = -CHASTE_CONST(0.040000000000000001) * var_chaste_interface__calcium_fluxes__P_RyR - CHASTE_CONST(0.10000000000000001) * var_L_type_calcium_current__i_CaL * CHASTE_MATH::Exp(-CHASTE_CONST(0.038580246913580245) * CHASTE_MATH::Pow((-1 + CHASTE_CONST(0.20000000000000001) * var_chaste_interface__membrane__V), 2)) / var_L_type_calcium_current__i_CaL_max; // 1 / millisecond + const ValueType 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 ValueType var_fast_sodium_current__alpha_Na11 = CHASTE_CONST(3.802) / (CHASTE_CONST(0.20000000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(0.016666666666666666) - CHASTE_CONST(0.0066666666666666671) * var_chaste_interface__membrane__V) + CHASTE_CONST(0.1027) * CHASTE_MATH::Exp(-CHASTE_CONST(0.14705882352941177) - CHASTE_CONST(0.058823529411764705) * var_chaste_interface__membrane__V)); // per_millisecond + const ValueType var_fast_sodium_current__alpha_Na12 = CHASTE_CONST(3.802) / (CHASTE_CONST(0.1027) * CHASTE_MATH::Exp(-CHASTE_CONST(0.16666666666666666) - CHASTE_CONST(0.066666666666666666) * var_chaste_interface__membrane__V) + CHASTE_CONST(0.23000000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(0.016666666666666666) - CHASTE_CONST(0.0066666666666666671) * var_chaste_interface__membrane__V)); // per_millisecond + const ValueType var_fast_sodium_current__alpha_Na13 = CHASTE_CONST(3.802) / (CHASTE_CONST(0.25) * CHASTE_MATH::Exp(-CHASTE_CONST(0.016666666666666666) - CHASTE_CONST(0.0066666666666666671) * var_chaste_interface__membrane__V) + CHASTE_CONST(0.1027) * CHASTE_MATH::Exp(-CHASTE_CONST(0.20833333333333334) - CHASTE_CONST(0.083333333333333329) * var_chaste_interface__membrane__V)); // per_millisecond + const ValueType var_fast_sodium_current__alpha_Na2 = 1 / (CHASTE_CONST(0.39395599999999997) + CHASTE_CONST(0.188495) * CHASTE_MATH::Exp(-CHASTE_CONST(0.42168674698795178) + CHASTE_CONST(0.060240963855421679) * mParameters[10] - CHASTE_CONST(0.060240963855421679) * var_chaste_interface__membrane__V)); // per_millisecond + const ValueType var_fast_sodium_current__alpha_Na3 = CHASTE_CONST(6.9999999999999997e-7) * CHASTE_MATH::Exp(-CHASTE_CONST(0.90909090909090906) - CHASTE_CONST(0.12987012987012986) * var_chaste_interface__membrane__V); // per_millisecond + const ValueType var_fast_sodium_current__alpha_Na4 = CHASTE_CONST(0.001) * var_fast_sodium_current__alpha_Na2; // per_millisecond + const ValueType var_fast_sodium_current__alpha_Na5 = CHASTE_CONST(1.0526315789473684e-5) * var_fast_sodium_current__alpha_Na2; // per_millisecond + const ValueType var_fast_sodium_current__beta_Na11 = CHASTE_CONST(0.19170000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(0.12315270935960591) - CHASTE_CONST(0.04926108374384236) * var_chaste_interface__membrane__V); // per_millisecond + const ValueType var_fast_sodium_current__beta_Na12 = CHASTE_CONST(0.20000000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.12315270935960591) - CHASTE_CONST(0.04926108374384236) * var_chaste_interface__membrane__V); // per_millisecond + const ValueType var_fast_sodium_current__beta_Na13 = CHASTE_CONST(0.22) * CHASTE_MATH::Exp(CHASTE_CONST(0.36945812807881773) - CHASTE_CONST(0.04926108374384236) * var_chaste_interface__membrane__V); // per_millisecond + const ValueType var_fast_sodium_current__beta_Na3 = CHASTE_CONST(0.008539999999999999) + CHASTE_CONST(2.0000000000000002e-5) * var_chaste_interface__membrane__V; // per_millisecond + const ValueType 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 ValueType 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 ValueType 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 ValueType 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 ValueType 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 ValueType 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 ValueType var_fast_sodium_current__beta_Na4 = var_fast_sodium_current__alpha_Na3; // per_millisecond + const ValueType 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 ValueType var_fast_sodium_current__beta_Na5 = CHASTE_CONST(0.02) * var_fast_sodium_current__alpha_Na3; // per_millisecond + const ValueType 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 ValueType 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 ValueType var_membrane__VJSR = CHASTE_CONST(1.1999999999999999e-7); // microlitre + const ValueType var_membrane__VNSR = CHASTE_CONST(2.0980000000000001e-6); // microlitre + const ValueType var_membrane__Vmyo = CHASTE_CONST(2.584e-5); // microlitre + const ValueType 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 ValueType var_membrane__Vss = CHASTE_CONST(1.4849999999999999e-9); // microlitre + const ValueType var_fast_transient_outward_potassium_current__E_K = var_membrane__R * var_membrane__T * CHASTE_MATH::Log(mParameters[5] / var_chaste_interface__potassium_concentration__Ki) / var_membrane__F; // millivolt + const ValueType var_fast_transient_outward_potassium_current__i_Kto_f = CHASTE_MATH::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 ValueType 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 ValueType 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 ValueType var_rapid_delayed_rectifier_potassium_current__alpha_a0 = CHASTE_CONST(0.022348) * CHASTE_MATH::Exp(CHASTE_CONST(0.01176) * var_chaste_interface__membrane__V); // per_millisecond + const ValueType var_rapid_delayed_rectifier_potassium_current__alpha_a1 = CHASTE_CONST(0.013733) * CHASTE_MATH::Exp(CHASTE_CONST(0.038198000000000003) * var_chaste_interface__membrane__V); // per_millisecond + const ValueType var_rapid_delayed_rectifier_potassium_current__alpha_i = CHASTE_CONST(0.090820999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(0.11695499999999999) + CHASTE_CONST(0.023390999999999999) * var_chaste_interface__membrane__V); // per_millisecond + const ValueType var_rapid_delayed_rectifier_potassium_current__beta_a0 = CHASTE_CONST(0.047002000000000002) * CHASTE_MATH::Exp(-CHASTE_CONST(0.063100000000000003) * var_chaste_interface__membrane__V); // per_millisecond + const ValueType var_rapid_delayed_rectifier_potassium_current__beta_a1 = CHASTE_CONST(6.8899999999999994e-5) * CHASTE_MATH::Exp(-CHASTE_CONST(0.041779999999999998) * var_chaste_interface__membrane__V); // per_millisecond + const ValueType var_rapid_delayed_rectifier_potassium_current__beta_i = CHASTE_CONST(0.0064970000000000002) * CHASTE_MATH::Exp(-CHASTE_CONST(0.16339999999999999) - CHASTE_CONST(0.032680000000000001) * var_chaste_interface__membrane__V); // per_millisecond + const ValueType 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 ValueType 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 ValueType var_rapid_delayed_rectifier_potassium_current__kb = CHASTE_CONST(0.036777999999999998); // per_millisecond + const ValueType var_rapid_delayed_rectifier_potassium_current__kf = CHASTE_CONST(0.023761000000000001); // per_millisecond + const ValueType 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 ValueType 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 ValueType 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 ValueType 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 ValueType 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 - CHASTE_CONST(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 ValueType 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 ValueType var_ryanodine_receptors__k_minus_a = CHASTE_CONST(0.071249999999999994); // per_millisecond + const ValueType var_ryanodine_receptors__k_minus_b = CHASTE_CONST(0.96499999999999997); // per_millisecond + const ValueType var_ryanodine_receptors__k_minus_c = CHASTE_CONST(0.00080000000000000004); // per_millisecond + const ValueType var_ryanodine_receptors__k_plus_a = CHASTE_CONST(0.0060749999999999997); // micromolar4_per_millisecond + const ValueType var_ryanodine_receptors__k_plus_b = CHASTE_CONST(0.0040499999999999998); // micromolar3_per_millisecond + const ValueType var_ryanodine_receptors__k_plus_c = CHASTE_CONST(0.0089999999999999993); // per_millisecond + const ValueType 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 ValueType var_ryanodine_receptors__m = 3; // dimensionless + const ValueType d_dt_chaste_interface_var_ryanodine_receptors__P_O2 = -var_chaste_interface__ryanodine_receptors__P_O2 * var_ryanodine_receptors__k_minus_b + CHASTE_MATH::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 ValueType var_ryanodine_receptors__n = 4; // dimensionless + const ValueType 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 + CHASTE_MATH::Pow(var_chaste_interface__calcium_concentration__Cass, var_ryanodine_receptors__n) * var_ryanodine_receptors__P_C1 * var_ryanodine_receptors__k_plus_a - CHASTE_MATH::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 ValueType var_slow_delayed_rectifier_potassium_current__i_Ks = CHASTE_MATH::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 ValueType var_slow_transient_outward_potassium_current__g_Kto_s = 0; // milliS_per_microF + const ValueType 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 ValueType var_sodium_background_current__g_Nab = CHASTE_CONST(0.0025999999999999999); // milliS_per_microF + const ValueType var_sodium_calcium_exchange_current__K_mCa = 1380; // micromolar + const ValueType var_sodium_calcium_exchange_current__K_mNa = 87500; // micromolar + const ValueType var_sodium_calcium_exchange_current__eta = CHASTE_CONST(0.34999999999999998); // dimensionless + const ValueType var_sodium_calcium_exchange_current__k_sat = CHASTE_CONST(0.10000000000000001); // dimensionless + const ValueType var_fast_sodium_current__E_Na = var_membrane__R * var_membrane__T * CHASTE_MATH::Log((mParameters[6] + CHASTE_CONST(0.1111111111111111) * mParameters[5]) / (var_chaste_interface__sodium_concentration__Nai + CHASTE_CONST(0.1111111111111111) * var_chaste_interface__potassium_concentration__Ki)) / var_membrane__F; // millivolt + const ValueType 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 ValueType var_rapid_delayed_rectifier_potassium_current__i_Kr = (-var_membrane__R * var_membrane__T * CHASTE_MATH::Log((mParameters[5] + CHASTE_CONST(0.020408163265306124) * mParameters[6]) / (var_chaste_interface__potassium_concentration__Ki + CHASTE_CONST(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 ValueType 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 ValueType var_sodium_calcium_exchange_current__i_NaCa = (CHASTE_MATH::Pow(var_chaste_interface__sodium_concentration__Nai, 3) * mParameters[4] * CHASTE_MATH::Exp(var_membrane__F * var_chaste_interface__membrane__V * var_sodium_calcium_exchange_current__eta / (var_membrane__R * var_membrane__T)) - CHASTE_MATH::Pow(mParameters[6], 3) * var_calcium_concentration__Cai * CHASTE_MATH::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 * CHASTE_MATH::Exp((-1 + var_sodium_calcium_exchange_current__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (CHASTE_MATH::Pow(mParameters[6], 3) + CHASTE_MATH::Pow(var_sodium_calcium_exchange_current__K_mNa, 3)) * (mParameters[4] + var_sodium_calcium_exchange_current__K_mCa)); // picoA_per_picoF + const ValueType var_calcium_concentration__Cai_orig_deriv = (-var_calcium_fluxes__J_trpn - var_calcium_fluxes__J_up - CHASTE_CONST(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 ValueType d_dt_chaste_interface_var_calcium_concentration__Cai_converted = CHASTE_CONST(0.001) * var_calcium_concentration__Cai_orig_deriv; // millimolar / millisecond + const ValueType var_sodium_potassium_pump_current__Km_Ko = 1500; // micromolar + const ValueType var_sodium_potassium_pump_current__Km_Nai = 21000; // micromolar + const ValueType var_sodium_potassium_pump_current__i_NaK_max = CHASTE_CONST(0.88); // picoA_per_picoF + const ValueType var_sodium_potassium_pump_current__sigma = -CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(1.4858841010401188e-5) * mParameters[6]); // dimensionless + const ValueType var_sodium_potassium_pump_current__f_NaK = 1 / (1 + CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(0.10000000000000001) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) + CHASTE_CONST(0.036499999999999998) * var_sodium_potassium_pump_current__sigma * CHASTE_MATH::Exp(-var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))); // dimensionless + const ValueType 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 + CHASTE_MATH::Pow((var_sodium_potassium_pump_current__Km_Nai / var_chaste_interface__sodium_concentration__Nai), CHASTE_CONST(1.5))) * (mParameters[5] + var_sodium_potassium_pump_current__Km_Ko)); // picoA_per_picoF + const ValueType 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 ValueType 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 + CHASTE_MATH::Exp(CHASTE_CONST(0.089599999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.089599999999999999) * var_fast_transient_outward_potassium_current__E_K)) * (210 + mParameters[5])); // picoA_per_picoF + const ValueType var_ultra_rapidly_activating_delayed_rectifier_potassium_current__g_Kur = CHASTE_CONST(0.16); // milliS_per_microF + const ValueType 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 ValueType 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; +} + +template +DEVICE +void Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEuler::ComputeJacobianDevice(ValueType var_chaste_interface__environment__time, + const ValueType rCurrentGuess[Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEuler::NONLINEAR_SIZE], + const ValueType rY[], + ValueType rJacobian[Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEuler::NONLINEAR_SIZE][Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEuler::NONLINEAR_SIZE], + ValueType mDt, + const ValueType mParameters[], + bool mSetVoltageDerivativeToZero, + ValueType mFixedVoltage, + ValueType capacitance, + const DeviceStimulusFunctor stim) +{ + ValueType var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_THIS(mFixedVoltage) : rY[0]); // Units: millivolt + ValueType var_chaste_interface__fast_transient_outward_potassium_current__ato_f = rY[28]; // Units: dimensionless + ValueType var_chaste_interface__fast_transient_outward_potassium_current__ito_f = rY[29]; // Units: dimensionless + ValueType var_chaste_interface__slow_delayed_rectifier_potassium_current__nKs = rY[32]; // Units: dimensionless + ValueType var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_potassium_current__aur = rY[33]; // Units: dimensionless + ValueType var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_potassium_current__iur = rY[34]; // Units: dimensionless + ValueType var_chaste_interface__non_inactivating_steady_state_potassium_current__aKss = rY[35]; // Units: dimensionless + + ValueType var_chaste_interface__L_type_calcium_current__C4 = rCurrentGuess[0]; + ValueType var_chaste_interface__L_type_calcium_current__I2 = rCurrentGuess[1]; + ValueType var_chaste_interface__L_type_calcium_current__O = rCurrentGuess[2]; + ValueType var_chaste_interface__calcium_buffering__HTRPN_Ca = rCurrentGuess[3]; + ValueType var_chaste_interface__calcium_buffering__LTRPN_Ca = rCurrentGuess[4]; + ValueType var_chaste_interface__calcium_concentration__CaJSR = rCurrentGuess[5]; + ValueType var_chaste_interface__calcium_concentration__CaNSR = rCurrentGuess[6]; + ValueType var_chaste_interface__calcium_concentration__Cai_converted = rCurrentGuess[7]; + ValueType var_chaste_interface__calcium_concentration__Cass = rCurrentGuess[8]; + ValueType var_chaste_interface__calcium_fluxes__P_RyR = rCurrentGuess[9]; + ValueType var_chaste_interface__fast_sodium_current__O_Na = rCurrentGuess[10]; + ValueType var_chaste_interface__non_inactivating_steady_state_potassium_current__iKss = rCurrentGuess[11]; + ValueType var_chaste_interface__potassium_concentration__Ki = rCurrentGuess[12]; + ValueType var_chaste_interface__rapid_delayed_rectifier_potassium_current__O_K = rCurrentGuess[13]; + ValueType var_chaste_interface__ryanodine_receptors__P_C2 = rCurrentGuess[14]; + ValueType var_chaste_interface__ryanodine_receptors__P_O1 = rCurrentGuess[15]; + ValueType var_chaste_interface__ryanodine_receptors__P_O2 = rCurrentGuess[16]; + ValueType var_chaste_interface__sodium_concentration__Nai = rCurrentGuess[17]; + + const ValueType var_x0 = CHASTE_MATH::Exp(-CHASTE_CONST(0.92307692307692313) - CHASTE_CONST(0.076923076923076927) * var_chaste_interface__membrane__V); + const ValueType var_x1 = CHASTE_MATH::Exp(CHASTE_CONST(1.2) + CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V); + const ValueType var_x2 = var_x1 * (1 + CHASTE_CONST(0.69999999999999996) * CHASTE_MATH::Exp(-160 * CHASTE_MATH::Pow((1 + CHASTE_CONST(0.025000000000000001) * var_chaste_interface__membrane__V), 2)) - CHASTE_CONST(0.75) * CHASTE_MATH::Exp(-CHASTE_MATH::Pow((1 + CHASTE_CONST(0.050000000000000003) * var_chaste_interface__membrane__V), 2))) / (1 + CHASTE_CONST(0.12) * var_x1); + const ValueType var_x3 = CHASTE_CONST(0.10000000000000001) * var_x0; + const ValueType var_x4 = -CHASTE_CONST(1.6000000000000001) * var_x2; + const ValueType var_x5 = CHASTE_CONST(0.80000000000000004) * var_x2; + const ValueType var_x6 = CHASTE_CONST(0.15000000000000002) * var_x0; + const ValueType var_x7 = CHASTE_MATH::Exp(-CHASTE_CONST(2.1025) * CHASTE_MATH::Pow((1 + CHASTE_CONST(0.068965517241379309) * var_chaste_interface__membrane__V), 2)); + const ValueType var_x8 = CHASTE_CONST(0.026000000000000002) * var_x7; + const ValueType var_x9 = 13 - 13 * var_x7; + const ValueType var_x10 = 1 / (20 + var_chaste_interface__calcium_concentration__Cass); + const ValueType var_x11 = CHASTE_CONST(0.23324) * var_x10; + const ValueType var_x12 = var_x11 * var_chaste_interface__calcium_concentration__Cass; + const ValueType var_x13 = var_x12 * var_x9; + const ValueType var_x14 = CHASTE_CONST(0.40000000000000002) * var_x2; + const ValueType var_x15 = CHASTE_CONST(0.00093296000000000004) * var_x10 * var_x2; + const ValueType var_x16 = var_x15 * var_chaste_interface__calcium_concentration__Cass; + const ValueType var_x17 = CHASTE_CONST(0.00040000000000000002) * var_x0; + const ValueType var_x18 = CHASTE_CONST(0.0001) * var_x0; + const ValueType var_x19 = CHASTE_CONST(0.20000000000000001) * var_x0; + const ValueType var_x20 = var_chaste_interface__calcium_concentration__Cass / CHASTE_MATH::Pow((1 + CHASTE_CONST(0.050000000000000003) * var_chaste_interface__calcium_concentration__Cass), 2); + const ValueType var_x21 = -var_x15 * var_chaste_interface__L_type_calcium_current__C4 + CHASTE_CONST(2.3324000000000003e-6) * var_x2 * var_x20 * var_chaste_interface__L_type_calcium_current__C4; + const ValueType var_x22 = var_x9 * var_chaste_interface__L_type_calcium_current__C4; + const ValueType var_x23 = CHASTE_CONST(0.00058310000000000002) * var_x20; + const ValueType var_x24 = var_x22 * var_x23 - var_x11 * var_x22; + const ValueType var_x25 = CHASTE_CONST(0.013000000000000001) * var_x7; + const ValueType var_x26 = CHASTE_CONST(0.00040000000000000002) * var_x2; + const ValueType var_x27 = var_x23 * var_chaste_interface__L_type_calcium_current__O - var_x11 * var_chaste_interface__L_type_calcium_current__O; + const ValueType var_x28 = CHASTE_CONST(0.013000000000000001) - var_x25; + const ValueType var_x29 = var_x23 * var_chaste_interface__L_type_calcium_current__I2 - var_x11 * var_chaste_interface__L_type_calcium_current__I2; + const ValueType var_x30 = CHASTE_CONST(2.3700000000000001) * var_chaste_interface__calcium_concentration__Cai_converted; + const ValueType var_x31 = CHASTE_CONST(3.1999999999999999e-5) + var_x30; + const ValueType var_x32 = CHASTE_CONST(2.3700000000000001) * var_chaste_interface__calcium_buffering__HTRPN_Ca; + const ValueType var_x33 = CHASTE_CONST(32.699999999999996) * var_chaste_interface__calcium_concentration__Cai_converted; + const ValueType var_x34 = CHASTE_CONST(0.019599999999999999) + var_x33; + const ValueType var_x35 = CHASTE_CONST(32.699999999999996) * var_chaste_interface__calcium_buffering__LTRPN_Ca; + const ValueType var_x36 = 1 + CHASTE_CONST(0.00125) * var_chaste_interface__calcium_concentration__CaJSR; + const ValueType var_x37 = CHASTE_MATH::Pow(var_x36, (-2)); + const ValueType var_x38 = 1 / (1 + CHASTE_CONST(18.75) * var_x37); + const ValueType var_x39 = var_chaste_interface__ryanodine_receptors__P_O1 + var_chaste_interface__ryanodine_receptors__P_O2; + const ValueType var_x40 = var_chaste_interface__calcium_fluxes__P_RyR * mParameters[1]; + const ValueType var_x41 = -var_chaste_interface__calcium_concentration__Cass + var_chaste_interface__calcium_concentration__CaJSR; + const ValueType var_x42 = var_x39 * var_x40; + const ValueType var_x43 = -var_x38 * var_x41; + const ValueType var_x44 = var_x39 * mParameters[1]; + const ValueType var_x45 = var_x40 * var_x43; + const ValueType var_x46 = CHASTE_MATH::Pow(var_chaste_interface__calcium_concentration__Cai_converted, 2); + const ValueType var_x47 = 1000000 * var_x46; + const ValueType var_x48 = 1 / (CHASTE_CONST(0.25) + var_x47); + const ValueType var_x49 = var_x48 * var_chaste_interface__calcium_concentration__Cai_converted; + const ValueType var_x50 = var_x49 * mParameters[2]; + const ValueType var_x51 = CHASTE_MATH::Pow((CHASTE_CONST(2.4999999999999999e-7) + var_x46), (-2)); + const ValueType var_x52 = CHASTE_MATH::Pow(var_chaste_interface__calcium_concentration__Cai_converted, 3); + const ValueType var_x53 = var_x51 * var_x52 * mParameters[2]; + const ValueType var_x54 = CHASTE_CONST(0.00023799999999999998) + var_chaste_interface__calcium_concentration__Cai_converted; + const ValueType var_x55 = 1 + CHASTE_CONST(1.19e-5) / CHASTE_MATH::Pow(var_x54, 2); + const ValueType var_x56 = 1 / var_x55; + const ValueType var_x57 = CHASTE_CONST(0.001) * var_x56; + const ValueType var_x58 = 1 / var_chaste_interface__calcium_concentration__Cai_converted; + const ValueType var_x59 = CHASTE_MATH::Exp(-CHASTE_CONST(0.025317124991725771) * var_chaste_interface__membrane__V); + const ValueType var_x60 = CHASTE_MATH::Pow(mParameters[6], 3); + const ValueType var_x61 = var_x59 * var_x60; + const ValueType var_x62 = mParameters[15] / ((1 + CHASTE_CONST(0.10000000000000001) * var_x59) * (1380 + mParameters[4]) * (CHASTE_CONST(669921875000000.0) + var_x60)); + const ValueType var_x63 = var_x61 * var_x62; + const ValueType var_x64 = 1000 * var_chaste_interface__calcium_concentration__Cai_converted; + const ValueType var_x65 = var_x47 * var_x48; + const ValueType var_x66 = CHASTE_MATH::Exp(CHASTE_CONST(0.013632298072467722) * var_chaste_interface__membrane__V); + const ValueType var_x67 = var_x62 * var_x66 * CHASTE_MATH::Pow(var_chaste_interface__sodium_concentration__Nai, 2) * mParameters[4]; + const ValueType var_x68 = CHASTE_CONST(0.23799999999999999) + var_chaste_interface__calcium_concentration__Cass; + const ValueType var_x69 = CHASTE_MATH::Pow(var_x68, (-2)); + const ValueType var_x70 = 1 / (1 + CHASTE_CONST(11.899999999999999) * var_x69); + const ValueType var_x71 = mParameters[7] * mParameters[8]; + const ValueType var_x72 = CHASTE_CONST(80.808080808080803) * var_chaste_interface__ryanodine_receptors__P_O1 + CHASTE_CONST(80.808080808080803) * var_chaste_interface__ryanodine_receptors__P_O2; + const ValueType var_x73 = var_x40 * var_x70; + const ValueType var_x74 = CHASTE_CONST(80.808080808080803) * var_chaste_interface__calcium_concentration__CaJSR - CHASTE_CONST(80.808080808080803) * var_chaste_interface__calcium_concentration__Cass; + const ValueType var_x75 = var_x73 * var_x74; + const ValueType var_x76 = CHASTE_CONST(0.04926108374384236) * var_chaste_interface__membrane__V; + const ValueType var_x77 = CHASTE_CONST(0.20000000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.12315270935960591) - var_x76); + const ValueType var_x78 = CHASTE_MATH::Exp(-CHASTE_CONST(0.016666666666666666) - CHASTE_CONST(0.0066666666666666671) * var_chaste_interface__membrane__V); + const ValueType var_x79 = 1 / (CHASTE_CONST(0.25) * var_x78 + CHASTE_CONST(0.1027) * CHASTE_MATH::Exp(-CHASTE_CONST(0.20833333333333334) - CHASTE_CONST(0.083333333333333329) * var_chaste_interface__membrane__V)); + const ValueType var_x80 = CHASTE_CONST(3.802) * var_x79; + const ValueType var_x81 = CHASTE_CONST(0.008539999999999999) + CHASTE_CONST(2.0000000000000002e-5) * var_chaste_interface__membrane__V; + const ValueType var_x82 = CHASTE_CONST(3.802) / (CHASTE_CONST(0.1027) * CHASTE_MATH::Exp(-CHASTE_CONST(0.16666666666666666) - CHASTE_CONST(0.066666666666666666) * var_chaste_interface__membrane__V) + CHASTE_CONST(0.23000000000000001) * var_x78); + const ValueType var_x83 = CHASTE_MATH::Exp(-CHASTE_CONST(0.90909090909090906) - CHASTE_CONST(0.12987012987012986) * var_chaste_interface__membrane__V); + const ValueType var_x84 = CHASTE_CONST(6.9999999999999997e-7) * var_x83; + const ValueType var_x85 = CHASTE_MATH::Exp(CHASTE_CONST(0.36945812807881773) - var_x76); + const ValueType var_x86 = CHASTE_CONST(0.22) * var_x85; + const ValueType var_x87 = CHASTE_CONST(3.802) / (CHASTE_CONST(0.20000000000000001) * var_x78 + CHASTE_CONST(0.1027) * CHASTE_MATH::Exp(-CHASTE_CONST(0.14705882352941177) - CHASTE_CONST(0.058823529411764705) * var_chaste_interface__membrane__V)); + const ValueType var_x88 = -var_x87; + const ValueType var_x89 = CHASTE_CONST(0.19170000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(0.12315270935960591) - var_x76); + const ValueType var_x90 = var_x82 + var_x89; + const ValueType var_x91 = var_x81 + var_x87; + const ValueType var_x92 = 1 / (CHASTE_CONST(0.39395599999999997) + CHASTE_CONST(0.188495) * CHASTE_MATH::Exp(-CHASTE_CONST(0.42168674698795178) + CHASTE_CONST(0.060240963855421679) * mParameters[10] - CHASTE_CONST(0.060240963855421679) * var_chaste_interface__membrane__V)); + const ValueType var_x93 = CHASTE_CONST(1.0526315789473684e-5) * var_x92; + const ValueType var_x94 = CHASTE_CONST(1.4e-8) * var_x83; + const ValueType var_x95 = CHASTE_CONST(0.001) * var_x92; + const ValueType var_x96 = -var_x81; + const ValueType var_x97 = CHASTE_CONST(1.2097272727272726e-5) * var_x79 * var_x83 * var_x92 / (var_x81 * var_x85); + const ValueType var_x98 = var_x92; + const ValueType var_x99 = 1 / var_chaste_interface__potassium_concentration__Ki; + const ValueType var_x100 = var_x99 * mParameters[5]; + const ValueType var_x101 = CHASTE_MATH::Log(var_x100); + const ValueType var_x102 = -CHASTE_CONST(25.674321243523316) * var_x101 + var_chaste_interface__membrane__V; + const ValueType var_x103 = var_chaste_interface__non_inactivating_steady_state_potassium_current__aKss * mParameters[12]; + const ValueType var_x104 = mParameters[8] * mParameters[3]; + const ValueType var_x105 = CHASTE_CONST(0.061518471582797281) * var_x104; + const ValueType var_x106 = 1 / (var_chaste_interface__potassium_concentration__Ki + CHASTE_CONST(0.020408163265306124) * var_chaste_interface__sodium_concentration__Nai); + const ValueType var_x107 = var_x106 * var_chaste_interface__rapid_delayed_rectifier_potassium_current__O_K * mParameters[13]; + const ValueType var_x108 = CHASTE_CONST(1.5794450018272976) * var_x99; + const ValueType var_x109 = CHASTE_MATH::Exp(CHASTE_CONST(0.089599999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(2.300419183419689) * var_x101); + const ValueType var_x110 = 1 + var_x109; + const ValueType var_x111 = 1 / (210 + mParameters[5]); + const ValueType var_x112 = 1 / var_chaste_interface__sodium_concentration__Nai; + const ValueType var_x113 = CHASTE_MATH::Pow(var_x112, CHASTE_CONST(1.5)); + const ValueType var_x114 = var_x112 * var_x113 * mParameters[5] / ((1500 + mParameters[5]) * CHASTE_MATH::Pow((CHASTE_CONST(3.2860264730588296e-7) + var_x113), 2) * (1 + CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(0.0038949423064193493) * var_chaste_interface__membrane__V) + CHASTE_CONST(0.036499999999999998) * (-CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(1.4858841010401188e-5) * mParameters[6])) * CHASTE_MATH::Exp(-CHASTE_CONST(0.038949423064193495) * var_chaste_interface__membrane__V))); + const ValueType var_x115 = CHASTE_CONST(0.022348) * CHASTE_MATH::Exp(CHASTE_CONST(0.01176) * var_chaste_interface__membrane__V); + const ValueType var_x116 = -var_x115; + const ValueType var_x117 = CHASTE_CONST(0.013733) * CHASTE_MATH::Exp(CHASTE_CONST(0.038198000000000003) * var_chaste_interface__membrane__V); + const ValueType var_x118 = CHASTE_CONST(6.8899999999999994e-5) * CHASTE_MATH::Exp(-CHASTE_CONST(0.041779999999999998) * var_chaste_interface__membrane__V); + const ValueType var_x119 = CHASTE_CONST(0.0064970000000000002) * CHASTE_MATH::Exp(-CHASTE_CONST(0.16339999999999999) - CHASTE_CONST(0.032680000000000001) * var_chaste_interface__membrane__V); + const ValueType var_x120 = CHASTE_CONST(0.090820999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(0.11695499999999999) + CHASTE_CONST(0.023390999999999999) * var_chaste_interface__membrane__V); + const ValueType var_x121 = CHASTE_CONST(0.012149999999999999) * CHASTE_MATH::Pow(var_chaste_interface__calcium_concentration__Cass, 2) * var_chaste_interface__ryanodine_receptors__P_O1; + const ValueType var_x122 = CHASTE_MATH::Pow(var_chaste_interface__calcium_concentration__Cass, 3); + const ValueType var_x123 = CHASTE_CONST(0.0060749999999999997) * CHASTE_MATH::Pow(var_chaste_interface__calcium_concentration__Cass, 4); + const ValueType var_x124 = CHASTE_CONST(0.0040499999999999998) * var_x122; + const ValueType var_x125 = 1 / (var_chaste_interface__sodium_concentration__Nai + CHASTE_CONST(0.1111111111111111) * var_chaste_interface__potassium_concentration__Ki); + const ValueType var_x126 = var_x125 * var_chaste_interface__fast_sodium_current__O_Na * mParameters[9]; + + rJacobian[0][0] = 1.0 - (mDt * (-CHASTE_CONST(0.050000000000000003) * var_x0 - CHASTE_CONST(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 * (CHASTE_CONST(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 * (-CHASTE_CONST(0.026000000000000002) + var_x8 - var_x13 - var_x14 - var_x16 - var_x6));rJacobian[2][3] = -(mDt * (CHASTE_CONST(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 * (-CHASTE_CONST(0.0135) + var_x25 + var_x0 * (-CHASTE_CONST(0.026000000000000002) + CHASTE_CONST(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 * (CHASTE_CONST(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 * (CHASTE_CONST(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 * (-CHASTE_CONST(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 * (CHASTE_CONST(0.00050000000000000001)));rJacobian[6][4] = -(mDt * (var_x26));rJacobian[6][5] = 0.0;rJacobian[6][6] = 1.0 - (mDt * (-CHASTE_CONST(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 * (CHASTE_CONST(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 * (-CHASTE_CONST(0.050000000000000003) - var_x39 * var_x40) + CHASTE_CONST(0.00013333333333333334) * (CHASTE_CONST(0.050000000000000003) * var_chaste_interface__calcium_concentration__CaNSR - CHASTE_CONST(0.050000000000000003) * var_chaste_interface__calcium_concentration__CaJSR - var_x41 * var_x42) / (CHASTE_MATH::Pow(var_x36, 3) * CHASTE_MATH::Pow((CHASTE_CONST(0.053333333333333337) + var_x37), 2))));rJacobian[9][10] = -(mDt * (CHASTE_CONST(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 * (CHASTE_CONST(0.0028598665395614866)));rJacobian[10][10] = 1.0 - (mDt * (-CHASTE_CONST(0.0028598665395614866) - CHASTE_CONST(12.316491897044804) * mParameters[0]));rJacobian[10][11] = -(mDt * (CHASTE_CONST(12316.491897044803) * mParameters[0] + CHASTE_CONST(24632983.794089608) * var_x50 - CHASTE_CONST(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 * (-CHASTE_CONST(2745.8000000000002) + var_x32 + var_x35 + 2 * var_x53 - 2000000 * var_x50 - 1000 * mParameters[0] + (-CHASTE_CONST(61518.471582797276) * var_x49 - CHASTE_CONST(61.518471582797282) * var_x63 - CHASTE_CONST(0.00014491407891765456) * var_x58 + CHASTE_CONST(0.061518471582797281) * var_x51 * var_x52) * mParameters[8]) + CHASTE_CONST(2.3800000000000001e-8) * (CHASTE_CONST(0.125) * var_chaste_interface__calcium_concentration__Cass + CHASTE_CONST(0.019599999999999999) * var_chaste_interface__calcium_buffering__LTRPN_Ca + CHASTE_CONST(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] - CHASTE_CONST(0.03075923579139864) * (var_x65 + CHASTE_CONST(0.00036699999999999998) * var_chaste_interface__membrane__V - CHASTE_CONST(0.0047112379481865285) * CHASTE_MATH::Log(CHASTE_CONST(0.001) * var_x58 * mParameters[4]) - 2 * var_x62 * (-var_x61 * var_x64 + var_x66 * CHASTE_MATH::Pow(var_chaste_interface__sodium_concentration__Nai, 3) * mParameters[4])) * mParameters[8]) / (CHASTE_MATH::Pow(var_x54, 3) * CHASTE_MATH::Pow(var_x55, 2))));rJacobian[11][12] = -(mDt * (CHASTE_CONST(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 * (CHASTE_CONST(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 * (CHASTE_CONST(33719.579211807191) - CHASTE_CONST(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 * (CHASTE_CONST(2175084.1750841751) * var_x70));rJacobian[12][12] = 1.0 - (mDt * (var_x70 * (-CHASTE_CONST(2175.0841750841751) - var_x40 * var_x72) + CHASTE_CONST(0.16806722689075632) * (CHASTE_CONST(2175084.1750841751) * var_chaste_interface__calcium_concentration__Cai_converted - CHASTE_CONST(2175.0841750841751) * var_chaste_interface__calcium_concentration__Cass - CHASTE_CONST(535.23141606043157) * var_x71 * (-63 + var_chaste_interface__membrane__V) * var_chaste_interface__L_type_calcium_current__O + CHASTE_CONST(80.808080808080803) * var_x39 * var_x41 * var_chaste_interface__calcium_fluxes__P_RyR * mParameters[1]) / (CHASTE_MATH::Pow(var_x68, 3) * CHASTE_MATH::Pow((CHASTE_CONST(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 * ((CHASTE_CONST(0.90000000000000002) - CHASTE_CONST(0.014285714285714287) * var_chaste_interface__membrane__V) * mParameters[7] * CHASTE_MATH::Exp(-CHASTE_CONST(0.038580246913580245) * CHASTE_MATH::Pow((-1 + CHASTE_CONST(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 * (-CHASTE_CONST(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 * (-CHASTE_CONST(1.5794450018272976) * var_x107 - var_x103 * var_x108 * var_chaste_interface__non_inactivating_steady_state_potassium_current__iKss - var_x108 * CHASTE_MATH::Pow(var_chaste_interface__slow_delayed_rectifier_potassium_current__nKs, 2) * mParameters[14] - CHASTE_CONST(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 * CHASTE_MATH::Pow(var_chaste_interface__fast_transient_outward_potassium_current__ato_f, 3) * mParameters[16] * var_chaste_interface__fast_transient_outward_potassium_current__ito_f - CHASTE_CONST(1.5794450018272976) * var_x100 * var_x111 * mParameters[11] / var_x110 + CHASTE_CONST(0.14151827216372587) * var_x102 * var_x109 * var_x111 * var_x99 * mParameters[5] * mParameters[11] / CHASTE_MATH::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 * (-CHASTE_CONST(25.674321243523316) * CHASTE_MATH::Log(var_x106 * (mParameters[5] + CHASTE_CONST(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 * (CHASTE_CONST(5.3367950117641947e-8) * var_x114 - CHASTE_CONST(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 * (-CHASTE_CONST(0.023761000000000001) - var_x115 - CHASTE_CONST(0.047002000000000002) * CHASTE_MATH::Exp(-CHASTE_CONST(0.063100000000000003) * var_chaste_interface__membrane__V)));rJacobian[24][25] = -(mDt * (CHASTE_CONST(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 * (CHASTE_CONST(0.023761000000000001)));rJacobian[25][25] = 1.0 - (mDt * (-CHASTE_CONST(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 * (-CHASTE_CONST(0.00080000000000000004)));rJacobian[28][29] = -(mDt * (CHASTE_CONST(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 + CHASTE_CONST(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 * (CHASTE_CONST(0.00080000000000000004) - var_x123));rJacobian[29][29] = 1.0 - (mDt * (-CHASTE_CONST(0.080249999999999988) - var_x123 - var_x124));rJacobian[29][30] = -(mDt * (CHASTE_CONST(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 * (-CHASTE_CONST(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 * (CHASTE_CONST(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 * (-CHASTE_CONST(25.674321243523316) * CHASTE_MATH::Log(var_x125 * (mParameters[6] + CHASTE_CONST(0.1111111111111111) * mParameters[5])) + var_chaste_interface__membrane__V) * mParameters[9]));rJacobian[31][22] = 0.0;rJacobian[31][23] = -(mDt * (var_x104 * (-CHASTE_CONST(0.00045628411163899709) * var_x125 - CHASTE_CONST(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 * (-CHASTE_CONST(1.5794450018272976) * var_x126 - CHASTE_CONST(0.0041065570047509742) * var_x125 - CHASTE_CONST(0.55366624424517552) * var_x67 - CHASTE_CONST(8.0051925176462917e-8) * var_x114))); +} + +template +DEVICE +void Cellbondarenko_szigeti_bett_kim_rasmusson_2004_apicalFromCellMLBackwardEuler::UpdateTransmembranePotentialDevice(ValueType var_chaste_interface__environment__time, + ValueType rY[], + ValueType mDt, + const ValueType mParameters[], + bool mSetVoltageDerivativeToZero, + ValueType mFixedVoltage, + DeviceStimulusFunctor stim, + ValueType capacitance) +{ + ValueType var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_THIS(mFixedVoltage) : rY[0]); + // Units: millivolt; Initial value: -82.4202 + ValueType var_chaste_interface__calcium_concentration__Cai_converted = rY[1]; + // Units: millimolar; Initial value: 0.000115001 + ValueType var_chaste_interface__L_type_calcium_current__O = rY[11]; + // Units: dimensionless; Initial value: 9.30308e-19 + ValueType var_chaste_interface__sodium_concentration__Nai = rY[18]; + // Units: micromolar; Initial value: 14237.1 + ValueType var_chaste_interface__fast_sodium_current__O_Na = rY[19]; + // Units: dimensionless; Initial value: 7.13483e-07 + ValueType var_chaste_interface__potassium_concentration__Ki = rY[27]; + // Units: micromolar; Initial value: 143720.0 + ValueType var_chaste_interface__fast_transient_outward_potassium_current__ato_f = rY[28]; + // Units: dimensionless; Initial value: 0.00265563 + ValueType var_chaste_interface__fast_transient_outward_potassium_current__ito_f = rY[29]; + // Units: dimensionless; Initial value: 0.999977 + ValueType var_chaste_interface__slow_transient_outward_potassium_current__ato_s = rY[30]; + // Units: dimensionless; Initial value: 0.000417069 + ValueType var_chaste_interface__slow_transient_outward_potassium_current__ito_s = rY[31]; + // Units: dimensionless; Initial value: 0.998543 + ValueType var_chaste_interface__slow_delayed_rectifier_potassium_current__nKs = rY[32]; + // Units: dimensionless; Initial value: 0.000262753 + ValueType var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_potassium_current__aur = rY[33]; + // Units: dimensionless; Initial value: 0.000417069 + ValueType var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_potassium_current__iur = rY[34]; + // Units: dimensionless; Initial value: 0.998543 + ValueType var_chaste_interface__non_inactivating_steady_state_potassium_current__aKss = rY[35]; + // Units: dimensionless; Initial value: 0.000417069 + ValueType var_chaste_interface__non_inactivating_steady_state_potassium_current__iKss = rY[36]; + // Units: dimensionless; Initial value: 1.0 + ValueType var_chaste_interface__rapid_delayed_rectifier_potassium_current__O_K = rY[37]; + // Units: dimensionless; Initial value: 0.000175298 + + const ValueType var_L_type_calcium_current__E_CaL = 63; // millivolt + const ValueType var_calcium_activated_chloride_current__E_Cl = -40; // millivolt + const ValueType var_calcium_activated_chloride_current__Km_Cl = 10; // micromolar + const ValueType var_calcium_activated_chloride_current__g_ClCa = 10; // milliS_per_microF + const ValueType var_calcium_background_current__g_Cab = CHASTE_CONST(0.00036699999999999998); // milliS_per_microF + const ValueType var_calcium_concentration__Cai = 1000 * var_chaste_interface__calcium_concentration__Cai_converted; // micromolar + const ValueType var_calcium_pump_current__Km_pCa = CHASTE_CONST(0.5); // micromolar + const ValueType var_calcium_pump_current__i_pCa_max = 1; // picoA_per_picoF + const ValueType var_calcium_pump_current__i_pCa = CHASTE_MATH::Pow(var_calcium_concentration__Cai, 2) * var_calcium_pump_current__i_pCa_max / (CHASTE_MATH::Pow(var_calcium_concentration__Cai, 2) + CHASTE_MATH::Pow(var_calcium_pump_current__Km_pCa, 2)); // picoA_per_picoF + const ValueType var_membrane__F = CHASTE_CONST(96.5); // coulomb_per_millimole + const ValueType var_membrane__R = CHASTE_CONST(8.3140000000000001); // joule_per_mole_kelvin + const ValueType var_membrane__T = 298; // kelvin + const ValueType var_calcium_background_current__E_CaN = CHASTE_CONST(0.5) * var_membrane__R * var_membrane__T * CHASTE_MATH::Log(mParameters[4] / var_calcium_concentration__Cai) / var_membrane__F; // millivolt + const ValueType 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 ValueType var_calcium_activated_chloride_current__O_ClCa = CHASTE_CONST(0.20000000000000001) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(5.9871794871794881) - CHASTE_CONST(0.12820512820512822) * var_chaste_interface__membrane__V)); // dimensionless + const ValueType 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 ValueType 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 ValueType var_membrane__i_stim_converted = CHASTE_STIM(var_chaste_interface__environment__time); // uA_per_cm2 + const ValueType var_membrane__i_stim = var_membrane__i_stim_converted / CHASTE_CAP(); // picoA_per_picoF + const ValueType var_fast_transient_outward_potassium_current__E_K = var_membrane__R * var_membrane__T * CHASTE_MATH::Log(mParameters[5] / var_chaste_interface__potassium_concentration__Ki) / var_membrane__F; // millivolt + const ValueType var_fast_transient_outward_potassium_current__i_Kto_f = CHASTE_MATH::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 ValueType 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 ValueType var_slow_delayed_rectifier_potassium_current__i_Ks = CHASTE_MATH::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 ValueType var_slow_transient_outward_potassium_current__g_Kto_s = 0; // milliS_per_microF + const ValueType 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 ValueType var_sodium_background_current__g_Nab = CHASTE_CONST(0.0025999999999999999); // milliS_per_microF + const ValueType var_sodium_calcium_exchange_current__K_mCa = 1380; // micromolar + const ValueType var_sodium_calcium_exchange_current__K_mNa = 87500; // micromolar + const ValueType var_sodium_calcium_exchange_current__eta = CHASTE_CONST(0.34999999999999998); // dimensionless + const ValueType var_sodium_calcium_exchange_current__k_sat = CHASTE_CONST(0.10000000000000001); // dimensionless + const ValueType var_fast_sodium_current__E_Na = var_membrane__R * var_membrane__T * CHASTE_MATH::Log((mParameters[6] + CHASTE_CONST(0.1111111111111111) * mParameters[5]) / (var_chaste_interface__sodium_concentration__Nai + CHASTE_CONST(0.1111111111111111) * var_chaste_interface__potassium_concentration__Ki)) / var_membrane__F; // millivolt + const ValueType 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 ValueType var_rapid_delayed_rectifier_potassium_current__i_Kr = (-var_membrane__R * var_membrane__T * CHASTE_MATH::Log((mParameters[5] + CHASTE_CONST(0.020408163265306124) * mParameters[6]) / (var_chaste_interface__potassium_concentration__Ki + CHASTE_CONST(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 ValueType 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 ValueType var_sodium_calcium_exchange_current__i_NaCa = (CHASTE_MATH::Pow(var_chaste_interface__sodium_concentration__Nai, 3) * mParameters[4] * CHASTE_MATH::Exp(var_membrane__F * var_chaste_interface__membrane__V * var_sodium_calcium_exchange_current__eta / (var_membrane__R * var_membrane__T)) - CHASTE_MATH::Pow(mParameters[6], 3) * var_calcium_concentration__Cai * CHASTE_MATH::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 * CHASTE_MATH::Exp((-1 + var_sodium_calcium_exchange_current__eta) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))) * (CHASTE_MATH::Pow(mParameters[6], 3) + CHASTE_MATH::Pow(var_sodium_calcium_exchange_current__K_mNa, 3)) * (mParameters[4] + var_sodium_calcium_exchange_current__K_mCa)); // picoA_per_picoF + const ValueType var_sodium_potassium_pump_current__Km_Ko = 1500; // micromolar + const ValueType var_sodium_potassium_pump_current__Km_Nai = 21000; // micromolar + const ValueType var_sodium_potassium_pump_current__i_NaK_max = CHASTE_CONST(0.88); // picoA_per_picoF + const ValueType var_sodium_potassium_pump_current__sigma = -CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(1.4858841010401188e-5) * mParameters[6]); // dimensionless + const ValueType var_sodium_potassium_pump_current__f_NaK = 1 / (1 + CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(0.10000000000000001) * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) + CHASTE_CONST(0.036499999999999998) * var_sodium_potassium_pump_current__sigma * CHASTE_MATH::Exp(-var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T))); // dimensionless + const ValueType 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 + CHASTE_MATH::Pow((var_sodium_potassium_pump_current__Km_Nai / var_chaste_interface__sodium_concentration__Nai), CHASTE_CONST(1.5))) * (mParameters[5] + var_sodium_potassium_pump_current__Km_Ko)); // picoA_per_picoF + const ValueType 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 + CHASTE_MATH::Exp(CHASTE_CONST(0.089599999999999999) * var_chaste_interface__membrane__V - CHASTE_CONST(0.089599999999999999) * var_fast_transient_outward_potassium_current__E_K)) * (210 + mParameters[5])); // picoA_per_picoF + const ValueType var_ultra_rapidly_activating_delayed_rectifier_potassium_current__g_Kur = CHASTE_CONST(0.16); // milliS_per_microF + const ValueType 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 ValueType 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; +} + +#include "ChasteCpuMacros.hpp" +#endif // CELLBONDARENKO_SZIGETI_BETT_KIM_RASMUSSON_2004_APICALFROMCELLMLBACKWARDEULERKERNELS_HPP_ \ No newline at end of file diff --git a/chaste_codegen/data/tests/chaste_reference_models/BE/li_mouse_2010Kernels.hpp b/chaste_codegen/data/tests/chaste_reference_models/BE/li_mouse_2010Kernels.hpp new file mode 100644 index 000000000..119d123a7 --- /dev/null +++ b/chaste_codegen/data/tests/chaste_reference_models/BE/li_mouse_2010Kernels.hpp @@ -0,0 +1,567 @@ +#ifndef CELLLI_MOUSE_2010FROMCELLMLBACKWARDEULERKERNELS_HPP_ +#define CELLLI_MOUSE_2010FROMCELLMLBACKWARDEULERKERNELS_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 "MathsCustomFunctions.hpp" +#include "ChasteDeviceMacros.hpp" + + +template +DEVICE +void Cellli_mouse_2010FromCellMLBackwardEuler::SolveClosedFormVarsDevice(ValueType rY[Cellli_mouse_2010FromCellMLBackwardEuler::TOTAL_SIZE], + ValueType mDt, + const ValueType mParameters[], + bool mSetVoltageDerivativeToZero, + ValueType mFixedVoltage, + ValueType capacitance) +{ + ValueType var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? CHASTE_THIS(mFixedVoltage) : rY[0]); + // Units: millivolt; Initial value: -78.9452115785979 + ValueType var_chaste_interface__L_type_calcium_current__y_gate = rY[12]; + // Units: dimensionless; Initial value: 0.845044436980163 + ValueType var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_K_I__aur = rY[23]; + // Units: dimensionless; Initial value: 0.00346258606821817 + ValueType var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_K_I__iur = rY[24]; + // Units: dimensionless; Initial value: 0.955684946168062 + ValueType var_chaste_interface__non_inactivating_steady_state_K_I__aKss = rY[25]; + // Units: dimensionless; Initial value: 0.287585636847048 + ValueType var_chaste_interface__slow_delayed_rectifier_K_I__nKs = rY[31]; + // Units: dimensionless; Initial value: 0.00336735013094628 + ValueType var_chaste_interface__fast_transient_outward_K_I__ato_f = rY[32]; + // Units: dimensionless; Initial value: 0.0142335908879204 + ValueType var_chaste_interface__fast_transient_outward_K_I__ito_f = rY[33]; + // Units: dimensionless; Initial value: 0.996989882138174 + ValueType var_chaste_interface__slow_transient_outward_K_I__ato_s = rY[34]; + // Units: dimensionless; Initial value: 0.0443263407760382 + ValueType var_chaste_interface__slow_transient_outward_K_I__ito_s = rY[35]; + // Units: dimensionless; Initial value: 0.887568880831388 + + const ValueType var_L_type_calcium_current__const5 = CHASTE_CONST(8.1999999999999993);const ValueType var_L_type_calcium_current__y_gate_tau_const1 = 8;const ValueType var_L_type_calcium_current__y_gate_tau_const2 = 315;const ValueType var_L_type_calcium_current__y_gate_inf = 1 / (1 + CHASTE_MATH::Exp((33 + var_chaste_interface__cell__V) / var_L_type_calcium_current__const5)) + CHASTE_CONST(0.10000000000000001) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(6.666666666666667) - CHASTE_CONST(0.16666666666666666) * var_chaste_interface__cell__V));const ValueType var_L_type_calcium_current__y_gate_tau = var_L_type_calcium_current__y_gate_tau_const2 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(7.5) + CHASTE_CONST(0.25) * var_chaste_interface__cell__V)) + var_L_type_calcium_current__y_gate_tau_const1;const ValueType var_fast_transient_outward_K_I__alpha_a = CHASTE_CONST(0.18064) * CHASTE_MATH::Exp(CHASTE_CONST(1.6096500000000002) + CHASTE_CONST(0.035770000000000003) * var_chaste_interface__cell__V);const ValueType var_fast_transient_outward_K_I__beta_a = CHASTE_CONST(0.39560000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(2.8066499999999999) - CHASTE_CONST(0.062370000000000002) * var_chaste_interface__cell__V);const ValueType var_fast_transient_outward_K_I__itof_iss = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(10.279999999999999) + CHASTE_CONST(0.20000000000000001) * var_chaste_interface__cell__V));const ValueType var_fast_transient_outward_K_I__tau_ito_f = CHASTE_CONST(9.6645000000000003) + CHASTE_CONST(10.936199999999999) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(10.279999999999999) + CHASTE_CONST(0.20000000000000001) * var_chaste_interface__cell__V));const ValueType var_non_inactivating_steady_state_K_I__tau_Kss = CHASTE_CONST(13.17) + CHASTE_CONST(39.299999999999997) * CHASTE_MATH::Exp(-CHASTE_CONST(0.050000000000000003) * var_chaste_interface__cell__V);const ValueType var_slow_delayed_rectifier_K_I__alpha_n = (((var_chaste_interface__cell__V >= -CHASTE_CONST(26.500000781250002)) && (var_chaste_interface__cell__V <= -CHASTE_CONST(26.499999218749998))) ? (-CHASTE_CONST(3.7604140624912359e-12) / (1 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999766942e-8))) + CHASTE_CONST(640000.00000149151) * (CHASTE_CONST(26.500000781250002) + var_chaste_interface__cell__V) * (CHASTE_CONST(3.7604140624912359e-12) / (1 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999766942e-8))) + CHASTE_CONST(3.7604140624912359e-12) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999766942e-8))))) : (CHASTE_CONST(4.8133299999999997e-6) * (CHASTE_CONST(26.5) + var_chaste_interface__cell__V) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(3.3919999999999999) - CHASTE_CONST(0.128) * var_chaste_interface__cell__V))));const ValueType var_slow_delayed_rectifier_K_I__beta_n = CHASTE_CONST(9.5333299999999997e-5) * CHASTE_MATH::Exp(-CHASTE_CONST(1.0069999999999999) - CHASTE_CONST(0.037999999999999999) * var_chaste_interface__cell__V);const ValueType var_slow_transient_outward_K_I__tau_ta_s = CHASTE_CONST(2.0579999999999998) + CHASTE_CONST(0.49299999999999999) * CHASTE_MATH::Exp(-CHASTE_CONST(0.062899999999999998) * var_chaste_interface__cell__V);const ValueType var_slow_transient_outward_K_I__tau_ti_s = 270 + 1050 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(7.9298245614035094) + CHASTE_CONST(0.17543859649122806) * var_chaste_interface__cell__V));const ValueType var_ultra_rapidly_activating_delayed_rectifier_K_I__ass = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.64479166666666676) - CHASTE_CONST(0.10416666666666667) * var_chaste_interface__cell__V));const ValueType var_ultra_rapidly_activating_delayed_rectifier_K_I__iss = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(7.7962962962962958) + CHASTE_CONST(0.18518518518518517) * var_chaste_interface__cell__V));const ValueType var_ultra_rapidly_activating_delayed_rectifier_K_I__tau_aur = CHASTE_CONST(2.0579999999999998) + CHASTE_CONST(0.49299999999999999) * CHASTE_MATH::Exp(-CHASTE_CONST(0.062899999999999998) * var_chaste_interface__cell__V);const ValueType var_ultra_rapidly_activating_delayed_rectifier_K_I__tau_i_const = 643;const ValueType var_ultra_rapidly_activating_delayed_rectifier_K_I__tau_iur = 1000 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(7.7962962962962958) + CHASTE_CONST(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)); +} + +template +DEVICE +void Cellli_mouse_2010FromCellMLBackwardEuler::FillInitialGuessDevice(ValueType _guess[Cellli_mouse_2010FromCellMLBackwardEuler::NONLINEAR_SIZE], + const ValueType rY[Cellli_mouse_2010FromCellMLBackwardEuler::TOTAL_SIZE]) +{ + _guess[0] = rY[11];_guess[1] = rY[10];_guess[2] = rY[3];_guess[3] = rY[4];_guess[4] = rY[1];_guess[5] = rY[2];_guess[6] = rY[6];_guess[7] = rY[5];_guess[8] = rY[15];_guess[9] = rY[16];_guess[10] = rY[17];_guess[11] = rY[18];_guess[12] = rY[20];_guess[13] = rY[21];_guess[14] = rY[19];_guess[15] = rY[14];_guess[16] = rY[26];_guess[17] = rY[22];_guess[18] = rY[28];_guess[19] = rY[29];_guess[20] = rY[30];_guess[21] = rY[27];_guess[22] = rY[9];_guess[23] = rY[7];_guess[24] = rY[8];_guess[25] = rY[13]; +} + +template +DEVICE +void Cellli_mouse_2010FromCellMLBackwardEuler::ScatterSolutionDevice(const ValueType _guess[Cellli_mouse_2010FromCellMLBackwardEuler::NONLINEAR_SIZE], + ValueType rY[Cellli_mouse_2010FromCellMLBackwardEuler::TOTAL_SIZE]) +{ + 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]; +} + +template +DEVICE +void Cellli_mouse_2010FromCellMLBackwardEuler::ComputeResidualDevice(ValueType var_chaste_interface__environment__time, + const ValueType rCurrentGuess[Cellli_mouse_2010FromCellMLBackwardEuler::NONLINEAR_SIZE], + const ValueType rY[], + ValueType rResidual[Cellli_mouse_2010FromCellMLBackwardEuler::NONLINEAR_SIZE], + ValueType mDt, + const ValueType mParameters[], + bool mSetVoltageDerivativeToZero, + ValueType mFixedVoltage, + ValueType capacitance, + const DeviceStimulusFunctor stim) +{ + ValueType var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? CHASTE_THIS(mFixedVoltage) : rY[0]); // Units: millivolt + ValueType var_chaste_interface__L_type_calcium_current__y_gate = rY[12]; // Units: dimensionless + ValueType var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_K_I__aur = rY[23]; // Units: dimensionless + ValueType var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_K_I__iur = rY[24]; // Units: dimensionless + ValueType var_chaste_interface__non_inactivating_steady_state_K_I__aKss = rY[25]; // Units: dimensionless + ValueType var_chaste_interface__slow_delayed_rectifier_K_I__nKs = rY[31]; // Units: dimensionless + ValueType var_chaste_interface__fast_transient_outward_K_I__ato_f = rY[32]; // Units: dimensionless + ValueType var_chaste_interface__fast_transient_outward_K_I__ito_f = rY[33]; // Units: dimensionless + ValueType var_chaste_interface__slow_transient_outward_K_I__ato_s = rY[34]; // Units: dimensionless + ValueType var_chaste_interface__slow_transient_outward_K_I__ito_s = rY[35]; // Units: dimensionless + + ValueType var_chaste_interface__L_type_calcium_current__I = rCurrentGuess[0]; + ValueType var_chaste_interface__L_type_calcium_current__O = rCurrentGuess[1]; + ValueType var_chaste_interface__calcium_concentration__CaJSR = rCurrentGuess[2]; + ValueType var_chaste_interface__calcium_concentration__CaNSR = rCurrentGuess[3]; + ValueType var_chaste_interface__calcium_concentration__Cai_converted = rCurrentGuess[4]; + ValueType var_chaste_interface__calcium_concentration__Cass = rCurrentGuess[5]; + ValueType var_chaste_interface__calcium_fluxes__CaMKt = rCurrentGuess[6]; + ValueType var_chaste_interface__calcium_fluxes__P_RyR = rCurrentGuess[7]; + ValueType var_chaste_interface__fast_sodium_current__C_Na1 = rCurrentGuess[8]; + ValueType var_chaste_interface__fast_sodium_current__C_Na2 = rCurrentGuess[9]; + ValueType var_chaste_interface__fast_sodium_current__I1_Na = rCurrentGuess[10]; + ValueType var_chaste_interface__fast_sodium_current__I2_Na = rCurrentGuess[11]; + ValueType var_chaste_interface__fast_sodium_current__IC_Na2 = rCurrentGuess[12]; + ValueType var_chaste_interface__fast_sodium_current__IC_Na3 = rCurrentGuess[13]; + ValueType var_chaste_interface__fast_sodium_current__IF_Na = rCurrentGuess[14]; + ValueType var_chaste_interface__fast_sodium_current__O_Na = rCurrentGuess[15]; + ValueType var_chaste_interface__non_inactivating_steady_state_K_I__iKss = rCurrentGuess[16]; + ValueType var_chaste_interface__potassium_concentration__Ki = rCurrentGuess[17]; + ValueType var_chaste_interface__rapid_delayed_rectifier_K_I__C_K1 = rCurrentGuess[18]; + ValueType var_chaste_interface__rapid_delayed_rectifier_K_I__C_K2 = rCurrentGuess[19]; + ValueType var_chaste_interface__rapid_delayed_rectifier_K_I__I_K = rCurrentGuess[20]; + ValueType var_chaste_interface__rapid_delayed_rectifier_K_I__O_K = rCurrentGuess[21]; + ValueType var_chaste_interface__ryanodine_receptors__P_C2 = rCurrentGuess[22]; + ValueType var_chaste_interface__ryanodine_receptors__P_O1 = rCurrentGuess[23]; + ValueType var_chaste_interface__ryanodine_receptors__P_O2 = rCurrentGuess[24]; + ValueType var_chaste_interface__sodium_concentration__Nai = rCurrentGuess[25]; + + const ValueType d_dt_chaste_interface_var_non_inactivating_steady_state_K_I__iKss = 0; // 1 / millisecond + const ValueType var_L_type_calcium_current__K_L = CHASTE_CONST(0.29999999999999999); // micromolar + const ValueType 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 ValueType var_L_type_calcium_current__V_L = 0; // millivolt + const ValueType var_L_type_calcium_current__a = CHASTE_CONST(0.0625); // dimensionless + const ValueType var_L_type_calcium_current__b = CHASTE_CONST(0.40000000000000002); // dimensionless + const ValueType var_L_type_calcium_current__delta_V_L = CHASTE_CONST(6.4489000000000001); // millivolt + const ValueType var_L_type_calcium_current__i_CaL_max = 7; // picoA_per_picoF + const ValueType var_L_type_calcium_current__phi_L = CHASTE_CONST(1.798); // dimensionless + const ValueType var_L_type_calcium_current__t_L = CHASTE_CONST(1.5); // millisecond + const ValueType var_L_type_calcium_current__alpha_m = var_L_type_calcium_current__phi_L / var_L_type_calcium_current__t_L; // per_millisecond + const ValueType var_L_type_calcium_current__tau_L = 1150; // millisecond + const ValueType var_calcium_background_current__g_Cab = CHASTE_CONST(0.00069999999999999999); // milliS_per_microF + const ValueType var_calcium_concentration__Bmax = 109; // micromolar + const ValueType var_calcium_concentration__CSQN_tot = 50000; // micromolar + const ValueType var_calcium_concentration__Cai = 1000 * var_chaste_interface__calcium_concentration__Cai_converted; // micromolar + const ValueType var_calcium_concentration__Kd = CHASTE_CONST(0.59999999999999998); // micromolar + const ValueType var_calcium_concentration__Bi = 1 / (1 + var_calcium_concentration__Bmax * var_calcium_concentration__Kd / CHASTE_MATH::Pow((var_calcium_concentration__Cai + var_calcium_concentration__Kd), 2)); // dimensionless + const ValueType var_calcium_concentration__Bss = 1 / (1 + var_calcium_concentration__Bmax * var_calcium_concentration__Kd / CHASTE_MATH::Pow((var_chaste_interface__calcium_concentration__Cass + var_calcium_concentration__Kd), 2)); // dimensionless + const ValueType var_calcium_concentration__Km_CSQN = 630; // micromolar + const ValueType var_calcium_concentration__BJSR = 1 / (1 + var_calcium_concentration__CSQN_tot * var_calcium_concentration__Km_CSQN / CHASTE_MATH::Pow((var_chaste_interface__calcium_concentration__CaJSR + var_calcium_concentration__Km_CSQN), 2)); // dimensionless + const ValueType var_calcium_fluxes__CaMKb = CHASTE_CONST(0.050000000000000003) * (1 - var_chaste_interface__calcium_fluxes__CaMKt) / (1 + CHASTE_CONST(0.69999999999999996) / var_chaste_interface__calcium_concentration__Cass); // dimensionless + const ValueType var_calcium_fluxes__CaMKa = var_calcium_fluxes__CaMKb + var_chaste_interface__calcium_fluxes__CaMKt; // dimensionless + const ValueType var_calcium_fluxes__Km_up = CHASTE_CONST(0.41199999999999998); // micromolar + const ValueType var_calcium_fluxes__P_ryr_const1 = -CHASTE_CONST(0.01); // per_millisecond + const ValueType var_calcium_fluxes__P_ryr_const2 = -2; // per_millisecond + const ValueType var_calcium_fluxes__off_rate = CHASTE_CONST(0.00020000000000000001); // per_millisecond + const ValueType var_calcium_fluxes__on_rate = CHASTE_CONST(0.050000000000000003); // per_millisecond + const ValueType 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 ValueType var_calcium_fluxes__tau_tr = 20; // millisecond + const ValueType 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 ValueType var_calcium_fluxes__tau_xfer = 8; // millisecond + const ValueType var_calcium_fluxes__J_xfer = (-var_calcium_concentration__Cai + var_chaste_interface__calcium_concentration__Cass) / var_calcium_fluxes__tau_xfer; // micromolar_per_millisecond + const ValueType var_calcium_fluxes__v1_caff = 10; // per_millisecond + const ValueType var_calcium_fluxes__v2 = CHASTE_CONST(3.0000000000000001e-5); // per_millisecond + const ValueType var_calcium_fluxes__v2_caff = CHASTE_CONST(0.10000000000000001); // per_millisecond + const ValueType var_calcium_fluxes__vmup_init = CHASTE_CONST(0.50590000000000002); // micromolar_per_millisecond + const ValueType var_calcium_fluxes__vmup = (1 + CHASTE_CONST(2.9982000000000002) * CHASTE_MATH::Pow(var_calcium_fluxes__CaMKa, CHASTE_CONST(2.5830000000000002)) / (CHASTE_CONST(1.7590641847756086) + CHASTE_MATH::Pow(var_calcium_fluxes__CaMKa, CHASTE_CONST(2.5830000000000002)))) * var_calcium_fluxes__vmup_init; // micromolar_per_millisecond + const ValueType var_calcium_fluxes__J_serca = CHASTE_MATH::Pow(var_calcium_concentration__Cai, 2) * var_calcium_fluxes__vmup / (CHASTE_MATH::Pow(var_calcium_concentration__Cai, 2) + CHASTE_MATH::Pow(var_calcium_fluxes__Km_up, 2)); // micromolar_per_millisecond + const ValueType var_calcium_pump_current__Km_pCa = CHASTE_CONST(0.28849999999999998); // micromolar + const ValueType var_calcium_pump_current__i_pCa_max = CHASTE_CONST(0.095500000000000002); // picoA_per_picoF + const ValueType var_calcium_pump_current__i_pCa = CHASTE_MATH::Pow(var_calcium_concentration__Cai, 2) * var_calcium_pump_current__i_pCa_max / (CHASTE_MATH::Pow(var_calcium_concentration__Cai, 2) + CHASTE_MATH::Pow(var_calcium_pump_current__Km_pCa, 2)); // picoA_per_picoF + const ValueType var_cell__Acap = CHASTE_CONST(0.00013866); // cm2 + const ValueType var_cell__F = CHASTE_CONST(96.5); // coulomb_per_millimole + const ValueType var_cell__R = CHASTE_CONST(8.3140000000000001); // joule_per_mole_kelvin + const ValueType var_cell__T = 308; // kelvin + const ValueType var_calcium_background_current__E_CaN = CHASTE_CONST(0.5) * var_cell__R * var_cell__T * CHASTE_MATH::Log(mParameters[1] / var_calcium_concentration__Cai) / var_cell__F; // millivolt + const ValueType var_L_type_calcium_current__FVRT = var_cell__F * var_chaste_interface__cell__V / (var_cell__R * var_cell__T); // dimensionless + const ValueType var_L_type_calcium_current__FVRT_Ca = 2 * var_L_type_calcium_current__FVRT; // dimensionless + const ValueType var_L_type_calcium_current__expVL = CHASTE_MATH::Exp((-var_L_type_calcium_current__V_L + var_chaste_interface__cell__V) / var_L_type_calcium_current__delta_V_L); // dimensionless + const ValueType 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 ValueType 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 ValueType 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 ValueType 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 ValueType 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 ValueType 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 ValueType var_cell__VJSR = CHASTE_CONST(7.7000000000000001e-8); // microlitre + const ValueType var_cell__VNSR = CHASTE_CONST(2.3099999999999999e-7); // microlitre + const ValueType var_cell__Vmyo = CHASTE_CONST(2.1999999999999999e-5); // microlitre + const ValueType var_cell__Vss = CHASTE_CONST(2.1999999999999998e-8); // microlitre + const ValueType var_L_type_calcium_current__i_CaL = ((CHASTE_MATH::Abs(var_L_type_calcium_current__FVRT_Ca) > CHASTE_CONST(1.0000000000000001e-5)) ? (-2 * (-var_chaste_interface__calcium_concentration__Cass + mParameters[1] * CHASTE_MATH::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 - CHASTE_MATH::Exp(-var_L_type_calcium_current__FVRT_Ca)) * var_cell__Acap * mParameters[5])) : (-CHASTE_CONST(2.0000000000000002e-5) * (-var_chaste_interface__calcium_concentration__Cass + mParameters[1] * CHASTE_MATH::Exp(-CHASTE_CONST(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 - CHASTE_MATH::Exp(-CHASTE_CONST(1.0000000000000001e-5))) * var_cell__Acap * mParameters[5]))); // picoA_per_picoF + const ValueType 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 * CHASTE_MATH::Exp(-CHASTE_CONST(0.038580246913580245) * CHASTE_MATH::Pow((-1 + CHASTE_CONST(0.20000000000000001) * var_chaste_interface__cell__V), 2)) / var_L_type_calcium_current__i_CaL_max; // 1 / millisecond + const ValueType var_cell__prepulses_number = CHASTE_CONST(10000000000.0); // dimensionless + const ValueType var_chaste_interface__cell__stim_period = CHASTE_CONST(333.33300000000003); // millisecond + const ValueType 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 ValueType 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 ValueType var_cell__i_Stim_converted = CHASTE_STIM(var_chaste_interface__environment__time); // uA_per_cm2 + const ValueType var_cell__i_Stim = var_cell__i_Stim_converted / CHASTE_CAP(); // picoA_per_picoF + const ValueType 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 ValueType var_fast_sodium_current__alpha_Na11 = CHASTE_CONST(3.802) / (CHASTE_CONST(0.20000000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(0.016666666666666666) - CHASTE_CONST(0.0066666666666666671) * var_chaste_interface__cell__V) + CHASTE_CONST(0.1027) * CHASTE_MATH::Exp(-CHASTE_CONST(0.14705882352941177) - CHASTE_CONST(0.058823529411764705) * var_chaste_interface__cell__V)); // per_millisecond + const ValueType var_fast_sodium_current__alpha_Na12 = CHASTE_CONST(3.802) / (CHASTE_CONST(0.1027) * CHASTE_MATH::Exp(-CHASTE_CONST(0.16666666666666666) - CHASTE_CONST(0.066666666666666666) * var_chaste_interface__cell__V) + CHASTE_CONST(0.23000000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(0.016666666666666666) - CHASTE_CONST(0.0066666666666666671) * var_chaste_interface__cell__V)); // per_millisecond + const ValueType var_fast_sodium_current__alpha_Na13 = CHASTE_CONST(3.802) / (CHASTE_CONST(0.25) * CHASTE_MATH::Exp(-CHASTE_CONST(0.016666666666666666) - CHASTE_CONST(0.0066666666666666671) * var_chaste_interface__cell__V) + CHASTE_CONST(0.1027) * CHASTE_MATH::Exp(-CHASTE_CONST(0.20833333333333334) - CHASTE_CONST(0.083333333333333329) * var_chaste_interface__cell__V)); // per_millisecond + const ValueType var_fast_sodium_current__alpha_Na2 = 1 / (CHASTE_CONST(0.39395599999999997) + CHASTE_CONST(0.188495) * CHASTE_MATH::Exp(-CHASTE_CONST(0.42168674698795178) - CHASTE_CONST(0.060240963855421679) * var_chaste_interface__cell__V)); // per_millisecond + const ValueType var_fast_sodium_current__alpha_Na3 = CHASTE_CONST(6.9999999999999997e-7) * CHASTE_MATH::Exp(-CHASTE_CONST(0.90909090909090906) - CHASTE_CONST(0.12987012987012986) * var_chaste_interface__cell__V); // per_millisecond + const ValueType var_fast_sodium_current__alpha_Na4 = CHASTE_CONST(0.001) * var_fast_sodium_current__alpha_Na2; // per_millisecond + const ValueType var_fast_sodium_current__alpha_Na5 = CHASTE_CONST(1.0526315789473684e-5) * var_fast_sodium_current__alpha_Na2; // per_millisecond + const ValueType var_fast_sodium_current__beta_Na11 = CHASTE_CONST(0.19170000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(0.12315270935960591) - CHASTE_CONST(0.04926108374384236) * var_chaste_interface__cell__V); // per_millisecond + const ValueType var_fast_sodium_current__beta_Na12 = CHASTE_CONST(0.20000000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.12315270935960591) - CHASTE_CONST(0.04926108374384236) * var_chaste_interface__cell__V); // per_millisecond + const ValueType var_fast_sodium_current__beta_Na13 = CHASTE_CONST(0.22) * CHASTE_MATH::Exp(CHASTE_CONST(0.36945812807881773) - CHASTE_CONST(0.04926108374384236) * var_chaste_interface__cell__V); // per_millisecond + const ValueType var_fast_sodium_current__beta_Na3 = CHASTE_CONST(0.008539999999999999) + CHASTE_CONST(2.0000000000000002e-5) * var_chaste_interface__cell__V; // per_millisecond + const ValueType 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 ValueType 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 ValueType 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 ValueType 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 ValueType 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 ValueType 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 ValueType var_fast_sodium_current__beta_Na4 = var_fast_sodium_current__alpha_Na3; // per_millisecond + const ValueType 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 ValueType var_fast_sodium_current__beta_Na5 = CHASTE_CONST(0.02) * var_fast_sodium_current__alpha_Na3; // per_millisecond + const ValueType 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 ValueType 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 ValueType var_fast_transient_outward_K_I__g_Kto_f = CHASTE_CONST(0.53469999999999995); // milliS_per_microF + const ValueType var_fast_transient_outward_K_I__E_K = var_cell__R * var_cell__T * CHASTE_MATH::Log(mParameters[2] / var_chaste_interface__potassium_concentration__Ki) / var_cell__F; // millivolt + const ValueType var_fast_transient_outward_K_I__i_Kto_f = CHASTE_MATH::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 ValueType 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 ValueType 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 ValueType var_rapid_delayed_rectifier_K_I__alpha_a0 = CHASTE_CONST(0.022348) * CHASTE_MATH::Exp(CHASTE_CONST(0.01176) * var_chaste_interface__cell__V); // per_millisecond + const ValueType var_rapid_delayed_rectifier_K_I__alpha_a1 = CHASTE_CONST(0.033500000000000002) * CHASTE_MATH::Exp(CHASTE_CONST(0.0109) * var_chaste_interface__cell__V); // per_millisecond + const ValueType var_rapid_delayed_rectifier_K_I__alpha_i = CHASTE_CONST(0.070300000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.14349999999999999) + CHASTE_CONST(0.0287) * var_chaste_interface__cell__V); // per_millisecond + const ValueType var_rapid_delayed_rectifier_K_I__beta_a0 = CHASTE_CONST(0.047002000000000002) * CHASTE_MATH::Exp(-CHASTE_CONST(0.063100000000000003) * var_chaste_interface__cell__V); // per_millisecond + const ValueType var_rapid_delayed_rectifier_K_I__beta_a1 = CHASTE_CONST(6.8899999999999994e-5) * CHASTE_MATH::Exp(-CHASTE_CONST(0.041779999999999998) * var_chaste_interface__cell__V); // per_millisecond + const ValueType var_rapid_delayed_rectifier_K_I__beta_i = CHASTE_CONST(0.0064970000000000002) * CHASTE_MATH::Exp(-CHASTE_CONST(0.16339999999999999) - CHASTE_CONST(0.032680000000000001) * var_chaste_interface__cell__V); // per_millisecond + const ValueType 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 ValueType 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 ValueType var_rapid_delayed_rectifier_K_I__kb = CHASTE_CONST(0.036777999999999998); // per_millisecond + const ValueType var_rapid_delayed_rectifier_K_I__kf = CHASTE_CONST(0.023761000000000001); // per_millisecond + const ValueType 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 ValueType 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 ValueType 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 ValueType 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 ValueType 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 - CHASTE_CONST(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 ValueType 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 ValueType var_ryanodine_receptors__k_minus_a = CHASTE_CONST(0.071249999999999994); // per_millisecond + const ValueType var_ryanodine_receptors__k_minus_b = CHASTE_CONST(0.96499999999999997); // per_millisecond + const ValueType var_ryanodine_receptors__k_minus_c = CHASTE_CONST(0.00080000000000000004); // per_millisecond + const ValueType var_ryanodine_receptors__k_plus_a = CHASTE_CONST(0.0060749999999999997); // micromolar4_per_millisecond + const ValueType var_ryanodine_receptors__k_plus_b = CHASTE_CONST(0.0040499999999999998); // micromolar3_per_millisecond + const ValueType var_ryanodine_receptors__k_plus_c = CHASTE_CONST(0.0089999999999999993); // per_millisecond + const ValueType 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 ValueType var_ryanodine_receptors__m = 3; // dimensionless + const ValueType d_dt_chaste_interface_var_ryanodine_receptors__P_O2 = -var_chaste_interface__ryanodine_receptors__P_O2 * var_ryanodine_receptors__k_minus_b + CHASTE_MATH::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 ValueType var_ryanodine_receptors__n = 4; // dimensionless + const ValueType 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 + CHASTE_MATH::Pow(var_chaste_interface__calcium_concentration__Cass, var_ryanodine_receptors__n) * var_ryanodine_receptors__P_C1 * var_ryanodine_receptors__k_plus_a - CHASTE_MATH::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 ValueType var_slow_delayed_rectifier_K_I__i_Ks = CHASTE_MATH::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 ValueType var_slow_transient_outward_K_I__g_Kto_s = 0; // milliS_per_microF + const ValueType 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 ValueType var_sodium_background_current__g_Nab = CHASTE_CONST(0.0025999999999999999); // milliS_per_microF + const ValueType var_sodium_calcium_exchange_current__K_mAllo = 0; // micromolar + const ValueType var_sodium_calcium_exchange_current__K_mCai = CHASTE_CONST(3.6000000000000001); // micromolar + const ValueType var_sodium_calcium_exchange_current__K_mCao = 1400; // micromolar + const ValueType var_sodium_calcium_exchange_current__K_mNai = 12000; // micromolar + const ValueType var_sodium_calcium_exchange_current__K_mNao = 88000; // micromolar + const ValueType var_sodium_calcium_exchange_current__eta = CHASTE_CONST(0.34999999999999998); // dimensionless + const ValueType var_sodium_calcium_exchange_current__k_sat = CHASTE_CONST(0.27000000000000002); // dimensionless + const ValueType var_fast_sodium_current__E_Na = var_cell__R * var_cell__T * CHASTE_MATH::Log((mParameters[3] + CHASTE_CONST(0.1111111111111111) * mParameters[2]) / (var_chaste_interface__sodium_concentration__Nai + CHASTE_CONST(0.1111111111111111) * var_chaste_interface__potassium_concentration__Ki)) / var_cell__F; // millivolt + const ValueType 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 ValueType var_rapid_delayed_rectifier_K_I__i_Kr = (-var_cell__R * var_cell__T * CHASTE_MATH::Log((mParameters[2] + CHASTE_CONST(0.020408163265306124) * mParameters[3]) / (var_chaste_interface__potassium_concentration__Ki + CHASTE_CONST(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 ValueType 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 ValueType var_sodium_calcium_exchange_current__i_NCX = (CHASTE_MATH::Pow(var_chaste_interface__sodium_concentration__Nai, 3) * mParameters[1] * CHASTE_MATH::Exp(var_cell__F * var_chaste_interface__cell__V * var_sodium_calcium_exchange_current__eta / (var_cell__R * var_cell__T)) - CHASTE_MATH::Pow(mParameters[3], 3) * var_calcium_concentration__Cai * CHASTE_MATH::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 + CHASTE_MATH::Pow(var_sodium_calcium_exchange_current__K_mAllo, 2) / CHASTE_MATH::Pow(var_calcium_concentration__Cai, 2)) * (1 + var_sodium_calcium_exchange_current__k_sat * CHASTE_MATH::Exp((-1 + var_sodium_calcium_exchange_current__eta) * var_cell__F * var_chaste_interface__cell__V / (var_cell__R * var_cell__T))) * (CHASTE_MATH::Pow(mParameters[3], 3) * var_calcium_concentration__Cai + CHASTE_MATH::Pow(var_sodium_calcium_exchange_current__K_mNao, 3) * var_calcium_concentration__Cai + CHASTE_MATH::Pow(var_chaste_interface__sodium_concentration__Nai, 3) * mParameters[1] + CHASTE_MATH::Pow(var_chaste_interface__sodium_concentration__Nai, 3) * var_sodium_calcium_exchange_current__K_mCao + CHASTE_MATH::Pow(mParameters[3], 3) * (1 + CHASTE_MATH::Pow(var_chaste_interface__sodium_concentration__Nai, 3) / CHASTE_MATH::Pow(var_sodium_calcium_exchange_current__K_mNai, 3)) * var_sodium_calcium_exchange_current__K_mCai + CHASTE_MATH::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 ValueType var_calcium_concentration__Cai_orig_deriv = (-var_calcium_fluxes__J_serca - CHASTE_CONST(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 ValueType d_dt_chaste_interface_var_calcium_concentration__Cai_converted = CHASTE_CONST(0.001) * var_calcium_concentration__Cai_orig_deriv; // millimolar / millisecond + const ValueType var_sodium_potassium_pump_current__Km_Ko = 1500; // micromolar + const ValueType var_sodium_potassium_pump_current__Km_Nai = 16600; // micromolar + const ValueType var_sodium_potassium_pump_current__i_NaK_max = CHASTE_CONST(2.4860000000000002); // picoA_per_picoF + const ValueType var_sodium_potassium_pump_current__sigma = -CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(1.4858841010401188e-5) * mParameters[3]); // dimensionless + const ValueType var_sodium_potassium_pump_current__f_NaK = 1 / (1 + CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(0.10000000000000001) * var_cell__F * var_chaste_interface__cell__V / (var_cell__R * var_cell__T)) + CHASTE_CONST(0.036499999999999998) * var_sodium_potassium_pump_current__sigma * CHASTE_MATH::Exp(-var_cell__F * var_chaste_interface__cell__V / (var_cell__R * var_cell__T))); // dimensionless + const ValueType 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 + CHASTE_MATH::Pow((var_sodium_potassium_pump_current__Km_Nai / var_chaste_interface__sodium_concentration__Nai), CHASTE_CONST(2.3999999999999999))) * (mParameters[2] + var_sodium_potassium_pump_current__Km_Ko)); // picoA_per_picoF + const ValueType 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 ValueType 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 + CHASTE_MATH::Exp(CHASTE_CONST(0.089599999999999999) * var_chaste_interface__cell__V - CHASTE_CONST(0.089599999999999999) * var_fast_transient_outward_K_I__E_K)) * (210 + mParameters[2])); // picoA_per_picoF + const ValueType var_ultra_rapidly_activating_delayed_rectifier_K_I__g_Kur = CHASTE_CONST(0.25); // milliS_per_microF + const ValueType 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 ValueType 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; +} + +template +DEVICE +void Cellli_mouse_2010FromCellMLBackwardEuler::ComputeJacobianDevice(ValueType var_chaste_interface__environment__time, + const ValueType rCurrentGuess[Cellli_mouse_2010FromCellMLBackwardEuler::NONLINEAR_SIZE], + const ValueType rY[], + ValueType rJacobian[Cellli_mouse_2010FromCellMLBackwardEuler::NONLINEAR_SIZE][Cellli_mouse_2010FromCellMLBackwardEuler::NONLINEAR_SIZE], + ValueType mDt, + const ValueType mParameters[], + bool mSetVoltageDerivativeToZero, + ValueType mFixedVoltage, + ValueType capacitance, + const DeviceStimulusFunctor stim) +{ + ValueType var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? CHASTE_THIS(mFixedVoltage) : rY[0]); // Units: millivolt + ValueType var_chaste_interface__L_type_calcium_current__y_gate = rY[12]; // Units: dimensionless + ValueType var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_K_I__aur = rY[23]; // Units: dimensionless + ValueType var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_K_I__iur = rY[24]; // Units: dimensionless + ValueType var_chaste_interface__non_inactivating_steady_state_K_I__aKss = rY[25]; // Units: dimensionless + ValueType var_chaste_interface__slow_delayed_rectifier_K_I__nKs = rY[31]; // Units: dimensionless + ValueType var_chaste_interface__fast_transient_outward_K_I__ato_f = rY[32]; // Units: dimensionless + ValueType var_chaste_interface__fast_transient_outward_K_I__ito_f = rY[33]; // Units: dimensionless + + ValueType var_chaste_interface__L_type_calcium_current__I = rCurrentGuess[0]; + ValueType var_chaste_interface__L_type_calcium_current__O = rCurrentGuess[1]; + ValueType var_chaste_interface__calcium_concentration__CaJSR = rCurrentGuess[2]; + ValueType var_chaste_interface__calcium_concentration__CaNSR = rCurrentGuess[3]; + ValueType var_chaste_interface__calcium_concentration__Cai_converted = rCurrentGuess[4]; + ValueType var_chaste_interface__calcium_concentration__Cass = rCurrentGuess[5]; + ValueType var_chaste_interface__calcium_fluxes__CaMKt = rCurrentGuess[6]; + ValueType var_chaste_interface__calcium_fluxes__P_RyR = rCurrentGuess[7]; + ValueType var_chaste_interface__fast_sodium_current__O_Na = rCurrentGuess[8]; + ValueType var_chaste_interface__non_inactivating_steady_state_K_I__iKss = rCurrentGuess[9]; + ValueType var_chaste_interface__potassium_concentration__Ki = rCurrentGuess[10]; + ValueType var_chaste_interface__rapid_delayed_rectifier_K_I__O_K = rCurrentGuess[11]; + ValueType var_chaste_interface__ryanodine_receptors__P_C2 = rCurrentGuess[12]; + ValueType var_chaste_interface__ryanodine_receptors__P_O1 = rCurrentGuess[13]; + ValueType var_chaste_interface__ryanodine_receptors__P_O2 = rCurrentGuess[14]; + ValueType var_chaste_interface__sodium_concentration__Nai = rCurrentGuess[15]; + + const ValueType var_x0 = CHASTE_MATH::Exp(CHASTE_CONST(0.15506520491866829) * var_chaste_interface__cell__V); + const ValueType var_x1 = CHASTE_CONST(0.0625) + var_x0; + const ValueType var_x2 = 1 / (1 + var_x0); + const ValueType var_x3 = CHASTE_CONST(0.0028985507246376812) * var_x1 * var_x2; + const ValueType var_x4 = var_x3 * var_chaste_interface__calcium_concentration__Cass; + const ValueType var_x5 = CHASTE_CONST(0.66666666666666663) * var_x0 * var_x2; + const ValueType var_x6 = 1 + CHASTE_CONST(0.0015873015873015873) * var_chaste_interface__calcium_concentration__CaJSR; + const ValueType var_x7 = CHASTE_MATH::Pow(var_x6, (-2)); + const ValueType var_x8 = 1 / (1 + CHASTE_CONST(79.365079365079367) * var_x7); + const ValueType var_x9 = var_chaste_interface__ryanodine_receptors__P_O1 + var_chaste_interface__ryanodine_receptors__P_O2; + const ValueType var_x10 = var_chaste_interface__calcium_fluxes__P_RyR * mParameters[0]; + const ValueType var_x11 = var_x10 * var_x9; + const ValueType var_x12 = var_chaste_interface__environment__time < CHASTE_CONST(3333330000000.0005); + const ValueType var_x13 = ((var_x12) ? (var_x11) : (10)); + const ValueType var_x14 = -var_chaste_interface__calcium_concentration__Cass + var_chaste_interface__calcium_concentration__CaJSR; + const ValueType var_x15 = ((var_x12) ? (var_x11 * var_x14) : (10 * var_chaste_interface__calcium_concentration__CaJSR - 10 * var_chaste_interface__calcium_concentration__Cass)); + const ValueType var_x16 = ((var_x12) ? (-var_x10 * var_x9) : (-10)); + const ValueType var_x17 = ((var_x12) ? (var_x14 * var_x9 * mParameters[0]) : (0)); + const ValueType var_x18 = ((var_x12) ? (var_x10 * var_x14) : (0)); + const ValueType var_x19 = -var_x18 * var_x8; + const ValueType var_x20 = ((var_x12) ? (CHASTE_CONST(3.0000000000000001e-5)) : (CHASTE_CONST(0.10000000000000001))); + const ValueType var_x21 = ((var_x12) ? (-CHASTE_CONST(0.029999999999999999)) : (-100)); + const ValueType var_x22 = CHASTE_MATH::Pow(var_chaste_interface__calcium_concentration__Cai_converted, 3); + const ValueType var_x23 = 1 - var_chaste_interface__calcium_fluxes__CaMKt; + const ValueType var_x24 = 1 + CHASTE_CONST(0.69999999999999996) / var_chaste_interface__calcium_concentration__Cass; + const ValueType var_x25 = 1 / var_x24; + const ValueType var_x26 = CHASTE_CONST(0.050000000000000003) * var_x25; + const ValueType var_x27 = var_x23 * var_x26 + var_chaste_interface__calcium_fluxes__CaMKt; + const ValueType var_x28 = CHASTE_MATH::Pow(var_x27, CHASTE_CONST(2.5830000000000002)); + const ValueType var_x29 = 1 / (CHASTE_CONST(1.7590641847756086) + var_x28); + const ValueType var_x30 = CHASTE_CONST(1.5167893800000001) * var_x29; + const ValueType var_x31 = CHASTE_CONST(0.50590000000000002) + var_x28 * var_x30; + const ValueType var_x32 = CHASTE_MATH::Pow(var_chaste_interface__calcium_concentration__Cai_converted, 2); + const ValueType var_x33 = var_x22 * var_x31 / CHASTE_MATH::Pow((CHASTE_CONST(1.6974399999999999e-7) + var_x32), 2); + const ValueType var_x34 = 1000000 * var_x32; + const ValueType var_x35 = 1 / (CHASTE_CONST(0.16974399999999998) + var_x34); + const ValueType var_x36 = CHASTE_MATH::Pow(var_x27, CHASTE_CONST(1.5830000000000002)); + const ValueType var_x37 = CHASTE_MATH::Pow(var_chaste_interface__calcium_concentration__Cass, (-2)); + const ValueType var_x38 = var_x23 * var_x37 / CHASTE_MATH::Pow(var_x24, 2); + const ValueType var_x39 = CHASTE_MATH::Pow(var_x27, CHASTE_CONST(4.1660000000000004)) / CHASTE_MATH::Pow((1 + CHASTE_CONST(0.56848408867329814) * var_x28), 2); + const ValueType var_x40 = var_x35 * (-CHASTE_CONST(0.044315367702357472) * var_x38 * var_x39 + CHASTE_CONST(0.13712534389890002) * var_x29 * var_x36 * var_x38); + const ValueType var_x41 = CHASTE_CONST(95238095.238095239) * var_x32; + const ValueType var_x42 = CHASTE_CONST(2.5830000000000002) - CHASTE_CONST(0.12915000000000001) * var_x25; + const ValueType var_x43 = var_x35 * (-CHASTE_CONST(0.49018713237495126) * var_x39 * var_x42 + var_x30 * var_x36 * var_x42); + const ValueType var_x44 = CHASTE_CONST(0.00059999999999999995) + var_chaste_interface__calcium_concentration__Cai_converted; + const ValueType var_x45 = 1 + CHASTE_CONST(6.5400000000000004e-5) / CHASTE_MATH::Pow(var_x44, 2); + const ValueType var_x46 = 1 / var_x45; + const ValueType var_x47 = CHASTE_CONST(0.001) * var_x46; + const ValueType var_x48 = 1 / var_chaste_interface__calcium_concentration__Cai_converted; + const ValueType var_x49 = 1 / (CHASTE_CONST(0.083232249999999994) + var_x34); + const ValueType var_x50 = CHASTE_MATH::Exp(-CHASTE_CONST(0.024495140414072337) * var_chaste_interface__cell__V); + const ValueType var_x51 = CHASTE_MATH::Pow(mParameters[3], 3); + const ValueType var_x52 = 1 / (1 + CHASTE_CONST(0.27000000000000002) * var_x50); + const ValueType var_x53 = CHASTE_MATH::Pow(var_chaste_interface__sodium_concentration__Nai, 3); + const ValueType var_x54 = var_x53 * mParameters[1]; + const ValueType var_x55 = (1 + CHASTE_CONST(277.77777777777777) * var_chaste_interface__calcium_concentration__Cai_converted) * mParameters[1]; + const ValueType var_x56 = var_x51 * (1 + CHASTE_CONST(5.7870370370370368e-13) * var_x53); + const ValueType var_x57 = 1000 * var_x51; + const ValueType var_x58 = var_x57 * var_chaste_interface__calcium_concentration__Cai_converted; + const ValueType var_x59 = 1 / (var_x54 + var_x58 + 1400 * var_x53 + CHASTE_CONST(1728000000000.0) * var_x55 + CHASTE_CONST(3.6000000000000001) * var_x56 + CHASTE_CONST(6.81472e+17) * var_chaste_interface__calcium_concentration__Cai_converted); + const ValueType var_x60 = var_x52 * var_x59 * mParameters[11]; + const ValueType var_x61 = var_x50 * var_x51 * var_x60; + const ValueType var_x62 = CHASTE_MATH::Pow((CHASTE_CONST(2.0543764087152516e-15) * var_x53 + CHASTE_CONST(5.282682193839219e-18) * var_x56 + CHASTE_CONST(2.535687453042825e-6) * var_x55 + CHASTE_CONST(1.4674117205108941e-18) * var_x54 + CHASTE_CONST(1.4674117205108941e-15) * var_x51 * var_chaste_interface__calcium_concentration__Cai_converted + var_chaste_interface__calcium_concentration__Cai_converted), (-2)); + const ValueType var_x63 = CHASTE_MATH::Exp(CHASTE_CONST(0.013189690992192795) * var_chaste_interface__cell__V); + const ValueType var_x64 = -var_x50 * var_x58 + var_x53 * var_x63 * mParameters[1]; + const ValueType var_x65 = -CHASTE_CONST(6.81472e+17) - var_x57 - CHASTE_CONST(480000000000000.0) * mParameters[1]; + const ValueType var_x66 = var_x31 * var_x35; + const ValueType var_x67 = var_x52 * var_x64 * mParameters[11]; + const ValueType var_x68 = CHASTE_MATH::Pow(var_chaste_interface__sodium_concentration__Nai, 2); + const ValueType var_x69 = var_x68 * mParameters[1]; + const ValueType var_x70 = -3 * var_x69 - 4200 * var_x68 - CHASTE_CONST(6.2500000000000002e-12) * var_x51 * var_x68; + const ValueType var_x71 = var_x62 * var_x67; + const ValueType var_x72 = var_x60 * var_x63 * var_x69; + const ValueType var_x73 = CHASTE_CONST(0.59999999999999998) + var_chaste_interface__calcium_concentration__Cass; + const ValueType var_x74 = CHASTE_MATH::Pow(var_x73, (-2)); + const ValueType var_x75 = 1 / (1 + CHASTE_CONST(65.399999999999991) * var_x74); + const ValueType var_x76 = CHASTE_CONST(0.075369662812530269) * var_chaste_interface__cell__V; + const ValueType var_x77 = CHASTE_MATH::Exp(-var_x76); + const ValueType var_x78 = mParameters[4] * var_chaste_interface__L_type_calcium_current__y_gate / mParameters[5]; + const ValueType var_x79 = CHASTE_CONST(0.0023079445283571576) * var_x78 * var_chaste_interface__cell__V / (1 - var_x77); + const ValueType var_x80 = var_x79 * (-var_chaste_interface__calcium_concentration__Cass + var_x77 * mParameters[1]); + const ValueType var_x81 = CHASTE_MATH::Abs(var_x76) > CHASTE_CONST(1.0000000000000001e-5); + const ValueType var_x82 = CHASTE_MATH::Exp(-CHASTE_CONST(1.0000000000000001e-5)); + const ValueType var_x83 = CHASTE_CONST(3.062166450310111e-7) * var_x78 / (1 - var_x82); + const ValueType var_x84 = var_x83 * (-var_chaste_interface__calcium_concentration__Cass + var_x82 * mParameters[1]); + const ValueType var_x85 = ((var_x81) ? (-var_x80) : (-var_x84)); + const ValueType var_x86 = CHASTE_CONST(32.656617993405561) * mParameters[5]; + const ValueType var_x87 = CHASTE_CONST(3.5000000000000004) * var_x75; + const ValueType 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 ValueType var_x89 = var_x18 * var_x87; + const ValueType var_x90 = CHASTE_CONST(0.2857142857142857) * CHASTE_MATH::Exp(-CHASTE_CONST(0.038580246913580245) * CHASTE_MATH::Pow((-1 + CHASTE_CONST(0.20000000000000001) * var_chaste_interface__cell__V), 2)); + const ValueType var_x91 = CHASTE_CONST(0.04926108374384236) * var_chaste_interface__cell__V; + const ValueType var_x92 = CHASTE_CONST(0.20000000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.12315270935960591) - var_x91); + const ValueType var_x93 = CHASTE_MATH::Exp(-CHASTE_CONST(0.016666666666666666) - CHASTE_CONST(0.0066666666666666671) * var_chaste_interface__cell__V); + const ValueType var_x94 = 1 / (CHASTE_CONST(0.25) * var_x93 + CHASTE_CONST(0.1027) * CHASTE_MATH::Exp(-CHASTE_CONST(0.20833333333333334) - CHASTE_CONST(0.083333333333333329) * var_chaste_interface__cell__V)); + const ValueType var_x95 = CHASTE_CONST(3.802) * var_x94; + const ValueType var_x96 = CHASTE_CONST(0.008539999999999999) + CHASTE_CONST(2.0000000000000002e-5) * var_chaste_interface__cell__V; + const ValueType var_x97 = CHASTE_CONST(3.802) / (CHASTE_CONST(0.1027) * CHASTE_MATH::Exp(-CHASTE_CONST(0.16666666666666666) - CHASTE_CONST(0.066666666666666666) * var_chaste_interface__cell__V) + CHASTE_CONST(0.23000000000000001) * var_x93); + const ValueType var_x98 = CHASTE_MATH::Exp(-CHASTE_CONST(0.90909090909090906) - CHASTE_CONST(0.12987012987012986) * var_chaste_interface__cell__V); + const ValueType var_x99 = CHASTE_CONST(6.9999999999999997e-7) * var_x98; + const ValueType var_x100 = CHASTE_MATH::Exp(CHASTE_CONST(0.36945812807881773) - var_x91); + const ValueType var_x101 = CHASTE_CONST(0.22) * var_x100; + const ValueType var_x102 = CHASTE_CONST(3.802) / (CHASTE_CONST(0.20000000000000001) * var_x93 + CHASTE_CONST(0.1027) * CHASTE_MATH::Exp(-CHASTE_CONST(0.14705882352941177) - CHASTE_CONST(0.058823529411764705) * var_chaste_interface__cell__V)); + const ValueType var_x103 = -var_x102; + const ValueType var_x104 = CHASTE_CONST(0.19170000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(0.12315270935960591) - var_x91); + const ValueType var_x105 = var_x104 + var_x97; + const ValueType var_x106 = var_x102 + var_x96; + const ValueType var_x107 = 1 / (CHASTE_CONST(0.39395599999999997) + CHASTE_CONST(0.188495) * CHASTE_MATH::Exp(-CHASTE_CONST(0.42168674698795178) - CHASTE_CONST(0.060240963855421679) * var_chaste_interface__cell__V)); + const ValueType var_x108 = CHASTE_CONST(1.0526315789473684e-5) * var_x107; + const ValueType var_x109 = CHASTE_CONST(1.4e-8) * var_x98; + const ValueType var_x110 = CHASTE_CONST(0.001) * var_x107; + const ValueType var_x111 = -var_x96; + const ValueType var_x112 = CHASTE_CONST(1.2097272727272726e-5) * var_x107 * var_x94 * var_x98 / (var_x100 * var_x96); + const ValueType var_x113 = var_x107; + const ValueType var_x114 = 1 / var_chaste_interface__potassium_concentration__Ki; + const ValueType var_x115 = var_x114 * mParameters[2]; + const ValueType var_x116 = CHASTE_MATH::Log(var_x115); + const ValueType var_x117 = -CHASTE_CONST(26.535875647668394) * var_x116 + var_chaste_interface__cell__V; + const ValueType var_x118 = CHASTE_CONST(0.065313235986811116) * mParameters[5]; + const ValueType var_x119 = var_chaste_interface__non_inactivating_steady_state_K_I__aKss * mParameters[8]; + const ValueType var_x120 = 1 / (var_chaste_interface__potassium_concentration__Ki + CHASTE_CONST(0.020408163265306124) * var_chaste_interface__sodium_concentration__Nai); + const ValueType var_x121 = var_x120 * var_chaste_interface__rapid_delayed_rectifier_K_I__O_K * mParameters[9]; + const ValueType var_x122 = CHASTE_CONST(1.7331439082928402) * var_x114; + const ValueType var_x123 = CHASTE_MATH::Exp(CHASTE_CONST(0.089599999999999999) * var_chaste_interface__cell__V - CHASTE_CONST(2.3776144580310881) * var_x116); + const ValueType var_x124 = 1 + var_x123; + const ValueType var_x125 = 1 / (210 + mParameters[2]); + const ValueType var_x126 = 1 / var_chaste_interface__sodium_concentration__Nai; + const ValueType var_x127 = CHASTE_MATH::Pow(var_x126, CHASTE_CONST(2.3999999999999999)); + const ValueType var_x128 = var_x126 * var_x127 * mParameters[2] / ((1500 + mParameters[2]) * CHASTE_MATH::Pow((CHASTE_CONST(7.44287265976699e-11) + var_x127), 2) * (1 + CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(0.0037684831406265135) * var_chaste_interface__cell__V) + CHASTE_CONST(0.036499999999999998) * (-CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(1.4858841010401188e-5) * mParameters[3])) * CHASTE_MATH::Exp(-CHASTE_CONST(0.037684831406265135) * var_chaste_interface__cell__V))); + const ValueType var_x129 = CHASTE_CONST(0.022348) * CHASTE_MATH::Exp(CHASTE_CONST(0.01176) * var_chaste_interface__cell__V); + const ValueType var_x130 = -var_x129; + const ValueType var_x131 = CHASTE_CONST(0.033500000000000002) * CHASTE_MATH::Exp(CHASTE_CONST(0.0109) * var_chaste_interface__cell__V); + const ValueType var_x132 = CHASTE_CONST(6.8899999999999994e-5) * CHASTE_MATH::Exp(-CHASTE_CONST(0.041779999999999998) * var_chaste_interface__cell__V); + const ValueType var_x133 = CHASTE_CONST(0.0064970000000000002) * CHASTE_MATH::Exp(-CHASTE_CONST(0.16339999999999999) - CHASTE_CONST(0.032680000000000001) * var_chaste_interface__cell__V); + const ValueType var_x134 = CHASTE_CONST(0.070300000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.14349999999999999) + CHASTE_CONST(0.0287) * var_chaste_interface__cell__V); + const ValueType var_x135 = CHASTE_CONST(0.012149999999999999) * CHASTE_MATH::Pow(var_chaste_interface__calcium_concentration__Cass, 2) * var_chaste_interface__ryanodine_receptors__P_O1; + const ValueType var_x136 = CHASTE_MATH::Pow(var_chaste_interface__calcium_concentration__Cass, 3); + const ValueType var_x137 = CHASTE_CONST(0.0060749999999999997) * CHASTE_MATH::Pow(var_chaste_interface__calcium_concentration__Cass, 4); + const ValueType var_x138 = CHASTE_CONST(0.0040499999999999998) * var_x136; + const ValueType var_x139 = CHASTE_CONST(4.2191641619115923e-37) * var_x71; + const ValueType var_x140 = 1 / (var_chaste_interface__sodium_concentration__Nai + CHASTE_CONST(0.1111111111111111) * var_chaste_interface__potassium_concentration__Ki); + const ValueType var_x141 = var_x140 * var_chaste_interface__fast_sodium_current__O_Na * mParameters[6]; + + rJacobian[0][0] = 1.0 - (mDt * (-var_x4 - CHASTE_CONST(0.00034782608695652176) * var_x1 / (CHASTE_CONST(0.0625) + CHASTE_CONST(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 * (-CHASTE_CONST(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 * (-CHASTE_CONST(0.050000000000000003) - var_x13) + CHASTE_CONST(4.0000000000000003e-5) * (-var_x15 + CHASTE_CONST(0.050000000000000003) * var_chaste_interface__calcium_concentration__CaNSR - CHASTE_CONST(0.050000000000000003) * var_chaste_interface__calcium_concentration__CaJSR) / (CHASTE_MATH::Pow(var_x6, 3) * CHASTE_MATH::Pow((CHASTE_CONST(0.0126) + var_x7), 2))));rJacobian[2][3] = -(mDt * (CHASTE_CONST(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 * (CHASTE_CONST(0.016666666666666666)));rJacobian[3][3] = 1.0 - (mDt * (-CHASTE_CONST(0.016666666666666666) - CHASTE_CONST(95.238095238095241) * var_x20));rJacobian[3][4] = -(mDt * (-CHASTE_CONST(95.238095238095241) * var_x21 - CHASTE_CONST(190.47619047619048) * var_x33 + CHASTE_CONST(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 + (-CHASTE_CONST(65.313235986811122) * var_x61 - CHASTE_CONST(0.00030330018395124703) * var_x48 + CHASTE_CONST(0.0062374140367404624) * var_x22 / CHASTE_MATH::Pow((CHASTE_CONST(8.3232249999999994e-8) + var_x32), 2) - CHASTE_CONST(6237.4140367404616) * var_x49 * var_chaste_interface__calcium_concentration__Cai_converted + CHASTE_CONST(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) + CHASTE_CONST(1.3080000000000001e-7) * (CHASTE_CONST(0.125) * var_chaste_interface__calcium_concentration__Cass - 125 * var_chaste_interface__calcium_concentration__Cai_converted - var_x34 * var_x66 - CHASTE_CONST(0.032656617993405558) * (CHASTE_CONST(0.00069999999999999999) * var_chaste_interface__cell__V - CHASTE_CONST(0.0092875564766839377) * CHASTE_MATH::Log(CHASTE_CONST(0.001) * var_x48 * mParameters[1]) + 95500 * var_x32 * var_x49 - 2 * var_x59 * var_x67) * mParameters[5] + ((var_x12) ? (CHASTE_CONST(3.0000000000000001e-5) * var_chaste_interface__calcium_concentration__CaNSR - CHASTE_CONST(0.029999999999999999) * var_chaste_interface__calcium_concentration__Cai_converted) : (CHASTE_CONST(0.10000000000000001) * var_chaste_interface__calcium_concentration__CaNSR - 100 * var_chaste_interface__calcium_concentration__Cai_converted))) / (CHASTE_MATH::Pow(var_x44, 3) * CHASTE_MATH::Pow(var_x45, 2))));rJacobian[4][5] = -(mDt * (var_x47 * (CHASTE_CONST(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 * (CHASTE_CONST(0.19593970796043336) * var_x72 + CHASTE_CONST(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 + CHASTE_CONST(3.5000000000000004) * var_x16 - var_x86 * var_x88) + CHASTE_CONST(0.030581039755351685) * (125000 * var_chaste_interface__calcium_concentration__Cai_converted + CHASTE_CONST(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))) / (CHASTE_MATH::Pow(var_x73, 3) * CHASTE_MATH::Pow((CHASTE_CONST(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 * (CHASTE_CONST(0.00175) * var_x27 * var_x38 + CHASTE_CONST(8.7500000000000013e-5) * var_x37 * CHASTE_MATH::Pow(var_x23, 2) / CHASTE_MATH::Pow(var_x24, 3)));rJacobian[6][6] = 1.0 - (mDt * (-CHASTE_CONST(0.00020000000000000001) - CHASTE_CONST(0.0025000000000000005) * var_x25 * var_x27 + CHASTE_CONST(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 * (-CHASTE_CONST(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 * ((-CHASTE_CONST(1.7331439082928402) * var_x121 - var_x119 * var_x122 * var_chaste_interface__non_inactivating_steady_state_K_I__iKss - var_x122 * CHASTE_MATH::Pow(var_chaste_interface__slow_delayed_rectifier_K_I__nKs, 2) * mParameters[10] - CHASTE_CONST(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 - CHASTE_CONST(0.92671204776418159) * var_x114 * CHASTE_MATH::Pow(var_chaste_interface__fast_transient_outward_K_I__ato_f, 3) * var_chaste_interface__fast_transient_outward_K_I__ito_f - CHASTE_CONST(1.7331439082928402) * var_x115 * var_x125 * mParameters[7] / var_x124 + CHASTE_CONST(0.15528969418303848) * var_x114 * var_x117 * var_x123 * var_x125 * mParameters[2] * mParameters[7] / CHASTE_MATH::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 + CHASTE_CONST(26.535875647668394) * CHASTE_MATH::Log(var_x120 * (mParameters[2] + CHASTE_CONST(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 * ((CHASTE_CONST(5.8007500451501034e-11) * var_x128 - CHASTE_CONST(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 * (-CHASTE_CONST(0.023761000000000001) - var_x129 - CHASTE_CONST(0.047002000000000002) * CHASTE_MATH::Exp(-CHASTE_CONST(0.063100000000000003) * var_chaste_interface__cell__V)));rJacobian[18][19] = -(mDt * (CHASTE_CONST(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 * (CHASTE_CONST(0.023761000000000001)));rJacobian[19][19] = 1.0 - (mDt * (-CHASTE_CONST(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 * (-CHASTE_CONST(0.00080000000000000004)));rJacobian[22][23] = -(mDt * (CHASTE_CONST(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 + CHASTE_CONST(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 * (CHASTE_CONST(0.00080000000000000004) - var_x137));rJacobian[23][23] = 1.0 - (mDt * (-CHASTE_CONST(0.080249999999999988) - var_x137 - var_x138));rJacobian[23][24] = -(mDt * (CHASTE_CONST(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 * (-CHASTE_CONST(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 * ((CHASTE_CONST(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 + CHASTE_CONST(26.535875647668394) * CHASTE_MATH::Log(var_x140 * (mParameters[3] + CHASTE_CONST(0.1111111111111111) * mParameters[2]))) * mParameters[6]));rJacobian[25][16] = 0.0;rJacobian[25][17] = -(mDt * ((-CHASTE_CONST(0.0005006860179512649) * var_x140 - CHASTE_CONST(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 * ((-CHASTE_CONST(1.7331439082928402) * var_x141 - CHASTE_CONST(0.004506174161561384) * var_x140 - CHASTE_CONST(0.58781912388130009) * var_x72 - CHASTE_CONST(8.7011250677251544e-11) * var_x128 - var_x139 * var_x70) * mParameters[5])); +} + +template +DEVICE +void Cellli_mouse_2010FromCellMLBackwardEuler::UpdateTransmembranePotentialDevice(ValueType var_chaste_interface__environment__time, + ValueType rY[], + ValueType mDt, + const ValueType mParameters[], + bool mSetVoltageDerivativeToZero, + ValueType mFixedVoltage, + DeviceStimulusFunctor stim, + ValueType capacitance) +{ + ValueType var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? CHASTE_THIS(mFixedVoltage) : rY[0]); + // Units: millivolt; Initial value: -78.9452115785979 + ValueType var_chaste_interface__calcium_concentration__Cai_converted = rY[1]; + // Units: millimolar; Initial value: 9.499150681398009e-05 + ValueType var_chaste_interface__calcium_concentration__Cass = rY[2]; + // Units: micromolar; Initial value: 0.0954184301907784 + ValueType var_chaste_interface__L_type_calcium_current__O = rY[10]; + // Units: dimensionless; Initial value: 1.23713515513533e-06 + ValueType var_chaste_interface__L_type_calcium_current__y_gate = rY[12]; + // Units: dimensionless; Initial value: 0.845044436980163 + ValueType var_chaste_interface__sodium_concentration__Nai = rY[13]; + // Units: micromolar; Initial value: 12364.7482121793 + ValueType var_chaste_interface__fast_sodium_current__O_Na = rY[14]; + // Units: dimensionless; Initial value: 1.46826771436314e-06 + ValueType var_chaste_interface__potassium_concentration__Ki = rY[22]; + // Units: micromolar; Initial value: 115599.50642567 + ValueType var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_K_I__aur = rY[23]; + // Units: dimensionless; Initial value: 0.00346258606821817 + ValueType var_chaste_interface__ultra_rapidly_activating_delayed_rectifier_K_I__iur = rY[24]; + // Units: dimensionless; Initial value: 0.955684946168062 + ValueType var_chaste_interface__non_inactivating_steady_state_K_I__aKss = rY[25]; + // Units: dimensionless; Initial value: 0.287585636847048 + ValueType var_chaste_interface__non_inactivating_steady_state_K_I__iKss = rY[26]; + // Units: dimensionless; Initial value: 1.0 + ValueType var_chaste_interface__rapid_delayed_rectifier_K_I__O_K = rY[27]; + // Units: dimensionless; Initial value: 0.0131742086125972 + ValueType var_chaste_interface__slow_delayed_rectifier_K_I__nKs = rY[31]; + // Units: dimensionless; Initial value: 0.00336735013094628 + ValueType var_chaste_interface__fast_transient_outward_K_I__ato_f = rY[32]; + // Units: dimensionless; Initial value: 0.0142335908879204 + ValueType var_chaste_interface__fast_transient_outward_K_I__ito_f = rY[33]; + // Units: dimensionless; Initial value: 0.996989882138174 + ValueType var_chaste_interface__slow_transient_outward_K_I__ato_s = rY[34]; + // Units: dimensionless; Initial value: 0.0443263407760382 + ValueType var_chaste_interface__slow_transient_outward_K_I__ito_s = rY[35]; + // Units: dimensionless; Initial value: 0.887568880831388 + + const ValueType var_calcium_activated_chloride_current__E_Cl = -40; // millivolt + const ValueType var_calcium_activated_chloride_current__Km_Cl = 10; // micromolar + const ValueType var_calcium_activated_chloride_current__g_ClCa = 10; // milliS_per_microF + const ValueType var_calcium_background_current__g_Cab = CHASTE_CONST(0.00069999999999999999); // milliS_per_microF + const ValueType var_calcium_concentration__Cai = 1000 * var_chaste_interface__calcium_concentration__Cai_converted; // micromolar + const ValueType var_calcium_pump_current__Km_pCa = CHASTE_CONST(0.28849999999999998); // micromolar + const ValueType var_calcium_pump_current__i_pCa_max = CHASTE_CONST(0.095500000000000002); // picoA_per_picoF + const ValueType var_calcium_pump_current__i_pCa = CHASTE_MATH::Pow(var_calcium_concentration__Cai, 2) * var_calcium_pump_current__i_pCa_max / (CHASTE_MATH::Pow(var_calcium_concentration__Cai, 2) + CHASTE_MATH::Pow(var_calcium_pump_current__Km_pCa, 2)); // picoA_per_picoF + const ValueType var_cell__Acap = CHASTE_CONST(0.00013866); // cm2 + const ValueType var_cell__F = CHASTE_CONST(96.5); // coulomb_per_millimole + const ValueType var_cell__R = CHASTE_CONST(8.3140000000000001); // joule_per_mole_kelvin + const ValueType var_cell__T = 308; // kelvin + const ValueType var_calcium_background_current__E_CaN = CHASTE_CONST(0.5) * var_cell__R * var_cell__T * CHASTE_MATH::Log(mParameters[1] / var_calcium_concentration__Cai) / var_cell__F; // millivolt + const ValueType var_L_type_calcium_current__FVRT = var_cell__F * var_chaste_interface__cell__V / (var_cell__R * var_cell__T); // dimensionless + const ValueType var_L_type_calcium_current__FVRT_Ca = 2 * var_L_type_calcium_current__FVRT; // dimensionless + const ValueType var_calcium_activated_chloride_current__O_ClCa = CHASTE_CONST(0.20000000000000001) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(5.9871794871794881) - CHASTE_CONST(0.12820512820512822) * var_chaste_interface__cell__V)); // dimensionless + const ValueType 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 ValueType 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 ValueType var_cell__Vss = CHASTE_CONST(2.1999999999999998e-8); // microlitre + const ValueType var_L_type_calcium_current__i_CaL = ((CHASTE_MATH::Abs(var_L_type_calcium_current__FVRT_Ca) > CHASTE_CONST(1.0000000000000001e-5)) ? (-2 * (-var_chaste_interface__calcium_concentration__Cass + mParameters[1] * CHASTE_MATH::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 - CHASTE_MATH::Exp(-var_L_type_calcium_current__FVRT_Ca)) * var_cell__Acap * mParameters[5])) : (-CHASTE_CONST(2.0000000000000002e-5) * (-var_chaste_interface__calcium_concentration__Cass + mParameters[1] * CHASTE_MATH::Exp(-CHASTE_CONST(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 - CHASTE_MATH::Exp(-CHASTE_CONST(1.0000000000000001e-5))) * var_cell__Acap * mParameters[5]))); // picoA_per_picoF + const ValueType var_cell__i_Stim_converted = CHASTE_STIM(var_chaste_interface__environment__time); // uA_per_cm2 + const ValueType var_cell__i_Stim = var_cell__i_Stim_converted / CHASTE_CAP(); // picoA_per_picoF + const ValueType var_fast_transient_outward_K_I__g_Kto_f = CHASTE_CONST(0.53469999999999995); // milliS_per_microF + const ValueType var_fast_transient_outward_K_I__E_K = var_cell__R * var_cell__T * CHASTE_MATH::Log(mParameters[2] / var_chaste_interface__potassium_concentration__Ki) / var_cell__F; // millivolt + const ValueType var_fast_transient_outward_K_I__i_Kto_f = CHASTE_MATH::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 ValueType 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 ValueType var_slow_delayed_rectifier_K_I__i_Ks = CHASTE_MATH::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 ValueType var_slow_transient_outward_K_I__g_Kto_s = 0; // milliS_per_microF + const ValueType 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 ValueType var_sodium_background_current__g_Nab = CHASTE_CONST(0.0025999999999999999); // milliS_per_microF + const ValueType var_sodium_calcium_exchange_current__K_mAllo = 0; // micromolar + const ValueType var_sodium_calcium_exchange_current__K_mCai = CHASTE_CONST(3.6000000000000001); // micromolar + const ValueType var_sodium_calcium_exchange_current__K_mCao = 1400; // micromolar + const ValueType var_sodium_calcium_exchange_current__K_mNai = 12000; // micromolar + const ValueType var_sodium_calcium_exchange_current__K_mNao = 88000; // micromolar + const ValueType var_sodium_calcium_exchange_current__eta = CHASTE_CONST(0.34999999999999998); // dimensionless + const ValueType var_sodium_calcium_exchange_current__k_sat = CHASTE_CONST(0.27000000000000002); // dimensionless + const ValueType var_fast_sodium_current__E_Na = var_cell__R * var_cell__T * CHASTE_MATH::Log((mParameters[3] + CHASTE_CONST(0.1111111111111111) * mParameters[2]) / (var_chaste_interface__sodium_concentration__Nai + CHASTE_CONST(0.1111111111111111) * var_chaste_interface__potassium_concentration__Ki)) / var_cell__F; // millivolt + const ValueType 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 ValueType var_rapid_delayed_rectifier_K_I__i_Kr = (-var_cell__R * var_cell__T * CHASTE_MATH::Log((mParameters[2] + CHASTE_CONST(0.020408163265306124) * mParameters[3]) / (var_chaste_interface__potassium_concentration__Ki + CHASTE_CONST(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 ValueType 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 ValueType var_sodium_calcium_exchange_current__i_NCX = (CHASTE_MATH::Pow(var_chaste_interface__sodium_concentration__Nai, 3) * mParameters[1] * CHASTE_MATH::Exp(var_cell__F * var_chaste_interface__cell__V * var_sodium_calcium_exchange_current__eta / (var_cell__R * var_cell__T)) - CHASTE_MATH::Pow(mParameters[3], 3) * var_calcium_concentration__Cai * CHASTE_MATH::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 + CHASTE_MATH::Pow(var_sodium_calcium_exchange_current__K_mAllo, 2) / CHASTE_MATH::Pow(var_calcium_concentration__Cai, 2)) * (1 + var_sodium_calcium_exchange_current__k_sat * CHASTE_MATH::Exp((-1 + var_sodium_calcium_exchange_current__eta) * var_cell__F * var_chaste_interface__cell__V / (var_cell__R * var_cell__T))) * (CHASTE_MATH::Pow(mParameters[3], 3) * var_calcium_concentration__Cai + CHASTE_MATH::Pow(var_sodium_calcium_exchange_current__K_mNao, 3) * var_calcium_concentration__Cai + CHASTE_MATH::Pow(var_chaste_interface__sodium_concentration__Nai, 3) * mParameters[1] + CHASTE_MATH::Pow(var_chaste_interface__sodium_concentration__Nai, 3) * var_sodium_calcium_exchange_current__K_mCao + CHASTE_MATH::Pow(mParameters[3], 3) * (1 + CHASTE_MATH::Pow(var_chaste_interface__sodium_concentration__Nai, 3) / CHASTE_MATH::Pow(var_sodium_calcium_exchange_current__K_mNai, 3)) * var_sodium_calcium_exchange_current__K_mCai + CHASTE_MATH::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 ValueType var_sodium_potassium_pump_current__Km_Ko = 1500; // micromolar + const ValueType var_sodium_potassium_pump_current__Km_Nai = 16600; // micromolar + const ValueType var_sodium_potassium_pump_current__i_NaK_max = CHASTE_CONST(2.4860000000000002); // picoA_per_picoF + const ValueType var_sodium_potassium_pump_current__sigma = -CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(1.4858841010401188e-5) * mParameters[3]); // dimensionless + const ValueType var_sodium_potassium_pump_current__f_NaK = 1 / (1 + CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(0.10000000000000001) * var_cell__F * var_chaste_interface__cell__V / (var_cell__R * var_cell__T)) + CHASTE_CONST(0.036499999999999998) * var_sodium_potassium_pump_current__sigma * CHASTE_MATH::Exp(-var_cell__F * var_chaste_interface__cell__V / (var_cell__R * var_cell__T))); // dimensionless + const ValueType 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 + CHASTE_MATH::Pow((var_sodium_potassium_pump_current__Km_Nai / var_chaste_interface__sodium_concentration__Nai), CHASTE_CONST(2.3999999999999999))) * (mParameters[2] + var_sodium_potassium_pump_current__Km_Ko)); // picoA_per_picoF + const ValueType 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 + CHASTE_MATH::Exp(CHASTE_CONST(0.089599999999999999) * var_chaste_interface__cell__V - CHASTE_CONST(0.089599999999999999) * var_fast_transient_outward_K_I__E_K)) * (210 + mParameters[2])); // picoA_per_picoF + const ValueType var_ultra_rapidly_activating_delayed_rectifier_K_I__g_Kur = CHASTE_CONST(0.25); // milliS_per_microF + const ValueType 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 ValueType 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; +} + +#include "ChasteCpuMacros.hpp" +#endif // CELLLI_MOUSE_2010FROMCELLMLBACKWARDEULERKERNELS_HPP_ \ No newline at end of file diff --git a/chaste_codegen/data/tests/chaste_reference_models/BE/sachse_moreno_abildskov_2008_bKernels.hpp b/chaste_codegen/data/tests/chaste_reference_models/BE/sachse_moreno_abildskov_2008_bKernels.hpp new file mode 100644 index 000000000..aaded3329 --- /dev/null +++ b/chaste_codegen/data/tests/chaste_reference_models/BE/sachse_moreno_abildskov_2008_bKernels.hpp @@ -0,0 +1,164 @@ +#ifndef CELLSACHSE_MORENO_ABILDSKOV_2008_BFROMCELLMLBACKWARDEULERKERNELS_HPP_ +#define CELLSACHSE_MORENO_ABILDSKOV_2008_BFROMCELLMLBACKWARDEULERKERNELS_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 "MathsCustomFunctions.hpp" +#include "ChasteDeviceMacros.hpp" + + +template +DEVICE +void Cellsachse_moreno_abildskov_2008_bFromCellMLBackwardEuler::SolveClosedFormVarsDevice(ValueType rY[Cellsachse_moreno_abildskov_2008_bFromCellMLBackwardEuler::TOTAL_SIZE], + ValueType mDt, + const ValueType mParameters[], + bool mSetVoltageDerivativeToZero, + ValueType mFixedVoltage, + ValueType capacitance) +{ + + + + +} + +template +DEVICE +void Cellsachse_moreno_abildskov_2008_bFromCellMLBackwardEuler::FillInitialGuessDevice(ValueType _guess[Cellsachse_moreno_abildskov_2008_bFromCellMLBackwardEuler::NONLINEAR_SIZE], + const ValueType rY[Cellsachse_moreno_abildskov_2008_bFromCellMLBackwardEuler::TOTAL_SIZE]) +{ + _guess[0] = rY[1];_guess[1] = rY[2];_guess[2] = rY[3];_guess[3] = rY[4];_guess[4] = rY[5];_guess[5] = rY[6]; +} + +template +DEVICE +void Cellsachse_moreno_abildskov_2008_bFromCellMLBackwardEuler::ScatterSolutionDevice(const ValueType _guess[Cellsachse_moreno_abildskov_2008_bFromCellMLBackwardEuler::NONLINEAR_SIZE], + ValueType rY[Cellsachse_moreno_abildskov_2008_bFromCellMLBackwardEuler::TOTAL_SIZE]) +{ + rY[1] = _guess[0];rY[2] = _guess[1];rY[3] = _guess[2];rY[4] = _guess[3];rY[5] = _guess[4];rY[6] = _guess[5]; +} + +template +DEVICE +void Cellsachse_moreno_abildskov_2008_bFromCellMLBackwardEuler::ComputeResidualDevice(ValueType var_chaste_interface__environment__time_converted, + const ValueType rCurrentGuess[Cellsachse_moreno_abildskov_2008_bFromCellMLBackwardEuler::NONLINEAR_SIZE], + const ValueType rY[], + ValueType rResidual[Cellsachse_moreno_abildskov_2008_bFromCellMLBackwardEuler::NONLINEAR_SIZE], + ValueType mDt, + const ValueType mParameters[], + bool mSetVoltageDerivativeToZero, + ValueType mFixedVoltage, + ValueType capacitance, + const DeviceStimulusFunctor stim) +{ + ValueType var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_THIS(mFixedVoltage) : rY[0]); // Units: millivolt + + ValueType var_chaste_interface__I_Shkr__C0Shkr = rCurrentGuess[0]; + ValueType var_chaste_interface__I_Shkr__C1Shkr = rCurrentGuess[1]; + ValueType var_chaste_interface__I_Shkr__C2Shkr = rCurrentGuess[2]; + ValueType var_chaste_interface__I_Shkr__C3Shkr = rCurrentGuess[3]; + ValueType var_chaste_interface__I_Shkr__C4Shkr = rCurrentGuess[4]; + ValueType var_chaste_interface__I_Shkr__OShkr = rCurrentGuess[5]; + + const ValueType var_I_Shkr__k_o = 18; // first_order_rate_constant + const ValueType var_I_Shkr__k_v0 = 2; // first_order_rate_constant + const ValueType var_I_Shkr__ko = 77; // first_order_rate_constant + const ValueType 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 ValueType d_dt_chaste_interface_var_I_Shkr__OShkr = CHASTE_CONST(0.001) * var_I_Shkr__OShkr_orig_deriv; // 1 / millisecond + const ValueType var_I_Shkr__kv0 = 30; // first_order_rate_constant + const ValueType var_I_Shkr__z_v = -CHASTE_CONST(1.53); // dimensionless + const ValueType var_I_Shkr__zv = CHASTE_CONST(1.28); // dimensionless + const ValueType var_model_parameters__F = 96500; // coulomb_per_mole + const ValueType var_model_parameters__R = 8310; // millijoule_per_kelvin_mole + const ValueType var_I_Shkr__k_v = var_I_Shkr__k_v0 * CHASTE_MATH::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 ValueType var_I_Shkr__kv = var_I_Shkr__kv0 * CHASTE_MATH::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 ValueType 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 ValueType d_dt_chaste_interface_var_I_Shkr__C0Shkr = CHASTE_CONST(0.001) * var_I_Shkr__C0Shkr_orig_deriv; // 1 / millisecond + const ValueType 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 ValueType d_dt_chaste_interface_var_I_Shkr__C1Shkr = CHASTE_CONST(0.001) * var_I_Shkr__C1Shkr_orig_deriv; // 1 / millisecond + const ValueType 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 ValueType d_dt_chaste_interface_var_I_Shkr__C2Shkr = CHASTE_CONST(0.001) * var_I_Shkr__C2Shkr_orig_deriv; // 1 / millisecond + const ValueType 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 ValueType d_dt_chaste_interface_var_I_Shkr__C3Shkr = CHASTE_CONST(0.001) * var_I_Shkr__C3Shkr_orig_deriv; // 1 / millisecond + const ValueType 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 ValueType d_dt_chaste_interface_var_I_Shkr__C4Shkr = CHASTE_CONST(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; +} + +template +DEVICE +void Cellsachse_moreno_abildskov_2008_bFromCellMLBackwardEuler::ComputeJacobianDevice(ValueType var_chaste_interface__environment__time_converted, + const ValueType rCurrentGuess[Cellsachse_moreno_abildskov_2008_bFromCellMLBackwardEuler::NONLINEAR_SIZE], + const ValueType rY[], + ValueType rJacobian[Cellsachse_moreno_abildskov_2008_bFromCellMLBackwardEuler::NONLINEAR_SIZE][Cellsachse_moreno_abildskov_2008_bFromCellMLBackwardEuler::NONLINEAR_SIZE], + ValueType mDt, + const ValueType mParameters[], + bool mSetVoltageDerivativeToZero, + ValueType mFixedVoltage, + ValueType capacitance, + const DeviceStimulusFunctor stim) +{ + ValueType var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_THIS(mFixedVoltage) : rY[0]); // Units: millivolt + + + const ValueType var_x0 = var_chaste_interface__membrane__Vm / mParameters[6]; + const ValueType var_x1 = CHASTE_MATH::Exp(CHASTE_CONST(14.864019253910952) * var_x0); + const ValueType var_x2 = CHASTE_CONST(0.12) * var_x1; + const ValueType var_x3 = CHASTE_MATH::Exp(-CHASTE_CONST(17.767148014440433) * var_x0); + const ValueType var_x4 = CHASTE_CONST(0.002) * var_x3; + const ValueType var_x5 = CHASTE_CONST(0.089999999999999997) * var_x1; + const ValueType var_x6 = CHASTE_CONST(0.0040000000000000001) * var_x3; + const ValueType var_x7 = CHASTE_CONST(0.059999999999999998) * var_x1; + const ValueType var_x8 = CHASTE_CONST(0.0060000000000000001) * var_x3; + const ValueType var_x9 = CHASTE_CONST(0.029999999999999999) * var_x1; + const ValueType var_x10 = CHASTE_CONST(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 * (-CHASTE_CONST(0.076999999999999999) - var_x10));rJacobian[4][5] = -(mDt * (CHASTE_CONST(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 * (CHASTE_CONST(0.076999999999999999)));rJacobian[5][5] = 1.0 - (mDt * (-CHASTE_CONST(0.017999999999999999))); +} + +template +DEVICE +void Cellsachse_moreno_abildskov_2008_bFromCellMLBackwardEuler::UpdateTransmembranePotentialDevice(ValueType var_chaste_interface__environment__time_converted, + ValueType rY[], + ValueType mDt, + const ValueType mParameters[], + bool mSetVoltageDerivativeToZero, + ValueType mFixedVoltage, + DeviceStimulusFunctor stim, + ValueType capacitance) +{ + ValueType var_chaste_interface__membrane__Vm = (mSetVoltageDerivativeToZero ? CHASTE_THIS(mFixedVoltage) : rY[0]); + // Units: millivolt; Initial value: -58.0 + ValueType var_chaste_interface__I_Shkr__OShkr = rY[6]; + // Units: dimensionless; Initial value: 0.0 + + const ValueType var_I_Kir__aKir = CHASTE_CONST(0.93999999999999995); // dimensionless + const ValueType var_I_Kir__bKir = CHASTE_CONST(1.26); // dimensionless + const ValueType var_I_b__Eb = 0; // millivolt + const ValueType var_I_stim__I_stim_converted = -CHASTE_STIM(var_chaste_interface__environment__time_converted); // uA_per_cm2 + const ValueType var_I_stim__I_stim = 1000 * var_I_stim__I_stim_converted * mParameters[2] / CHASTE_CAP(); // nanoampere + const ValueType var_I_b__I_b = (-var_I_b__Eb + var_chaste_interface__membrane__Vm) * mParameters[5]; // nanoampere + const ValueType var_model_parameters__F = 96500; // coulomb_per_mole + const ValueType var_model_parameters__R = 8310; // millijoule_per_kelvin_mole + const ValueType var_I_Kir__EK = var_model_parameters__R * mParameters[6] * CHASTE_MATH::Log(mParameters[1] / mParameters[0]) / var_model_parameters__F; // millivolt + const ValueType var_I_Kir__OKir = 1 / (var_I_Kir__aKir + CHASTE_MATH::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 ValueType var_I_Kir__I_Kir = CHASTE_CONST(0.031622776601683791) * CHASTE_MATH::Sqrt(mParameters[1]) * (-var_I_Kir__EK + var_chaste_interface__membrane__Vm) * mParameters[4] * var_I_Kir__OKir; // nanoampere + const ValueType var_I_Shkr__I_Shkr = ((((var_chaste_interface__membrane__Vm >= -CHASTE_CONST(8.6113989637305703e-9) * mParameters[6]) && (var_chaste_interface__membrane__Vm <= CHASTE_CONST(8.6113989637305703e-9) * mParameters[6])) || ((var_chaste_interface__membrane__Vm >= CHASTE_CONST(8.6113989637305703e-9) * mParameters[6]) && (var_chaste_interface__membrane__Vm <= -CHASTE_CONST(8.6113989637305703e-9) * mParameters[6]))) ? (CHASTE_CONST(58062575.210589655) * (CHASTE_CONST(8.6113989637305703e-9) * mParameters[6] + var_chaste_interface__membrane__Vm) * (CHASTE_CONST(0.0096499999999999989) * (-mParameters[1] * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8)) + mParameters[0]) * var_chaste_interface__I_Shkr__OShkr * mParameters[3] / (1 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) + CHASTE_CONST(0.0096499999999999989) * (-mParameters[1] * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)) + mParameters[0]) * var_chaste_interface__I_Shkr__OShkr * mParameters[3] / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) / mParameters[6] - CHASTE_CONST(0.0096499999999999989) * (-mParameters[1] * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8)) + mParameters[0]) * var_chaste_interface__I_Shkr__OShkr * mParameters[3] / (1 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8)))) : (CHASTE_CONST(1120607.7015643802) * (-mParameters[1] * CHASTE_MATH::Exp(-CHASTE_CONST(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 - CHASTE_MATH::Exp(-CHASTE_CONST(11.612515042117931) * var_chaste_interface__membrane__Vm / mParameters[6])) * mParameters[6]))); // nanoampere + const ValueType 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 ValueType d_dt_chaste_interface_var_membrane__Vm = CHASTE_CONST(0.001) * var_membrane__Vm_orig_deriv; // millivolt / millisecond + + rY[0] += mDt*d_dt_chaste_interface_var_membrane__Vm; +} + +#include "ChasteCpuMacros.hpp" +#endif // CELLSACHSE_MORENO_ABILDSKOV_2008_BFROMCELLMLBACKWARDEULERKERNELS_HPP_ \ No newline at end of file diff --git a/chaste_codegen/data/tests/chaste_reference_models/Cvode/difrancesco_noble_model_1985Kernels.hpp b/chaste_codegen/data/tests/chaste_reference_models/Cvode/difrancesco_noble_model_1985Kernels.hpp new file mode 100644 index 000000000..42c99778b --- /dev/null +++ b/chaste_codegen/data/tests/chaste_reference_models/Cvode/difrancesco_noble_model_1985Kernels.hpp @@ -0,0 +1,200 @@ +#ifndef CELLDIFRANCESCO_NOBLE_MODEL_1985FROMCELLMLCVODEKERNELS_HPP_ +#define CELLDIFRANCESCO_NOBLE_MODEL_1985FROMCELLMLCVODEKERNELS_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 "MathsCustomFunctions.hpp" +#include "ChasteDeviceMacros.hpp" + +template +DEVICE +void Celldifrancesco_noble_model_1985FromCellMLCvode::EvaluateYDerivativesDevice(ValueType var_chaste_interface__environment__time_converted, const ValueType *rY, ValueType *rDY, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType *mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim) +{ + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_THIS(mFixedVoltage) : rY[0]); + // Units: millivolt; Initial value: -87.0 + double var_chaste_interface__intracellular_calcium_concentration__Cai = rY[1]; + // Units: millimolar; Initial value: 5e-05 + double var_chaste_interface__hyperpolarising_activated_current_y_gate__y = rY[2]; + // Units: dimensionless; Initial value: 0.2 + double var_chaste_interface__time_dependent_potassium_current_x_gate__x = rY[3]; + // Units: dimensionless; Initial value: 0.01 + double var_chaste_interface__transient_outward_current_s_gate__s = rY[4]; + // Units: dimensionless; Initial value: 1.0 + double var_chaste_interface__fast_sodium_current_m_gate__m = rY[5]; + // Units: dimensionless; Initial value: 0.01 + double var_chaste_interface__fast_sodium_current_h_gate__h = rY[6]; + // Units: dimensionless; Initial value: 0.8 + double var_chaste_interface__second_inward_current_d_gate__d = rY[7]; + // Units: dimensionless; Initial value: 0.005 + double var_chaste_interface__second_inward_current_f_gate__f = rY[8]; + // Units: dimensionless; Initial value: 1.0 + double var_chaste_interface__second_inward_current_f2_gate__f2 = rY[9]; + // Units: dimensionless; Initial value: 1.0 + double var_chaste_interface__intracellular_sodium_concentration__Nai = rY[10]; + // Units: millimolar; Initial value: 8.0 + double var_chaste_interface__intracellular_calcium_concentration__Ca_up = rY[11]; + // Units: millimolar; Initial value: 2.0 + double var_chaste_interface__intracellular_calcium_concentration__Ca_rel = rY[12]; + // Units: millimolar; Initial value: 1.0 + double var_chaste_interface__intracellular_calcium_concentration__p = rY[13]; + // Units: dimensionless; Initial value: 1.0 + double var_chaste_interface__extracellular_potassium_concentration__Kc = rY[14]; + // Units: millimolar; Initial value: 4.0 + double var_chaste_interface__intracellular_potassium_concentration__Ki = 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 = CHASTE_CONST(0.001); // dimensionless + const double var_Na_Ca_exchanger__gamma = CHASTE_CONST(0.5); // dimensionless + const double var_Na_Ca_exchanger__n_NaCa = 3; // dimensionless + const double var_calcium_background_current__g_Cab = CHASTE_CONST(0.02); // microS + const double var_extracellular_potassium_concentration__Ve = CHASTE_CONST(0.00157); // micrometre3 + const double var_extracellular_potassium_concentration__pf = CHASTE_CONST(0.69999999999999996); // per_second + const double var_fast_sodium_current_m_gate__delta_m = CHASTE_CONST(1.0000000000000001e-5); // millivolt + const double var_hyperpolarising_activated_current__Km_f = 45; // millimolar + const double var_hyperpolarising_activated_current_y_gate__delta_y = CHASTE_CONST(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 = CHASTE_CONST(0.050000000000000003); // second + const double var_intracellular_calcium_concentration__tau_rep = 2; // second + const double var_intracellular_calcium_concentration__tau_up = CHASTE_CONST(0.025000000000000001); // second + const double var_intracellular_sodium_concentration__V_e_ratio = CHASTE_CONST(0.10000000000000001); // dimensionless + const double var_intracellular_sodium_concentration__length = 2; // micrometre + const double var_intracellular_sodium_concentration__radius = CHASTE_CONST(0.050000000000000003); // micrometre + const double var_intracellular_sodium_concentration__V_Cell = CHASTE_CONST(3.1415926540000001) * CHASTE_MATH::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 = CHASTE_CONST(0.02) * var_intracellular_sodium_concentration__Vi; // micrometre3 + const double var_intracellular_calcium_concentration__V_up = CHASTE_CONST(0.050000000000000003) * var_intracellular_sodium_concentration__Vi; // micrometre3 + const double var_membrane__F = CHASTE_CONST(96485.341499999995); // coulomb_per_mole + const double var_intracellular_calcium_concentration__i_rel = 2 * CHASTE_MATH::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 * mParameters[0] * var_membrane__F / ((CHASTE_MATH::Pow(var_chaste_interface__intracellular_calcium_concentration__Cai, var_intracellular_calcium_concentration__rCa) + CHASTE_MATH::Pow(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 = CHASTE_CONST(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 = CHASTE_CONST(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 * 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 = CHASTE_CONST(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 = CHASTE_CONST(0.001) * var_intracellular_calcium_concentration__Ca_up_orig_deriv; // millimolar / millisecond + const double var_membrane__R = CHASTE_CONST(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 = CHASTE_CONST(0.5) * var_membrane__RTONF * CHASTE_MATH::Log(mParameters[5] / var_chaste_interface__intracellular_calcium_concentration__Cai); // millivolt + const double var_fast_sodium_current__E_mh = var_membrane__RTONF * CHASTE_MATH::Log((mParameters[6] + CHASTE_CONST(0.12) * var_chaste_interface__extracellular_potassium_concentration__Kc) / (var_chaste_interface__intracellular_sodium_concentration__Nai + CHASTE_CONST(0.12) * var_chaste_interface__intracellular_potassium_concentration__Ki)); // millivolt + const double var_hyperpolarising_activated_current__E_K = var_membrane__RTONF * CHASTE_MATH::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 * CHASTE_MATH::Log(mParameters[6] / var_chaste_interface__intracellular_sodium_concentration__Nai); // millivolt + const double var_Na_Ca_exchanger__i_NaCa = (CHASTE_MATH::Pow(var_chaste_interface__intracellular_sodium_concentration__Nai, var_Na_Ca_exchanger__n_NaCa) * mParameters[5] * CHASTE_MATH::Exp((-2 + var_Na_Ca_exchanger__n_NaCa) * var_Na_Ca_exchanger__gamma * var_chaste_interface__membrane__V / var_membrane__RTONF) - CHASTE_MATH::Pow(mParameters[6], var_Na_Ca_exchanger__n_NaCa) * var_chaste_interface__intracellular_calcium_concentration__Cai * CHASTE_MATH::Exp((-1 + var_Na_Ca_exchanger__gamma) * (-2 + var_Na_Ca_exchanger__n_NaCa) * var_chaste_interface__membrane__V / var_membrane__RTONF)) * mParameters[16] / ((1 + CHASTE_CONST(144.92753623188406) * var_chaste_interface__intracellular_calcium_concentration__Cai) * (1 + (CHASTE_MATH::Pow(mParameters[6], var_Na_Ca_exchanger__n_NaCa) * var_chaste_interface__intracellular_calcium_concentration__Cai + CHASTE_MATH::Pow(var_chaste_interface__intracellular_sodium_concentration__Nai, var_Na_Ca_exchanger__n_NaCa) * 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 = CHASTE_MATH::Pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3) * (-var_fast_sodium_current__E_mh + var_chaste_interface__membrane__V) * mParameters[10] * var_chaste_interface__fast_sodium_current_h_gate__h; // nanoA + const double var_fast_sodium_current_h_gate__alpha_h = 20 * CHASTE_MATH::Exp(-CHASTE_CONST(9.375) + CHASTE_CONST(0.125) * mParameters[12] - CHASTE_CONST(0.125) * var_chaste_interface__membrane__V); // per_second + const double var_fast_sodium_current_h_gate__beta_h = 2000 / (1 + 320 * CHASTE_MATH::Exp(-CHASTE_CONST(7.5) + CHASTE_CONST(0.10000000000000001) * mParameters[12] - CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V)); // per_second + const double var_fast_sodium_current_h_gate__h_inf = CHASTE_CONST(0.01) * mParameters[11] + (1 - CHASTE_CONST(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); // 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 = CHASTE_CONST(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 > CHASTE_MATH::Abs(var_fast_sodium_current_m_gate__E0_m)) ? (2000) : (200 * var_fast_sodium_current_m_gate__E0_m / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(0.10000000000000001) * var_fast_sodium_current_m_gate__E0_m)))); // per_second + const double var_fast_sodium_current_m_gate__beta_m = 8000 * CHASTE_MATH::Exp(-CHASTE_CONST(3.6960000000000002) - CHASTE_CONST(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 = CHASTE_CONST(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 * 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 * 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 = CHASTE_CONST(0.050000000000000003) * CHASTE_MATH::Exp(-CHASTE_CONST(2.8140000000000001) - CHASTE_CONST(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 > CHASTE_MATH::Abs(var_hyperpolarising_activated_current_y_gate__E0_y)) ? (CHASTE_CONST(2.5)) : (var_hyperpolarising_activated_current_y_gate__E0_y / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(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 = CHASTE_CONST(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 >= -CHASTE_CONST(34.000000399999998)) && (var_chaste_interface__membrane__V <= -CHASTE_CONST(33.999999600000002))) ? (-CHASTE_CONST(2.5000000000718892e-7) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.0000000000287557e-7))) + CHASTE_CONST(1249999.9999640554) * (CHASTE_CONST(34.000000399999998) + var_chaste_interface__membrane__V) * (CHASTE_CONST(2.5000000000718892e-7) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(1.0000000000287557e-7))) + CHASTE_CONST(2.5000000000718892e-7) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.0000000000287557e-7))))) : (CHASTE_CONST(0.625) * (34 + var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(8.5) + CHASTE_CONST(0.25) * var_chaste_interface__membrane__V)))); // per_second + const double var_intracellular_calcium_concentration__beta_p = 5 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(8.5) - CHASTE_CONST(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 = CHASTE_CONST(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 = CHASTE_CONST(0.0001); // millivolt + const double var_second_inward_current_d_gate__alpha_d = ((var_second_inward_current_d_gate__delta_d > CHASTE_MATH::Abs(var_second_inward_current_d_gate__E0_d)) ? (120) : (30 * var_second_inward_current_d_gate__E0_d / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(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 > CHASTE_MATH::Abs(var_second_inward_current_d_gate__E0_d)) ? (120) : (12 * var_second_inward_current_d_gate__E0_d / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(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 = CHASTE_CONST(0.001) * var_second_inward_current_d_gate__d_orig_deriv; // 1 / millisecond + const double var_second_inward_current_f2_gate__K_mf2 = CHASTE_CONST(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 = CHASTE_CONST(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 + CHASTE_MATH::Exp(-CHASTE_CONST(8.5) - CHASTE_CONST(0.25) * var_chaste_interface__membrane__V)); // per_second + const double var_second_inward_current_f_gate__delta_f = CHASTE_CONST(0.0001); // millivolt + const double var_second_inward_current_f_gate__alpha_f = ((var_second_inward_current_f_gate__delta_f > CHASTE_MATH::Abs(var_second_inward_current_f_gate__E0_f)) ? (25) : (CHASTE_CONST(6.25) * var_second_inward_current_f_gate__E0_f / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(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 >= CHASTE_CONST(49.999998664311967)) && (var_chaste_interface__membrane__V <= CHASTE_CONST(50.000001335688033))) ? (CHASTE_CONST(374338.90823576227) * (-CHASTE_CONST(49.999998664311967) + var_chaste_interface__membrane__V) * (CHASTE_CONST(1.9999999999556149e-7) * (var_chaste_interface__intracellular_calcium_concentration__Cai * CHASTE_MATH::Exp(CHASTE_CONST(3.7433890822745473)) - mParameters[5] * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999997780743e-8))) * 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 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999997780743e-8))) + CHASTE_CONST(1.9999999999556149e-7) * (var_chaste_interface__intracellular_calcium_concentration__Cai * CHASTE_MATH::Exp(CHASTE_CONST(3.7433890822745473)) - mParameters[5] * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999997780743e-8))) * 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 - CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999997780743e-8)))) - CHASTE_CONST(1.9999999999556149e-7) * (var_chaste_interface__intracellular_calcium_concentration__Cai * CHASTE_MATH::Exp(CHASTE_CONST(3.7433890822745473)) - mParameters[5] * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999997780743e-8))) * 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 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999997780743e-8)))) : (CHASTE_CONST(0.14973556329098189) * (-50 + var_chaste_interface__membrane__V) * (var_chaste_interface__intracellular_calcium_concentration__Cai * CHASTE_MATH::Exp(CHASTE_CONST(3.7433890822745473)) - mParameters[5] * CHASTE_MATH::Exp(CHASTE_CONST(3.7433890822745473) - CHASTE_CONST(0.074867781645490947) * var_chaste_interface__membrane__V)) * 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 - CHASTE_MATH::Exp(CHASTE_CONST(3.7433890822745473) - CHASTE_CONST(0.074867781645490947) * var_chaste_interface__membrane__V)))); // nanoA + const double var_intracellular_calcium_concentration__Cai_orig_deriv = -CHASTE_CONST(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 = CHASTE_CONST(0.001) * var_intracellular_calcium_concentration__Cai_orig_deriv; // millimolar / millisecond + const double var_second_inward_current__i_siK = (((var_chaste_interface__membrane__V >= CHASTE_CONST(49.999997328623934)) && (var_chaste_interface__membrane__V <= CHASTE_CONST(50.000002671376066))) ? (CHASTE_CONST(187169.45411399176) * (-CHASTE_CONST(49.999997328623934) + var_chaste_interface__membrane__V) * (CHASTE_CONST(9.9999999999858744e-10) * (var_chaste_interface__intracellular_potassium_concentration__Ki * CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736)) - var_chaste_interface__extracellular_potassium_concentration__Kc * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999858739e-8))) * 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 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999858739e-8))) + CHASTE_CONST(9.9999999999858744e-10) * (var_chaste_interface__intracellular_potassium_concentration__Ki * CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736)) - var_chaste_interface__extracellular_potassium_concentration__Kc * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999858739e-8))) * 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 - CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999858739e-8)))) - CHASTE_CONST(9.9999999999858744e-10) * (var_chaste_interface__intracellular_potassium_concentration__Ki * CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736)) - var_chaste_interface__extracellular_potassium_concentration__Kc * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999858739e-8))) * 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 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999858739e-8)))) : (CHASTE_CONST(0.00037433890822745472) * (-50 + var_chaste_interface__membrane__V) * (var_chaste_interface__intracellular_potassium_concentration__Ki * CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736)) - var_chaste_interface__extracellular_potassium_concentration__Kc * CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736) - CHASTE_CONST(0.037433890822745473) * var_chaste_interface__membrane__V)) * 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 - CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736) - CHASTE_CONST(0.037433890822745473) * var_chaste_interface__membrane__V)))); // nanoA + const double var_second_inward_current__i_siNa = (((var_chaste_interface__membrane__V >= CHASTE_CONST(49.999997328623934)) && (var_chaste_interface__membrane__V <= CHASTE_CONST(50.000002671376066))) ? (CHASTE_CONST(187169.45411399176) * (-CHASTE_CONST(49.999997328623934) + var_chaste_interface__membrane__V) * (CHASTE_CONST(9.9999999999858744e-10) * (var_chaste_interface__intracellular_sodium_concentration__Nai * CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736)) - mParameters[6] * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999858739e-8))) * 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 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999858739e-8))) + CHASTE_CONST(9.9999999999858744e-10) * (var_chaste_interface__intracellular_sodium_concentration__Nai * CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736)) - mParameters[6] * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999858739e-8))) * 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 - CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999858739e-8)))) - CHASTE_CONST(9.9999999999858744e-10) * (var_chaste_interface__intracellular_sodium_concentration__Nai * CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736)) - mParameters[6] * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999858739e-8))) * 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 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999858739e-8)))) : (CHASTE_CONST(0.00037433890822745472) * (-50 + var_chaste_interface__membrane__V) * (var_chaste_interface__intracellular_sodium_concentration__Nai * CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736)) - mParameters[6] * CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736) - CHASTE_CONST(0.037433890822745473) * var_chaste_interface__membrane__V)) * 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 - CHASTE_MATH::Exp(CHASTE_CONST(1.8716945411372736) - CHASTE_CONST(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 = CHASTE_CONST(0.001) * var_second_inward_current_f_gate__f_orig_deriv; // 1 / millisecond + const double var_sodium_background_current__g_Nab = CHASTE_CONST(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) * mParameters[4] / (var_intracellular_sodium_concentration__Vi * var_membrane__F); // millimolar / second + const double d_dt_chaste_interface_var_intracellular_sodium_concentration__Nai = CHASTE_CONST(0.001) * var_intracellular_sodium_concentration__Nai_orig_deriv; // millimolar / millisecond + const double var_time_dependent_potassium_current__I_K = CHASTE_CONST(0.0071428571428571426) * (-var_chaste_interface__extracellular_potassium_concentration__Kc * CHASTE_MATH::Exp(-var_chaste_interface__membrane__V / var_membrane__RTONF) + var_chaste_interface__intracellular_potassium_concentration__Ki) * mParameters[9]; // nanoA + const double var_time_dependent_potassium_current_x_gate__alpha_x = CHASTE_CONST(0.5) * CHASTE_MATH::Exp(CHASTE_CONST(4.1300000000000008) + CHASTE_CONST(0.082600000000000007) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(2.8500000000000001) + CHASTE_CONST(0.057000000000000002) * var_chaste_interface__membrane__V)); // per_second + const double var_time_dependent_potassium_current_x_gate__beta_x = CHASTE_CONST(1.3) * CHASTE_MATH::Exp(-CHASTE_CONST(1.2) - CHASTE_CONST(0.059999999999999998) * var_chaste_interface__membrane__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.80000000000000004) - CHASTE_CONST(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 = CHASTE_CONST(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 * mParameters[15] / ((1 + CHASTE_MATH::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 = CHASTE_CONST(0.033000000000000002) * CHASTE_MATH::Exp(-CHASTE_CONST(0.058823529411764705) * var_chaste_interface__membrane__V); // per_second + const double var_transient_outward_current_s_gate__beta_s = 33 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.25) - CHASTE_CONST(0.125) * var_chaste_interface__membrane__V)); // per_second + const double var_transient_outward_current__i_to = (((var_chaste_interface__membrane__V >= -CHASTE_CONST(10.000000500000001)) && (var_chaste_interface__membrane__V <= -CHASTE_CONST(9.9999994999999995))) ? (CHASTE_CONST(999999.99999899988) * (CHASTE_CONST(10.000000500000001) + var_chaste_interface__membrane__V) * (CHASTE_CONST(5.0000000000050004e-7) * (CHASTE_CONST(0.20000000000000001) + var_chaste_interface__extracellular_potassium_concentration__Kc / (10 + var_chaste_interface__extracellular_potassium_concentration__Kc)) * (var_chaste_interface__intracellular_potassium_concentration__Ki * CHASTE_MATH::Exp(-CHASTE_CONST(0.18716946347220006)) - var_chaste_interface__extracellular_potassium_concentration__Kc * CHASTE_MATH::Exp(CHASTE_CONST(0.18716946347220006))) * var_chaste_interface__intracellular_calcium_concentration__Cai * mParameters[17] * var_chaste_interface__transient_outward_current_s_gate__s / ((1 - CHASTE_MATH::Exp(CHASTE_CONST(1.0000000000010001e-7))) * (CHASTE_CONST(0.00050000000000000001) + var_chaste_interface__intracellular_calcium_concentration__Cai)) + CHASTE_CONST(5.0000000000050004e-7) * (CHASTE_CONST(0.20000000000000001) + var_chaste_interface__extracellular_potassium_concentration__Kc / (10 + var_chaste_interface__extracellular_potassium_concentration__Kc)) * (var_chaste_interface__intracellular_potassium_concentration__Ki * CHASTE_MATH::Exp(-CHASTE_CONST(0.18716944475525465)) - var_chaste_interface__extracellular_potassium_concentration__Kc * CHASTE_MATH::Exp(CHASTE_CONST(0.18716944475525465))) * var_chaste_interface__intracellular_calcium_concentration__Cai * mParameters[17] * var_chaste_interface__transient_outward_current_s_gate__s / ((1 - CHASTE_MATH::Exp(-CHASTE_CONST(1.0000000000010001e-7))) * (CHASTE_CONST(0.00050000000000000001) + var_chaste_interface__intracellular_calcium_concentration__Cai))) - CHASTE_CONST(5.0000000000050004e-7) * (CHASTE_CONST(0.20000000000000001) + var_chaste_interface__extracellular_potassium_concentration__Kc / (10 + var_chaste_interface__extracellular_potassium_concentration__Kc)) * (var_chaste_interface__intracellular_potassium_concentration__Ki * CHASTE_MATH::Exp(-CHASTE_CONST(0.18716946347220006)) - var_chaste_interface__extracellular_potassium_concentration__Kc * CHASTE_MATH::Exp(CHASTE_CONST(0.18716946347220006))) * var_chaste_interface__intracellular_calcium_concentration__Cai * mParameters[17] * var_chaste_interface__transient_outward_current_s_gate__s / ((1 - CHASTE_MATH::Exp(CHASTE_CONST(1.0000000000010001e-7))) * (CHASTE_CONST(0.00050000000000000001) + var_chaste_interface__intracellular_calcium_concentration__Cai))) : ((10 + var_chaste_interface__membrane__V) * (CHASTE_CONST(0.20000000000000001) + var_chaste_interface__extracellular_potassium_concentration__Kc / (10 + var_chaste_interface__extracellular_potassium_concentration__Kc)) * (var_chaste_interface__intracellular_potassium_concentration__Ki * CHASTE_MATH::Exp(CHASTE_CONST(0.018716945411372737) * var_chaste_interface__membrane__V) - var_chaste_interface__extracellular_potassium_concentration__Kc * CHASTE_MATH::Exp(-CHASTE_CONST(0.018716945411372737) * var_chaste_interface__membrane__V)) * var_chaste_interface__intracellular_calcium_concentration__Cai * mParameters[17] * var_chaste_interface__transient_outward_current_s_gate__s / ((1 - CHASTE_MATH::Exp(-2 - CHASTE_CONST(0.20000000000000001) * var_chaste_interface__membrane__V)) * (CHASTE_CONST(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 = (-(-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)) * mParameters[4]; // millimolar / second + const double d_dt_chaste_interface_var_extracellular_potassium_concentration__Kc = CHASTE_CONST(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 * mParameters[4] / (var_intracellular_sodium_concentration__Vi * var_membrane__F); // millimolar / second + const double d_dt_chaste_interface_var_intracellular_potassium_concentration__Ki = CHASTE_CONST(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 = CHASTE_CONST(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;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;const double var_stimulus__i_pulse_converted = CHASTE_STIM(var_chaste_interface__environment__time_converted);const double var_stimulus__i_pulse = 1000 * mParameters[8] * var_stimulus__i_pulse_converted / CHASTE_CAP();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) / mParameters[8];d_dt_chaste_interface_var_membrane__V = CHASTE_CONST(0.001) * var_membrane__V_orig_deriv; + } + + rDY[0] = d_dt_chaste_interface_var_membrane__V; + rDY[1] = d_dt_chaste_interface_var_intracellular_calcium_concentration__Cai; + rDY[2] = d_dt_chaste_interface_var_hyperpolarising_activated_current_y_gate__y; + rDY[3] = d_dt_chaste_interface_var_time_dependent_potassium_current_x_gate__x; + rDY[4] = d_dt_chaste_interface_var_transient_outward_current_s_gate__s; + 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_second_inward_current_d_gate__d; + rDY[8] = d_dt_chaste_interface_var_second_inward_current_f_gate__f; + rDY[9] = d_dt_chaste_interface_var_second_inward_current_f2_gate__f2; + rDY[10] = d_dt_chaste_interface_var_intracellular_sodium_concentration__Nai; + rDY[11] = d_dt_chaste_interface_var_intracellular_calcium_concentration__Ca_up; + rDY[12] = d_dt_chaste_interface_var_intracellular_calcium_concentration__Ca_rel; + rDY[13] = d_dt_chaste_interface_var_intracellular_calcium_concentration__p; + rDY[14] = d_dt_chaste_interface_var_extracellular_potassium_concentration__Kc; + rDY[15] = d_dt_chaste_interface_var_intracellular_potassium_concentration__Ki; +} + + + + + +#include "ChasteCpuMacros.hpp" +#endif // CELLDIFRANCESCO_NOBLE_MODEL_1985FROMCELLMLCVODEKERNELS_HPP_ \ No newline at end of file diff --git a/chaste_codegen/data/tests/chaste_reference_models/Cvode/faber_rudy_2000Kernels.hpp b/chaste_codegen/data/tests/chaste_reference_models/Cvode/faber_rudy_2000Kernels.hpp new file mode 100644 index 000000000..ee4f79df7 --- /dev/null +++ b/chaste_codegen/data/tests/chaste_reference_models/Cvode/faber_rudy_2000Kernels.hpp @@ -0,0 +1,283 @@ +#ifndef CELLFABER_RUDY_2000FROMCELLMLCVODEKERNELS_HPP_ +#define CELLFABER_RUDY_2000FROMCELLMLCVODEKERNELS_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 "MathsCustomFunctions.hpp" +#include "ChasteDeviceMacros.hpp" + +template +DEVICE +void Cellfaber_rudy_2000FromCellMLCvode::EvaluateYDerivativesDevice(ValueType var_chaste_interface__environment__time, const ValueType *rY, ValueType *rDY, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType *mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim) +{ + // Inputs: + // Time units: millisecond + double var_chaste_interface__cell__V = (mSetVoltageDerivativeToZero ? CHASTE_THIS(mFixedVoltage) : rY[0]); + // Units: millivolt; Initial value: -85.2119207874627 + double var_chaste_interface__calcium_dynamics__Cai = rY[1]; + // Units: millimolar; Initial value: 0.000117482029668194 + double var_chaste_interface__fast_sodium_current_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.00149183115674257 + double var_chaste_interface__fast_sodium_current_h_gate__h = rY[3]; + // Units: dimensionless; Initial value: 0.985596581239651 + double var_chaste_interface__fast_sodium_current_j_gate__j = rY[4]; + // Units: dimensionless; Initial value: 0.990898461370389 + double var_chaste_interface__L_type_Ca_channel_d_gate__d = rY[5]; + // Units: dimensionless; Initial value: 5.82597094505446e-06 + double var_chaste_interface__L_type_Ca_channel_f_gate__f = rY[6]; + // Units: dimensionless; Initial value: 0.997765362821995 + double var_chaste_interface__T_type_Ca_channel_b_gate__b = rY[7]; + // Units: dimensionless; Initial value: 0.00136737866785149 + double var_chaste_interface__T_type_Ca_channel_g_gate__g = rY[8]; + // Units: dimensionless; Initial value: 0.98881442877378 + double var_chaste_interface__rapid_delayed_rectifier_potassium_current_xr_gate__xr = rY[9]; + // Units: dimensionless; Initial value: 0.000204700363126417 + double var_chaste_interface__slow_delayed_rectifier_potassium_current_xs1_gate__xs1 = rY[10]; + // Units: dimensionless; Initial value: 0.00660746743356887 + double var_chaste_interface__slow_delayed_rectifier_potassium_current_xs2_gate__xs2 = rY[11]; + // Units: dimensionless; Initial value: 0.0303768241233812 + double var_chaste_interface__transient_outward_current_zdv_gate__zdv = rY[12]; + // Units: dimensionless; Initial value: 0.0144622472219576 + double var_chaste_interface__transient_outward_current_ydv_gate__ydv = rY[13]; + // Units: dimensionless; Initial value: 0.999945568566232 + double var_chaste_interface__calcium_dynamics__Ca_JSR = rY[14]; + // Units: millimolar; Initial value: 1.12791401197882 + double var_chaste_interface__calcium_dynamics__Ca_NSR = rY[15]; + // Units: millimolar; Initial value: 1.76731003671612 + double var_chaste_interface__calcium_dynamics__APtrack = rY[16]; + // Units: dimensionless; Initial value: 9.65910542308504e-196 + double var_chaste_interface__calcium_dynamics__APtrack2 = rY[17]; + // Units: dimensionless; Initial value: 5.33944967562997e-195 + double var_chaste_interface__calcium_dynamics__APtrack3 = rY[18]; + // Units: dimensionless; Initial value: 0.000129515197402902 + double var_chaste_interface__calcium_dynamics__Cainfluxtrack = rY[19]; + // Units: millimolar; Initial value: 2.69380318286645e-196 + 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: 13.3649235394859 + double var_chaste_interface__ionic_concentrations__Ki = 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 = CHASTE_CONST(0.00025000000000000001); // millimolar + const double var_ATP_sensitive_potassium_current__nATP = CHASTE_CONST(0.23999999999999999); // dimensionless + const double var_ATP_sensitive_potassium_current__nicholsarea = CHASTE_CONST(5.0000000000000002e-5); // dimensionless + const double var_ATP_sensitive_potassium_current__g_K_ATP = CHASTE_CONST(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 + CHASTE_MATH::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 = CHASTE_CONST(0.00059999999999999995); // millimolar + const double var_Na_Ca_exchanger__c2 = CHASTE_CONST(0.0001); // dimensionless + const double var_Na_Ca_exchanger__gamma = CHASTE_CONST(0.14999999999999999); // dimensionless + const double var_T_type_Ca_channel__g_CaT = CHASTE_CONST(0.050000000000000003); // milliS_per_microF + const double var_calcium_background_current__g_Cab = CHASTE_CONST(0.003016); // milliS_per_microF + const double d_dt_chaste_interface_var_calcium_dynamics__APtrack2 = (((var_chaste_interface__calcium_dynamics__APtrack > CHASTE_CONST(0.17999999999999999)) && (var_chaste_interface__calcium_dynamics__APtrack < CHASTE_CONST(0.20000000000000001))) ? (100 - CHASTE_CONST(100.5) * var_chaste_interface__calcium_dynamics__APtrack2) : (-CHASTE_CONST(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 > CHASTE_CONST(0.17999999999999999)) && (var_chaste_interface__calcium_dynamics__APtrack < CHASTE_CONST(0.20000000000000001))) ? (100 - CHASTE_CONST(100.5) * var_chaste_interface__calcium_dynamics__APtrack3) : (-CHASTE_CONST(0.01) * var_chaste_interface__calcium_dynamics__APtrack3)); // 1 / ms + const double var_calcium_dynamics__CMDN_max = CHASTE_CONST(0.050000000000000003); // millimolar + const double var_calcium_dynamics__CSQN_max = 10; // millimolar + const double var_calcium_dynamics__CSQNthresh = CHASTE_CONST(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 = CHASTE_CONST(0.0023800000000000002); // millimolar + const double var_calcium_dynamics__K_mCSQN = CHASTE_CONST(0.80000000000000004); // millimolar + const double var_calcium_dynamics__K_mTn = CHASTE_CONST(0.00050000000000000001); // millimolar + const double var_calcium_dynamics__K_mup = CHASTE_CONST(0.00092000000000000003); // millimolar + const double var_calcium_dynamics__Logicthresh = CHASTE_CONST(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) : (-CHASTE_CONST(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 < CHASTE_CONST(0.37)) && (var_chaste_interface__calcium_dynamics__OVRLDtrack3 < CHASTE_CONST(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) : (-CHASTE_CONST(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) : (-CHASTE_CONST(0.01) * var_chaste_interface__calcium_dynamics__OVRLDtrack3)); // 1 / ms + const double var_calcium_dynamics__RyRopen = 1 / (1 + var_chaste_interface__calcium_dynamics__APtrack2 * CHASTE_MATH::Exp(2)); // dimensionless + const double var_calcium_dynamics__RyRclose = 1 - var_calcium_dynamics__RyRopen; // dimensionless + const double var_calcium_dynamics__Tn_max = CHASTE_CONST(0.070000000000000007); // millimolar + const double var_calcium_dynamics__i_up = var_chaste_interface__calcium_dynamics__Cai * mParameters[3] / (var_chaste_interface__calcium_dynamics__Cai + var_calcium_dynamics__K_mup); // millimolar_per_ms + const double var_calcium_dynamics__K_leak = mParameters[3] * 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 = CHASTE_CONST(0.5) * var_cell__R * var_cell__T * CHASTE_MATH::Log(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 >= -CHASTE_CONST(1.3356169352749131e-6)) && (var_chaste_interface__cell__V <= CHASTE_CONST(1.3356169352749131e-6))) ? (CHASTE_CONST(374358.83507802623) * (CHASTE_CONST(1.3356169352749131e-6) + var_chaste_interface__cell__V) * (CHASTE_CONST(0.019296999999999998) * (-CHASTE_CONST(0.34100000000000003) * mParameters[5] + var_chaste_interface__calcium_dynamics__Cai * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) * mParameters[8] / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) + CHASTE_CONST(0.019296999999999998) * (-CHASTE_CONST(0.34100000000000003) * mParameters[5] + var_chaste_interface__calcium_dynamics__Cai * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8))) * mParameters[8] / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) - CHASTE_CONST(0.019296999999999998) * (-CHASTE_CONST(0.34100000000000003) * mParameters[5] + var_chaste_interface__calcium_dynamics__Cai * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8))) * mParameters[8] / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) : (CHASTE_CONST(14448.004881001343) * (-CHASTE_CONST(0.34100000000000003) * mParameters[5] + var_chaste_interface__calcium_dynamics__Cai * CHASTE_MATH::Exp(CHASTE_CONST(0.074871767015605231) * var_chaste_interface__cell__V)) * mParameters[8] * var_chaste_interface__cell__V / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(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 + CHASTE_MATH::Exp(-CHASTE_CONST(0.16025641025641024) * var_L_type_Ca_channel_d_gate__E0_d)); // dimensionless + const double var_L_type_Ca_channel_d_gate__tau_d = ((CHASTE_MATH::Abs(var_L_type_Ca_channel_d_gate__E0_d) < CHASTE_CONST(1.0000000000000001e-5)) ? (CHASTE_CONST(2.2893772893772892)) : (CHASTE_CONST(28.571428571428569) * (1 - CHASTE_MATH::Exp(-CHASTE_CONST(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 + CHASTE_MATH::Exp(CHASTE_CONST(4.0767441860465121) + CHASTE_CONST(0.11627906976744186) * var_chaste_interface__cell__V)) + CHASTE_CONST(0.59999999999999998) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(2.5) - CHASTE_CONST(0.050000000000000003) * var_chaste_interface__cell__V)); // dimensionless + const double var_L_type_Ca_channel_f_gate__tau_f = 1 / (CHASTE_CONST(0.02) + CHASTE_CONST(0.019699999999999999) * CHASTE_MATH::Exp(-CHASTE_CONST(0.113569) * CHASTE_MATH::Pow((1 + CHASTE_CONST(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 = CHASTE_MATH::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 + CHASTE_MATH::Exp(-CHASTE_CONST(1.2962962962962963) - CHASTE_CONST(0.092592592592592587) * var_chaste_interface__cell__V)); // dimensionless + const double var_T_type_Ca_channel_b_gate__tau_b = CHASTE_CONST(3.7000000000000002) + CHASTE_CONST(6.0999999999999996) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(5.5555555555555554) + CHASTE_CONST(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 + CHASTE_MATH::Exp(CHASTE_CONST(10.714285714285715) + CHASTE_CONST(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 - CHASTE_CONST(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 = CHASTE_STIM(var_chaste_interface__environment__time); // uA_per_cm2 + const double var_cell__I_st = var_cell__I_st_converted / CHASTE_CAP(); // microA_per_microF + const double var_fast_sodium_current_h_gate__alpha_h = ((var_chaste_interface__cell__V < -40) ? (CHASTE_CONST(0.13500000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(11.764705882352942) + CHASTE_CONST(0.14705882352941177) * mParameters[11] - CHASTE_CONST(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 * CHASTE_MATH::Exp(CHASTE_CONST(0.34999999999999998) * var_chaste_interface__cell__V - CHASTE_CONST(0.34999999999999998) * mParameters[11]) + CHASTE_CONST(3.5600000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.079000000000000001) * var_chaste_interface__cell__V - CHASTE_CONST(0.079000000000000001) * mParameters[11])) : (CHASTE_CONST(7.6923076923076916) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.96036036036036043) + CHASTE_CONST(0.0900900900900901) * mParameters[11] - CHASTE_CONST(0.0900900900900901) * var_chaste_interface__cell__V)))); // per_ms + const double var_fast_sodium_current_h_gate__h_inf = CHASTE_CONST(0.01) * mParameters[10] + (1 - CHASTE_CONST(0.01) * 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) ? ((CHASTE_CONST(37.780000000000001) + var_chaste_interface__cell__V) * (-127140 * CHASTE_MATH::Exp(CHASTE_CONST(0.24440000000000001) * var_chaste_interface__cell__V - CHASTE_CONST(0.24440000000000001) * mParameters[11]) - CHASTE_CONST(3.4740000000000003e-5) * CHASTE_MATH::Exp(CHASTE_CONST(0.043909999999999998) * mParameters[11] - CHASTE_CONST(0.043909999999999998) * var_chaste_interface__cell__V)) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(24.640530000000002) + CHASTE_CONST(0.311) * var_chaste_interface__cell__V - CHASTE_CONST(0.311) * mParameters[11]))) : (0)); // per_ms + const double var_fast_sodium_current_j_gate__beta_j = ((var_chaste_interface__cell__V < -40) ? (CHASTE_CONST(0.1212) * CHASTE_MATH::Exp(CHASTE_CONST(0.01052) * mParameters[11] - CHASTE_CONST(0.01052) * var_chaste_interface__cell__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(5.5312920000000005) + CHASTE_CONST(0.13780000000000001) * mParameters[11] - CHASTE_CONST(0.13780000000000001) * var_chaste_interface__cell__V))) : (CHASTE_CONST(0.29999999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(2.5349999999999999e-7) * mParameters[11] - CHASTE_CONST(2.5349999999999999e-7) * var_chaste_interface__cell__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.2000000000000002) + CHASTE_CONST(0.10000000000000001) * mParameters[11] - CHASTE_CONST(0.10000000000000001) * var_chaste_interface__cell__V)))); // per_ms + const double var_fast_sodium_current_j_gate__j_inf = CHASTE_CONST(0.01) * mParameters[10] + (1 - CHASTE_CONST(0.01) * 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 = CHASTE_CONST(47.130000000000003) + var_chaste_interface__cell__V; // millivolt + const double var_fast_sodium_current_m_gate__beta_m = CHASTE_CONST(0.080000000000000002) * CHASTE_MATH::Exp(-CHASTE_CONST(0.090909090909090912) * var_chaste_interface__cell__V); // per_ms + const double var_fast_sodium_current_m_gate__delta_m = CHASTE_CONST(1.0000000000000001e-5); // millivolt + const double var_fast_sodium_current_m_gate__alpha_m = ((var_fast_sodium_current_m_gate__delta_m <= CHASTE_MATH::Abs(var_fast_sodium_current_m_gate__E0_m)) ? (CHASTE_CONST(0.32000000000000001) * var_fast_sodium_current_m_gate__E0_m / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(0.10000000000000001) * var_fast_sodium_current_m_gate__E0_m))) : (CHASTE_CONST(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 = CHASTE_CONST(0.00015339999999999999); // cm2 + const double var_geometry__preplength = CHASTE_CONST(0.10000000000000001); // mm + const double var_geometry__radius = CHASTE_CONST(0.010999999999999999); // mm + const double var_geometry__volume = CHASTE_CONST(CHASTE_MATH::Pi) * CHASTE_MATH::Pow(var_geometry__radius, 2) * var_geometry__preplength; // micro_litre + const double var_geometry__V_JSR = CHASTE_CONST(0.0047999999999999996) * var_geometry__volume; // micro_litre + const double var_geometry__V_NSR = CHASTE_CONST(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 = CHASTE_CONST(0.68000000000000005) * var_geometry__volume; // micro_litre + const double var_ATP_sensitive_potassium_current__GKbaraATP = CHASTE_MATH::Pow((CHASTE_CONST(0.25) * 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 >= -CHASTE_CONST(2.6712338705498262e-6)) && (var_chaste_interface__cell__V <= CHASTE_CONST(2.6712338705498262e-6))) ? (CHASTE_CONST(187179.41753901311) * (CHASTE_CONST(2.6712338705498262e-6) + var_chaste_interface__cell__V) * (CHASTE_CONST(1.8621604999999999e-9) * (-CHASTE_CONST(0.75) * mParameters[6] + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Ki * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) + CHASTE_CONST(1.8621604999999999e-9) * (-CHASTE_CONST(0.75) * mParameters[6] + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Ki * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) - CHASTE_CONST(1.8621604999999999e-9) * (-CHASTE_CONST(0.75) * mParameters[6] + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Ki * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) : (CHASTE_CONST(0.00069711623550831479) * (-CHASTE_CONST(0.75) * mParameters[6] + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Ki * CHASTE_MATH::Exp(CHASTE_CONST(0.037435883507802616) * var_chaste_interface__cell__V)) * var_chaste_interface__cell__V / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(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 >= -CHASTE_CONST(2.6712338705498262e-6)) && (var_chaste_interface__cell__V <= CHASTE_CONST(2.6712338705498262e-6))) ? (CHASTE_CONST(187179.41753901311) * (CHASTE_CONST(2.6712338705498262e-6) + var_chaste_interface__cell__V) * (CHASTE_CONST(6.5127375e-9) * (-CHASTE_CONST(0.75) * mParameters[7] + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Nai * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) + CHASTE_CONST(6.5127375e-9) * (-CHASTE_CONST(0.75) * mParameters[7] + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Nai * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) - CHASTE_CONST(6.5127375e-9) * (-CHASTE_CONST(0.75) * mParameters[7] + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Nai * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) : (CHASTE_CONST(0.0024381008236689767) * (-CHASTE_CONST(0.75) * mParameters[7] + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Nai * CHASTE_MATH::Exp(CHASTE_CONST(0.037435883507802616) * var_chaste_interface__cell__V)) * var_chaste_interface__cell__V / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(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 = (-CHASTE_MATH::Pow(mParameters[7], 3) * var_chaste_interface__calcium_dynamics__Cai + CHASTE_MATH::Pow(var_chaste_interface__ionic_concentrations__Nai, 3) * mParameters[5] * CHASTE_MATH::Exp(var_cell__F * var_chaste_interface__cell__V / (var_cell__R * var_cell__T))) * mParameters[15] * CHASTE_MATH::Exp((-1 + var_Na_Ca_exchanger__gamma) * var_cell__F * var_chaste_interface__cell__V / (var_cell__R * var_cell__T)) / (1 + (CHASTE_MATH::Pow(mParameters[7], 3) * var_chaste_interface__calcium_dynamics__Cai + CHASTE_MATH::Pow(var_chaste_interface__ionic_concentrations__Nai, 3) * mParameters[5] * CHASTE_MATH::Exp(var_cell__F * var_chaste_interface__cell__V / (var_cell__R * var_cell__T))) * var_Na_Ca_exchanger__c2 * CHASTE_MATH::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 * CHASTE_MATH::Log(mParameters[7] / var_chaste_interface__ionic_concentrations__Nai) / var_cell__F; // millivolt + const double var_fast_sodium_current__i_Na = CHASTE_MATH::Pow(var_chaste_interface__fast_sodium_current_m_gate__m, 3) * (-var_fast_sodium_current__E_Na + var_chaste_interface__cell__V) * 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 >= -CHASTE_CONST(2.6712338705498262e-6)) && (var_chaste_interface__cell__V <= CHASTE_CONST(2.6712338705498262e-6))) ? (CHASTE_CONST(187179.41753901311) * (CHASTE_CONST(2.6712338705498262e-6) + var_chaste_interface__cell__V) * (CHASTE_CONST(1.6884874999999999e-9) * (-CHASTE_CONST(0.75) * mParameters[6] + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Ki * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) + CHASTE_CONST(1.6884874999999999e-9) * (-CHASTE_CONST(0.75) * mParameters[6] + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Ki * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) - CHASTE_CONST(1.6884874999999999e-9) * (-CHASTE_CONST(0.75) * mParameters[6] + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Ki * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) : (CHASTE_CONST(0.00063210021354380874) * (-CHASTE_CONST(0.75) * mParameters[6] + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Ki * CHASTE_MATH::Exp(CHASTE_CONST(0.037435883507802616) * var_chaste_interface__cell__V)) * var_chaste_interface__cell__V / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(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 >= -CHASTE_CONST(2.6712338705498262e-6)) && (var_chaste_interface__cell__V <= CHASTE_CONST(2.6712338705498262e-6))) ? (CHASTE_CONST(187179.41753901311) * (CHASTE_CONST(2.6712338705498262e-6) + var_chaste_interface__cell__V) * (CHASTE_CONST(1.6884874999999999e-9) * (-CHASTE_CONST(0.75) * mParameters[7] + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Nai * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) + CHASTE_CONST(1.6884874999999999e-9) * (-CHASTE_CONST(0.75) * mParameters[7] + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Nai * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) - CHASTE_CONST(1.6884874999999999e-9) * (-CHASTE_CONST(0.75) * mParameters[7] + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Nai * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8))) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) : (CHASTE_CONST(0.00063210021354380874) * (-CHASTE_CONST(0.75) * mParameters[7] + CHASTE_CONST(0.75) * var_chaste_interface__ionic_concentrations__Nai * CHASTE_MATH::Exp(CHASTE_CONST(0.037435883507802616) * var_chaste_interface__cell__V)) * var_chaste_interface__cell__V / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(0.037435883507802616) * var_chaste_interface__cell__V)))); // microA_per_microF + const double var_non_specific_calcium_activated_current__K_m_ns_Ca = CHASTE_CONST(0.0011999999999999999); // millimolar + const double var_non_specific_calcium_activated_current__i_ns_K = var_non_specific_calcium_activated_current__I_ns_K / (1 + CHASTE_MATH::Pow(var_non_specific_calcium_activated_current__K_m_ns_Ca, 3) / CHASTE_MATH::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 + CHASTE_MATH::Pow(var_non_specific_calcium_activated_current__K_m_ns_Ca, 3) / CHASTE_MATH::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 + CHASTE_MATH::Exp(CHASTE_CONST(1.2521739130434781) - CHASTE_CONST(0.16722408026755853) * var_chaste_interface__cell__V)); // dimensionless + const double var_plateau_potassium_current__g_Kp = CHASTE_CONST(0.0055199999999999997); // milliS_per_microF + const double var_rapid_delayed_rectifier_potassium_current__Rect = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(0.4017857142857143) + CHASTE_CONST(0.044642857142857144) * var_chaste_interface__cell__V)); // dimensionless + const double var_rapid_delayed_rectifier_potassium_current__g_Kr = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::Sqrt(mParameters[6]) * mParameters[13]; // milliS_per_microF + const double var_rapid_delayed_rectifier_potassium_current_xr_gate__tau_xr = 1 / ((((var_chaste_interface__cell__V >= -CHASTE_CONST(14.200000813008129)) && (var_chaste_interface__cell__V <= -CHASTE_CONST(14.199999186991869))) ? (-CHASTE_CONST(1.1219512194943214e-9) / (1 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999998406912e-8))) + CHASTE_CONST(615000.00000454858) * (CHASTE_CONST(14.200000813008129) + var_chaste_interface__cell__V) * (CHASTE_CONST(1.1219512194943214e-9) / (1 - CHASTE_MATH::Exp(CHASTE_CONST(9.9999999998406912e-8))) + CHASTE_CONST(1.1219512195134727e-9) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(1.0000000000011388e-7))))) : (CHASTE_CONST(0.0013799999999999999) * (CHASTE_CONST(14.199999999999999) + var_chaste_interface__cell__V) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(1.7465999999999999) - CHASTE_CONST(0.123) * var_chaste_interface__cell__V)))) + (((var_chaste_interface__cell__V >= -CHASTE_CONST(38.900000689655172)) && (var_chaste_interface__cell__V <= -CHASTE_CONST(38.899999310344825))) ? (-CHASTE_CONST(4.2068965517283451e-10) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.000000000001e-7))) + CHASTE_CONST(724999.99997009686) * (CHASTE_CONST(38.900000689655172) + var_chaste_interface__cell__V) * (CHASTE_CONST(4.2068965517283451e-10) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.000000000001e-7))) + CHASTE_CONST(4.2068965520669629e-10) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(1.0000000000814911e-7))))) : (CHASTE_CONST(0.00060999999999999997) * (CHASTE_CONST(38.899999999999999) + var_chaste_interface__cell__V) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(5.6404999999999994) + CHASTE_CONST(0.14499999999999999) * var_chaste_interface__cell__V))))); // ms + const double var_rapid_delayed_rectifier_potassium_current_xr_gate__xr_infinity = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.8666666666666667) - CHASTE_CONST(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 = CHASTE_CONST(1.1499999999999999); // microA_per_microF + const double var_sarcolemmal_calcium_pump__K_mpCa = CHASTE_CONST(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 > CHASTE_CONST(0.20000000000000001)) ? (-CHASTE_CONST(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 > CHASTE_CONST(0.01)) ? (0) : (-CHASTE_CONST(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 + CHASTE_MATH::Exp(CHASTE_CONST(5.5555555555555554) + CHASTE_CONST(1.1111111111111112) * var_L_type_Ca_channel__i_CaCa + CHASTE_CONST(1.1111111111111112) * var_T_type_Ca_channel__i_Ca_T + CHASTE_CONST(1.1111111111111112) * var_calcium_background_current__i_Ca_b + CHASTE_CONST(1.1111111111111112) * var_sarcolemmal_calcium_pump__i_p_Ca - CHASTE_CONST(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 / CHASTE_MATH::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 - CHASTE_CONST(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 / CHASTE_MATH::Pow((var_chaste_interface__calcium_dynamics__Cai + var_calcium_dynamics__K_mCMDN), 2) + var_calcium_dynamics__K_mTn * var_calcium_dynamics__Tn_max / CHASTE_MATH::Pow((var_chaste_interface__calcium_dynamics__Cai + var_calcium_dynamics__K_mTn), 2)); // millimolar / ms + const double var_slow_delayed_rectifier_potassium_current__PNaK = CHASTE_CONST(0.018329999999999999); // dimensionless + const double var_slow_delayed_rectifier_potassium_current__E_Ks = var_cell__R * var_cell__T * CHASTE_MATH::Log((mParameters[7] * var_slow_delayed_rectifier_potassium_current__PNaK + 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 + CHASTE_CONST(0.59999999999999998) / (1 + CHASTE_CONST(6.4818210260626455e-7) * CHASTE_MATH::Pow((1 / var_chaste_interface__calcium_dynamics__Cai), CHASTE_CONST(1.3999999999999999)))) * mParameters[14]; // milliS_per_microF + const double var_slow_delayed_rectifier_potassium_current_xs1_gate__tau_xs1 = (((var_chaste_interface__cell__V >= -CHASTE_CONST(30.000001455604075)) && (var_chaste_interface__cell__V <= -CHASTE_CONST(29.999998544395925))) ? (1 / (-CHASTE_CONST(1.0465793304208771e-10) / (1 - CHASTE_MATH::Exp(CHASTE_CONST(2.1542940320207204e-7))) - CHASTE_CONST(1.9068413391534758e-10) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999880736e-8))) + CHASTE_CONST(343500.00000040967) * (CHASTE_CONST(30.000001455604075) + var_chaste_interface__cell__V) * (CHASTE_CONST(1.0465793304208771e-10) / (1 - CHASTE_MATH::Exp(CHASTE_CONST(2.1542940320207204e-7))) + CHASTE_CONST(1.0465793304208771e-10) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(2.1542940320207204e-7))) + CHASTE_CONST(1.9068413391534758e-10) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999880736e-8))) + CHASTE_CONST(1.9068413391534758e-10) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999880736e-8)))))) : (1 / (CHASTE_CONST(0.00013100000000000001) * (30 + var_chaste_interface__cell__V) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(2.0609999999999999) + CHASTE_CONST(0.068699999999999997) * var_chaste_interface__cell__V)) + CHASTE_CONST(7.1899999999999999e-5) * (30 + var_chaste_interface__cell__V) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(4.4399999999999995) - CHASTE_CONST(0.14799999999999999) * var_chaste_interface__cell__V))))); // ms + const double var_slow_delayed_rectifier_potassium_current_xs1_gate__xs1_infinity = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(0.089820359281437126) - CHASTE_CONST(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 >= -CHASTE_CONST(30.000001455604075)) && (var_chaste_interface__cell__V <= -CHASTE_CONST(29.999998544395925))) ? (1 / (-CHASTE_CONST(1.0465793304208771e-10) / (1 - CHASTE_MATH::Exp(CHASTE_CONST(2.1542940320207204e-7))) - CHASTE_CONST(1.9068413391534758e-10) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999880736e-8))) + CHASTE_CONST(343500.00000040967) * (CHASTE_CONST(30.000001455604075) + var_chaste_interface__cell__V) * (CHASTE_CONST(1.0465793304208771e-10) / (1 - CHASTE_MATH::Exp(CHASTE_CONST(2.1542940320207204e-7))) + CHASTE_CONST(1.0465793304208771e-10) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(2.1542940320207204e-7))) + CHASTE_CONST(1.9068413391534758e-10) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999880736e-8))) + CHASTE_CONST(1.9068413391534758e-10) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999880736e-8)))))) : (1 / (CHASTE_CONST(0.00013100000000000001) * (30 + var_chaste_interface__cell__V) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(2.0609999999999999) + CHASTE_CONST(0.068699999999999997) * var_chaste_interface__cell__V)) + CHASTE_CONST(7.1899999999999999e-5) * (30 + var_chaste_interface__cell__V) / (1 - CHASTE_MATH::Exp(-CHASTE_CONST(4.4399999999999995) - CHASTE_CONST(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 + CHASTE_MATH::Exp(CHASTE_CONST(0.089820359281437126) - CHASTE_CONST(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 = CHASTE_CONST(0.12848000000000001); // milliS_per_microF + const double var_sodium_activated_potassium_current__kdKNa = 66; // millimolar + const double var_sodium_activated_potassium_current__nKNa = CHASTE_CONST(2.7999999999999998); // dimensionless + const double var_sodium_activated_potassium_current__pona = CHASTE_CONST(0.84999999999999998) / (1 + CHASTE_MATH::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 = CHASTE_CONST(0.80000000000000004) - CHASTE_CONST(0.65000000000000002) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(8.3333333333333339) + CHASTE_CONST(0.066666666666666666) * var_chaste_interface__cell__V)); // dimensionless + const double var_sodium_background_current__g_Nab = CHASTE_CONST(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 = CHASTE_CONST(2.25); // microA_per_microF + const double var_sodium_potassium_pump__K_mKo = CHASTE_CONST(1.5); // millimolar + const double var_sodium_potassium_pump__K_mNai = 10; // millimolar + const double var_sodium_potassium_pump__sigma = -CHASTE_CONST(0.14285714285714285) + CHASTE_CONST(0.14285714285714285) * CHASTE_MATH::Exp(CHASTE_CONST(0.01485884101040119) * mParameters[7]); // dimensionless + const double var_sodium_potassium_pump__f_NaK = 1 / (1 + CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(0.10000000000000001) * var_cell__F * var_chaste_interface__cell__V / (var_cell__R * var_cell__T)) + CHASTE_CONST(0.036499999999999998) * var_sodium_potassium_pump__sigma * CHASTE_MATH::Exp(-var_cell__F * var_chaste_interface__cell__V / (var_cell__R * var_cell__T))); // dimensionless + const double var_sodium_potassium_pump__i_NaK = mParameters[6] * var_sodium_potassium_pump__I_NaK * var_sodium_potassium_pump__f_NaK / ((1 + CHASTE_MATH::Pow(var_sodium_potassium_pump__K_mNai, 2) / CHASTE_MATH::Pow(var_chaste_interface__ionic_concentrations__Nai, 2)) * (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 * 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 * CHASTE_MATH::Log(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 = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::Sqrt(mParameters[6]) * mParameters[12]; // milliS_per_microF + const double var_time_independent_potassium_current_K1_gate__alpha_K1 = CHASTE_CONST(1.02) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(14.1227775) + CHASTE_CONST(0.23849999999999999) * var_chaste_interface__cell__V - CHASTE_CONST(0.23849999999999999) * var_time_independent_potassium_current__E_K)); // per_ms + const double var_time_independent_potassium_current_K1_gate__beta_K1 = (CHASTE_CONST(0.49124000000000001) * CHASTE_MATH::Exp(CHASTE_CONST(0.43983232) + CHASTE_CONST(0.080320000000000003) * var_chaste_interface__cell__V - CHASTE_CONST(0.080320000000000003) * var_time_independent_potassium_current__E_K) + CHASTE_MATH::Exp(-CHASTE_CONST(36.698642499999998) + CHASTE_CONST(0.061749999999999999) * var_chaste_interface__cell__V - CHASTE_CONST(0.061749999999999999) * var_time_independent_potassium_current__E_K)) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.4444678999999998) + CHASTE_CONST(0.51429999999999998) * var_time_independent_potassium_current__E_K - CHASTE_CONST(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 = CHASTE_MATH::Exp(CHASTE_CONST(0.01) * var_chaste_interface__cell__V); // dimensionless + const double var_transient_outward_current_ydv_gate__alpha_ydv = CHASTE_CONST(0.014999999999999999) / (1 + CHASTE_MATH::Exp(12 + CHASTE_CONST(0.20000000000000001) * var_chaste_interface__cell__V)); // per_ms + const double var_transient_outward_current_ydv_gate__beta_ydv = CHASTE_CONST(0.10000000000000001) * CHASTE_MATH::Exp(5 + CHASTE_CONST(0.20000000000000001) * var_chaste_interface__cell__V) / (1 + CHASTE_MATH::Exp(5 + CHASTE_CONST(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 * CHASTE_MATH::Exp(-CHASTE_CONST(1.6000000000000001) + CHASTE_CONST(0.040000000000000001) * var_chaste_interface__cell__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.6000000000000001) + CHASTE_CONST(0.040000000000000001) * var_chaste_interface__cell__V)); // per_ms + const double var_transient_outward_current_zdv_gate__beta_zdv = 10 * CHASTE_MATH::Exp(-CHASTE_CONST(3.6000000000000001) - CHASTE_CONST(0.040000000000000001) * var_chaste_interface__cell__V) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.6000000000000001) - CHASTE_CONST(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 = CHASTE_MATH::Pow(var_chaste_interface__transient_outward_current_zdv_gate__zdv, 3) * (-var_time_independent_potassium_current__E_K + var_chaste_interface__cell__V) * 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 * 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 - CHASTE_CONST(100.5) * var_chaste_interface__calcium_dynamics__APtrack) : (-CHASTE_CONST(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; + } + + rDY[0] = d_dt_chaste_interface_var_cell__V; + rDY[1] = d_dt_chaste_interface_var_calcium_dynamics__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_T_type_Ca_channel_b_gate__b; + rDY[8] = d_dt_chaste_interface_var_T_type_Ca_channel_g_gate__g; + rDY[9] = d_dt_chaste_interface_var_rapid_delayed_rectifier_potassium_current_xr_gate__xr; + rDY[10] = d_dt_chaste_interface_var_slow_delayed_rectifier_potassium_current_xs1_gate__xs1; + rDY[11] = d_dt_chaste_interface_var_slow_delayed_rectifier_potassium_current_xs2_gate__xs2; + rDY[12] = d_dt_chaste_interface_var_transient_outward_current_zdv_gate__zdv; + rDY[13] = d_dt_chaste_interface_var_transient_outward_current_ydv_gate__ydv; + rDY[14] = d_dt_chaste_interface_var_calcium_dynamics__Ca_JSR; + rDY[15] = d_dt_chaste_interface_var_calcium_dynamics__Ca_NSR; + rDY[16] = d_dt_chaste_interface_var_calcium_dynamics__APtrack; + rDY[17] = d_dt_chaste_interface_var_calcium_dynamics__APtrack2; + rDY[18] = d_dt_chaste_interface_var_calcium_dynamics__APtrack3; + rDY[19] = d_dt_chaste_interface_var_calcium_dynamics__Cainfluxtrack; + rDY[20] = d_dt_chaste_interface_var_calcium_dynamics__OVRLDtrack; + rDY[21] = d_dt_chaste_interface_var_calcium_dynamics__OVRLDtrack2; + rDY[22] = d_dt_chaste_interface_var_calcium_dynamics__OVRLDtrack3; + rDY[23] = d_dt_chaste_interface_var_ionic_concentrations__Nai; + rDY[24] = d_dt_chaste_interface_var_ionic_concentrations__Ki; +} + + + + + +#include "ChasteCpuMacros.hpp" +#endif // CELLFABER_RUDY_2000FROMCELLMLCVODEKERNELS_HPP_ \ No newline at end of file diff --git a/chaste_codegen/data/tests/chaste_reference_models/Cvode/hodgkin_huxley_squid_axon_model_1952_modifiedKernels.hpp b/chaste_codegen/data/tests/chaste_reference_models/Cvode/hodgkin_huxley_squid_axon_model_1952_modifiedKernels.hpp new file mode 100644 index 000000000..6780e409e --- /dev/null +++ b/chaste_codegen/data/tests/chaste_reference_models/Cvode/hodgkin_huxley_squid_axon_model_1952_modifiedKernels.hpp @@ -0,0 +1,72 @@ +#ifndef CELLHODGKIN_HUXLEY_SQUID_AXON_MODEL_1952_MODIFIEDFROMCELLMLCVODEKERNELS_HPP_ +#define CELLHODGKIN_HUXLEY_SQUID_AXON_MODEL_1952_MODIFIEDFROMCELLMLCVODEKERNELS_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 "MathsCustomFunctions.hpp" +#include "ChasteDeviceMacros.hpp" + +template +DEVICE +void Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvode::EvaluateYDerivativesDevice(ValueType var_chaste_interface__environment__time, const ValueType *rY, ValueType *rDY, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType *mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim) +{ + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 = -CHASTE_CONST(0.10000000000000001); // per_millivolt + const double var_potassium_channel_n_gate__A = -CHASTE_CONST(0.01) / var_potassium_channel_n_gate__B; // per_millisecond + const double var_potassium_channel_n_gate__beta_n = CHASTE_CONST(0.125) * CHASTE_MATH::Exp(CHASTE_CONST(0.9375) + CHASTE_CONST(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 >= -CHASTE_CONST(9.9999999999999995e-8)) && (var_potassium_channel_n_gate__U <= CHASTE_CONST(9.9999999999999995e-8))) ? ((1 - CHASTE_CONST(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 + CHASTE_MATH::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 = CHASTE_CONST(0.070000000000000007) * CHASTE_MATH::Exp(-CHASTE_CONST(3.75) - CHASTE_CONST(0.050000000000000003) * var_chaste_interface__membrane__V); // per_millisecond + const double var_sodium_channel_h_gate__beta_h = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(4.5) - CHASTE_CONST(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 = -CHASTE_CONST(0.10000000000000001); // per_millivolt + const double var_sodium_channel_m_gate__A = -CHASTE_CONST(0.10000000000000001) / var_sodium_channel_m_gate__B; // per_millisecond + const double var_sodium_channel_m_gate__beta_m = 4 * CHASTE_MATH::Exp(-CHASTE_CONST(4.166666666666667) - CHASTE_CONST(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 >= -CHASTE_CONST(9.9999999999999995e-8)) && (var_sodium_channel_m_gate__U <= CHASTE_CONST(9.9999999999999995e-8))) ? ((1 - CHASTE_CONST(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 + CHASTE_MATH::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;const double var_leakage_current__E_L = CHASTE_CONST(10.613) + var_membrane__E_R;const double var_leakage_current__i_L = (-var_leakage_current__E_L + var_chaste_interface__membrane__V) * mParameters[2];const double var_membrane__i_Stim = CHASTE_STIM(var_chaste_interface__environment__time);const double var_potassium_channel__E_K = -12 + var_membrane__E_R;const double var_potassium_channel__i_K = CHASTE_MATH::Pow(var_chaste_interface__potassium_channel_n_gate__n, 4) * (-var_potassium_channel__E_K + var_chaste_interface__membrane__V) * mParameters[3];const double var_sodium_channel__E_Na = 115 + var_membrane__E_R;const double var_sodium_channel__i_Na = CHASTE_MATH::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;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]; + } + + 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; +} + + + + + +#include "ChasteCpuMacros.hpp" +#endif // CELLHODGKIN_HUXLEY_SQUID_AXON_MODEL_1952_MODIFIEDFROMCELLMLCVODEKERNELS_HPP_ \ No newline at end of file diff --git a/chaste_codegen/data/tests/chaste_reference_models/Cvode/paci_hyttinen_aaltosetala_severi_ventricularVersionKernels.hpp b/chaste_codegen/data/tests/chaste_reference_models/Cvode/paci_hyttinen_aaltosetala_severi_ventricularVersionKernels.hpp new file mode 100644 index 000000000..8dc676382 --- /dev/null +++ b/chaste_codegen/data/tests/chaste_reference_models/Cvode/paci_hyttinen_aaltosetala_severi_ventricularVersionKernels.hpp @@ -0,0 +1,230 @@ +#ifndef CELLPACI_HYTTINEN_AALTOSETALA_SEVERI_VENTRICULARVERSIONFROMCELLMLCVODEKERNELS_HPP_ +#define CELLPACI_HYTTINEN_AALTOSETALA_SEVERI_VENTRICULARVERSIONFROMCELLMLCVODEKERNELS_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 "MathsCustomFunctions.hpp" +#include "ChasteDeviceMacros.hpp" + +template +DEVICE +void Cellpaci_hyttinen_aaltosetala_severi_ventricularVersionFromCellMLCvode::EvaluateYDerivativesDevice(ValueType var_chaste_interface__environment__time_converted, const ValueType *rY, ValueType *rDY, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType *mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim) +{ + // Inputs: + // Time units: millisecond + double var_chaste_interface__Membrane__Vm_converted = (mSetVoltageDerivativeToZero ? CHASTE_THIS(mFixedVoltage) : rY[0]); + // Units: millivolt; Initial value: -74.3340057623841 + double var_chaste_interface__calcium_dynamics__Cai = rY[1]; + // Units: millimolar; Initial value: 1.80773974140477e-05 + double var_chaste_interface__i_Na_m_gate__m = rY[2]; + // Units: dimensionless; Initial value: 0.102953468725004 + double var_chaste_interface__i_Na_h_gate__h = rY[3]; + // Units: dimensionless; Initial value: 0.786926637881461 + double var_chaste_interface__i_Na_j_gate__j = rY[4]; + // Units: dimensionless; Initial value: 0.253943221774722 + double var_chaste_interface__i_CaL_d_gate__d = rY[5]; + // Units: dimensionless; Initial value: 8.96088425225182e-05 + double var_chaste_interface__i_CaL_f1_gate__f1 = rY[6]; + // Units: dimensionless; Initial value: 0.970411811263976 + double var_chaste_interface__i_CaL_f2_gate__f2 = rY[7]; + // Units: dimensionless; Initial value: 0.999965815466749 + double var_chaste_interface__i_CaL_fCa_gate__fCa = rY[8]; + // Units: dimensionless; Initial value: 0.998925296531804 + double var_chaste_interface__i_Kr_Xr1_gate__Xr1 = rY[9]; + // Units: dimensionless; Initial value: 0.00778547011240132 + double var_chaste_interface__i_Kr_Xr2_gate__Xr2 = rY[10]; + // Units: dimensionless; Initial value: 0.432162576531617 + double var_chaste_interface__i_Ks_Xs_gate__Xs = rY[11]; + // Units: dimensionless; Initial value: 0.0322944866983666 + double var_chaste_interface__i_f_Xf_gate__Xf = rY[12]; + // Units: dimensionless; Initial value: 0.100615100568753 + double var_chaste_interface__i_to_q_gate__q = rY[13]; + // Units: dimensionless; Initial value: 0.839295925773219 + double var_chaste_interface__i_to_r_gate__r = rY[14]; + // Units: dimensionless; Initial value: 0.00573289893326379 + double var_chaste_interface__sodium_dynamics__Nai = rY[15]; + // Units: millimolar; Initial value: 10.9248496211574 + double var_chaste_interface__calcium_dynamics__Ca_SR = rY[16]; + // Units: millimolar; Initial value: 0.2734234751931 + double var_chaste_interface__calcium_dynamics__g = rY[17]; + // Units: dimensionless; Initial value: 0.999999981028517 + // Mathematics + double d_dt_chaste_interface_var_Membrane__Vm_converted; + const double var_Membrane__Vm = CHASTE_CONST(0.001) * var_chaste_interface__Membrane__Vm_converted; // volt + const double var_calcium_dynamics__Buf_C = CHASTE_CONST(0.25); // millimolar + const double var_calcium_dynamics__Buf_SR = 10; // millimolar + const double var_calcium_dynamics__Kbuf_C = CHASTE_CONST(0.001); // millimolar + const double var_calcium_dynamics__Cai_bufc = 1 / (1 + var_calcium_dynamics__Buf_C * var_calcium_dynamics__Kbuf_C / CHASTE_MATH::Pow((var_chaste_interface__calcium_dynamics__Cai + var_calcium_dynamics__Kbuf_C), 2)); // dimensionless + const double var_calcium_dynamics__Kbuf_SR = CHASTE_CONST(0.29999999999999999); // millimolar + const double var_calcium_dynamics__Ca_SR_bufSR = 1 / (1 + var_calcium_dynamics__Buf_SR * var_calcium_dynamics__Kbuf_SR / CHASTE_MATH::Pow((var_chaste_interface__calcium_dynamics__Ca_SR + var_calcium_dynamics__Kbuf_SR), 2)); // dimensionless + const double var_calcium_dynamics__Kup = CHASTE_CONST(0.00025000000000000001); // millimolar + const double var_calcium_dynamics__V_leak = CHASTE_CONST(0.00044443999999999999); // per_second + const double var_calcium_dynamics__VmaxUp = CHASTE_CONST(0.56064000000000003); // millimolar_per_second + const double var_calcium_dynamics__a_rel = CHASTE_CONST(16.463999999999999); // millimolar_per_second + const double var_calcium_dynamics__b_rel = CHASTE_CONST(0.25); // millimolar + const double var_calcium_dynamics__c_rel = CHASTE_CONST(8.2319999999999993); // millimolar_per_second + const double var_calcium_dynamics__g_inf = ((var_chaste_interface__calcium_dynamics__Cai <= CHASTE_CONST(0.00035)) ? (1 / (1 + CHASTE_CONST(5.439910241481016e+20) * CHASTE_MATH::Pow(var_chaste_interface__calcium_dynamics__Cai, 6))) : (1 / (1 + CHASTE_CONST(1.9720198874049176e+55) * CHASTE_MATH::Pow(var_chaste_interface__calcium_dynamics__Cai, 16)))); // dimensionless + const double var_calcium_dynamics__const2 = (((var_Membrane__Vm > -CHASTE_CONST(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 + CHASTE_MATH::Pow(var_calcium_dynamics__Kup, 2) / CHASTE_MATH::Pow(var_chaste_interface__calcium_dynamics__Cai, 2)); // millimolar_per_second + const double var_calcium_dynamics__tau_g = CHASTE_CONST(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 = CHASTE_CONST(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 = CHASTE_CONST(0.25) + CHASTE_CONST(1.3999999999999999) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.6923076923076925) - CHASTE_CONST(76.92307692307692) * var_Membrane__Vm)); // dimensionless + const double var_i_CaL_d_gate__beta_d = CHASTE_CONST(1.3999999999999999) / (1 + CHASTE_MATH::Exp(1 + 200 * var_Membrane__Vm)); // dimensionless + const double var_calcium_dynamics__i_rel = CHASTE_CONST(0.041099999999999998) * (CHASTE_MATH::Pow(var_chaste_interface__calcium_dynamics__Ca_SR, 2) * var_calcium_dynamics__a_rel / (CHASTE_MATH::Pow(var_chaste_interface__calcium_dynamics__Ca_SR, 2) + CHASTE_MATH::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 + CHASTE_MATH::Exp(-CHASTE_CONST(1.3) - CHASTE_CONST(142.85714285714286) * var_Membrane__Vm)); // dimensionless + const double var_i_CaL_d_gate__gamma_d = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(2.5) - 50 * var_Membrane__Vm)); // dimensionless + const double var_i_CaL_d_gate__tau_d = CHASTE_CONST(0.001) * var_i_CaL_d_gate__gamma_d + CHASTE_CONST(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 = CHASTE_CONST(0.001) * var_i_CaL_d_gate__d_orig_deriv; // 1 / millisecond + const double var_i_CaL_f1_gate__f1_inf = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(8.6666666666666661) + CHASTE_CONST(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) ? (CHASTE_CONST(0.92835000000000001) + 1433 * var_chaste_interface__calcium_dynamics__Cai) : (1)); // dimensionless + const double var_i_CaL_f1_gate__tau_f1 = CHASTE_CONST(0.001) * (20 + 200 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.3) - 100 * var_Membrane__Vm)) + 180 / (1 + CHASTE_MATH::Exp(3 + 100 * var_Membrane__Vm)) + CHASTE_CONST(1102.5) * CHASTE_MATH::Exp(-CHASTE_CONST(4444444444.4444447) * CHASTE_MATH::Pow((CHASTE_CONST(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 = CHASTE_CONST(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 = CHASTE_CONST(0.33000000000000002) + CHASTE_CONST(0.67000000000000004) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(8.75) + 250 * var_Membrane__Vm)); // dimensionless + const double var_i_CaL_f2_gate__tau_f2 = CHASTE_CONST(0.001) * (16 / (1 + CHASTE_MATH::Exp(3 + 100 * var_Membrane__Vm)) + 31 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(2.5) - 100 * var_Membrane__Vm)) + 600 * CHASTE_MATH::Exp(-CHASTE_CONST(5882.3529411764703) * CHASTE_MATH::Pow((CHASTE_CONST(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 = CHASTE_CONST(0.001) * var_i_CaL_f2_gate__f2_orig_deriv; // 1 / millisecond + const double var_i_CaL_fCa_gate__alpha_fCa = 1 / (1 + CHASTE_CONST(5.9537418076512766e+25) * CHASTE_MATH::Pow(var_chaste_interface__calcium_dynamics__Cai, 8)); // dimensionless + const double var_i_CaL_fCa_gate__beta_fCa = CHASTE_CONST(0.10000000000000001) / (1 + CHASTE_MATH::Exp(-9 + 10000 * var_chaste_interface__calcium_dynamics__Cai)); // dimensionless + const double var_i_CaL_fCa_gate__gamma_fCa = CHASTE_CONST(0.29999999999999999) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.9375) + 1250 * var_chaste_interface__calcium_dynamics__Cai)); // dimensionless + const double var_i_CaL_fCa_gate__fCa_inf = CHASTE_CONST(0.76010945576162958) * var_i_CaL_fCa_gate__alpha_fCa + CHASTE_CONST(0.76010945576162958) * var_i_CaL_fCa_gate__beta_fCa + CHASTE_CONST(0.76010945576162958) * var_i_CaL_fCa_gate__gamma_fCa; // dimensionless + const double var_i_CaL_fCa_gate__constfCa = (((var_Membrane__Vm > -CHASTE_CONST(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 = CHASTE_CONST(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 = CHASTE_CONST(0.001) * var_i_CaL_fCa_gate__fCa_orig_deriv; // 1 / millisecond + const double var_i_Kr_Xr1_gate__L0 = CHASTE_CONST(0.025000000000000001); // dimensionless + const double var_i_Kr_Xr1_gate__Q = CHASTE_CONST(2.2999999999999998); // dimensionless + const double var_i_Kr_Xr1_gate__alpha_Xr1 = 450 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(4.5) - 100 * var_Membrane__Vm)); // dimensionless + const double var_i_Kr_Xr1_gate__beta_Xr1 = 6 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(2.6086956521739131) + CHASTE_CONST(86.956521739130437) * var_Membrane__Vm)); // dimensionless + const double var_i_Kr_Xr1_gate__tau_Xr1 = CHASTE_CONST(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 + CHASTE_MATH::Exp(CHASTE_CONST(1.76) + 20 * var_Membrane__Vm)); // dimensionless + const double var_i_Kr_Xr2_gate__alpha_Xr2 = 3 / (1 + CHASTE_MATH::Exp(-3 - 50 * var_Membrane__Vm)); // dimensionless + const double var_i_Kr_Xr2_gate__beta_Xr2 = CHASTE_CONST(1.1200000000000001) / (1 + CHASTE_MATH::Exp(-3 + 50 * var_Membrane__Vm)); // dimensionless + const double var_i_Kr_Xr2_gate__tau_Xr2 = CHASTE_CONST(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 = CHASTE_CONST(0.001) * var_i_Kr_Xr2_gate__Xr2_orig_deriv; // 1 / millisecond + const double var_i_Ks_Xs_gate__Xs_infinity = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.25) - CHASTE_CONST(62.5) * var_Membrane__Vm)); // dimensionless + const double var_i_Ks_Xs_gate__alpha_Xs = 1100 / CHASTE_MATH::Sqrt(1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.6666666666666667) - CHASTE_CONST(166.66666666666666) * var_Membrane__Vm)); // dimensionless + const double var_i_Ks_Xs_gate__beta_Xs = 1 / (1 + CHASTE_MATH::Exp(-3 + 50 * var_Membrane__Vm)); // dimensionless + const double var_i_Ks_Xs_gate__tau_Xs = CHASTE_CONST(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 = CHASTE_CONST(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) ? (CHASTE_CONST(0.17999999999999999)) : ((var_current_blockers__TTX_10uM == 1) ? (CHASTE_CONST(0.059999999999999998)) : ((var_current_blockers__TTX_30uM == 1) ? (CHASTE_CONST(0.02)) : (1)))); // dimensionless + const double var_i_NaCa__KmCa = CHASTE_CONST(1.3799999999999999); // millimolar + const double var_i_NaCa__KmNai = CHASTE_CONST(87.5); // millimolar + const double var_i_NaCa__Ksat = CHASTE_CONST(0.10000000000000001); // dimensionless + const double var_i_NaCa__alpha = CHASTE_CONST(2.8571431999999999); // dimensionless + const double var_i_NaCa__gamma = CHASTE_CONST(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 = CHASTE_CONST(1.8414239999999999); // A_per_F + const double var_i_Na_h_gate__alpha_h = ((var_Membrane__Vm < -CHASTE_CONST(0.040000000000000001)) ? (CHASTE_CONST(0.057000000000000002) * CHASTE_MATH::Exp(-CHASTE_CONST(11.764705882352942) - CHASTE_CONST(147.05882352941177) * var_Membrane__Vm)) : (0)); // dimensionless + const double var_i_Na_h_gate__beta_h = ((var_Membrane__Vm < -CHASTE_CONST(0.040000000000000001)) ? (CHASTE_CONST(2.7000000000000002) * CHASTE_MATH::Exp(79 * var_Membrane__Vm) + 310000 * CHASTE_MATH::Exp(CHASTE_CONST(348.5) * var_Membrane__Vm)) : (CHASTE_CONST(5.9230769230769234) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.96036036036036043) - CHASTE_CONST(90.090090090090087) * var_Membrane__Vm)))); // dimensionless + const double var_i_Na_h_gate__h_inf = 1 / CHASTE_MATH::Sqrt(1 + CHASTE_MATH::Exp(CHASTE_CONST(12.649122807017543) + CHASTE_CONST(175.43859649122805) * var_Membrane__Vm)); // dimensionless + const double var_i_Na_h_gate__tau_h = ((var_Membrane__Vm < -CHASTE_CONST(0.040000000000000001)) ? (CHASTE_CONST(0.0015) / (var_i_Na_h_gate__alpha_h + var_i_Na_h_gate__beta_h)) : (CHASTE_CONST(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 = CHASTE_CONST(0.001) * var_i_Na_h_gate__h_orig_deriv; // 1 / millisecond + const double var_i_Na_j_gate__alpha_j = ((var_Membrane__Vm < -CHASTE_CONST(0.040000000000000001)) ? ((CHASTE_CONST(37.780000000000001) + 1000 * var_Membrane__Vm) * (-25428 * CHASTE_MATH::Exp(CHASTE_CONST(244.40000000000001) * var_Membrane__Vm) - CHASTE_CONST(6.9480000000000002e-6) * CHASTE_MATH::Exp(-CHASTE_CONST(43.909999999999997) * var_Membrane__Vm)) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(24.640530000000002) + 311 * var_Membrane__Vm))) : (0)); // dimensionless + const double var_i_Na_j_gate__beta_j = ((var_Membrane__Vm < -CHASTE_CONST(0.040000000000000001)) ? (CHASTE_CONST(0.024240000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(10.52) * var_Membrane__Vm) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(5.5312920000000005) - CHASTE_CONST(137.80000000000001) * var_Membrane__Vm))) : (CHASTE_CONST(0.59999999999999998) * CHASTE_MATH::Exp(57 * var_Membrane__Vm) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.2000000000000002) - 100 * var_Membrane__Vm)))); // dimensionless + const double var_i_Na_j_gate__j_inf = 1 / CHASTE_MATH::Sqrt(1 + CHASTE_MATH::Exp(CHASTE_CONST(12.649122807017543) + CHASTE_CONST(175.43859649122805) * var_Membrane__Vm)); // dimensionless + const double var_i_Na_j_gate__tau_j = CHASTE_CONST(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 = CHASTE_CONST(0.001) * var_i_Na_j_gate__j_orig_deriv; // 1 / millisecond + const double var_i_Na_m_gate__alpha_m = 1 / (1 + CHASTE_MATH::Exp(-12 - 200 * var_Membrane__Vm)); // dimensionless + const double var_i_Na_m_gate__beta_m = CHASTE_CONST(0.10000000000000001) / (1 + CHASTE_MATH::Exp(7 + 200 * var_Membrane__Vm)) + CHASTE_CONST(0.10000000000000001) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.25) + 5 * var_Membrane__Vm)); // dimensionless + const double var_i_Na_m_gate__m_inf = CHASTE_MATH::Pow((1 + CHASTE_MATH::Exp(-CHASTE_CONST(5.7796610169491522) - CHASTE_CONST(169.4915254237288) * var_Membrane__Vm)), (-CHASTE_CONST(0.33333333333333331))); // dimensionless + const double var_i_Na_m_gate__tau_m = CHASTE_CONST(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 = CHASTE_CONST(0.001) * var_i_Na_m_gate__m_orig_deriv; // 1 / millisecond + const double var_i_PCa__KPCa = CHASTE_CONST(0.00050000000000000001); // millimolar + const double var_i_PCa__g_PCa = CHASTE_CONST(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 = CHASTE_CONST(0.69264000000000003); // S_per_F + const double var_i_b_Na__g_b_Na = CHASTE_CONST(0.90000000000000002); // S_per_F + const double var_i_f_Xf_gate__Xf_infinity = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(15.569999999999999) + 200 * var_Membrane__Vm)); // dimensionless + const double var_i_f_Xf_gate__tau_Xf = CHASTE_CONST(1.8999999999999999) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(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 = CHASTE_CONST(0.001) * var_i_f_Xf_gate__Xf_orig_deriv; // 1 / millisecond + const double var_i_to_q_gate__q_inf = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(4.0769230769230766) + CHASTE_CONST(76.92307692307692) * var_Membrane__Vm)); // dimensionless + const double var_i_to_q_gate__tau_q = CHASTE_CONST(0.0060599999999999994) + CHASTE_CONST(0.039101999999999998) / (CHASTE_CONST(0.065000000000000002) * CHASTE_MATH::Exp(CHASTE_CONST(4.593) + 100 * var_Membrane__Vm) + CHASTE_CONST(0.56999999999999995) * CHASTE_MATH::Exp(-CHASTE_CONST(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 = CHASTE_CONST(0.001) * var_i_to_q_gate__q_orig_deriv; // 1 / millisecond + const double var_i_to_r_gate__r_inf = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.1893333333333334) - CHASTE_CONST(53.333333333333336) * var_Membrane__Vm)); // dimensionless + const double var_i_to_r_gate__tau_r = CHASTE_CONST(0.0027535199999999998) + CHASTE_CONST(0.01440516) / (CHASTE_CONST(1.0369999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(2.7548999999999997) + 90 * var_Membrane__Vm) + CHASTE_CONST(0.36899999999999999) * CHASTE_MATH::Exp(-CHASTE_CONST(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 = CHASTE_CONST(0.001) * var_i_to_r_gate__r_orig_deriv; // 1 / millisecond + const double var_model_parameters__F = CHASTE_CONST(96485.341499999995); // coulomb_per_mole + const double var_model_parameters__R = CHASTE_CONST(8.3144720000000003); // joule_per_mole_kelvin + const double var_electric_potentials__E_Ca = CHASTE_CONST(0.5) * var_model_parameters__R * mParameters[12] * CHASTE_MATH::Log(mParameters[1] / var_chaste_interface__calcium_dynamics__Cai) / var_model_parameters__F; // volt + const double var_i_CaL__i_CaL = ((((var_Membrane__Vm >= -CHASTE_CONST(4.3086710741444596e-12) * mParameters[12]) && (var_Membrane__Vm <= CHASTE_CONST(4.3086710741444596e-12) * mParameters[12])) || ((var_Membrane__Vm >= CHASTE_CONST(4.3086710741444596e-12) * mParameters[12]) && (var_Membrane__Vm <= -CHASTE_CONST(4.3086710741444596e-12) * mParameters[12]))) ? (-CHASTE_CONST(116045061550.51096) * (-CHASTE_CONST(4.3086710741444596e-12) * mParameters[12] + var_Membrane__Vm) * (-CHASTE_CONST(0.019297068299999998) * (-CHASTE_CONST(0.34100000000000003) * mParameters[1] + var_chaste_interface__calcium_dynamics__Cai * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) * 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 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) - CHASTE_CONST(0.019297068299999998) * (-CHASTE_CONST(0.34100000000000003) * mParameters[1] + var_chaste_interface__calcium_dynamics__Cai * CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8))) * 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 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) / mParameters[12] + CHASTE_CONST(0.019297068299999998) * (-CHASTE_CONST(0.34100000000000003) * mParameters[1] + var_chaste_interface__calcium_dynamics__Cai * CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) * 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 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8)))) : (CHASTE_CONST(4478658957.2358274) * (-CHASTE_CONST(0.34100000000000003) * mParameters[1] + var_chaste_interface__calcium_dynamics__Cai * CHASTE_MATH::Exp(CHASTE_CONST(23209.012310102189) * var_Membrane__Vm / mParameters[12])) * var_Membrane__Vm * 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 + CHASTE_MATH::Exp(CHASTE_CONST(23209.012310102189) * var_Membrane__Vm / mParameters[12])) * mParameters[12]))); // A_per_F + const double var_i_Kr_Xr1_gate__V_half = -19 - 1000 * (-CHASTE_CONST(2.1789087017666886) + CHASTE_MATH::Log(CHASTE_MATH::Pow((1 + CHASTE_CONST(0.38461538461538458) * mParameters[1]), 4) / (CHASTE_MATH::Pow((CHASTE_CONST(0.57999999999999996) + mParameters[1]), 4) * var_i_Kr_Xr1_gate__L0))) * var_model_parameters__R * mParameters[12] / (var_i_Kr_Xr1_gate__Q * var_model_parameters__F); // millivolt + const double var_i_Kr_Xr1_gate__Xr1_inf = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(0.2040816326530612) * var_i_Kr_Xr1_gate__V_half - CHASTE_CONST(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 = CHASTE_CONST(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 = CHASTE_CONST(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 = CHASTE_CONST(0.001) * var_calcium_dynamics__Ca_SR_orig_deriv; // millimolar / millisecond + const double var_electric_potentials__E_Na = var_model_parameters__R * mParameters[12] * CHASTE_MATH::Log(mParameters[3] / var_chaste_interface__sodium_dynamics__Nai) / var_model_parameters__F; // volt + const double var_i_Na__i_Na = CHASTE_MATH::Pow(var_chaste_interface__i_Na_m_gate__m, 3) * (-var_electric_potentials__E_Na + var_Membrane__Vm) * var_i_Na__TTX_coeff * 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 = (CHASTE_MATH::Pow(var_chaste_interface__sodium_dynamics__Nai, 3) * mParameters[1] * CHASTE_MATH::Exp(var_Membrane__Vm * var_i_NaCa__gamma * var_model_parameters__F / (var_model_parameters__R * mParameters[12])) - CHASTE_MATH::Pow(mParameters[3], 3) * var_chaste_interface__calcium_dynamics__Cai * var_i_NaCa__alpha * CHASTE_MATH::Exp((-1 + var_i_NaCa__gamma) * var_Membrane__Vm * var_model_parameters__F / (var_model_parameters__R * mParameters[12]))) * var_i_NaCa__kNaCa / ((1 + var_i_NaCa__Ksat * CHASTE_MATH::Exp((-1 + var_i_NaCa__gamma) * var_Membrane__Vm * var_model_parameters__F / (var_model_parameters__R * mParameters[12]))) * (CHASTE_MATH::Pow(var_i_NaCa__KmNai, 3) + CHASTE_MATH::Pow(mParameters[3], 3)) * (var_i_NaCa__KmCa + mParameters[1])); // A_per_F + const double var_calcium_dynamics__Cai_orig_deriv = (-var_calcium_dynamics__i_up - CHASTE_CONST(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) * 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 = CHASTE_CONST(0.001) * var_calcium_dynamics__Cai_orig_deriv; // millimolar / millisecond + const double var_i_NaK__i_NaK = var_i_NaK__PNaK * mParameters[2] * var_chaste_interface__sodium_dynamics__Nai / ((var_i_NaK__Km_K + mParameters[2]) * (var_i_NaK__Km_Na + var_chaste_interface__sodium_dynamics__Nai) * (1 + CHASTE_CONST(0.035299999999999998) * CHASTE_MATH::Exp(-var_Membrane__Vm * var_model_parameters__F / (var_model_parameters__R * mParameters[12])) + CHASTE_CONST(0.1245) * CHASTE_MATH::Exp(-CHASTE_CONST(0.10000000000000001) * var_Membrane__Vm * var_model_parameters__F / (var_model_parameters__R * 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 = -CHASTE_CONST(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) * mParameters[11] / (var_model_parameters__F * var_model_parameters__Vc); // millimolar / second + const double d_dt_chaste_interface_var_sodium_dynamics__Nai = CHASTE_CONST(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;const double var_current_blockers__Chromanol_iKs50 = 0;const double var_current_blockers__Chromanol_iKs70 = 0;const double var_current_blockers__Chromanol_iKs90 = 0;const double var_current_blockers__E4031_100nM = 0;const double var_current_blockers__E4031_30nM = 0;const double var_electric_potentials__PkNa = CHASTE_CONST(0.029999999999999999);const double var_i_Kr__E4031_coeff = ((var_current_blockers__E4031_30nM == 1) ? (CHASTE_CONST(0.77000000000000002)) : ((var_current_blockers__E4031_100nM == 1) ? (CHASTE_CONST(0.5)) : (1)));const double var_i_Ks__Chromanol_coeff = ((var_current_blockers__Chromanol_iKs30 == 1) ? (CHASTE_CONST(0.69999999999999996)) : ((var_current_blockers__Chromanol_iKs50 == 1) ? (CHASTE_CONST(0.5)) : ((var_current_blockers__Chromanol_iKs70 == 1) ? (CHASTE_CONST(0.29999999999999999)) : ((var_current_blockers__Chromanol_iKs90 == 1) ? (CHASTE_CONST(0.10000000000000001)) : (1)))));const double var_i_Ks__g_Ks_total = (1 + CHASTE_CONST(0.59999999999999998) / (1 + CHASTE_CONST(6.4818210260626455e-7) * CHASTE_MATH::Pow((1 / var_chaste_interface__calcium_dynamics__Cai), CHASTE_CONST(1.3999999999999999)))) * mParameters[9];const double var_i_f__E_f = -CHASTE_CONST(0.017000000000000001);const double var_i_f__i_f = (-var_i_f__E_f + var_Membrane__Vm) * mParameters[6] * var_chaste_interface__i_f_Xf_gate__Xf;const double var_i_K1__g_K1_total = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::Sqrt(mParameters[2]) * mParameters[7];const double var_i_Kr__g_Kr_total = CHASTE_CONST(0.43033148291193518) * CHASTE_MATH::Sqrt(mParameters[2]) * mParameters[8];const double var_electric_potentials__E_K = var_model_parameters__R * mParameters[12] * CHASTE_MATH::Log(mParameters[2] / mParameters[0]) / var_model_parameters__F;const double var_i_K1__alpha_K1 = CHASTE_CONST(3.9100000000000001) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(118.83999999999999) + CHASTE_CONST(594.19999999999993) * var_Membrane__Vm - CHASTE_CONST(594.19999999999993) * var_electric_potentials__E_K));const double var_i_K1__beta_K1 = (-CHASTE_CONST(1.5089999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(0.02) + CHASTE_CONST(0.20000000000000001) * var_Membrane__Vm - CHASTE_CONST(0.20000000000000001) * var_electric_potentials__E_K) + CHASTE_MATH::Exp(-CHASTE_CONST(5.8860000000000001) + CHASTE_CONST(588.60000000000002) * var_Membrane__Vm - CHASTE_CONST(588.60000000000002) * var_electric_potentials__E_K)) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(454.69999999999999) * var_Membrane__Vm - CHASTE_CONST(454.69999999999999) * var_electric_potentials__E_K));const double var_i_K1__XK1_inf = var_i_K1__alpha_K1 / (var_i_K1__alpha_K1 + var_i_K1__beta_K1);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;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;const double var_i_to__i_to = (-var_electric_potentials__E_K + var_Membrane__Vm) * mParameters[10] * var_chaste_interface__i_to_q_gate__q * var_chaste_interface__i_to_r_gate__r;const double var_electric_potentials__E_Ks = var_model_parameters__R * mParameters[12] * CHASTE_MATH::Log((var_electric_potentials__PkNa * mParameters[3] + mParameters[2]) / (var_electric_potentials__PkNa * var_chaste_interface__sodium_dynamics__Nai + mParameters[0])) / var_model_parameters__F;const double var_i_Ks__i_Ks = CHASTE_MATH::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;const double var_stim_mode__i_stim_converted = -CHASTE_STIM(var_chaste_interface__environment__time_converted);const double var_stim_mode__i_stim = var_stim_mode__i_stim_converted / CHASTE_CAP();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;const double var_Membrane__Vm_orig_deriv_a = CHASTE_CONST(0.001) * var_Membrane__Vm_orig_deriv;d_dt_chaste_interface_var_Membrane__Vm_converted = 1000 * var_Membrane__Vm_orig_deriv_a; + } + + rDY[0] = d_dt_chaste_interface_var_Membrane__Vm_converted; + rDY[1] = d_dt_chaste_interface_var_calcium_dynamics__Cai; + 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_CaL_d_gate__d; + rDY[6] = d_dt_chaste_interface_var_i_CaL_f1_gate__f1; + rDY[7] = d_dt_chaste_interface_var_i_CaL_f2_gate__f2; + rDY[8] = d_dt_chaste_interface_var_i_CaL_fCa_gate__fCa; + rDY[9] = d_dt_chaste_interface_var_i_Kr_Xr1_gate__Xr1; + rDY[10] = d_dt_chaste_interface_var_i_Kr_Xr2_gate__Xr2; + rDY[11] = d_dt_chaste_interface_var_i_Ks_Xs_gate__Xs; + rDY[12] = d_dt_chaste_interface_var_i_f_Xf_gate__Xf; + rDY[13] = d_dt_chaste_interface_var_i_to_q_gate__q; + rDY[14] = d_dt_chaste_interface_var_i_to_r_gate__r; + rDY[15] = d_dt_chaste_interface_var_sodium_dynamics__Nai; + rDY[16] = d_dt_chaste_interface_var_calcium_dynamics__Ca_SR; + rDY[17] = d_dt_chaste_interface_var_calcium_dynamics__g; +} + + + + + +#include "ChasteCpuMacros.hpp" +#endif // CELLPACI_HYTTINEN_AALTOSETALA_SEVERI_VENTRICULARVERSIONFROMCELLMLCVODEKERNELS_HPP_ \ No newline at end of file diff --git a/chaste_codegen/data/tests/chaste_reference_models/Cvode_with_jacobian/aslanidi_atrial_model_2009Kernels.hpp b/chaste_codegen/data/tests/chaste_reference_models/Cvode_with_jacobian/aslanidi_atrial_model_2009Kernels.hpp new file mode 100644 index 000000000..84fd35f3b --- /dev/null +++ b/chaste_codegen/data/tests/chaste_reference_models/Cvode_with_jacobian/aslanidi_atrial_model_2009Kernels.hpp @@ -0,0 +1,1302 @@ +#ifndef CELLASLANIDI_ATRIAL_MODEL_2009FROMCELLMLCVODEKERNELS_HPP_ +#define CELLASLANIDI_ATRIAL_MODEL_2009FROMCELLMLCVODEKERNELS_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 "MathsCustomFunctions.hpp" +#include "ChasteDeviceMacros.hpp" + + +template +DEVICE +void Cellaslanidi_atrial_model_2009FromCellMLCvode::EvaluateYDerivativesDevice(ValueType var_chaste_interface__environment__time_converted, const ValueType *rY, ValueType *rDY, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType *mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim) +{ + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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__intracellular_Ca_buffering__O_C = rY[18]; + // Units: dimensionless; Initial value: 0.029108 + double var_chaste_interface__intracellular_Ca_buffering__O_TC = rY[19]; + // Units: dimensionless; Initial value: 0.014071 + double var_chaste_interface__intracellular_Ca_buffering__O_TMgC = rY[20]; + // Units: dimensionless; Initial value: 0.214036 + double var_chaste_interface__intracellular_Ca_buffering__O_TMgMg = rY[21]; + // Units: dimensionless; Initial value: 0.693565 + 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__Ca_up = rY[24]; + // Units: millimolar; Initial value: 0.730866 + double var_chaste_interface__Ca_handling_by_the_SR__O_Calse = rY[25]; + // Units: dimensionless; Initial value: 0.465921 + double var_chaste_interface__Ca_handling_by_the_SR__F1 = rY[26]; + // Units: dimensionless; Initial value: 0.288039 + double var_chaste_interface__Ca_handling_by_the_SR__F2 = rY[27]; + // Units: dimensionless; Initial value: 0.002262 + double var_chaste_interface__Ca_handling_by_the_SR__F3 = 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 = CHASTE_CONST(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 = CHASTE_CONST(4.3999999999999997e-8); // nanolitre + const double var_Ca_handling_by_the_SR__Vol_up = CHASTE_CONST(3.9690000000000001e-7); // nanolitre + const double var_Ca_handling_by_the_SR__k_F3 = CHASTE_CONST(0.81499999999999995); // per_second + const double var_Ca_handling_by_the_SR__k_cyca = CHASTE_CONST(0.00029999999999999997); // millimolar + const double var_Ca_handling_by_the_SR__k_rel = CHASTE_CONST(0.00029999999999999997); // millimolar + const double var_Ca_handling_by_the_SR__k_srca = CHASTE_CONST(0.5); // millimolar + const double var_Ca_handling_by_the_SR__k_xcs = CHASTE_CONST(0.40000000000000002); // dimensionless + const double var_Ca_handling_by_the_SR__tau_tr = CHASTE_CONST(0.01); // second + const double var_Ca_independent_transient_outward_K_current__g_to = CHASTE_CONST(0.050001999999999998); // nanoS + const double d_dt_chaste_interface_var_Ca_handling_by_the_SR__O_Calse = CHASTE_CONST(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 = CHASTE_CONST(0.00029999999999999997); // per_millimolar_4 + const double var_Na_Ca_ion_exchanger_current__gamma = CHASTE_CONST(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 = CHASTE_CONST(0.0060000000000000001); // nanoS + const double var_background_currents__g_B_Ca = CHASTE_CONST(3.1000000000000001e-5); // nanoS + const double var_background_currents__g_B_Na = CHASTE_CONST(6.3999999999999997e-5); // nanoS + const double var_cleft_space_ion_concentrations__Vol_c = CHASTE_CONST(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 = CHASTE_CONST(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 = CHASTE_CONST(0.001) * var_intracellular_Ca_buffering__O_TMgMg_orig_deriv; // 1 / millisecond + const double var_Ca_handling_by_the_SR__i_rel = CHASTE_MATH::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] / CHASTE_MATH::Pow((CHASTE_CONST(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 - CHASTE_MATH::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 = CHASTE_CONST(33.960000000000001) + CHASTE_CONST(339.60000000000002) * CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Ca_i, 4) / CHASTE_MATH::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 = CHASTE_CONST(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 = CHASTE_CONST(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 = CHASTE_CONST(0.001) * var_intracellular_Ca_buffering__O_TC_orig_deriv; // 1 / millisecond + const double var_intracellular_Ca_buffering__dOTMgCdt = -CHASTE_CONST(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 = CHASTE_CONST(0.001) * var_intracellular_Ca_buffering__O_TMgC_orig_deriv; // 1 / millisecond + const double var_intracellular_ion_concentrations__Vol_Ca = CHASTE_CONST(5.8839999999999999e-6); // nanolitre + const double var_intracellular_ion_concentrations__Vol_i = CHASTE_CONST(1.26e-5); // nanolitre + const double var_inward_rectifier__KmK1 = CHASTE_CONST(0.58999999999999997); // millimolar + const double var_inward_rectifier__shiftK1 = -CHASTE_CONST(3.6000000000000001); // millivolt + const double var_inward_rectifier__steepK1 = CHASTE_CONST(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 + CHASTE_CONST(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 = CHASTE_CONST(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 = CHASTE_CONST(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 = CHASTE_CONST(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 * CHASTE_MATH::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 = CHASTE_CONST(0.5) * var_membrane__R * var_membrane__T * CHASTE_MATH::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 * CHASTE_MATH::Exp(-CHASTE_CONST(1.6000000000000001) + CHASTE_CONST(0.080000000000000002) * var_chaste_interface__membrane__V) + CHASTE_CONST(203.80000000000001) * CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Ca_i, 4) / CHASTE_MATH::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)) ? (CHASTE_CONST(0.098000000000000004) + CHASTE_CONST(0.0014) * var_chaste_interface__membrane__V) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (CHASTE_CONST(0.16799999999999998) + CHASTE_CONST(0.0023999999999999998) * var_chaste_interface__membrane__V) : (CHASTE_CONST(0.070000000000000007) + CHASTE_CONST(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)) ? (CHASTE_CONST(0.20000000000000001) * (CHASTE_CONST(0.40000000000000002) + CHASTE_CONST(0.59999999999999998) * CHASTE_MATH::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) * (CHASTE_CONST(0.58999999999999997) * CHASTE_MATH::Pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s1_gate__s1, 3) + CHASTE_CONST(0.40999999999999998) * CHASTE_MATH::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)) ? (CHASTE_CONST(0.34999999999999998) * (CHASTE_CONST(0.40000000000000002) + CHASTE_CONST(0.59999999999999998) * CHASTE_MATH::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) * (CHASTE_CONST(0.58999999999999997) * CHASTE_MATH::Pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s1_gate__s1, 3) + CHASTE_CONST(0.40999999999999998) * CHASTE_MATH::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) : ((CHASTE_CONST(0.40000000000000002) + CHASTE_CONST(0.59999999999999998) * CHASTE_MATH::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) * (CHASTE_CONST(0.58999999999999997) * CHASTE_MATH::Pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s1_gate__s1, 3) + CHASTE_CONST(0.40999999999999998) * CHASTE_MATH::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 = CHASTE_CONST(386.60000000000002) * CHASTE_MATH::Exp(CHASTE_CONST(0.083333333333333329) * var_chaste_interface__membrane__V); // per_second + const double var_Ca_independent_transient_outward_K_current_r_gate__beta_r = CHASTE_CONST(8.0109999999999992) * CHASTE_MATH::Exp(-CHASTE_CONST(0.1388888888888889) * var_chaste_interface__membrane__V); // per_second + const double var_Ca_independent_transient_outward_K_current_r_gate__r_infinity = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.6628794603230959) - CHASTE_CONST(0.17752529735487307) * var_chaste_interface__membrane__V)); // dimensionless + const double var_Ca_independent_transient_outward_K_current_r_gate__tau_r = CHASTE_CONST(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 + CHASTE_MATH::Exp(CHASTE_CONST(4.0070821529745047) + CHASTE_CONST(0.14164305949008499) * var_chaste_interface__membrane__V)); // dimensionless + const double var_Ca_independent_transient_outward_K_current_s1_gate__tau_s1 = CHASTE_CONST(0.020400000000000001) + CHASTE_CONST(0.54659999999999997) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(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 + CHASTE_MATH::Exp(CHASTE_CONST(4.0070821529745047) + CHASTE_CONST(0.14164305949008499) * var_chaste_interface__membrane__V)); // dimensionless + const double var_Ca_independent_transient_outward_K_current_s2_gate__tau_s2 = CHASTE_CONST(5.75) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(327.99999999999994) + 10 * var_chaste_interface__membrane__V)) + CHASTE_CONST(0.45000000000000001) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(0.96921975662133131) - CHASTE_CONST(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 = CHASTE_CONST(0.39975990396158467) + CHASTE_CONST(0.60024009603841544) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(1.8506208911614319) + CHASTE_CONST(0.036523009495982472) * var_chaste_interface__membrane__V)); // dimensionless + const double var_Ca_independent_transient_outward_K_current_s3_gate__tau_s3 = CHASTE_CONST(0.5) + CHASTE_CONST(7.5) / (1 + CHASTE_MATH::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 = CHASTE_CONST(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 = CHASTE_CONST(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 = CHASTE_CONST(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 = CHASTE_CONST(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 = CHASTE_CONST(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 = CHASTE_CONST(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 + CHASTE_MATH::Exp(CHASTE_CONST(1.9166666666666667) - CHASTE_CONST(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)) ? (CHASTE_CONST(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)) ? (CHASTE_CONST(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_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 >= -CHASTE_CONST(10.000000480800001)) && (var_chaste_interface__membrane__V <= -CHASTE_CONST(9.9999995191999993))) ? (CHASTE_CONST(2.4040000000391526e-5) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(1.0000000000162864e-7))) + CHASTE_CONST(1039933.4442576389) * (CHASTE_CONST(10.000000480800001) + var_chaste_interface__membrane__V) * (-CHASTE_CONST(2.4040000000391526e-5) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(1.0000000000162864e-7))) - CHASTE_CONST(2.4039999999697637e-5) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999998742257e-8))))) : (-50 * (10 + var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(2.0798668885191347) - CHASTE_CONST(0.20798668885191349) * var_chaste_interface__membrane__V)))) + (((var_chaste_interface__membrane__V >= -CHASTE_CONST(45.000000249999999)) && (var_chaste_interface__membrane__V <= -CHASTE_CONST(44.999999750000001))) ? (CHASTE_CONST(4.1799999996561256e-6) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999991773334e-8))) + CHASTE_CONST(1999999.9999424887) * (CHASTE_CONST(45.000000249999999) + var_chaste_interface__membrane__V) * (-CHASTE_CONST(4.1800000005842713e-6) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.000000000139778e-7))) - CHASTE_CONST(4.1799999996561256e-6) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999991773334e-8))))) : (-CHASTE_CONST(16.719999999999999) * (45 + var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(-18 - CHASTE_CONST(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 >= -CHASTE_CONST(5.0000002500000003)) && (var_chaste_interface__membrane__V <= -CHASTE_CONST(4.9999997499999997))) ? (-CHASTE_CONST(1.1200000000011203e-6) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.0000000000010001e-7))) + CHASTE_CONST(1999999.9999979998) * (CHASTE_CONST(5.0000002500000003) + var_chaste_interface__membrane__V) * (CHASTE_CONST(1.1200000000011203e-6) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(1.0000000000010001e-7))) + CHASTE_CONST(1.1200000000011203e-6) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.0000000000010001e-7))))) : (CHASTE_CONST(4.4800000000000004) * (5 + var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(2 + CHASTE_CONST(0.40000000000000002) * var_chaste_interface__membrane__V)))); // per_second + const double var_L_type_Ca_channel_d_L_gate__d_L_infinity = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.14393939393939395) - CHASTE_CONST(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 = CHASTE_CONST(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 >= -CHASTE_CONST(18.000000400000001)) && (var_chaste_interface__membrane__V <= -CHASTE_CONST(17.999999599999999))) ? (-CHASTE_CONST(3.3960000000976542e-6) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.0000000000287557e-7))) + CHASTE_CONST(1249999.9999640554) * (CHASTE_CONST(18.000000400000001) + var_chaste_interface__membrane__V) * (CHASTE_CONST(3.3960000000976542e-6) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(1.0000000000287557e-7))) + CHASTE_CONST(3.3960000000976542e-6) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.0000000000287557e-7))))) : (CHASTE_CONST(8.4900000000000002) * (18 + var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(4.5) + CHASTE_CONST(0.25) * var_chaste_interface__membrane__V)))); // per_second + const double var_L_type_Ca_channel_f_L_gate__beta_f_L = CHASTE_CONST(67.921999999999997) / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(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 = CHASTE_CONST(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 = (CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mParameters[1] * CHASTE_MATH::Exp(var_Na_Ca_ion_exchanger_current__gamma * var_membrane__F * var_chaste_interface__membrane__V / (var_membrane__R * var_membrane__T)) - CHASTE_MATH::Pow(mParameters[2], 3) * var_chaste_interface__intracellular_ion_concentrations__Ca_i * CHASTE_MATH::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 + (CHASTE_MATH::Pow(mParameters[2], 3) * var_chaste_interface__intracellular_ion_concentrations__Ca_i + CHASTE_MATH::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_T_type_Ca_channel_d_T_gate__E0_d_T = CHASTE_CONST(23.300000000000001) + var_chaste_interface__membrane__V; // millivolt + const double var_T_type_Ca_channel_d_T_gate__alpha_d_T = CHASTE_CONST(674.173) * CHASTE_MATH::Exp(CHASTE_CONST(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 = CHASTE_CONST(674.173) * CHASTE_MATH::Exp(-CHASTE_CONST(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 + CHASTE_MATH::Exp(CHASTE_CONST(0.049180327868852458) - CHASTE_CONST(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 = CHASTE_CONST(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 = CHASTE_CONST(9.6370000000000005) * CHASTE_MATH::Exp(-CHASTE_CONST(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 = CHASTE_CONST(9.6370000000000005) * CHASTE_MATH::Exp(CHASTE_CONST(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 = CHASTE_CONST(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)) ? (CHASTE_CONST(2.0000000000000002e-5) * var_chaste_interface__membrane__V - CHASTE_CONST(2.0000000000000002e-5) * var_background_currents__E_Ca) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (CHASTE_CONST(3.0000000000000001e-5) * var_chaste_interface__membrane__V - CHASTE_CONST(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_delayed_rectifier_K_current_pa_gate__alpha_p_a = 9 * CHASTE_MATH::Exp(CHASTE_CONST(0.03941508020968823) * var_chaste_interface__membrane__V); // per_second + const double var_delayed_rectifier_K_current_pa_gate__beta_p_a = CHASTE_CONST(1.3) * CHASTE_MATH::Exp(-CHASTE_CONST(0.076769537847382163) * var_chaste_interface__membrane__V); // per_second + const double var_delayed_rectifier_K_current_pa_gate__p_a_infinity = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(0.68918918918918914) - CHASTE_CONST(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 = CHASTE_CONST(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 * CHASTE_MATH::Exp(-CHASTE_CONST(0.018299935950224173) * var_chaste_interface__membrane__V); // per_second + const double var_delayed_rectifier_K_current_pi_gate__beta_p_i = 656 * CHASTE_MATH::Exp(CHASTE_CONST(0.009420009985210585) * var_chaste_interface__membrane__V); // per_second + const double var_delayed_rectifier_K_current_pi_gate__p_i_infinity = 1 / (1 + CHASTE_MATH::Exp(CHASTE_CONST(2.539728728905752) + CHASTE_CONST(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 = CHASTE_CONST(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 = CHASTE_CONST(1.6599999999999999) * CHASTE_MATH::Exp(CHASTE_CONST(0.014398433450440593) * var_chaste_interface__membrane__V); // per_second + const double var_delayed_rectifier_K_current_z_gate__beta_z = CHASTE_CONST(0.29999999999999999) * CHASTE_MATH::Exp(-CHASTE_CONST(0.045816915605241454) * var_chaste_interface__membrane__V); // per_second + const double var_delayed_rectifier_K_current_z_gate__tau_z = CHASTE_CONST(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 + CHASTE_MATH::Exp(CHASTE_CONST(0.065217391304347824) - CHASTE_CONST(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 = CHASTE_CONST(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 * CHASTE_MATH::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 + CHASTE_MATH::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))) * CHASTE_MATH::Pow((var_chaste_interface__cleft_space_ion_concentrations__K_c + var_inward_rectifier__KmK1), 3))) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (CHASTE_CONST(2.5) * CHASTE_MATH::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 + CHASTE_MATH::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))) * CHASTE_MATH::Pow((var_chaste_interface__cleft_space_ion_concentrations__K_c + var_inward_rectifier__KmK1), 3))) : (CHASTE_MATH::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 + CHASTE_MATH::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))) * CHASTE_MATH::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 = CHASTE_CONST(0.0095090000000000001); // picoA + const double var_sarcolemmal_calcium_pump_current__k_CaP = CHASTE_CONST(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 = -CHASTE_CONST(0.044999999999999998) * var_intracellular_Ca_buffering__dOCdt - CHASTE_CONST(0.080000000000000002) * var_intracellular_Ca_buffering__dOTCdt - CHASTE_CONST(0.16) * var_intracellular_Ca_buffering__dOTMgCdt + CHASTE_CONST(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 = CHASTE_CONST(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 * CHASTE_MATH::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)) ? (CHASTE_CONST(2.0000000000000002e-5) * var_chaste_interface__membrane__V - CHASTE_CONST(2.0000000000000002e-5) * var_sodium_current__E_Na) : (((var_environment__PM == 1) && (var_environment__CT == 0)) ? (CHASTE_CONST(3.0000000000000001e-5) * var_chaste_interface__membrane__V - CHASTE_CONST(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 = CHASTE_CONST(44.899999999999999) * CHASTE_MATH::Exp(-CHASTE_CONST(12.010771992818672) - CHASTE_CONST(0.17953321364452424) * var_chaste_interface__membrane__V); // per_second + const double var_sodium_current_h1_gate__beta_h = 1491 / (1 + CHASTE_CONST(323.30000000000001) * CHASTE_MATH::Exp(-CHASTE_CONST(7.333333333333333) - CHASTE_CONST(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 = CHASTE_CONST(0.00014999999999999999) + CHASTE_CONST(0.029999999999999999) / (1 + CHASTE_MATH::Exp(CHASTE_CONST(6.666666666666667) + CHASTE_CONST(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 = CHASTE_CONST(0.001) * var_sodium_current_h1_gate__h1_orig_deriv; // 1 / millisecond + const double var_sodium_current_h2_gate__tau_h2 = CHASTE_CONST(0.00044999999999999999) + CHASTE_CONST(0.12) / (1 + CHASTE_MATH::Exp(30 + CHASTE_CONST(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 = CHASTE_CONST(0.001) * var_sodium_current_h2_gate__h2_orig_deriv; // 1 / millisecond + const double var_sodium_current_m_gate__E0_m = CHASTE_CONST(44.399999999999999) + var_chaste_interface__membrane__V; // millivolt + const double var_sodium_current_m_gate__alpha_m = (((var_chaste_interface__membrane__V >= -CHASTE_CONST(44.400001267299999)) && (var_chaste_interface__membrane__V <= -CHASTE_CONST(44.399998732699999))) ? (CHASTE_CONST(0.00058295799999830145) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999708629e-8))) + CHASTE_CONST(394539.57232025318) * (CHASTE_CONST(44.400001267299999) + var_chaste_interface__membrane__V) * (-CHASTE_CONST(0.00058295799999830145) / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999708629e-8))) - CHASTE_CONST(0.00058295799999830145) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999708629e-8))))) : (-460 * (CHASTE_CONST(44.399999999999999) + var_chaste_interface__membrane__V) / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(3.5035114021936398) - CHASTE_CONST(0.078907914463820727) * var_chaste_interface__membrane__V)))); // per_second + const double var_sodium_current_m_gate__beta_m = 18400 * CHASTE_MATH::Exp(-CHASTE_CONST(0.078907914463820727) * var_sodium_current_m_gate__E0_m); // per_second + const double var_sodium_current__i_Na = (((var_chaste_interface__membrane__V >= -CHASTE_CONST(2.6539450910485349e-6)) && (var_chaste_interface__membrane__V <= CHASTE_CONST(2.6539450910485349e-6))) ? (CHASTE_CONST(188398.77346612973) * (CHASTE_CONST(2.6539450910485349e-6) + var_chaste_interface__membrane__V) * (CHASTE_CONST(0.0096486999999999996) * CHASTE_MATH::Pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8) - CHASTE_MATH::Log(mParameters[2] / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (CHASTE_CONST(0.36499999999999999) * var_chaste_interface__sodium_current_h2_gate__h2 + CHASTE_CONST(0.63500000000000001) * var_chaste_interface__sodium_current_h1_gate__h1) * mParameters[2] * mParameters[5] / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))) + CHASTE_CONST(0.0096486999999999996) * CHASTE_MATH::Pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8) - CHASTE_MATH::Log(mParameters[2] / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (CHASTE_CONST(0.36499999999999999) * var_chaste_interface__sodium_current_h2_gate__h2 + CHASTE_CONST(0.63500000000000001) * var_chaste_interface__sodium_current_h1_gate__h1) * mParameters[2] * mParameters[5] / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) - CHASTE_CONST(0.0096486999999999996) * CHASTE_MATH::Pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8) - CHASTE_MATH::Log(mParameters[2] / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (CHASTE_CONST(0.36499999999999999) * var_chaste_interface__sodium_current_h2_gate__h2 + CHASTE_CONST(0.63500000000000001) * var_chaste_interface__sodium_current_h1_gate__h1) * mParameters[2] * mParameters[5] / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8)))) : (CHASTE_CONST(3635.606491085292) * CHASTE_MATH::Pow(var_chaste_interface__sodium_current_m_gate__m, 3) * (-1 + CHASTE_MATH::Exp(CHASTE_CONST(0.037679754693225945) * var_chaste_interface__membrane__V - CHASTE_MATH::Log(mParameters[2] / var_chaste_interface__intracellular_ion_concentrations__Na_i))) * (CHASTE_CONST(0.36499999999999999) * var_chaste_interface__sodium_current_h2_gate__h2 + CHASTE_CONST(0.63500000000000001) * var_chaste_interface__sodium_current_h1_gate__h1) * mParameters[2] * var_chaste_interface__membrane__V * mParameters[5] / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(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 = CHASTE_CONST(0.001) * var_sodium_current_m_gate__m_orig_deriv; // 1 / millisecond + const double var_sodium_potassium_pump__i_NaK_max = CHASTE_CONST(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 = CHASTE_CONST(1.6000000000000001) * CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, CHASTE_CONST(1.5)) * var_chaste_interface__cleft_space_ion_concentrations__K_c * var_sodium_potassium_pump__i_NaK_max / ((CHASTE_CONST(1.5) + CHASTE_MATH::Exp(-CHASTE_CONST(1.5) - CHASTE_CONST(0.025000000000000001) * var_chaste_interface__membrane__V)) * (CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, CHASTE_CONST(1.5)) + CHASTE_MATH::Pow(var_sodium_potassium_pump__k_NaK_Na, CHASTE_CONST(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 = CHASTE_CONST(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 = CHASTE_CONST(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 = CHASTE_CONST(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 = CHASTE_CONST(0.001) * mParameters[4];const double var_membrane__i_Stim_converted = CHASTE_STIM(var_chaste_interface__environment__time_converted);const double var_membrane__i_Stim = 1000000 * var_membrane__Cm_converted * var_membrane__i_Stim_converted / CHASTE_CAP();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];d_dt_chaste_interface_var_membrane__V = CHASTE_CONST(0.001) * var_membrane__V_orig_deriv; + } + + rDY[0] = d_dt_chaste_interface_var_membrane__V; + rDY[1] = d_dt_chaste_interface_var_intracellular_ion_concentrations__Ca_i; + rDY[2] = d_dt_chaste_interface_var_sodium_current_m_gate__m; + rDY[3] = d_dt_chaste_interface_var_sodium_current_h1_gate__h1; + rDY[4] = d_dt_chaste_interface_var_sodium_current_h2_gate__h2; + rDY[5] = d_dt_chaste_interface_var_L_type_Ca_channel_d_L_gate__d_L; + rDY[6] = d_dt_chaste_interface_var_L_type_Ca_channel_f_L_gate__f_L; + rDY[7] = d_dt_chaste_interface_var_T_type_Ca_channel_d_T_gate__d_T; + rDY[8] = d_dt_chaste_interface_var_T_type_Ca_channel_f_T_gate__f_T; + rDY[9] = d_dt_chaste_interface_var_Ca_independent_transient_outward_K_current_r_gate__r; + rDY[10] = d_dt_chaste_interface_var_Ca_independent_transient_outward_K_current_s1_gate__s1; + rDY[11] = d_dt_chaste_interface_var_Ca_independent_transient_outward_K_current_s2_gate__s2; + rDY[12] = d_dt_chaste_interface_var_Ca_independent_transient_outward_K_current_s3_gate__s3; + rDY[13] = d_dt_chaste_interface_var_delayed_rectifier_K_current_z_gate__z; + rDY[14] = d_dt_chaste_interface_var_delayed_rectifier_K_current_pa_gate__p_a; + rDY[15] = d_dt_chaste_interface_var_delayed_rectifier_K_current_pi_gate__p_i; + rDY[16] = d_dt_chaste_interface_var_intracellular_ion_concentrations__Na_i; + rDY[17] = d_dt_chaste_interface_var_intracellular_ion_concentrations__K_i; + rDY[18] = d_dt_chaste_interface_var_intracellular_Ca_buffering__O_C; + rDY[19] = d_dt_chaste_interface_var_intracellular_Ca_buffering__O_TC; + rDY[20] = d_dt_chaste_interface_var_intracellular_Ca_buffering__O_TMgC; + rDY[21] = d_dt_chaste_interface_var_intracellular_Ca_buffering__O_TMgMg; + rDY[22] = d_dt_chaste_interface_var_cleft_space_ion_concentrations__K_c; + rDY[23] = d_dt_chaste_interface_var_Ca_handling_by_the_SR__Ca_rel; + rDY[24] = d_dt_chaste_interface_var_Ca_handling_by_the_SR__Ca_up; + rDY[25] = d_dt_chaste_interface_var_Ca_handling_by_the_SR__O_Calse; + rDY[26] = d_dt_chaste_interface_var_Ca_handling_by_the_SR__F1; + rDY[27] = d_dt_chaste_interface_var_Ca_handling_by_the_SR__F2; + rDY[28] = d_dt_chaste_interface_var_Ca_handling_by_the_SR__F3; +} + +template +DEVICE +void Cellaslanidi_atrial_model_2009FromCellMLCvode::EvaluateAnalyticJacobianDevice(ValueType var_chaste_interface__environment__time_converted, const ValueType *rY, ValueType *rDY, ValueType *rJacobian, ValueType *rTmp1, ValueType *rTmp2, ValueType *rTmp3, const unsigned nvars, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType *mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim) +{ + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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__intracellular_Ca_buffering__O_C = rY[18]; + // Units: dimensionless; Initial value: 0.029108 + double var_chaste_interface__intracellular_Ca_buffering__O_TC = rY[19]; + // Units: dimensionless; Initial value: 0.014071 + double var_chaste_interface__intracellular_Ca_buffering__O_TMgC = rY[20]; + // Units: dimensionless; Initial value: 0.214036 + double var_chaste_interface__intracellular_Ca_buffering__O_TMgMg = rY[21]; + // Units: dimensionless; Initial value: 0.693565 + 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__Ca_up = rY[24]; + // Units: millimolar; Initial value: 0.730866 + double var_chaste_interface__Ca_handling_by_the_SR__O_Calse = rY[25]; + // Units: dimensionless; Initial value: 0.465921 + double var_chaste_interface__Ca_handling_by_the_SR__F1 = rY[26]; + // Units: dimensionless; Initial value: 0.288039 + double var_chaste_interface__Ca_handling_by_the_SR__F2 = rY[27]; + // Units: dimensionless; Initial value: 0.002262 + + const double var_x0 = CHASTE_CONST(0.083333333333333329) * var_chaste_interface__membrane__V; + const double var_x1 = CHASTE_MATH::Exp(CHASTE_CONST(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 = 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 = CHASTE_MATH::Exp(CHASTE_CONST(0.016955889611951675) * var_chaste_interface__membrane__V); + const double var_x8 = CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mParameters[1]; + const double var_x9 = var_x7 * var_x8; + const double var_x10 = CHASTE_MATH::Exp(-CHASTE_CONST(0.02072386508127427) * var_chaste_interface__membrane__V); + const double var_x11 = CHASTE_MATH::Pow(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 + CHASTE_CONST(0.00029999999999999997) * var_x12 + CHASTE_CONST(0.00029999999999999997) * var_x8; + const double var_x15 = 1 / var_x14; + const double var_x16 = var_x15 * mParameters[9]; + const double var_x17 = var_x16 * (CHASTE_CONST(0.016955889611951675) * var_x9 + CHASTE_CONST(0.02072386508127427) * var_x13); + const double var_x18 = CHASTE_MATH::Pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s3_gate__s3, 6); + const double var_x19 = CHASTE_CONST(0.00400016) + CHASTE_CONST(0.0060002399999999996) * var_x18; + const double var_x20 = CHASTE_CONST(0.58999999999999997) * CHASTE_MATH::Pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s1_gate__s1, 3) + CHASTE_CONST(0.40999999999999998) * CHASTE_MATH::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 = 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 = CHASTE_MATH::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 = CHASTE_MATH::Log(var_x26 * var_chaste_interface__cleft_space_ion_concentrations__K_c); + const double var_x28 = CHASTE_MATH::Exp(CHASTE_CONST(0.18895643383558949) + CHASTE_CONST(0.052487898287663745) * var_chaste_interface__membrane__V - CHASTE_CONST(1.393) * var_x27); + const double var_x29 = 1 + var_x28; + const double var_x30 = 1 / var_x29; + const double var_x31 = CHASTE_CONST(0.58999999999999997) + var_chaste_interface__cleft_space_ion_concentrations__K_c; + const double var_x32 = CHASTE_MATH::Pow(var_x31, (-3)); + const double var_x33 = var_x32 * mParameters[6]; + const double var_x34 = var_x30 * var_x33; + const double var_x35 = var_x25 * var_x34; + const double var_x36 = (-90 + CHASTE_CONST(1.8) * var_chaste_interface__membrane__V) * mParameters[3]; + const double var_x37 = CHASTE_CONST(0.083333333333333329) * var_x1 / CHASTE_MATH::Pow(var_x2, 2); + const double var_x38 = CHASTE_MATH::Exp(-CHASTE_CONST(1.5) - CHASTE_CONST(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 = CHASTE_MATH::Pow((1 + CHASTE_CONST(0.66666666666666663) * var_x38), (-2)); + const double var_x42 = CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, CHASTE_CONST(1.5)); + const double var_x43 = 1 / (CHASTE_CONST(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 = -CHASTE_CONST(26.53945091048535) * var_x27 + var_chaste_interface__membrane__V; + const double var_x47 = CHASTE_MATH::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 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))); + const double var_x51 = 1 / var_chaste_interface__intracellular_ion_concentrations__Na_i; + const double var_x52 = var_x51 * mParameters[2]; + const double var_x53 = CHASTE_MATH::Log(var_x52); + const double var_x54 = CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8) - var_x53); + const double var_x55 = var_x50 * (-1 + var_x54); + const double var_x56 = CHASTE_CONST(0.36499999999999999) * var_chaste_interface__sodium_current_h2_gate__h2 + CHASTE_CONST(0.63500000000000001) * var_chaste_interface__sodium_current_h1_gate__h1; + const double var_x57 = CHASTE_MATH::Pow(var_chaste_interface__sodium_current_m_gate__m, 3); + const double var_x58 = mParameters[2] * mParameters[5]; + const double var_x59 = var_x57 * var_x58; + const double var_x60 = var_x56 * var_x59; + const double var_x61 = CHASTE_CONST(1817.803245542646) * var_x60; + const double var_x62 = 1 / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8))); + const double var_x63 = CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8) - var_x53); + const double var_x64 = var_x62 * (-1 + var_x63); + const double var_x65 = (var_chaste_interface__membrane__V >= -CHASTE_CONST(2.6539450910485349e-6)) && (var_chaste_interface__membrane__V <= CHASTE_CONST(2.6539450910485349e-6)); + const double var_x66 = CHASTE_CONST(0.037679754693225945) * var_chaste_interface__membrane__V; + const double var_x67 = CHASTE_MATH::Exp(var_x66); + const double var_x68 = -1 + var_x67; + const double var_x69 = 1 / var_x68; + const double var_x70 = CHASTE_MATH::Exp(var_x66 - var_x53); + const double var_x71 = -1 + var_x70; + const double var_x72 = var_x69 * var_x71; + const double var_x73 = CHASTE_CONST(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 + CHASTE_CONST(3635.606491085292) * var_x60 * var_x72 - var_x67 * var_x71 * var_x73 / CHASTE_MATH::Pow(var_x68, 2))); + const double var_x76 = 1 / mParameters[4]; + const double var_x77 = CHASTE_CONST(0.001) * var_x76; + const double var_x78 = CHASTE_CONST(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 = CHASTE_MATH::Pow(var_x78, (-2)); + const double var_x82 = var_x10 * var_x11 * var_x16; + const double var_x83 = CHASTE_MATH::Pow(var_x14, (-2)); + const double var_x84 = var_x9 - var_x13; + const double var_x85 = var_x83 * var_x84 * mParameters[9]; + const double var_x86 = var_x11 * var_x85; + const double var_x87 = CHASTE_CONST(0.5) + CHASTE_CONST(188398.77346612973) * var_chaste_interface__membrane__V; + const double var_x88 = var_x56 * var_x58 * CHASTE_MATH::Pow(var_chaste_interface__sodium_current_m_gate__m, 2); + const double var_x89 = CHASTE_CONST(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)) : (CHASTE_CONST(10906.819473255875) * var_x88 * var_x91)); + const double var_x93 = CHASTE_CONST(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)) : (CHASTE_CONST(2308.6101218391605) * var_x95)); + const double var_x97 = CHASTE_CONST(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)) : (CHASTE_CONST(1326.9963692461315) * var_x95)); + const double var_x100 = CHASTE_CONST(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 = CHASTE_CONST(0.001) * var_chaste_interface__L_type_Ca_channel_d_L_gate__d_L; + const double var_x103 = CHASTE_CONST(0.001) * var_chaste_interface__T_type_Ca_channel_f_T_gate__f_T; + const double var_x104 = var_x76 * (-CHASTE_CONST(0.22800000000000001) + CHASTE_CONST(0.0060000000000000001) * var_chaste_interface__membrane__V); + const double var_x105 = CHASTE_CONST(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 = CHASTE_MATH::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 = CHASTE_MATH::Pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s2_gate__s2, 2); + const double var_x111 = var_x21 * CHASTE_MATH::Pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s3_gate__s3, 5); + const double var_x112 = CHASTE_CONST(0.001) * var_chaste_interface__delayed_rectifier_K_current_pi_gate__p_i; + const double var_x113 = var_x108 * mParameters[7]; + const double var_x114 = CHASTE_CONST(0.001) * var_chaste_interface__delayed_rectifier_K_current_pa_gate__p_a; + const double var_x115 = CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 2); + const double var_x116 = var_x115 * mParameters[1]; + const double var_x117 = var_x116 * var_x16 * var_x7; + const double var_x118 = 1 / (CHASTE_CONST(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 * CHASTE_MATH::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 = CHASTE_MATH::Pow((1 + CHASTE_CONST(0.027410122234342148) * var_x42), (-2)); + const double var_x124 = CHASTE_MATH::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 * mParameters[5]; + const double var_x127 = CHASTE_CONST(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)) : (CHASTE_CONST(3635.606491085292) * var_x126 * var_x74 * var_chaste_interface__membrane__V)); + const double var_x130 = CHASTE_CONST(26.53945091048535) * var_x5; + const double var_x131 = CHASTE_CONST(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 = CHASTE_CONST(26.53945091048535) * var_x134; + const double var_x136 = CHASTE_MATH::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 * mParameters[6] / CHASTE_MATH::Pow(var_x31, 4); + const double var_x139 = CHASTE_MATH::Pow(var_x39, (-2)); + const double var_x140 = var_x118 * var_x139 * var_x44; + const double var_x141 = (CHASTE_CONST(0.079263098651550096) - CHASTE_CONST(0.001585261973031002) * var_chaste_interface__membrane__V) * mParameters[3]; + const double var_x142 = 1 / (CHASTE_CONST(1.3999999999999999) + CHASTE_CONST(0.80000000000000004) * var_chaste_interface__Ca_handling_by_the_SR__Ca_up + CHASTE_CONST(3333.3333333333335) * var_chaste_interface__intracellular_ion_concentrations__Ca_i); + const double var_x143 = CHASTE_MATH::Pow((CHASTE_CONST(0.00041999999999999996) + CHASTE_CONST(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 = CHASTE_CONST(3333.3333333333335) * var_chaste_interface__intracellular_ion_concentrations__Ca_i - CHASTE_CONST(0.32000000000000006) * var_chaste_interface__Ca_handling_by_the_SR__Ca_up; + const double var_x145 = CHASTE_MATH::Pow(var_chaste_interface__Ca_handling_by_the_SR__F2, 2); + const double var_x146 = CHASTE_CONST(0.25) + var_chaste_interface__Ca_handling_by_the_SR__F2; + const double var_x147 = CHASTE_MATH::Pow(var_x146, (-2)); + const double var_x148 = var_x147 * mParameters[0]; + const double var_x149 = var_x145 * var_x148; + const double var_x150 = CHASTE_CONST(0.00088070109612833447) * var_x149; + const double var_x151 = CHASTE_CONST(0.00020079984991726025) - CHASTE_CONST(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 * mParameters[0] / CHASTE_MATH::Pow(var_x146, 3); + const double var_x156 = 1 / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999708629e-8))); + const double var_x157 = 1 / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999708629e-8))); + const double var_x158 = (var_chaste_interface__membrane__V >= -CHASTE_CONST(44.400001267299999)) && (var_chaste_interface__membrane__V <= -CHASTE_CONST(44.399998732699999)); + const double var_x159 = CHASTE_MATH::Exp(-CHASTE_CONST(3.5035114021936398) - CHASTE_CONST(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 = CHASTE_CONST(44.399999999999999) + var_chaste_interface__membrane__V; + const double var_x163 = CHASTE_CONST(0.00058295799999830145) * var_x156; + const double var_x164 = CHASTE_MATH::Exp(-CHASTE_CONST(7.333333333333333) - CHASTE_CONST(0.077519379844961239) * var_chaste_interface__membrane__V); + const double var_x165 = 1 / (1 + CHASTE_CONST(323.30000000000001) * var_x164); + const double var_x166 = CHASTE_MATH::Exp(-CHASTE_CONST(12.010771992818672) - CHASTE_CONST(0.17953321364452424) * var_chaste_interface__membrane__V); + const double var_x167 = 1 / (1491 * var_x165 + CHASTE_CONST(44.899999999999999) * var_x166); + const double var_x168 = CHASTE_CONST(8.0610412926391373) * var_x166; + const double var_x169 = -var_x167 * var_x168 + CHASTE_CONST(2.019719479407183e-5) * var_x166 * (var_x168 - CHASTE_CONST(0.35750508923240704) * var_x164 / CHASTE_MATH::Pow((CHASTE_CONST(0.0030931023816888337) + var_x164), 2)) / CHASTE_MATH::Pow((var_x165 + CHASTE_CONST(0.030114017437961098) * var_x166), 2); + const double var_x170 = CHASTE_MATH::Exp(CHASTE_CONST(6.666666666666667) + CHASTE_CONST(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 = CHASTE_CONST(0.001) / (CHASTE_CONST(0.00014999999999999999) + CHASTE_CONST(0.029999999999999999) * var_x172); + const double var_x174 = -CHASTE_CONST(44.899999999999999) * var_x166 * var_x167; + const double var_x175 = CHASTE_MATH::Exp(30 + CHASTE_CONST(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 = CHASTE_CONST(0.001) / (CHASTE_CONST(0.00044999999999999999) + CHASTE_CONST(0.12) * var_x177); + const double var_x179 = 1 / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(1.0000000000010001e-7))); + const double var_x180 = 1 / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.0000000000010001e-7))); + const double var_x181 = (var_chaste_interface__membrane__V >= -CHASTE_CONST(5.0000002500000003)) && (var_chaste_interface__membrane__V <= -CHASTE_CONST(4.9999997499999997)); + const double var_x182 = CHASTE_CONST(0.40000000000000002) * var_chaste_interface__membrane__V; + const double var_x183 = CHASTE_MATH::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 + CHASTE_MATH::Exp(-CHASTE_CONST(1.000000000139778e-7))); + const double var_x188 = 1 / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999991773334e-8))); + const double var_x189 = CHASTE_CONST(8.3600000009281459) * var_x187 + CHASTE_CONST(8.359999999071853) * var_x188; + const double var_x190 = 1 / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999998742257e-8))); + const double var_x191 = 1 / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(1.0000000000162864e-7))); + const double var_x192 = CHASTE_CONST(24.999999999639201) * var_x190 + CHASTE_CONST(25.000000000360799) * var_x191; + const double var_x193 = var_chaste_interface__membrane__V >= -CHASTE_CONST(45.000000249999999); + const double var_x194 = var_chaste_interface__membrane__V >= -CHASTE_CONST(10.000000480800001); + const double var_x195 = var_chaste_interface__membrane__V <= -CHASTE_CONST(44.999999750000001); + const double var_x196 = var_chaste_interface__membrane__V <= -CHASTE_CONST(9.9999995191999993); + const double var_x197 = (var_x193) && (var_x194) && (var_x195) && (var_x196); + const double var_x198 = CHASTE_MATH::Exp(-CHASTE_CONST(2.0798668885191347) - CHASTE_CONST(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 + CHASTE_CONST(10.399334442595674) * var_x198 * var_x201 / CHASTE_MATH::Pow(var_x199, 2); + const double var_x203 = (var_x193) && (var_x195); + const double var_x204 = CHASTE_MATH::Exp(-18 - var_x182); + const double var_x205 = -1 + var_x204; + const double var_x206 = CHASTE_CONST(16.719999999999999) / var_x205; + const double var_x207 = 45 + var_chaste_interface__membrane__V; + const double var_x208 = var_x206 + CHASTE_CONST(6.6879999999999997) * var_x204 * var_x207 / CHASTE_MATH::Pow(var_x205, 2); + const double var_x209 = (var_x194) && (var_x196); + const double var_x210 = CHASTE_MATH::Exp(-CHASTE_CONST(1.6590909090909092) - CHASTE_CONST(0.15151515151515152) * var_chaste_interface__membrane__V); + const double var_x211 = 1 + var_x210; + const double var_x212 = CHASTE_CONST(1.1200000000011203e-6) * var_x180; + const double var_x213 = ((var_x181) ? (-var_x212 + CHASTE_CONST(1999999.9999979998) * (CHASTE_CONST(5.0000002500000003) + var_chaste_interface__membrane__V) * (var_x212 + CHASTE_CONST(1.1200000000011203e-6) * var_x179)) : (CHASTE_CONST(4.4800000000000004) * var_x185 * var_x186)); + const double var_x214 = CHASTE_CONST(4.1799999996561256e-6) * var_x188; + const double var_x215 = var_x214 + CHASTE_CONST(1999999.9999424887) * (CHASTE_CONST(45.000000249999999) + var_chaste_interface__membrane__V) * (-var_x214 - CHASTE_CONST(4.1800000005842713e-6) * var_x187); + const double var_x216 = CHASTE_CONST(2.4040000000391526e-5) * var_x191; + const double var_x217 = var_x216 + CHASTE_CONST(1039933.4442576389) * (CHASTE_CONST(10.000000480800001) + var_chaste_interface__membrane__V) * (-var_x216 - CHASTE_CONST(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 + CHASTE_MATH::Exp(CHASTE_CONST(1.0000000000287557e-7))); + const double var_x222 = 1 / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.0000000000287557e-7))); + const double var_x223 = (var_chaste_interface__membrane__V >= -CHASTE_CONST(18.000000400000001)) && (var_chaste_interface__membrane__V <= -CHASTE_CONST(17.999999599999999)); + const double var_x224 = CHASTE_CONST(4.5) + CHASTE_CONST(0.25) * var_chaste_interface__membrane__V; + const double var_x225 = CHASTE_MATH::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) ? (CHASTE_CONST(4.2450000000000001) * var_x221 + CHASTE_CONST(4.2450000000000001) * var_x222) : (CHASTE_CONST(8.4900000000000002) * var_x227 - CHASTE_CONST(2.1225000000000001) * var_x225 * var_x228 / CHASTE_MATH::Pow(var_x226, 2))); + const double var_x230 = CHASTE_MATH::Exp(-var_x224); + const double var_x231 = 1 + var_x230; + const double var_x232 = CHASTE_CONST(16.980499999999999) * var_x230 / CHASTE_MATH::Pow(var_x231, 2); + const double var_x233 = 1 / var_x231; + const double var_x234 = CHASTE_CONST(67.921999999999997) * var_x233; + const double var_x235 = CHASTE_CONST(3.3960000000976542e-6) * var_x222; + const double var_x236 = ((var_x223) ? (-var_x235 + CHASTE_CONST(1249999.9999640554) * (CHASTE_CONST(18.000000400000001) + var_chaste_interface__membrane__V) * (var_x235 + CHASTE_CONST(3.3960000000976542e-6) * var_x221)) : (CHASTE_CONST(8.4900000000000002) * var_x227 * var_x228)); + const double var_x237 = 1 / (var_x234 + var_x236); + const double var_x238 = CHASTE_MATH::Exp(-CHASTE_CONST(3.7704918032786887) - CHASTE_CONST(0.16393442622950821) * var_chaste_interface__membrane__V); + const double var_x239 = 1 + var_x238; + const double var_x240 = CHASTE_CONST(0.77666666666666673) + CHASTE_CONST(0.033333333333333333) * var_chaste_interface__membrane__V; + const double var_x241 = CHASTE_MATH::Exp(-var_x240); + const double var_x242 = CHASTE_MATH::Exp(var_x240); + const double var_x243 = CHASTE_MATH::Exp(CHASTE_CONST(4.876462938881664) + CHASTE_CONST(0.065019505851755519) * var_chaste_interface__membrane__V); + const double var_x244 = CHASTE_MATH::Exp(-CHASTE_CONST(0.9003601440576231) - CHASTE_CONST(0.012004801920768308) * var_chaste_interface__membrane__V); + const double var_x245 = CHASTE_CONST(9.6370000000000005) * var_x243 + CHASTE_CONST(9.6370000000000005) * var_x244; + const double var_x246 = 1 / var_x245; + const double var_x247 = CHASTE_CONST(0.11569027611044419) * var_x244 - CHASTE_CONST(0.62659297789336799) * var_x243; + const double var_x248 = CHASTE_MATH::Exp(-CHASTE_CONST(2.6628794603230959) - CHASTE_CONST(0.17752529735487307) * var_chaste_interface__membrane__V); + const double var_x249 = 1 + var_x248; + const double var_x250 = CHASTE_MATH::Exp(-CHASTE_CONST(0.1388888888888889) * var_chaste_interface__membrane__V); + const double var_x251 = CHASTE_MATH::Exp(var_x0); + const double var_x252 = CHASTE_CONST(0.00040000000000000002) + 1 / (CHASTE_CONST(8.0109999999999992) * var_x250 + CHASTE_CONST(386.60000000000002) * var_x251); + const double var_x253 = 1 / var_x252; + const double var_x254 = CHASTE_MATH::Exp(CHASTE_CONST(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 / (CHASTE_CONST(0.020400000000000001) + CHASTE_CONST(0.54659999999999997) * var_x256); + const double var_x258 = CHASTE_MATH::Exp(CHASTE_CONST(4.0070821529745047) + CHASTE_CONST(0.14164305949008499) * var_chaste_interface__membrane__V); + const double var_x259 = 1 + var_x258; + const double var_x260 = CHASTE_CONST(0.000141643059490085) * var_x258 / CHASTE_MATH::Pow(var_x259, 2); + const double var_x261 = -1 / var_x259; + const double var_x262 = var_x254 / CHASTE_MATH::Pow(var_x255, 2); + const double var_x263 = CHASTE_MATH::Exp(CHASTE_CONST(0.96921975662133131) - CHASTE_CONST(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 / (CHASTE_CONST(5.75) * var_x256 + CHASTE_CONST(0.45000000000000001) * var_x265); + const double var_x267 = CHASTE_MATH::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 / (CHASTE_CONST(0.5) + CHASTE_CONST(7.5) * var_x269); + const double var_x271 = CHASTE_MATH::Exp(CHASTE_CONST(1.8506208911614319) + CHASTE_CONST(0.036523009495982472) * var_chaste_interface__membrane__V); + const double var_x272 = 1 + var_x271; + const double var_x273 = CHASTE_MATH::Exp(CHASTE_CONST(0.065217391304347824) - CHASTE_CONST(0.072463768115942032) * var_chaste_interface__membrane__V); + const double var_x274 = 1 + var_x273; + const double var_x275 = CHASTE_MATH::Exp(-CHASTE_CONST(0.045816915605241454) * var_chaste_interface__membrane__V); + const double var_x276 = CHASTE_MATH::Exp(CHASTE_CONST(0.014398433450440593) * var_chaste_interface__membrane__V); + const double var_x277 = CHASTE_CONST(0.059999999999999998) + 1 / (CHASTE_CONST(0.29999999999999999) * var_x275 + CHASTE_CONST(1.6599999999999999) * var_x276); + const double var_x278 = 1 / var_x277; + const double var_x279 = CHASTE_MATH::Exp(-CHASTE_CONST(0.68918918918918914) - CHASTE_CONST(0.13513513513513511) * var_chaste_interface__membrane__V); + const double var_x280 = 1 + var_x279; + const double var_x281 = CHASTE_MATH::Exp(-CHASTE_CONST(0.076769537847382163) * var_chaste_interface__membrane__V); + const double var_x282 = CHASTE_MATH::Exp(CHASTE_CONST(0.03941508020968823) * var_chaste_interface__membrane__V); + const double var_x283 = CHASTE_MATH::Exp(-CHASTE_CONST(0.018299935950224173) * var_chaste_interface__membrane__V); + const double var_x284 = CHASTE_MATH::Exp(CHASTE_CONST(0.009420009985210585) * var_chaste_interface__membrane__V); + const double var_x285 = CHASTE_MATH::Exp(CHASTE_CONST(2.539728728905752) + CHASTE_CONST(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 = -CHASTE_CONST(3.290319067574035e-6) - CHASTE_CONST(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 = CHASTE_CONST(1.77) * var_x107; + const double var_x292 = CHASTE_CONST(1.23) * var_x110; + const double var_x293 = var_x111 * var_x46; + const double var_x294 = CHASTE_CONST(0.021829942145742926) * var_x27 - CHASTE_CONST(0.00082254686501890791) * var_chaste_interface__membrane__V; + const double var_x295 = mParameters[7] * var_chaste_interface__delayed_rectifier_K_current_pa_gate__p_a; + const double var_x296 = CHASTE_CONST(0.021829942145742926) * var_x5; + const double var_x297 = CHASTE_CONST(0.021829942145742926) * var_x24; + const double var_x298 = CHASTE_CONST(0.0049352811901134472) * var_x46; + const double var_x299 = 200 * var_chaste_interface__intracellular_ion_concentrations__Ca_i; + const double var_x300 = CHASTE_CONST(1.6583208100573134e-5) + CHASTE_CONST(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 = CHASTE_CONST(0.0041456361996952953) * var_chaste_interface__membrane__V - CHASTE_CONST(0.11002290841454433) * var_x27; + const double var_x304 = CHASTE_CONST(0.11002290841454433) * var_x5; + const double var_x305 = CHASTE_CONST(0.11002290841454433) * var_x24; + const double var_x306 = CHASTE_CONST(0.11777375567316183) * var_x149; + const double var_x307 = CHASTE_CONST(0.23554751134632365) * var_x154; + const double var_x308 = CHASTE_MATH::Exp(-CHASTE_CONST(1.6000000000000001) + CHASTE_CONST(0.080000000000000002) * var_chaste_interface__membrane__V); + const double var_x309 = CHASTE_CONST(0.019200000000000002) * var_x308 * var_chaste_interface__Ca_handling_by_the_SR__F1; + const double var_x310 = CHASTE_CONST(0.00029999999999999997) + var_chaste_interface__intracellular_ion_concentrations__Ca_i; + const double var_x311 = CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Ca_i, 4); + const double var_x312 = var_x311 / CHASTE_MATH::Pow(var_x310, 5); + const double var_x313 = CHASTE_MATH::Pow(var_x310, (-4)); + const double var_x314 = var_x313 * CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Ca_i, 3); + const double var_x315 = CHASTE_CONST(0.81520000000000004) * var_x312 - CHASTE_CONST(0.81520000000000004) * var_x314; + const double var_x316 = var_x311 * var_x313; + const double var_x317 = CHASTE_CONST(0.20380000000000001) * var_x316 + CHASTE_CONST(0.23999999999999999) * var_x308; + const double var_x318 = CHASTE_CONST(1.3584000000000001) * var_x312 - CHASTE_CONST(1.3584000000000001) * var_x314; + const double var_x319 = CHASTE_CONST(0.033960000000000004) + CHASTE_CONST(0.33960000000000001) * var_x316; + + // Matrix entries + rJacobian[0 * nvars + 0] = mSetVoltageDerivativeToZero ? CHASTE_CONST(0.0) : (-var_x77 * (CHASTE_CONST(0.0014400000000000001) + var_x17 + var_x22 + var_x24 + var_x5 + var_x75 + 2 * var_x35 + CHASTE_CONST(0.0060000000000000001) * var_x6 + CHASTE_CONST(0.0011450666666666667) * var_x45 - CHASTE_CONST(0.10497579657532749) * var_x49 + var_x36 * var_x37 + (CHASTE_CONST(1.8) * var_x3 + CHASTE_CONST(1.8) * var_x4) * mParameters[3])); + rJacobian[0 * nvars + 1] = -CHASTE_CONST(1.7614021922566692e-8) + CHASTE_CONST(0.0017614021922566689) * var_x17 - CHASTE_CONST(5.2842065767700066e-6) * var_x6 + var_x141 * var_x37 + (-CHASTE_CONST(0.001585261973031002) * var_x3 - CHASTE_CONST(0.001585261973031002) * var_x4) * mParameters[3]; + rJacobian[0 * nvars + 2] = (CHASTE_CONST(0.001) - CHASTE_CONST(0.001) * var_chaste_interface__sodium_current_m_gate__m) * ((var_x158) ? (-230 * var_x156 - 230 * var_x157) : (-var_x161 - CHASTE_CONST(36.297640653357533) * var_x159 * var_x162 / CHASTE_MATH::Pow(var_x160, 2))) + CHASTE_CONST(1.4519056261343013) * var_x159 * var_chaste_interface__sodium_current_m_gate__m; + rJacobian[0 * nvars + 3] = var_x169 * var_x173 + CHASTE_CONST(0.0055555555555555558) * var_x170 * (-var_x174 - var_chaste_interface__sodium_current_h1_gate__h1) / (CHASTE_MATH::Pow(var_x171, 2) * CHASTE_MATH::Pow((CHASTE_CONST(0.0050000000000000001) + var_x172), 2)); + rJacobian[0 * nvars + 4] = var_x169 * var_x178 + CHASTE_CONST(0.0041666666666666666) * var_x175 * (-var_x174 - var_chaste_interface__sodium_current_h2_gate__h2) / (CHASTE_MATH::Pow(var_x176, 2) * CHASTE_MATH::Pow((CHASTE_CONST(0.0037499999999999999) + var_x177), 2)); + rJacobian[0 * nvars + 5] = (-var_x102 + CHASTE_CONST(0.001) / var_x211) * (((var_x181) ? (CHASTE_CONST(2.2400000000000002) * var_x179 + CHASTE_CONST(2.2400000000000002) * var_x180) : (CHASTE_CONST(4.4800000000000004) * var_x185 - CHASTE_CONST(1.7920000000000003) * var_x183 * var_x186 / CHASTE_MATH::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))))) + CHASTE_CONST(0.00015151515151515152) * var_x210 * (var_x213 + var_x220) / CHASTE_MATH::Pow(var_x211, 2); + rJacobian[0 * nvars + 6] = (var_x232 + var_x229) * (-var_x100 + CHASTE_CONST(0.001) * var_x236 * var_x237) + (var_x234 + var_x236) * (CHASTE_CONST(0.001) * var_x229 * var_x237 + CHASTE_CONST(2.1675996343523e-7) * var_x236 * (-var_x229 - var_x232) / CHASTE_MATH::Pow((var_x233 + CHASTE_CONST(0.014722770236447691) * var_x236), 2)); + rJacobian[0 * nvars + 7] = (-var_x105 + CHASTE_CONST(0.001) / var_x239) * (CHASTE_CONST(22.472433333333335) * var_x242 - CHASTE_CONST(22.472433333333335) * var_x241) + CHASTE_CONST(0.0001639344262295082) * var_x238 * (CHASTE_CONST(674.173) * var_x241 + CHASTE_CONST(674.173) * var_x242) / CHASTE_MATH::Pow(var_x239, 2); + rJacobian[0 * nvars + 8] = var_x245 * (-CHASTE_CONST(0.00011569027611044419) * var_x244 * var_x246 + CHASTE_CONST(0.00010376673238559718) * var_x244 * var_x247 / CHASTE_MATH::Pow((var_x243 + var_x244), 2)) - var_x247 * (-var_x103 + CHASTE_CONST(0.0096369999999999997) * var_x244 * var_x246); + rJacobian[0 * nvars + 9] = CHASTE_CONST(0.00017752529735487306) * var_x248 * var_x253 / CHASTE_MATH::Pow(var_x249, 2) - CHASTE_CONST(6.6907730760079843e-9) * (-var_chaste_interface__Ca_independent_transient_outward_K_current_r_gate__r + 1 / var_x249) * (CHASTE_CONST(1.1126388888888887) * var_x250 - CHASTE_CONST(32.216666666666669) * var_x251) / (CHASTE_MATH::Pow(var_x252, 2) * CHASTE_MATH::Pow((var_x251 + CHASTE_CONST(0.020721676151060523) * var_x250), 2)); + rJacobian[0 * nvars + 10] = -var_x257 * var_x260 + CHASTE_CONST(0.018294914013904134) * var_x262 * (-var_x261 - var_chaste_interface__Ca_independent_transient_outward_K_current_s1_gate__s1) / CHASTE_MATH::Pow((CHASTE_CONST(0.037321624588364438) + var_x256), 2); + rJacobian[0 * nvars + 11] = -var_x260 * var_x266 + CHASTE_CONST(3.0245746691871456e-5) * (-var_x261 - var_chaste_interface__Ca_independent_transient_outward_K_current_s2_gate__s2) * (CHASTE_CONST(57.5) * var_x262 - CHASTE_CONST(0.032211882605583393) * var_x263 / CHASTE_MATH::Pow(var_x264, 2)) / CHASTE_MATH::Pow((var_x256 + CHASTE_CONST(0.078260869565217397) * var_x265), 2); + rJacobian[0 * nvars + 12] = -CHASTE_CONST(2.1922574727480476e-5) * var_x270 * var_x271 / CHASTE_MATH::Pow(var_x272, 2) + CHASTE_CONST(0.00026666666666666668) * var_x267 * (CHASTE_CONST(0.39975990396158467) - var_chaste_interface__Ca_independent_transient_outward_K_current_s3_gate__s3 + CHASTE_CONST(0.60024009603841544) / var_x272) / (CHASTE_MATH::Pow(var_x268, 2) * CHASTE_MATH::Pow((CHASTE_CONST(0.066666666666666666) + var_x269), 2)); + rJacobian[0 * nvars + 13] = CHASTE_CONST(7.2463768115942027e-5) * var_x273 * var_x278 / CHASTE_MATH::Pow(var_x274, 2) - CHASTE_CONST(0.00036289737262302222) * (-var_chaste_interface__delayed_rectifier_K_current_z_gate__z + 1 / var_x274) * (CHASTE_CONST(0.013745074681572435) * var_x275 - CHASTE_CONST(0.023901399527731383) * var_x276) / (CHASTE_MATH::Pow(var_x277, 2) * CHASTE_MATH::Pow((var_x276 + CHASTE_CONST(0.18072289156626506) * var_x275), 2)); + rJacobian[0 * nvars + 14] = (-var_x114 + CHASTE_CONST(0.001) / var_x280) * (CHASTE_CONST(0.35473572188719404) * var_x282 - CHASTE_CONST(0.099800399201596807) * var_x281) + CHASTE_CONST(0.00013513513513513514) * var_x279 * (9 * var_x282 + CHASTE_CONST(1.3) * var_x281) / CHASTE_MATH::Pow(var_x280, 2); + rJacobian[0 * nvars + 15] = (-var_x112 + CHASTE_CONST(0.001) / var_x286) * (CHASTE_CONST(6.1795265502981431) * var_x284 - CHASTE_CONST(1.8299935950224173) * var_x283) - CHASTE_CONST(5.3589706489177562e-5) * var_x285 * (100 * var_x283 + 656 * var_x284) / CHASTE_MATH::Pow(var_x286, 2); + rJacobian[0 * nvars + 16] = -CHASTE_CONST(1.6450937300378158e-8) - CHASTE_CONST(0.0024676405950567236) * var_x17 - CHASTE_CONST(2.8256129907129523e-6) * var_x45 - CHASTE_CONST(0.00082254686501890791) * var_x75; + rJacobian[0 * nvars + 17] = -CHASTE_CONST(1.151565611026471e-6) - CHASTE_CONST(0.00082254686501890791) * var_x24 - CHASTE_CONST(0.00082254686501890791) * var_x5 - CHASTE_CONST(0.0016450937300378158) * var_x35 + var_x20 * var_x288 * var_chaste_interface__Ca_independent_transient_outward_K_current_r_gate__r + CHASTE_CONST(8.6347512375898239e-5) * var_x25 * var_x28 * var_x32 * var_x46 * var_x47 * mParameters[6] + CHASTE_CONST(1.8837419938086349e-6) * var_x38 * var_x40 * var_x41 * var_x42 * var_x43 * var_chaste_interface__cleft_space_ion_concentrations__K_c; + rJacobian[0 * nvars + 22] = CHASTE_CONST(5.8038906795734136e-6) + var_x301 + CHASTE_CONST(0.0041456361996952953) * var_x24 + CHASTE_CONST(0.0041456361996952953) * var_x5 + CHASTE_CONST(0.0082912723993905906) * var_x35 - CHASTE_CONST(9.4940596487955185e-6) * var_x45 - CHASTE_CONST(0.00043519146237452704) * var_x49; + rJacobian[0 * nvars + 26] = -var_x309; + rJacobian[0 * nvars + 27] = var_x309; + rJacobian[1 * nvars + 0] = mSetVoltageDerivativeToZero ? CHASTE_CONST(0.0) : (-var_x77 * (-var_x82 + CHASTE_CONST(0.0095090000000000001) * var_x79 + CHASTE_CONST(0.0002653945091048535) * var_x80 - CHASTE_CONST(0.00029999999999999997) * var_x86 - CHASTE_CONST(0.0095090000000000001) * var_x81 * var_chaste_interface__intracellular_ion_concentrations__Ca_i)); + rJacobian[1 * nvars + 1] = -CHASTE_CONST(47.271999999999998) - var_x150 + CHASTE_CONST(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 - CHASTE_CONST(8.3745867230843319e-6) * var_x79 - CHASTE_CONST(5.2842065767700058e-7) * var_x86 - CHASTE_CONST(8.2198768971977874) * var_x142 - CHASTE_CONST(0.0017614021922566689) * var_x82 - CHASTE_CONST(2.3373323507508574e-7) * var_x80 + CHASTE_CONST(8.3745867230843319e-6) * var_x81 * var_chaste_interface__intracellular_ion_concentrations__Ca_i + CHASTE_CONST(7.3978892074780085e-7) * var_x143 * var_x144; + rJacobian[1 * nvars + 16] = CHASTE_CONST(0.0024676405950567236) * var_x82 + CHASTE_CONST(7.4029217851701709e-7) * var_x86; + rJacobian[1 * nvars + 18] = 200 - 200 * var_chaste_interface__intracellular_Ca_buffering__O_C; + rJacobian[1 * nvars + 19] = CHASTE_CONST(78.400000000000006) - CHASTE_CONST(78.400000000000006) * var_chaste_interface__intracellular_Ca_buffering__O_TC; + rJacobian[1 * nvars + 20] = 200 - 200 * var_chaste_interface__intracellular_Ca_buffering__O_TMgC - 200 * var_chaste_interface__intracellular_Ca_buffering__O_TMgMg; + rJacobian[1 * nvars + 23] = var_x306; + rJacobian[1 * nvars + 24] = CHASTE_CONST(121.85879481761599) * var_x142 - CHASTE_CONST(1.0967291533585437e-5) * var_x153; + rJacobian[1 * nvars + 26] = var_x315 * var_chaste_interface__Ca_handling_by_the_SR__F1; + rJacobian[1 * nvars + 27] = var_x318 * var_chaste_interface__Ca_handling_by_the_SR__F2 - var_x315 * var_chaste_interface__Ca_handling_by_the_SR__F1; + rJacobian[1 * nvars + 28] = -var_x318 * var_chaste_interface__Ca_handling_by_the_SR__F2; + rJacobian[2 * nvars + 0] = mSetVoltageDerivativeToZero ? CHASTE_CONST(0.0) : (-var_x77 * var_x92); + rJacobian[2 * nvars + 2] = -CHASTE_CONST(0.001) * ((var_x158) ? (var_x163 + CHASTE_CONST(394539.57232025318) * (CHASTE_CONST(44.400001267299999) + var_chaste_interface__membrane__V) * (-var_x163 - CHASTE_CONST(0.00058295799999830145) * var_x157)) : (-var_x161 * var_x162)) - CHASTE_CONST(18.399999999999999) * var_x159; + rJacobian[2 * nvars + 16] = -CHASTE_CONST(0.00082254686501890791) * var_x92; + rJacobian[3 * nvars + 0] = mSetVoltageDerivativeToZero ? CHASTE_CONST(0.0) : (-var_x77 * var_x96); + rJacobian[3 * nvars + 3] = -var_x173; + rJacobian[3 * nvars + 16] = -CHASTE_CONST(0.00082254686501890791) * var_x96; + rJacobian[4 * nvars + 0] = mSetVoltageDerivativeToZero ? CHASTE_CONST(0.0) : (-var_x77 * var_x99); + rJacobian[4 * nvars + 4] = -var_x178; + rJacobian[4 * nvars + 16] = -CHASTE_CONST(0.00082254686501890791) * var_x99; + rJacobian[5 * nvars + 0] = mSetVoltageDerivativeToZero ? CHASTE_CONST(0.0) : (-var_x100 * var_x101); + rJacobian[5 * nvars + 1] = var_x141 * var_chaste_interface__L_type_Ca_channel_f_L_gate__f_L; + rJacobian[5 * nvars + 5] = -CHASTE_CONST(0.001) * var_x213 - CHASTE_CONST(0.001) * var_x220; + rJacobian[6 * nvars + 0] = mSetVoltageDerivativeToZero ? CHASTE_CONST(0.0) : (-var_x101 * var_x102); + rJacobian[6 * nvars + 1] = var_x141 * var_chaste_interface__L_type_Ca_channel_d_L_gate__d_L; + rJacobian[6 * nvars + 6] = -CHASTE_CONST(0.001) * var_x236 - CHASTE_CONST(0.067921999999999996) * var_x233; + rJacobian[7 * nvars + 0] = mSetVoltageDerivativeToZero ? CHASTE_CONST(0.0) : (-var_x103 * var_x104); + rJacobian[7 * nvars + 1] = var_x151 * var_chaste_interface__T_type_Ca_channel_f_T_gate__f_T; + rJacobian[7 * nvars + 7] = -CHASTE_CONST(0.67417300000000002) * var_x241 - CHASTE_CONST(0.67417300000000002) * var_x242; + rJacobian[8 * nvars + 0] = mSetVoltageDerivativeToZero ? CHASTE_CONST(0.0) : (-var_x104 * var_x105); + rJacobian[8 * nvars + 1] = var_x151 * var_chaste_interface__T_type_Ca_channel_d_T_gate__d_T; + rJacobian[8 * nvars + 8] = -CHASTE_CONST(0.0096369999999999997) * var_x243 - CHASTE_CONST(0.0096369999999999997) * var_x244; + rJacobian[9 * nvars + 0] = mSetVoltageDerivativeToZero ? CHASTE_CONST(0.0) : (-var_x106 * var_x19 * var_x77); + rJacobian[9 * nvars + 9] = -CHASTE_CONST(0.001) * var_x253; + rJacobian[9 * nvars + 17] = var_x106 * var_x288; + rJacobian[9 * nvars + 22] = var_x106 * var_x300; + rJacobian[10 * nvars + 0] = mSetVoltageDerivativeToZero ? CHASTE_CONST(0.0) : (-CHASTE_CONST(0.0017699999999999999) * var_x107 * var_x109); + rJacobian[10 * nvars + 10] = -CHASTE_CONST(0.001) * var_x257; + rJacobian[10 * nvars + 17] = var_x290 * var_x291; + rJacobian[10 * nvars + 22] = var_x291 * var_x302; + rJacobian[11 * nvars + 0] = mSetVoltageDerivativeToZero ? CHASTE_CONST(0.0) : (-CHASTE_CONST(0.00123) * var_x109 * var_x110); + rJacobian[11 * nvars + 11] = -CHASTE_CONST(0.001) * var_x266; + rJacobian[11 * nvars + 17] = var_x290 * var_x292; + rJacobian[11 * nvars + 22] = var_x292 * var_x302; + rJacobian[12 * nvars + 0] = mSetVoltageDerivativeToZero ? CHASTE_CONST(0.0) : (-CHASTE_CONST(3.600144e-5) * var_x108 * var_x111); + rJacobian[12 * nvars + 12] = -CHASTE_CONST(0.001) * var_x270; + rJacobian[12 * nvars + 17] = -CHASTE_CONST(2.9612871608166312e-5) * var_x293; + rJacobian[12 * nvars + 22] = CHASTE_CONST(0.00014924887290515819) * var_x293; + rJacobian[13 * nvars + 0] = mSetVoltageDerivativeToZero ? CHASTE_CONST(0.0) : (-var_x46 * var_x77 * mParameters[8]); + rJacobian[13 * nvars + 13] = -CHASTE_CONST(0.001) * var_x278; + rJacobian[13 * nvars + 17] = var_x294 * mParameters[8]; + rJacobian[13 * nvars + 22] = var_x303 * mParameters[8]; + rJacobian[14 * nvars + 0] = mSetVoltageDerivativeToZero ? CHASTE_CONST(0.0) : (-var_x112 * var_x113); + rJacobian[14 * nvars + 14] = -CHASTE_CONST(0.0089999999999999993) * var_x282 - CHASTE_CONST(0.0012999999999999999) * var_x281; + rJacobian[14 * nvars + 17] = var_x23 * var_x294; + rJacobian[14 * nvars + 22] = var_x23 * var_x303; + rJacobian[15 * nvars + 0] = mSetVoltageDerivativeToZero ? CHASTE_CONST(0.0) : (-var_x113 * var_x114); + rJacobian[15 * nvars + 15] = -CHASTE_CONST(0.65600000000000003) * var_x284 - CHASTE_CONST(0.10000000000000001) * var_x283; + rJacobian[15 * nvars + 17] = var_x294 * var_x295; + rJacobian[15 * nvars + 22] = var_x295 * var_x303; + rJacobian[16 * nvars + 0] = mSetVoltageDerivativeToZero ? CHASTE_CONST(0.0) : (-var_x77 * (var_x129 + 3 * var_x117 + CHASTE_CONST(0.00053078901820970701) * var_x51 + CHASTE_CONST(0.154584) * var_x121 - CHASTE_CONST(0.00089999999999999998) * var_x122 - CHASTE_CONST(0.0001161412471825695) * var_x125)); + rJacobian[16 * nvars + 1] = -CHASTE_CONST(1.5852619730310017e-6) * var_x122 + CHASTE_CONST(0.0052842065767700064) * var_x115 * var_x15 * var_x7 * mParameters[9] * mParameters[1]; + rJacobian[16 * nvars + 16] = -CHASTE_CONST(0.00038145775374624855) * var_x121 - CHASTE_CONST(4.3659884291485854e-7) * var_x51 - CHASTE_CONST(0.00082254686501890791) * var_x129 - CHASTE_CONST(0.0074029217851701709) * var_x117 + CHASTE_CONST(2.2208765355510512e-6) * var_x115 * var_x83 * var_x84 * mParameters[9] * mParameters[1] + CHASTE_CONST(2.8659485630822583e-7) * var_x118 * var_x123 * var_x124 * var_x40 * var_chaste_interface__cleft_space_ion_concentrations__K_c; + rJacobian[16 * nvars + 17] = CHASTE_CONST(0.00025430516916416572) * var_x121 - CHASTE_CONST(1.9106323753881723e-7) * var_x125; + rJacobian[16 * nvars + 22] = -CHASTE_CONST(0.0012816980525873951) * var_x121 + CHASTE_CONST(9.6295871719563877e-7) * var_x118 * var_x123 * var_x124 * var_x40 * var_chaste_interface__cleft_space_ion_concentrations__K_c; + rJacobian[17 * nvars + 0] = mSetVoltageDerivativeToZero ? CHASTE_CONST(0.0) : (-var_x77 * (CHASTE_CONST(53.0789018209707) * var_x132 - CHASTE_CONST(2.786) * var_x133 + var_x130 * var_x26 + var_x131 * var_x22 + var_x131 * var_x24)); + rJacobian[17 * nvars + 17] = -CHASTE_CONST(0.043659884291485852) * var_x132 - var_x26 * var_x296 - var_x26 * var_x297 + CHASTE_CONST(26.53945091048535) * var_x20 * var_x26 * var_x288 * var_chaste_interface__Ca_independent_transient_outward_K_current_r_gate__r + CHASTE_CONST(0.0022916155659426776) * var_x25 * var_x26 * var_x28 * var_x32 * var_x46 * var_x47 * mParameters[6]; + rJacobian[17 * nvars + 22] = CHASTE_CONST(0.22004581682908866) * var_x132 - CHASTE_CONST(0.011549742452351092) * var_x133 + var_x131 * var_x301 + var_x26 * var_x304 + var_x26 * var_x305; + rJacobian[18 * nvars + 1] = CHASTE_CONST(0.021419999999999998) + 9 * var_chaste_interface__intracellular_ion_concentrations__Ca_i; + rJacobian[18 * nvars + 18] = -CHASTE_CONST(0.47599999999999998) - var_x299; + rJacobian[19 * nvars + 1] = CHASTE_CONST(0.031359999999999999) + CHASTE_CONST(6.2720000000000002) * var_chaste_interface__intracellular_ion_concentrations__Ca_i; + rJacobian[19 * nvars + 19] = -CHASTE_CONST(0.39200000000000002) - CHASTE_CONST(78.400000000000006) * var_chaste_interface__intracellular_ion_concentrations__Ca_i; + rJacobian[20 * nvars + 1] = CHASTE_CONST(0.0010559999999999999) + var_x152; + rJacobian[20 * nvars + 20] = -CHASTE_CONST(0.0066) - var_x299; + rJacobian[20 * nvars + 21] = -5; + rJacobian[21 * nvars + 1] = var_x152; + rJacobian[21 * nvars + 20] = -var_x299; + rJacobian[21 * nvars + 21] = -CHASTE_CONST(5.6660000000000004); + rJacobian[22 * nvars + 0] = mSetVoltageDerivativeToZero ? CHASTE_CONST(0.0) : (-var_x77 * (-CHASTE_CONST(53.0789018209707) * var_x137 - CHASTE_CONST(0.10305599999999999) * var_x140 - var_x130 * var_x134 - var_x135 * var_x22 - var_x135 * var_x24 - 6 * var_x138 * var_x46 + CHASTE_CONST(0.10305599999999999) * var_x118 * var_x40 * var_x42 * var_x43 + 6 * var_x136 * var_x30 * var_x32 * var_x46 * mParameters[6] + CHASTE_CONST(2.786) * var_x136 * var_x28 * var_x32 * var_x46 * var_x47 * mParameters[6])); + rJacobian[22 * nvars + 16] = CHASTE_CONST(0.00025430516916416572) * var_x140 - CHASTE_CONST(0.00025430516916416572) * var_x287; + rJacobian[22 * nvars + 17] = CHASTE_CONST(0.043659884291485852) * var_x137 + CHASTE_CONST(0.00016953677944277714) * var_x287 - CHASTE_CONST(0.00016953677944277714) * var_x140 + var_x134 * var_x296 + var_x134 * var_x297 + var_x138 * var_x298 - var_x137 * var_x298 - CHASTE_CONST(0.0022916155659426776) * var_x136 * var_x48 - var_x135 * var_x21 * var_x288; + rJacobian[22 * nvars + 22] = -CHASTE_CONST(0.00085446536839159674) * var_x287 - CHASTE_CONST(0.22004581682908866) * var_x137 - var_x134 * var_x304 - var_x134 * var_x305 - var_x135 * var_x301 - CHASTE_CONST(0.024873817198171774) * var_x138 * var_x46 + CHASTE_CONST(0.024873817198171774) * var_x136 * var_x30 * var_x32 * var_x46 * mParameters[6] + CHASTE_CONST(0.00085446536839159674) * var_x118 * var_x139 * var_x42 * var_x43 * var_chaste_interface__cleft_space_ion_concentrations__K_c + CHASTE_CONST(0.011549742452351092) * var_x136 * var_x28 * var_x32 * var_x46 * var_x47 * mParameters[6]; + rJacobian[23 * nvars + 1] = var_x150; + rJacobian[23 * nvars + 23] = -CHASTE_CONST(14.98) - var_x306 + CHASTE_CONST(14.880000000000001) * var_chaste_interface__Ca_handling_by_the_SR__O_Calse; + rJacobian[23 * nvars + 24] = CHASTE_CONST(0.011085915847820609); + rJacobian[23 * nvars + 25] = CHASTE_CONST(0.47999999999999998) - CHASTE_CONST(0.47999999999999998) * var_chaste_interface__Ca_handling_by_the_SR__O_Calse; + rJacobian[24 * nvars + 1] = CHASTE_CONST(1.7754934097947219e-10) * var_x153 + CHASTE_CONST(0.00078910818213098765) * var_x142; + rJacobian[24 * nvars + 23] = CHASTE_CONST(0.099999999999999992); + rJacobian[24 * nvars + 24] = -CHASTE_CONST(0.011085915847820609) - CHASTE_CONST(2.6321499680605046e-9) * var_x153 - CHASTE_CONST(0.011698444302491135) * var_x142; + rJacobian[25 * nvars + 23] = CHASTE_CONST(12.4) + CHASTE_CONST(14.880000000000001) * var_chaste_interface__Ca_handling_by_the_SR__Ca_rel; + rJacobian[25 * nvars + 25] = -CHASTE_CONST(0.40000000000000002) - CHASTE_CONST(0.47999999999999998) * var_chaste_interface__Ca_handling_by_the_SR__Ca_rel; + rJacobian[26 * nvars + 26] = -var_x317; + rJacobian[26 * nvars + 27] = var_x317; + rJacobian[27 * nvars + 1] = -CHASTE_CONST(0.0017614021922566689) * var_x154 * var_x155 + CHASTE_CONST(0.0017614021922566689) * var_x147 * var_x154 * var_chaste_interface__Ca_handling_by_the_SR__F2 * mParameters[0]; + rJacobian[27 * nvars + 23] = var_x155 * var_x307 - var_x148 * var_x307 * var_chaste_interface__Ca_handling_by_the_SR__F2; + rJacobian[27 * nvars + 27] = -var_x319; + rJacobian[27 * nvars + 28] = var_x319; + rJacobian[28 * nvars + 26] = CHASTE_CONST(0.00081499999999999997); + rJacobian[28 * nvars + 28] = -CHASTE_CONST(0.00081499999999999997); +} + +template +DEVICE +void Cellaslanidi_atrial_model_2009FromCellMLCvode::EvaluateSparseAnalyticJacobianDevice(ValueType var_chaste_interface__environment__time_converted, const ValueType *rY, ValueType *rDY, ValueType *rJacobian, ValueType *rTmp1, ValueType *rTmp2, ValueType *rTmp3, const unsigned nvars, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType *mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim) +{ + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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__intracellular_Ca_buffering__O_C = rY[18]; + // Units: dimensionless; Initial value: 0.029108 + double var_chaste_interface__intracellular_Ca_buffering__O_TC = rY[19]; + // Units: dimensionless; Initial value: 0.014071 + double var_chaste_interface__intracellular_Ca_buffering__O_TMgC = rY[20]; + // Units: dimensionless; Initial value: 0.214036 + double var_chaste_interface__intracellular_Ca_buffering__O_TMgMg = rY[21]; + // Units: dimensionless; Initial value: 0.693565 + 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__Ca_up = rY[24]; + // Units: millimolar; Initial value: 0.730866 + double var_chaste_interface__Ca_handling_by_the_SR__O_Calse = rY[25]; + // Units: dimensionless; Initial value: 0.465921 + double var_chaste_interface__Ca_handling_by_the_SR__F1 = rY[26]; + // Units: dimensionless; Initial value: 0.288039 + double var_chaste_interface__Ca_handling_by_the_SR__F2 = rY[27]; + // Units: dimensionless; Initial value: 0.002262 + + const double var_x0 = CHASTE_CONST(0.083333333333333329) * var_chaste_interface__membrane__V; + const double var_x1 = CHASTE_MATH::Exp(CHASTE_CONST(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 = 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 = CHASTE_MATH::Exp(CHASTE_CONST(0.016955889611951675) * var_chaste_interface__membrane__V); + const double var_x8 = CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 3) * mParameters[1]; + const double var_x9 = var_x7 * var_x8; + const double var_x10 = CHASTE_MATH::Exp(-CHASTE_CONST(0.02072386508127427) * var_chaste_interface__membrane__V); + const double var_x11 = CHASTE_MATH::Pow(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 + CHASTE_CONST(0.00029999999999999997) * var_x12 + CHASTE_CONST(0.00029999999999999997) * var_x8; + const double var_x15 = 1 / var_x14; + const double var_x16 = var_x15 * mParameters[9]; + const double var_x17 = var_x16 * (CHASTE_CONST(0.016955889611951675) * var_x9 + CHASTE_CONST(0.02072386508127427) * var_x13); + const double var_x18 = CHASTE_MATH::Pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s3_gate__s3, 6); + const double var_x19 = CHASTE_CONST(0.00400016) + CHASTE_CONST(0.0060002399999999996) * var_x18; + const double var_x20 = CHASTE_CONST(0.58999999999999997) * CHASTE_MATH::Pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s1_gate__s1, 3) + CHASTE_CONST(0.40999999999999998) * CHASTE_MATH::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 = 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 = CHASTE_MATH::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 = CHASTE_MATH::Log(var_x26 * var_chaste_interface__cleft_space_ion_concentrations__K_c); + const double var_x28 = CHASTE_MATH::Exp(CHASTE_CONST(0.18895643383558949) + CHASTE_CONST(0.052487898287663745) * var_chaste_interface__membrane__V - CHASTE_CONST(1.393) * var_x27); + const double var_x29 = 1 + var_x28; + const double var_x30 = 1 / var_x29; + const double var_x31 = CHASTE_CONST(0.58999999999999997) + var_chaste_interface__cleft_space_ion_concentrations__K_c; + const double var_x32 = CHASTE_MATH::Pow(var_x31, (-3)); + const double var_x33 = var_x32 * mParameters[6]; + const double var_x34 = var_x30 * var_x33; + const double var_x35 = var_x25 * var_x34; + const double var_x36 = (-90 + CHASTE_CONST(1.8) * var_chaste_interface__membrane__V) * mParameters[3]; + const double var_x37 = CHASTE_CONST(0.083333333333333329) * var_x1 / CHASTE_MATH::Pow(var_x2, 2); + const double var_x38 = CHASTE_MATH::Exp(-CHASTE_CONST(1.5) - CHASTE_CONST(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 = CHASTE_MATH::Pow((1 + CHASTE_CONST(0.66666666666666663) * var_x38), (-2)); + const double var_x42 = CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, CHASTE_CONST(1.5)); + const double var_x43 = 1 / (CHASTE_CONST(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 = -CHASTE_CONST(26.53945091048535) * var_x27 + var_chaste_interface__membrane__V; + const double var_x47 = CHASTE_MATH::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 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8))); + const double var_x51 = 1 / var_chaste_interface__intracellular_ion_concentrations__Na_i; + const double var_x52 = var_x51 * mParameters[2]; + const double var_x53 = CHASTE_MATH::Log(var_x52); + const double var_x54 = CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999999995e-8) - var_x53); + const double var_x55 = var_x50 * (-1 + var_x54); + const double var_x56 = CHASTE_CONST(0.36499999999999999) * var_chaste_interface__sodium_current_h2_gate__h2 + CHASTE_CONST(0.63500000000000001) * var_chaste_interface__sodium_current_h1_gate__h1; + const double var_x57 = CHASTE_MATH::Pow(var_chaste_interface__sodium_current_m_gate__m, 3); + const double var_x58 = mParameters[2] * mParameters[5]; + const double var_x59 = var_x57 * var_x58; + const double var_x60 = var_x56 * var_x59; + const double var_x61 = CHASTE_CONST(1817.803245542646) * var_x60; + const double var_x62 = 1 / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8))); + const double var_x63 = CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999999995e-8) - var_x53); + const double var_x64 = var_x62 * (-1 + var_x63); + const double var_x65 = (var_chaste_interface__membrane__V >= -CHASTE_CONST(2.6539450910485349e-6)) && (var_chaste_interface__membrane__V <= CHASTE_CONST(2.6539450910485349e-6)); + const double var_x66 = CHASTE_CONST(0.037679754693225945) * var_chaste_interface__membrane__V; + const double var_x67 = CHASTE_MATH::Exp(var_x66); + const double var_x68 = -1 + var_x67; + const double var_x69 = 1 / var_x68; + const double var_x70 = CHASTE_MATH::Exp(var_x66 - var_x53); + const double var_x71 = -1 + var_x70; + const double var_x72 = var_x69 * var_x71; + const double var_x73 = CHASTE_CONST(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 + CHASTE_CONST(3635.606491085292) * var_x60 * var_x72 - var_x67 * var_x71 * var_x73 / CHASTE_MATH::Pow(var_x68, 2))); + const double var_x76 = 1 / mParameters[4]; + const double var_x77 = CHASTE_CONST(0.001) * var_x76; + const double var_x78 = CHASTE_CONST(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 = CHASTE_MATH::Pow(var_x78, (-2)); + const double var_x82 = var_x10 * var_x11 * var_x16; + const double var_x83 = CHASTE_MATH::Pow(var_x14, (-2)); + const double var_x84 = var_x9 - var_x13; + const double var_x85 = var_x83 * var_x84 * mParameters[9]; + const double var_x86 = var_x11 * var_x85; + const double var_x87 = CHASTE_CONST(0.5) + CHASTE_CONST(188398.77346612973) * var_chaste_interface__membrane__V; + const double var_x88 = var_x56 * var_x58 * CHASTE_MATH::Pow(var_chaste_interface__sodium_current_m_gate__m, 2); + const double var_x89 = CHASTE_CONST(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)) : (CHASTE_CONST(10906.819473255875) * var_x88 * var_x91)); + const double var_x93 = CHASTE_CONST(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)) : (CHASTE_CONST(2308.6101218391605) * var_x95)); + const double var_x97 = CHASTE_CONST(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)) : (CHASTE_CONST(1326.9963692461315) * var_x95)); + const double var_x100 = CHASTE_CONST(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 = CHASTE_CONST(0.001) * var_chaste_interface__L_type_Ca_channel_d_L_gate__d_L; + const double var_x103 = CHASTE_CONST(0.001) * var_chaste_interface__T_type_Ca_channel_f_T_gate__f_T; + const double var_x104 = var_x76 * (-CHASTE_CONST(0.22800000000000001) + CHASTE_CONST(0.0060000000000000001) * var_chaste_interface__membrane__V); + const double var_x105 = CHASTE_CONST(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 = CHASTE_MATH::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 = CHASTE_MATH::Pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s2_gate__s2, 2); + const double var_x111 = var_x21 * CHASTE_MATH::Pow(var_chaste_interface__Ca_independent_transient_outward_K_current_s3_gate__s3, 5); + const double var_x112 = CHASTE_CONST(0.001) * var_chaste_interface__delayed_rectifier_K_current_pi_gate__p_i; + const double var_x113 = var_x108 * mParameters[7]; + const double var_x114 = CHASTE_CONST(0.001) * var_chaste_interface__delayed_rectifier_K_current_pa_gate__p_a; + const double var_x115 = CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Na_i, 2); + const double var_x116 = var_x115 * mParameters[1]; + const double var_x117 = var_x116 * var_x16 * var_x7; + const double var_x118 = 1 / (CHASTE_CONST(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 * CHASTE_MATH::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 = CHASTE_MATH::Pow((1 + CHASTE_CONST(0.027410122234342148) * var_x42), (-2)); + const double var_x124 = CHASTE_MATH::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 * mParameters[5]; + const double var_x127 = CHASTE_CONST(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)) : (CHASTE_CONST(3635.606491085292) * var_x126 * var_x74 * var_chaste_interface__membrane__V)); + const double var_x130 = CHASTE_CONST(26.53945091048535) * var_x5; + const double var_x131 = CHASTE_CONST(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 = CHASTE_CONST(26.53945091048535) * var_x134; + const double var_x136 = CHASTE_MATH::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 * mParameters[6] / CHASTE_MATH::Pow(var_x31, 4); + const double var_x139 = CHASTE_MATH::Pow(var_x39, (-2)); + const double var_x140 = var_x118 * var_x139 * var_x44; + const double var_x141 = (CHASTE_CONST(0.079263098651550096) - CHASTE_CONST(0.001585261973031002) * var_chaste_interface__membrane__V) * mParameters[3]; + const double var_x142 = 1 / (CHASTE_CONST(1.3999999999999999) + CHASTE_CONST(0.80000000000000004) * var_chaste_interface__Ca_handling_by_the_SR__Ca_up + CHASTE_CONST(3333.3333333333335) * var_chaste_interface__intracellular_ion_concentrations__Ca_i); + const double var_x143 = CHASTE_MATH::Pow((CHASTE_CONST(0.00041999999999999996) + CHASTE_CONST(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 = CHASTE_CONST(3333.3333333333335) * var_chaste_interface__intracellular_ion_concentrations__Ca_i - CHASTE_CONST(0.32000000000000006) * var_chaste_interface__Ca_handling_by_the_SR__Ca_up; + const double var_x145 = CHASTE_MATH::Pow(var_chaste_interface__Ca_handling_by_the_SR__F2, 2); + const double var_x146 = CHASTE_CONST(0.25) + var_chaste_interface__Ca_handling_by_the_SR__F2; + const double var_x147 = CHASTE_MATH::Pow(var_x146, (-2)); + const double var_x148 = var_x147 * mParameters[0]; + const double var_x149 = var_x145 * var_x148; + const double var_x150 = CHASTE_CONST(0.00088070109612833447) * var_x149; + const double var_x151 = CHASTE_CONST(0.00020079984991726025) - CHASTE_CONST(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 * mParameters[0] / CHASTE_MATH::Pow(var_x146, 3); + const double var_x156 = 1 / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999999708629e-8))); + const double var_x157 = 1 / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999999708629e-8))); + const double var_x158 = (var_chaste_interface__membrane__V >= -CHASTE_CONST(44.400001267299999)) && (var_chaste_interface__membrane__V <= -CHASTE_CONST(44.399998732699999)); + const double var_x159 = CHASTE_MATH::Exp(-CHASTE_CONST(3.5035114021936398) - CHASTE_CONST(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 = CHASTE_CONST(44.399999999999999) + var_chaste_interface__membrane__V; + const double var_x163 = CHASTE_CONST(0.00058295799999830145) * var_x156; + const double var_x164 = CHASTE_MATH::Exp(-CHASTE_CONST(7.333333333333333) - CHASTE_CONST(0.077519379844961239) * var_chaste_interface__membrane__V); + const double var_x165 = 1 / (1 + CHASTE_CONST(323.30000000000001) * var_x164); + const double var_x166 = CHASTE_MATH::Exp(-CHASTE_CONST(12.010771992818672) - CHASTE_CONST(0.17953321364452424) * var_chaste_interface__membrane__V); + const double var_x167 = 1 / (1491 * var_x165 + CHASTE_CONST(44.899999999999999) * var_x166); + const double var_x168 = CHASTE_CONST(8.0610412926391373) * var_x166; + const double var_x169 = -var_x167 * var_x168 + CHASTE_CONST(2.019719479407183e-5) * var_x166 * (var_x168 - CHASTE_CONST(0.35750508923240704) * var_x164 / CHASTE_MATH::Pow((CHASTE_CONST(0.0030931023816888337) + var_x164), 2)) / CHASTE_MATH::Pow((var_x165 + CHASTE_CONST(0.030114017437961098) * var_x166), 2); + const double var_x170 = CHASTE_MATH::Exp(CHASTE_CONST(6.666666666666667) + CHASTE_CONST(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 = CHASTE_CONST(0.001) / (CHASTE_CONST(0.00014999999999999999) + CHASTE_CONST(0.029999999999999999) * var_x172); + const double var_x174 = -CHASTE_CONST(44.899999999999999) * var_x166 * var_x167; + const double var_x175 = CHASTE_MATH::Exp(30 + CHASTE_CONST(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 = CHASTE_CONST(0.001) / (CHASTE_CONST(0.00044999999999999999) + CHASTE_CONST(0.12) * var_x177); + const double var_x179 = 1 / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(1.0000000000010001e-7))); + const double var_x180 = 1 / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.0000000000010001e-7))); + const double var_x181 = (var_chaste_interface__membrane__V >= -CHASTE_CONST(5.0000002500000003)) && (var_chaste_interface__membrane__V <= -CHASTE_CONST(4.9999997499999997)); + const double var_x182 = CHASTE_CONST(0.40000000000000002) * var_chaste_interface__membrane__V; + const double var_x183 = CHASTE_MATH::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 + CHASTE_MATH::Exp(-CHASTE_CONST(1.000000000139778e-7))); + const double var_x188 = 1 / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(9.9999999991773334e-8))); + const double var_x189 = CHASTE_CONST(8.3600000009281459) * var_x187 + CHASTE_CONST(8.359999999071853) * var_x188; + const double var_x190 = 1 / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(9.9999999998742257e-8))); + const double var_x191 = 1 / (-1 + CHASTE_MATH::Exp(CHASTE_CONST(1.0000000000162864e-7))); + const double var_x192 = CHASTE_CONST(24.999999999639201) * var_x190 + CHASTE_CONST(25.000000000360799) * var_x191; + const double var_x193 = var_chaste_interface__membrane__V >= -CHASTE_CONST(45.000000249999999); + const double var_x194 = var_chaste_interface__membrane__V >= -CHASTE_CONST(10.000000480800001); + const double var_x195 = var_chaste_interface__membrane__V <= -CHASTE_CONST(44.999999750000001); + const double var_x196 = var_chaste_interface__membrane__V <= -CHASTE_CONST(9.9999995191999993); + const double var_x197 = (var_x193) && (var_x194) && (var_x195) && (var_x196); + const double var_x198 = CHASTE_MATH::Exp(-CHASTE_CONST(2.0798668885191347) - CHASTE_CONST(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 + CHASTE_CONST(10.399334442595674) * var_x198 * var_x201 / CHASTE_MATH::Pow(var_x199, 2); + const double var_x203 = (var_x193) && (var_x195); + const double var_x204 = CHASTE_MATH::Exp(-18 - var_x182); + const double var_x205 = -1 + var_x204; + const double var_x206 = CHASTE_CONST(16.719999999999999) / var_x205; + const double var_x207 = 45 + var_chaste_interface__membrane__V; + const double var_x208 = var_x206 + CHASTE_CONST(6.6879999999999997) * var_x204 * var_x207 / CHASTE_MATH::Pow(var_x205, 2); + const double var_x209 = (var_x194) && (var_x196); + const double var_x210 = CHASTE_MATH::Exp(-CHASTE_CONST(1.6590909090909092) - CHASTE_CONST(0.15151515151515152) * var_chaste_interface__membrane__V); + const double var_x211 = 1 + var_x210; + const double var_x212 = CHASTE_CONST(1.1200000000011203e-6) * var_x180; + const double var_x213 = ((var_x181) ? (-var_x212 + CHASTE_CONST(1999999.9999979998) * (CHASTE_CONST(5.0000002500000003) + var_chaste_interface__membrane__V) * (var_x212 + CHASTE_CONST(1.1200000000011203e-6) * var_x179)) : (CHASTE_CONST(4.4800000000000004) * var_x185 * var_x186)); + const double var_x214 = CHASTE_CONST(4.1799999996561256e-6) * var_x188; + const double var_x215 = var_x214 + CHASTE_CONST(1999999.9999424887) * (CHASTE_CONST(45.000000249999999) + var_chaste_interface__membrane__V) * (-var_x214 - CHASTE_CONST(4.1800000005842713e-6) * var_x187); + const double var_x216 = CHASTE_CONST(2.4040000000391526e-5) * var_x191; + const double var_x217 = var_x216 + CHASTE_CONST(1039933.4442576389) * (CHASTE_CONST(10.000000480800001) + var_chaste_interface__membrane__V) * (-var_x216 - CHASTE_CONST(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 + CHASTE_MATH::Exp(CHASTE_CONST(1.0000000000287557e-7))); + const double var_x222 = 1 / (-1 + CHASTE_MATH::Exp(-CHASTE_CONST(1.0000000000287557e-7))); + const double var_x223 = (var_chaste_interface__membrane__V >= -CHASTE_CONST(18.000000400000001)) && (var_chaste_interface__membrane__V <= -CHASTE_CONST(17.999999599999999)); + const double var_x224 = CHASTE_CONST(4.5) + CHASTE_CONST(0.25) * var_chaste_interface__membrane__V; + const double var_x225 = CHASTE_MATH::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) ? (CHASTE_CONST(4.2450000000000001) * var_x221 + CHASTE_CONST(4.2450000000000001) * var_x222) : (CHASTE_CONST(8.4900000000000002) * var_x227 - CHASTE_CONST(2.1225000000000001) * var_x225 * var_x228 / CHASTE_MATH::Pow(var_x226, 2))); + const double var_x230 = CHASTE_MATH::Exp(-var_x224); + const double var_x231 = 1 + var_x230; + const double var_x232 = CHASTE_CONST(16.980499999999999) * var_x230 / CHASTE_MATH::Pow(var_x231, 2); + const double var_x233 = 1 / var_x231; + const double var_x234 = CHASTE_CONST(67.921999999999997) * var_x233; + const double var_x235 = CHASTE_CONST(3.3960000000976542e-6) * var_x222; + const double var_x236 = ((var_x223) ? (-var_x235 + CHASTE_CONST(1249999.9999640554) * (CHASTE_CONST(18.000000400000001) + var_chaste_interface__membrane__V) * (var_x235 + CHASTE_CONST(3.3960000000976542e-6) * var_x221)) : (CHASTE_CONST(8.4900000000000002) * var_x227 * var_x228)); + const double var_x237 = 1 / (var_x234 + var_x236); + const double var_x238 = CHASTE_MATH::Exp(-CHASTE_CONST(3.7704918032786887) - CHASTE_CONST(0.16393442622950821) * var_chaste_interface__membrane__V); + const double var_x239 = 1 + var_x238; + const double var_x240 = CHASTE_CONST(0.77666666666666673) + CHASTE_CONST(0.033333333333333333) * var_chaste_interface__membrane__V; + const double var_x241 = CHASTE_MATH::Exp(-var_x240); + const double var_x242 = CHASTE_MATH::Exp(var_x240); + const double var_x243 = CHASTE_MATH::Exp(CHASTE_CONST(4.876462938881664) + CHASTE_CONST(0.065019505851755519) * var_chaste_interface__membrane__V); + const double var_x244 = CHASTE_MATH::Exp(-CHASTE_CONST(0.9003601440576231) - CHASTE_CONST(0.012004801920768308) * var_chaste_interface__membrane__V); + const double var_x245 = CHASTE_CONST(9.6370000000000005) * var_x243 + CHASTE_CONST(9.6370000000000005) * var_x244; + const double var_x246 = 1 / var_x245; + const double var_x247 = CHASTE_CONST(0.11569027611044419) * var_x244 - CHASTE_CONST(0.62659297789336799) * var_x243; + const double var_x248 = CHASTE_MATH::Exp(-CHASTE_CONST(2.6628794603230959) - CHASTE_CONST(0.17752529735487307) * var_chaste_interface__membrane__V); + const double var_x249 = 1 + var_x248; + const double var_x250 = CHASTE_MATH::Exp(-CHASTE_CONST(0.1388888888888889) * var_chaste_interface__membrane__V); + const double var_x251 = CHASTE_MATH::Exp(var_x0); + const double var_x252 = CHASTE_CONST(0.00040000000000000002) + 1 / (CHASTE_CONST(8.0109999999999992) * var_x250 + CHASTE_CONST(386.60000000000002) * var_x251); + const double var_x253 = 1 / var_x252; + const double var_x254 = CHASTE_MATH::Exp(CHASTE_CONST(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 / (CHASTE_CONST(0.020400000000000001) + CHASTE_CONST(0.54659999999999997) * var_x256); + const double var_x258 = CHASTE_MATH::Exp(CHASTE_CONST(4.0070821529745047) + CHASTE_CONST(0.14164305949008499) * var_chaste_interface__membrane__V); + const double var_x259 = 1 + var_x258; + const double var_x260 = CHASTE_CONST(0.000141643059490085) * var_x258 / CHASTE_MATH::Pow(var_x259, 2); + const double var_x261 = -1 / var_x259; + const double var_x262 = var_x254 / CHASTE_MATH::Pow(var_x255, 2); + const double var_x263 = CHASTE_MATH::Exp(CHASTE_CONST(0.96921975662133131) - CHASTE_CONST(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 / (CHASTE_CONST(5.75) * var_x256 + CHASTE_CONST(0.45000000000000001) * var_x265); + const double var_x267 = CHASTE_MATH::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 / (CHASTE_CONST(0.5) + CHASTE_CONST(7.5) * var_x269); + const double var_x271 = CHASTE_MATH::Exp(CHASTE_CONST(1.8506208911614319) + CHASTE_CONST(0.036523009495982472) * var_chaste_interface__membrane__V); + const double var_x272 = 1 + var_x271; + const double var_x273 = CHASTE_MATH::Exp(CHASTE_CONST(0.065217391304347824) - CHASTE_CONST(0.072463768115942032) * var_chaste_interface__membrane__V); + const double var_x274 = 1 + var_x273; + const double var_x275 = CHASTE_MATH::Exp(-CHASTE_CONST(0.045816915605241454) * var_chaste_interface__membrane__V); + const double var_x276 = CHASTE_MATH::Exp(CHASTE_CONST(0.014398433450440593) * var_chaste_interface__membrane__V); + const double var_x277 = CHASTE_CONST(0.059999999999999998) + 1 / (CHASTE_CONST(0.29999999999999999) * var_x275 + CHASTE_CONST(1.6599999999999999) * var_x276); + const double var_x278 = 1 / var_x277; + const double var_x279 = CHASTE_MATH::Exp(-CHASTE_CONST(0.68918918918918914) - CHASTE_CONST(0.13513513513513511) * var_chaste_interface__membrane__V); + const double var_x280 = 1 + var_x279; + const double var_x281 = CHASTE_MATH::Exp(-CHASTE_CONST(0.076769537847382163) * var_chaste_interface__membrane__V); + const double var_x282 = CHASTE_MATH::Exp(CHASTE_CONST(0.03941508020968823) * var_chaste_interface__membrane__V); + const double var_x283 = CHASTE_MATH::Exp(-CHASTE_CONST(0.018299935950224173) * var_chaste_interface__membrane__V); + const double var_x284 = CHASTE_MATH::Exp(CHASTE_CONST(0.009420009985210585) * var_chaste_interface__membrane__V); + const double var_x285 = CHASTE_MATH::Exp(CHASTE_CONST(2.539728728905752) + CHASTE_CONST(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 = -CHASTE_CONST(3.290319067574035e-6) - CHASTE_CONST(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 = CHASTE_CONST(1.77) * var_x107; + const double var_x292 = CHASTE_CONST(1.23) * var_x110; + const double var_x293 = var_x111 * var_x46; + const double var_x294 = CHASTE_CONST(0.021829942145742926) * var_x27 - CHASTE_CONST(0.00082254686501890791) * var_chaste_interface__membrane__V; + const double var_x295 = mParameters[7] * var_chaste_interface__delayed_rectifier_K_current_pa_gate__p_a; + const double var_x296 = CHASTE_CONST(0.021829942145742926) * var_x5; + const double var_x297 = CHASTE_CONST(0.021829942145742926) * var_x24; + const double var_x298 = CHASTE_CONST(0.0049352811901134472) * var_x46; + const double var_x299 = 200 * var_chaste_interface__intracellular_ion_concentrations__Ca_i; + const double var_x300 = CHASTE_CONST(1.6583208100573134e-5) + CHASTE_CONST(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 = CHASTE_CONST(0.0041456361996952953) * var_chaste_interface__membrane__V - CHASTE_CONST(0.11002290841454433) * var_x27; + const double var_x304 = CHASTE_CONST(0.11002290841454433) * var_x5; + const double var_x305 = CHASTE_CONST(0.11002290841454433) * var_x24; + const double var_x306 = CHASTE_CONST(0.11777375567316183) * var_x149; + const double var_x307 = CHASTE_CONST(0.23554751134632365) * var_x154; + const double var_x308 = CHASTE_MATH::Exp(-CHASTE_CONST(1.6000000000000001) + CHASTE_CONST(0.080000000000000002) * var_chaste_interface__membrane__V); + const double var_x309 = CHASTE_CONST(0.019200000000000002) * var_x308 * var_chaste_interface__Ca_handling_by_the_SR__F1; + const double var_x310 = CHASTE_CONST(0.00029999999999999997) + var_chaste_interface__intracellular_ion_concentrations__Ca_i; + const double var_x311 = CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Ca_i, 4); + const double var_x312 = var_x311 / CHASTE_MATH::Pow(var_x310, 5); + const double var_x313 = CHASTE_MATH::Pow(var_x310, (-4)); + const double var_x314 = var_x313 * CHASTE_MATH::Pow(var_chaste_interface__intracellular_ion_concentrations__Ca_i, 3); + const double var_x315 = CHASTE_CONST(0.81520000000000004) * var_x312 - CHASTE_CONST(0.81520000000000004) * var_x314; + const double var_x316 = var_x311 * var_x313; + const double var_x317 = CHASTE_CONST(0.20380000000000001) * var_x316 + CHASTE_CONST(0.23999999999999999) * var_x308; + const double var_x318 = CHASTE_CONST(1.3584000000000001) * var_x312 - CHASTE_CONST(1.3584000000000001) * var_x314; + const double var_x319 = CHASTE_CONST(0.033960000000000004) + CHASTE_CONST(0.33960000000000001) * var_x316; + + // Matrix entries + rJacobian[0] = mSetVoltageDerivativeToZero ? CHASTE_CONST(0.0) : (-var_x77 * (CHASTE_CONST(0.0014400000000000001) + var_x17 + var_x22 + var_x24 + var_x5 + var_x75 + 2 * var_x35 + CHASTE_CONST(0.0060000000000000001) * var_x6 + CHASTE_CONST(0.0011450666666666667) * var_x45 - CHASTE_CONST(0.10497579657532749) * var_x49 + var_x36 * var_x37 + (CHASTE_CONST(1.8) * var_x3 + CHASTE_CONST(1.8) * var_x4) * mParameters[3])); + rJacobian[1] = -CHASTE_CONST(1.7614021922566692e-8) + CHASTE_CONST(0.0017614021922566689) * var_x17 - CHASTE_CONST(5.2842065767700066e-6) * var_x6 + var_x141 * var_x37 + (-CHASTE_CONST(0.001585261973031002) * var_x3 - CHASTE_CONST(0.001585261973031002) * var_x4) * mParameters[3]; + rJacobian[2] = (CHASTE_CONST(0.001) - CHASTE_CONST(0.001) * var_chaste_interface__sodium_current_m_gate__m) * ((var_x158) ? (-230 * var_x156 - 230 * var_x157) : (-var_x161 - CHASTE_CONST(36.297640653357533) * var_x159 * var_x162 / CHASTE_MATH::Pow(var_x160, 2))) + CHASTE_CONST(1.4519056261343013) * var_x159 * var_chaste_interface__sodium_current_m_gate__m; + rJacobian[3] = var_x169 * var_x173 + CHASTE_CONST(0.0055555555555555558) * var_x170 * (-var_x174 - var_chaste_interface__sodium_current_h1_gate__h1) / (CHASTE_MATH::Pow(var_x171, 2) * CHASTE_MATH::Pow((CHASTE_CONST(0.0050000000000000001) + var_x172), 2)); + rJacobian[4] = var_x169 * var_x178 + CHASTE_CONST(0.0041666666666666666) * var_x175 * (-var_x174 - var_chaste_interface__sodium_current_h2_gate__h2) / (CHASTE_MATH::Pow(var_x176, 2) * CHASTE_MATH::Pow((CHASTE_CONST(0.0037499999999999999) + var_x177), 2)); + rJacobian[5] = (-var_x102 + CHASTE_CONST(0.001) / var_x211) * (((var_x181) ? (CHASTE_CONST(2.2400000000000002) * var_x179 + CHASTE_CONST(2.2400000000000002) * var_x180) : (CHASTE_CONST(4.4800000000000004) * var_x185 - CHASTE_CONST(1.7920000000000003) * var_x183 * var_x186 / CHASTE_MATH::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))))) + CHASTE_CONST(0.00015151515151515152) * var_x210 * (var_x213 + var_x220) / CHASTE_MATH::Pow(var_x211, 2); + rJacobian[6] = (var_x232 + var_x229) * (-var_x100 + CHASTE_CONST(0.001) * var_x236 * var_x237) + (var_x234 + var_x236) * (CHASTE_CONST(0.001) * var_x229 * var_x237 + CHASTE_CONST(2.1675996343523e-7) * var_x236 * (-var_x229 - var_x232) / CHASTE_MATH::Pow((var_x233 + CHASTE_CONST(0.014722770236447691) * var_x236), 2)); + rJacobian[7] = (-var_x105 + CHASTE_CONST(0.001) / var_x239) * (CHASTE_CONST(22.472433333333335) * var_x242 - CHASTE_CONST(22.472433333333335) * var_x241) + CHASTE_CONST(0.0001639344262295082) * var_x238 * (CHASTE_CONST(674.173) * var_x241 + CHASTE_CONST(674.173) * var_x242) / CHASTE_MATH::Pow(var_x239, 2); + rJacobian[8] = var_x245 * (-CHASTE_CONST(0.00011569027611044419) * var_x244 * var_x246 + CHASTE_CONST(0.00010376673238559718) * var_x244 * var_x247 / CHASTE_MATH::Pow((var_x243 + var_x244), 2)) - var_x247 * (-var_x103 + CHASTE_CONST(0.0096369999999999997) * var_x244 * var_x246); + rJacobian[9] = CHASTE_CONST(0.00017752529735487306) * var_x248 * var_x253 / CHASTE_MATH::Pow(var_x249, 2) - CHASTE_CONST(6.6907730760079843e-9) * (-var_chaste_interface__Ca_independent_transient_outward_K_current_r_gate__r + 1 / var_x249) * (CHASTE_CONST(1.1126388888888887) * var_x250 - CHASTE_CONST(32.216666666666669) * var_x251) / (CHASTE_MATH::Pow(var_x252, 2) * CHASTE_MATH::Pow((var_x251 + CHASTE_CONST(0.020721676151060523) * var_x250), 2)); + rJacobian[10] = -var_x257 * var_x260 + CHASTE_CONST(0.018294914013904134) * var_x262 * (-var_x261 - var_chaste_interface__Ca_independent_transient_outward_K_current_s1_gate__s1) / CHASTE_MATH::Pow((CHASTE_CONST(0.037321624588364438) + var_x256), 2); + rJacobian[11] = -var_x260 * var_x266 + CHASTE_CONST(3.0245746691871456e-5) * (-var_x261 - var_chaste_interface__Ca_independent_transient_outward_K_current_s2_gate__s2) * (CHASTE_CONST(57.5) * var_x262 - CHASTE_CONST(0.032211882605583393) * var_x263 / CHASTE_MATH::Pow(var_x264, 2)) / CHASTE_MATH::Pow((var_x256 + CHASTE_CONST(0.078260869565217397) * var_x265), 2); + rJacobian[12] = -CHASTE_CONST(2.1922574727480476e-5) * var_x270 * var_x271 / CHASTE_MATH::Pow(var_x272, 2) + CHASTE_CONST(0.00026666666666666668) * var_x267 * (CHASTE_CONST(0.39975990396158467) - var_chaste_interface__Ca_independent_transient_outward_K_current_s3_gate__s3 + CHASTE_CONST(0.60024009603841544) / var_x272) / (CHASTE_MATH::Pow(var_x268, 2) * CHASTE_MATH::Pow((CHASTE_CONST(0.066666666666666666) + var_x269), 2)); + rJacobian[13] = CHASTE_CONST(7.2463768115942027e-5) * var_x273 * var_x278 / CHASTE_MATH::Pow(var_x274, 2) - CHASTE_CONST(0.00036289737262302222) * (-var_chaste_interface__delayed_rectifier_K_current_z_gate__z + 1 / var_x274) * (CHASTE_CONST(0.013745074681572435) * var_x275 - CHASTE_CONST(0.023901399527731383) * var_x276) / (CHASTE_MATH::Pow(var_x277, 2) * CHASTE_MATH::Pow((var_x276 + CHASTE_CONST(0.18072289156626506) * var_x275), 2)); + rJacobian[14] = (-var_x114 + CHASTE_CONST(0.001) / var_x280) * (CHASTE_CONST(0.35473572188719404) * var_x282 - CHASTE_CONST(0.099800399201596807) * var_x281) + CHASTE_CONST(0.00013513513513513514) * var_x279 * (9 * var_x282 + CHASTE_CONST(1.3) * var_x281) / CHASTE_MATH::Pow(var_x280, 2); + rJacobian[15] = (-var_x112 + CHASTE_CONST(0.001) / var_x286) * (CHASTE_CONST(6.1795265502981431) * var_x284 - CHASTE_CONST(1.8299935950224173) * var_x283) - CHASTE_CONST(5.3589706489177562e-5) * var_x285 * (100 * var_x283 + 656 * var_x284) / CHASTE_MATH::Pow(var_x286, 2); + rJacobian[16] = -CHASTE_CONST(1.6450937300378158e-8) - CHASTE_CONST(0.0024676405950567236) * var_x17 - CHASTE_CONST(2.8256129907129523e-6) * var_x45 - CHASTE_CONST(0.00082254686501890791) * var_x75; + rJacobian[17] = -CHASTE_CONST(1.151565611026471e-6) - CHASTE_CONST(0.00082254686501890791) * var_x24 - CHASTE_CONST(0.00082254686501890791) * var_x5 - CHASTE_CONST(0.0016450937300378158) * var_x35 + var_x20 * var_x288 * var_chaste_interface__Ca_independent_transient_outward_K_current_r_gate__r + CHASTE_CONST(8.6347512375898239e-5) * var_x25 * var_x28 * var_x32 * var_x46 * var_x47 * mParameters[6] + CHASTE_CONST(1.8837419938086349e-6) * var_x38 * var_x40 * var_x41 * var_x42 * var_x43 * var_chaste_interface__cleft_space_ion_concentrations__K_c; + rJacobian[18] = CHASTE_CONST(5.8038906795734136e-6) + var_x301 + CHASTE_CONST(0.0041456361996952953) * var_x24 + CHASTE_CONST(0.0041456361996952953) * var_x5 + CHASTE_CONST(0.0082912723993905906) * var_x35 - CHASTE_CONST(9.4940596487955185e-6) * var_x45 - CHASTE_CONST(0.00043519146237452704) * var_x49; + rJacobian[19] = -var_x309; + rJacobian[20] = var_x309; + rJacobian[21] = mSetVoltageDerivativeToZero ? CHASTE_CONST(0.0) : (-var_x77 * (-var_x82 + CHASTE_CONST(0.0095090000000000001) * var_x79 + CHASTE_CONST(0.0002653945091048535) * var_x80 - CHASTE_CONST(0.00029999999999999997) * var_x86 - CHASTE_CONST(0.0095090000000000001) * var_x81 * var_chaste_interface__intracellular_ion_concentrations__Ca_i)); + rJacobian[22] = -CHASTE_CONST(47.271999999999998) - var_x150 + CHASTE_CONST(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 - CHASTE_CONST(8.3745867230843319e-6) * var_x79 - CHASTE_CONST(5.2842065767700058e-7) * var_x86 - CHASTE_CONST(8.2198768971977874) * var_x142 - CHASTE_CONST(0.0017614021922566689) * var_x82 - CHASTE_CONST(2.3373323507508574e-7) * var_x80 + CHASTE_CONST(8.3745867230843319e-6) * var_x81 * var_chaste_interface__intracellular_ion_concentrations__Ca_i + CHASTE_CONST(7.3978892074780085e-7) * var_x143 * var_x144; + rJacobian[23] = CHASTE_CONST(0.0024676405950567236) * var_x82 + CHASTE_CONST(7.4029217851701709e-7) * var_x86; + rJacobian[24] = 200 - 200 * var_chaste_interface__intracellular_Ca_buffering__O_C; + rJacobian[25] = CHASTE_CONST(78.400000000000006) - CHASTE_CONST(78.400000000000006) * var_chaste_interface__intracellular_Ca_buffering__O_TC; + rJacobian[26] = 200 - 200 * var_chaste_interface__intracellular_Ca_buffering__O_TMgC - 200 * var_chaste_interface__intracellular_Ca_buffering__O_TMgMg; + rJacobian[27] = var_x306; + rJacobian[28] = CHASTE_CONST(121.85879481761599) * var_x142 - CHASTE_CONST(1.0967291533585437e-5) * var_x153; + rJacobian[29] = var_x315 * var_chaste_interface__Ca_handling_by_the_SR__F1; + rJacobian[30] = var_x318 * var_chaste_interface__Ca_handling_by_the_SR__F2 - var_x315 * var_chaste_interface__Ca_handling_by_the_SR__F1; + rJacobian[31] = -var_x318 * var_chaste_interface__Ca_handling_by_the_SR__F2; + rJacobian[32] = mSetVoltageDerivativeToZero ? CHASTE_CONST(0.0) : (-var_x77 * var_x92); + rJacobian[33] = -CHASTE_CONST(0.001) * ((var_x158) ? (var_x163 + CHASTE_CONST(394539.57232025318) * (CHASTE_CONST(44.400001267299999) + var_chaste_interface__membrane__V) * (-var_x163 - CHASTE_CONST(0.00058295799999830145) * var_x157)) : (-var_x161 * var_x162)) - CHASTE_CONST(18.399999999999999) * var_x159; + rJacobian[34] = -CHASTE_CONST(0.00082254686501890791) * var_x92; + rJacobian[35] = mSetVoltageDerivativeToZero ? CHASTE_CONST(0.0) : (-var_x77 * var_x96); + rJacobian[36] = -var_x173; + rJacobian[37] = -CHASTE_CONST(0.00082254686501890791) * var_x96; + rJacobian[38] = mSetVoltageDerivativeToZero ? CHASTE_CONST(0.0) : (-var_x77 * var_x99); + rJacobian[39] = -var_x178; + rJacobian[40] = -CHASTE_CONST(0.00082254686501890791) * var_x99; + rJacobian[41] = mSetVoltageDerivativeToZero ? CHASTE_CONST(0.0) : (-var_x100 * var_x101); + rJacobian[42] = var_x141 * var_chaste_interface__L_type_Ca_channel_f_L_gate__f_L; + rJacobian[43] = -CHASTE_CONST(0.001) * var_x213 - CHASTE_CONST(0.001) * var_x220; + rJacobian[44] = mSetVoltageDerivativeToZero ? CHASTE_CONST(0.0) : (-var_x101 * var_x102); + rJacobian[45] = var_x141 * var_chaste_interface__L_type_Ca_channel_d_L_gate__d_L; + rJacobian[46] = -CHASTE_CONST(0.001) * var_x236 - CHASTE_CONST(0.067921999999999996) * var_x233; + rJacobian[47] = mSetVoltageDerivativeToZero ? CHASTE_CONST(0.0) : (-var_x103 * var_x104); + rJacobian[48] = var_x151 * var_chaste_interface__T_type_Ca_channel_f_T_gate__f_T; + rJacobian[49] = -CHASTE_CONST(0.67417300000000002) * var_x241 - CHASTE_CONST(0.67417300000000002) * var_x242; + rJacobian[50] = mSetVoltageDerivativeToZero ? CHASTE_CONST(0.0) : (-var_x104 * var_x105); + rJacobian[51] = var_x151 * var_chaste_interface__T_type_Ca_channel_d_T_gate__d_T; + rJacobian[52] = -CHASTE_CONST(0.0096369999999999997) * var_x243 - CHASTE_CONST(0.0096369999999999997) * var_x244; + rJacobian[53] = mSetVoltageDerivativeToZero ? CHASTE_CONST(0.0) : (-var_x106 * var_x19 * var_x77); + rJacobian[54] = -CHASTE_CONST(0.001) * var_x253; + rJacobian[55] = var_x106 * var_x288; + rJacobian[56] = var_x106 * var_x300; + rJacobian[57] = mSetVoltageDerivativeToZero ? CHASTE_CONST(0.0) : (-CHASTE_CONST(0.0017699999999999999) * var_x107 * var_x109); + rJacobian[58] = -CHASTE_CONST(0.001) * var_x257; + rJacobian[59] = var_x290 * var_x291; + rJacobian[60] = var_x291 * var_x302; + rJacobian[61] = mSetVoltageDerivativeToZero ? CHASTE_CONST(0.0) : (-CHASTE_CONST(0.00123) * var_x109 * var_x110); + rJacobian[62] = -CHASTE_CONST(0.001) * var_x266; + rJacobian[63] = var_x290 * var_x292; + rJacobian[64] = var_x292 * var_x302; + rJacobian[65] = mSetVoltageDerivativeToZero ? CHASTE_CONST(0.0) : (-CHASTE_CONST(3.600144e-5) * var_x108 * var_x111); + rJacobian[66] = -CHASTE_CONST(0.001) * var_x270; + rJacobian[67] = -CHASTE_CONST(2.9612871608166312e-5) * var_x293; + rJacobian[68] = CHASTE_CONST(0.00014924887290515819) * var_x293; + rJacobian[69] = mSetVoltageDerivativeToZero ? CHASTE_CONST(0.0) : (-var_x46 * var_x77 * mParameters[8]); + rJacobian[70] = -CHASTE_CONST(0.001) * var_x278; + rJacobian[71] = var_x294 * mParameters[8]; + rJacobian[72] = var_x303 * mParameters[8]; + rJacobian[73] = mSetVoltageDerivativeToZero ? CHASTE_CONST(0.0) : (-var_x112 * var_x113); + rJacobian[74] = -CHASTE_CONST(0.0089999999999999993) * var_x282 - CHASTE_CONST(0.0012999999999999999) * var_x281; + rJacobian[75] = var_x23 * var_x294; + rJacobian[76] = var_x23 * var_x303; + rJacobian[77] = mSetVoltageDerivativeToZero ? CHASTE_CONST(0.0) : (-var_x113 * var_x114); + rJacobian[78] = -CHASTE_CONST(0.65600000000000003) * var_x284 - CHASTE_CONST(0.10000000000000001) * var_x283; + rJacobian[79] = var_x294 * var_x295; + rJacobian[80] = var_x295 * var_x303; + rJacobian[81] = mSetVoltageDerivativeToZero ? CHASTE_CONST(0.0) : (-var_x77 * (var_x129 + 3 * var_x117 + CHASTE_CONST(0.00053078901820970701) * var_x51 + CHASTE_CONST(0.154584) * var_x121 - CHASTE_CONST(0.00089999999999999998) * var_x122 - CHASTE_CONST(0.0001161412471825695) * var_x125)); + rJacobian[82] = -CHASTE_CONST(1.5852619730310017e-6) * var_x122 + CHASTE_CONST(0.0052842065767700064) * var_x115 * var_x15 * var_x7 * mParameters[9] * mParameters[1]; + rJacobian[83] = -CHASTE_CONST(0.00038145775374624855) * var_x121 - CHASTE_CONST(4.3659884291485854e-7) * var_x51 - CHASTE_CONST(0.00082254686501890791) * var_x129 - CHASTE_CONST(0.0074029217851701709) * var_x117 + CHASTE_CONST(2.2208765355510512e-6) * var_x115 * var_x83 * var_x84 * mParameters[9] * mParameters[1] + CHASTE_CONST(2.8659485630822583e-7) * var_x118 * var_x123 * var_x124 * var_x40 * var_chaste_interface__cleft_space_ion_concentrations__K_c; + rJacobian[84] = CHASTE_CONST(0.00025430516916416572) * var_x121 - CHASTE_CONST(1.9106323753881723e-7) * var_x125; + rJacobian[85] = -CHASTE_CONST(0.0012816980525873951) * var_x121 + CHASTE_CONST(9.6295871719563877e-7) * var_x118 * var_x123 * var_x124 * var_x40 * var_chaste_interface__cleft_space_ion_concentrations__K_c; + rJacobian[86] = mSetVoltageDerivativeToZero ? CHASTE_CONST(0.0) : (-var_x77 * (CHASTE_CONST(53.0789018209707) * var_x132 - CHASTE_CONST(2.786) * var_x133 + var_x130 * var_x26 + var_x131 * var_x22 + var_x131 * var_x24)); + rJacobian[87] = -CHASTE_CONST(0.043659884291485852) * var_x132 - var_x26 * var_x296 - var_x26 * var_x297 + CHASTE_CONST(26.53945091048535) * var_x20 * var_x26 * var_x288 * var_chaste_interface__Ca_independent_transient_outward_K_current_r_gate__r + CHASTE_CONST(0.0022916155659426776) * var_x25 * var_x26 * var_x28 * var_x32 * var_x46 * var_x47 * mParameters[6]; + rJacobian[88] = CHASTE_CONST(0.22004581682908866) * var_x132 - CHASTE_CONST(0.011549742452351092) * var_x133 + var_x131 * var_x301 + var_x26 * var_x304 + var_x26 * var_x305; + rJacobian[89] = CHASTE_CONST(0.021419999999999998) + 9 * var_chaste_interface__intracellular_ion_concentrations__Ca_i; + rJacobian[90] = -CHASTE_CONST(0.47599999999999998) - var_x299; + rJacobian[91] = CHASTE_CONST(0.031359999999999999) + CHASTE_CONST(6.2720000000000002) * var_chaste_interface__intracellular_ion_concentrations__Ca_i; + rJacobian[92] = -CHASTE_CONST(0.39200000000000002) - CHASTE_CONST(78.400000000000006) * var_chaste_interface__intracellular_ion_concentrations__Ca_i; + rJacobian[93] = CHASTE_CONST(0.0010559999999999999) + var_x152; + rJacobian[94] = -CHASTE_CONST(0.0066) - var_x299; + rJacobian[95] = -5; + rJacobian[96] = var_x152; + rJacobian[97] = -var_x299; + rJacobian[98] = -CHASTE_CONST(5.6660000000000004); + rJacobian[99] = mSetVoltageDerivativeToZero ? CHASTE_CONST(0.0) : (-var_x77 * (-CHASTE_CONST(53.0789018209707) * var_x137 - CHASTE_CONST(0.10305599999999999) * var_x140 - var_x130 * var_x134 - var_x135 * var_x22 - var_x135 * var_x24 - 6 * var_x138 * var_x46 + CHASTE_CONST(0.10305599999999999) * var_x118 * var_x40 * var_x42 * var_x43 + 6 * var_x136 * var_x30 * var_x32 * var_x46 * mParameters[6] + CHASTE_CONST(2.786) * var_x136 * var_x28 * var_x32 * var_x46 * var_x47 * mParameters[6])); + rJacobian[100] = CHASTE_CONST(0.00025430516916416572) * var_x140 - CHASTE_CONST(0.00025430516916416572) * var_x287; + rJacobian[101] = CHASTE_CONST(0.043659884291485852) * var_x137 + CHASTE_CONST(0.00016953677944277714) * var_x287 - CHASTE_CONST(0.00016953677944277714) * var_x140 + var_x134 * var_x296 + var_x134 * var_x297 + var_x138 * var_x298 - var_x137 * var_x298 - CHASTE_CONST(0.0022916155659426776) * var_x136 * var_x48 - var_x135 * var_x21 * var_x288; + rJacobian[102] = -CHASTE_CONST(0.00085446536839159674) * var_x287 - CHASTE_CONST(0.22004581682908866) * var_x137 - var_x134 * var_x304 - var_x134 * var_x305 - var_x135 * var_x301 - CHASTE_CONST(0.024873817198171774) * var_x138 * var_x46 + CHASTE_CONST(0.024873817198171774) * var_x136 * var_x30 * var_x32 * var_x46 * mParameters[6] + CHASTE_CONST(0.00085446536839159674) * var_x118 * var_x139 * var_x42 * var_x43 * var_chaste_interface__cleft_space_ion_concentrations__K_c + CHASTE_CONST(0.011549742452351092) * var_x136 * var_x28 * var_x32 * var_x46 * var_x47 * mParameters[6]; + rJacobian[103] = var_x150; + rJacobian[104] = -CHASTE_CONST(14.98) - var_x306 + CHASTE_CONST(14.880000000000001) * var_chaste_interface__Ca_handling_by_the_SR__O_Calse; + rJacobian[105] = CHASTE_CONST(0.011085915847820609); + rJacobian[106] = CHASTE_CONST(0.47999999999999998) - CHASTE_CONST(0.47999999999999998) * var_chaste_interface__Ca_handling_by_the_SR__O_Calse; + rJacobian[107] = CHASTE_CONST(1.7754934097947219e-10) * var_x153 + CHASTE_CONST(0.00078910818213098765) * var_x142; + rJacobian[108] = CHASTE_CONST(0.099999999999999992); + rJacobian[109] = -CHASTE_CONST(0.011085915847820609) - CHASTE_CONST(2.6321499680605046e-9) * var_x153 - CHASTE_CONST(0.011698444302491135) * var_x142; + rJacobian[110] = CHASTE_CONST(12.4) + CHASTE_CONST(14.880000000000001) * var_chaste_interface__Ca_handling_by_the_SR__Ca_rel; + rJacobian[111] = -CHASTE_CONST(0.40000000000000002) - CHASTE_CONST(0.47999999999999998) * var_chaste_interface__Ca_handling_by_the_SR__Ca_rel; + rJacobian[112] = -var_x317; + rJacobian[113] = var_x317; + rJacobian[114] = -CHASTE_CONST(0.0017614021922566689) * var_x154 * var_x155 + CHASTE_CONST(0.0017614021922566689) * var_x147 * var_x154 * var_chaste_interface__Ca_handling_by_the_SR__F2 * mParameters[0]; + rJacobian[115] = var_x155 * var_x307 - var_x148 * var_x307 * var_chaste_interface__Ca_handling_by_the_SR__F2; + rJacobian[116] = -var_x319; + rJacobian[117] = var_x319; + rJacobian[118] = CHASTE_CONST(0.00081499999999999997); + rJacobian[119] = -CHASTE_CONST(0.00081499999999999997); +} + +#include "ChasteCpuMacros.hpp" +#endif // CELLASLANIDI_ATRIAL_MODEL_2009FROMCELLMLCVODEKERNELS_HPP_ \ No newline at end of file diff --git a/chaste_codegen/data/tests/chaste_reference_models/Cvode_with_jacobian/hodgkin_huxley_squid_axon_model_1952_modifiedKernels.hpp b/chaste_codegen/data/tests/chaste_reference_models/Cvode_with_jacobian/hodgkin_huxley_squid_axon_model_1952_modifiedKernels.hpp new file mode 100644 index 000000000..508029ea1 --- /dev/null +++ b/chaste_codegen/data/tests/chaste_reference_models/Cvode_with_jacobian/hodgkin_huxley_squid_axon_model_1952_modifiedKernels.hpp @@ -0,0 +1,161 @@ +#ifndef CELLHODGKIN_HUXLEY_SQUID_AXON_MODEL_1952_MODIFIEDFROMCELLMLCVODEKERNELS_HPP_ +#define CELLHODGKIN_HUXLEY_SQUID_AXON_MODEL_1952_MODIFIEDFROMCELLMLCVODEKERNELS_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 "MathsCustomFunctions.hpp" +#include "ChasteDeviceMacros.hpp" + + +template +DEVICE +void Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvode::EvaluateYDerivativesDevice(ValueType var_chaste_interface__environment__time, const ValueType *rY, ValueType *rDY, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType *mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim) +{ + // Inputs: + // Time units: millisecond + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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 = -CHASTE_CONST(0.10000000000000001); // per_millivolt + const double var_potassium_channel_n_gate__A = -CHASTE_CONST(0.01) / var_potassium_channel_n_gate__B; // per_millisecond + const double var_potassium_channel_n_gate__beta_n = CHASTE_CONST(0.125) * CHASTE_MATH::Exp(CHASTE_CONST(0.9375) + CHASTE_CONST(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 >= -CHASTE_CONST(9.9999999999999995e-8)) && (var_potassium_channel_n_gate__U <= CHASTE_CONST(9.9999999999999995e-8))) ? ((1 - CHASTE_CONST(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 + CHASTE_MATH::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 = CHASTE_CONST(0.070000000000000007) * CHASTE_MATH::Exp(-CHASTE_CONST(3.75) - CHASTE_CONST(0.050000000000000003) * var_chaste_interface__membrane__V); // per_millisecond + const double var_sodium_channel_h_gate__beta_h = 1 / (1 + CHASTE_MATH::Exp(-CHASTE_CONST(4.5) - CHASTE_CONST(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 = -CHASTE_CONST(0.10000000000000001); // per_millivolt + const double var_sodium_channel_m_gate__A = -CHASTE_CONST(0.10000000000000001) / var_sodium_channel_m_gate__B; // per_millisecond + const double var_sodium_channel_m_gate__beta_m = 4 * CHASTE_MATH::Exp(-CHASTE_CONST(4.166666666666667) - CHASTE_CONST(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 >= -CHASTE_CONST(9.9999999999999995e-8)) && (var_sodium_channel_m_gate__U <= CHASTE_CONST(9.9999999999999995e-8))) ? ((1 - CHASTE_CONST(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 + CHASTE_MATH::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;const double var_leakage_current__E_L = CHASTE_CONST(10.613) + var_membrane__E_R;const double var_leakage_current__i_L = (-var_leakage_current__E_L + var_chaste_interface__membrane__V) * mParameters[2];const double var_membrane__i_Stim = CHASTE_STIM(var_chaste_interface__environment__time);const double var_potassium_channel__E_K = -12 + var_membrane__E_R;const double var_potassium_channel__i_K = CHASTE_MATH::Pow(var_chaste_interface__potassium_channel_n_gate__n, 4) * (-var_potassium_channel__E_K + var_chaste_interface__membrane__V) * mParameters[3];const double var_sodium_channel__E_Na = 115 + var_membrane__E_R;const double var_sodium_channel__i_Na = CHASTE_MATH::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;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]; + } + + 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; +} + +template +DEVICE +void Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvode::EvaluateAnalyticJacobianDevice(ValueType var_chaste_interface__environment__time, const ValueType *rY, ValueType *rDY, ValueType *rJacobian, ValueType *rTmp1, ValueType *rTmp2, ValueType *rTmp3, const unsigned nvars, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType *mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim) +{ + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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_x0 = 1 / mParameters[0]; + const double var_x1 = CHASTE_MATH::Pow(var_chaste_interface__sodium_channel_m_gate__m, 3) * mParameters[1]; + const double var_x2 = var_x0 * (-40 + var_chaste_interface__membrane__V); + const double var_x3 = CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V; + const double var_x4 = 5 + var_x3; + const double var_x5 = (var_x4 >= -CHASTE_CONST(9.9999999999999995e-8)) && (var_x4 <= CHASTE_CONST(9.9999999999999995e-8)); + const double var_x6 = CHASTE_MATH::Exp(-var_x4); + const double var_x7 = -1 + var_x6; + const double var_x8 = 1 / var_x7; + const double var_x9 = CHASTE_MATH::Exp(-CHASTE_CONST(4.166666666666667) - CHASTE_CONST(0.055555555555555552) * var_chaste_interface__membrane__V); + const double var_x10 = CHASTE_MATH::Exp(-CHASTE_CONST(3.75) - CHASTE_CONST(0.050000000000000003) * var_chaste_interface__membrane__V); + const double var_x11 = CHASTE_MATH::Exp(-CHASTE_CONST(4.5) - CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V); + const double var_x12 = 1 + var_x11; + const double var_x13 = CHASTE_CONST(6.5) + var_x3; + const double var_x14 = (var_x13 >= -CHASTE_CONST(9.9999999999999995e-8)) && (var_x13 <= CHASTE_CONST(9.9999999999999995e-8)); + const double var_x15 = CHASTE_MATH::Exp(-var_x13); + const double var_x16 = -1 + var_x15; + const double var_x17 = 1 / var_x16; + const double var_x18 = CHASTE_MATH::Exp(CHASTE_CONST(0.9375) + CHASTE_CONST(0.012500000000000001) * var_chaste_interface__membrane__V); + + // Matrix entries + rJacobian[0 * nvars + 0] = mSetVoltageDerivativeToZero ? CHASTE_CONST(0.0) : (var_x0 * (-mParameters[2] - var_x1 * var_chaste_interface__sodium_channel_h_gate__h - CHASTE_MATH::Pow(var_chaste_interface__potassium_channel_n_gate__n, 4) * mParameters[3])); + rJacobian[0 * nvars + 1] = (1 - var_chaste_interface__sodium_channel_m_gate__m) * ((var_x5) ? (CHASTE_CONST(0.050000000000000003)) : (-CHASTE_CONST(0.10000000000000001) * var_x8 - CHASTE_CONST(0.10000000000000001) * var_x4 * var_x6 / CHASTE_MATH::Pow(var_x7, 2))) + CHASTE_CONST(0.22222222222222221) * var_x9 * var_chaste_interface__sodium_channel_m_gate__m; + rJacobian[0 * nvars + 2] = -CHASTE_CONST(0.050000000000000003) * var_x10 * (CHASTE_CONST(0.070000000000000007) - CHASTE_CONST(0.070000000000000007) * var_chaste_interface__sodium_channel_h_gate__h) - CHASTE_CONST(0.10000000000000001) * var_x11 * var_chaste_interface__sodium_channel_h_gate__h / CHASTE_MATH::Pow(var_x12, 2); + rJacobian[0 * nvars + 3] = (1 - var_chaste_interface__potassium_channel_n_gate__n) * ((var_x14) ? (CHASTE_CONST(0.0050000000000000001)) : (-CHASTE_CONST(0.01) * var_x17 - CHASTE_CONST(0.01) * var_x13 * var_x15 / CHASTE_MATH::Pow(var_x16, 2))) - CHASTE_CONST(0.0015625000000000001) * var_x18 * var_chaste_interface__potassium_channel_n_gate__n; + rJacobian[1 * nvars + 0] = mSetVoltageDerivativeToZero ? CHASTE_CONST(0.0) : (-3 * var_x2 * CHASTE_MATH::Pow(var_chaste_interface__sodium_channel_m_gate__m, 2) * mParameters[1] * var_chaste_interface__sodium_channel_h_gate__h); + rJacobian[1 * nvars + 1] = -((var_x5) ? (CHASTE_CONST(3.5) + CHASTE_CONST(0.050000000000000003) * var_chaste_interface__membrane__V) : (-var_x4 * var_x8)) - 4 * var_x9; + rJacobian[2 * nvars + 0] = mSetVoltageDerivativeToZero ? CHASTE_CONST(0.0) : (-var_x1 * var_x2); + rJacobian[2 * nvars + 2] = -1 / var_x12 - CHASTE_CONST(0.070000000000000007) * var_x10; + rJacobian[3 * nvars + 0] = mSetVoltageDerivativeToZero ? CHASTE_CONST(0.0) : (-4 * var_x0 * CHASTE_MATH::Pow(var_chaste_interface__potassium_channel_n_gate__n, 3) * (87 + var_chaste_interface__membrane__V) * mParameters[3]); + rJacobian[3 * nvars + 3] = -((var_x14) ? (CHASTE_CONST(0.42499999999999999) + CHASTE_CONST(0.0050000000000000001) * var_chaste_interface__membrane__V) : (-CHASTE_CONST(0.099999999999999992) * var_x13 * var_x17)) - CHASTE_CONST(0.125) * var_x18; +} + +template +DEVICE +void Cellhodgkin_huxley_squid_axon_model_1952_modifiedFromCellMLCvode::EvaluateSparseAnalyticJacobianDevice(ValueType var_chaste_interface__environment__time, const ValueType *rY, ValueType *rDY, ValueType *rJacobian, ValueType *rTmp1, ValueType *rTmp2, ValueType *rTmp3, const unsigned nvars, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType *mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim) +{ + double var_chaste_interface__membrane__V = (mSetVoltageDerivativeToZero ? CHASTE_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_x0 = 1 / mParameters[0]; + const double var_x1 = CHASTE_MATH::Pow(var_chaste_interface__sodium_channel_m_gate__m, 3) * mParameters[1]; + const double var_x2 = var_x0 * (-40 + var_chaste_interface__membrane__V); + const double var_x3 = CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V; + const double var_x4 = 5 + var_x3; + const double var_x5 = (var_x4 >= -CHASTE_CONST(9.9999999999999995e-8)) && (var_x4 <= CHASTE_CONST(9.9999999999999995e-8)); + const double var_x6 = CHASTE_MATH::Exp(-var_x4); + const double var_x7 = -1 + var_x6; + const double var_x8 = 1 / var_x7; + const double var_x9 = CHASTE_MATH::Exp(-CHASTE_CONST(4.166666666666667) - CHASTE_CONST(0.055555555555555552) * var_chaste_interface__membrane__V); + const double var_x10 = CHASTE_MATH::Exp(-CHASTE_CONST(3.75) - CHASTE_CONST(0.050000000000000003) * var_chaste_interface__membrane__V); + const double var_x11 = CHASTE_MATH::Exp(-CHASTE_CONST(4.5) - CHASTE_CONST(0.10000000000000001) * var_chaste_interface__membrane__V); + const double var_x12 = 1 + var_x11; + const double var_x13 = CHASTE_CONST(6.5) + var_x3; + const double var_x14 = (var_x13 >= -CHASTE_CONST(9.9999999999999995e-8)) && (var_x13 <= CHASTE_CONST(9.9999999999999995e-8)); + const double var_x15 = CHASTE_MATH::Exp(-var_x13); + const double var_x16 = -1 + var_x15; + const double var_x17 = 1 / var_x16; + const double var_x18 = CHASTE_MATH::Exp(CHASTE_CONST(0.9375) + CHASTE_CONST(0.012500000000000001) * var_chaste_interface__membrane__V); + + // Matrix entries + rJacobian[0] = mSetVoltageDerivativeToZero ? CHASTE_CONST(0.0) : (var_x0 * (-mParameters[2] - var_x1 * var_chaste_interface__sodium_channel_h_gate__h - CHASTE_MATH::Pow(var_chaste_interface__potassium_channel_n_gate__n, 4) * mParameters[3])); + rJacobian[1] = (1 - var_chaste_interface__sodium_channel_m_gate__m) * ((var_x5) ? (CHASTE_CONST(0.050000000000000003)) : (-CHASTE_CONST(0.10000000000000001) * var_x8 - CHASTE_CONST(0.10000000000000001) * var_x4 * var_x6 / CHASTE_MATH::Pow(var_x7, 2))) + CHASTE_CONST(0.22222222222222221) * var_x9 * var_chaste_interface__sodium_channel_m_gate__m; + rJacobian[2] = -CHASTE_CONST(0.050000000000000003) * var_x10 * (CHASTE_CONST(0.070000000000000007) - CHASTE_CONST(0.070000000000000007) * var_chaste_interface__sodium_channel_h_gate__h) - CHASTE_CONST(0.10000000000000001) * var_x11 * var_chaste_interface__sodium_channel_h_gate__h / CHASTE_MATH::Pow(var_x12, 2); + rJacobian[3] = (1 - var_chaste_interface__potassium_channel_n_gate__n) * ((var_x14) ? (CHASTE_CONST(0.0050000000000000001)) : (-CHASTE_CONST(0.01) * var_x17 - CHASTE_CONST(0.01) * var_x13 * var_x15 / CHASTE_MATH::Pow(var_x16, 2))) - CHASTE_CONST(0.0015625000000000001) * var_x18 * var_chaste_interface__potassium_channel_n_gate__n; + rJacobian[4] = mSetVoltageDerivativeToZero ? CHASTE_CONST(0.0) : (-3 * var_x2 * CHASTE_MATH::Pow(var_chaste_interface__sodium_channel_m_gate__m, 2) * mParameters[1] * var_chaste_interface__sodium_channel_h_gate__h); + rJacobian[5] = -((var_x5) ? (CHASTE_CONST(3.5) + CHASTE_CONST(0.050000000000000003) * var_chaste_interface__membrane__V) : (-var_x4 * var_x8)) - 4 * var_x9; + rJacobian[6] = mSetVoltageDerivativeToZero ? CHASTE_CONST(0.0) : (-var_x1 * var_x2); + rJacobian[7] = -1 / var_x12 - CHASTE_CONST(0.070000000000000007) * var_x10; + rJacobian[8] = mSetVoltageDerivativeToZero ? CHASTE_CONST(0.0) : (-4 * var_x0 * CHASTE_MATH::Pow(var_chaste_interface__potassium_channel_n_gate__n, 3) * (87 + var_chaste_interface__membrane__V) * mParameters[3]); + rJacobian[9] = -((var_x14) ? (CHASTE_CONST(0.42499999999999999) + CHASTE_CONST(0.0050000000000000001) * var_chaste_interface__membrane__V) : (-CHASTE_CONST(0.099999999999999992) * var_x13 * var_x17)) - CHASTE_CONST(0.125) * var_x18; +} + +#include "ChasteCpuMacros.hpp" +#endif // CELLHODGKIN_HUXLEY_SQUID_AXON_MODEL_1952_MODIFIEDFROMCELLMLCVODEKERNELS_HPP_ \ No newline at end of file diff --git a/chaste_codegen/templates/BE/kernels/ComputeOneStepExceptVoltageDevice b/chaste_codegen/templates/BE/kernels/ComputeOneStepExceptVoltageDevice index b773b27bb..10d46a35f 100644 --- a/chaste_codegen/templates/BE/kernels/ComputeOneStepExceptVoltageDevice +++ b/chaste_codegen/templates/BE/kernels/ComputeOneStepExceptVoltageDevice @@ -1,4 +1,3 @@ -/* Apply all closed-form backward-Euler updates for the "linear" gating variables */ template DEVICE void {{class_name}}::SolveClosedFormVarsDevice(ValueType rY[{{class_name}}::TOTAL_SIZE], @@ -19,24 +18,25 @@ void {{class_name}}::SolveClosedFormVarsDevice(ValueType rY[{{class_name}}::TOTA rY[{{deriv.state_var_index}}] = ({{deriv.var}} + (({{deriv.g}}) * mDt)) / (1.0 - (({{deriv.h}}) * mDt)); {%- endfor %} } -{% if nonlinear_state_vars|length > 0 %}/* Gather non-linear variables from state and put them into guess for Newton solve */ +{% if nonlinear_state_vars|length > 0 %} template DEVICE void {{class_name}}::FillInitialGuessDevice(ValueType _guess[{{class_name}}::NONLINEAR_SIZE], const ValueType rY[{{class_name}}::TOTAL_SIZE]) { - {% if nonlinear_state_vars|length > 0 %} {# We do not need this if really, if it is empty we just get no op -#} - {% for state_var in nonlinear_state_vars %}_guess[{{ loop.index0 }}] = rY[{{ state_var.state_var_index }}];{% endfor %} + {% if nonlinear_state_vars|length > 0 -%}{# We do not need this if really, if it is empty we just get no op -#} + {% for state_var in nonlinear_state_vars %}_guess[{{ loop.index0 }}] = rY[{{ state_var.state_var_index }}]; + {%- endfor %} {%- endif %} } -/* After Newton solve, scatter the solved nonlinear variables back into y */ template DEVICE void {{class_name}}::ScatterSolutionDevice(const ValueType _guess[{{class_name}}::NONLINEAR_SIZE], ValueType rY[{{class_name}}::TOTAL_SIZE]) { {% if nonlinear_state_vars|length > 0 -%} - {% for state_var in nonlinear_state_vars %}rY[{{ state_var.state_var_index }}] = _guess[{{ loop.index0 }}];{% endfor %} + {% for state_var in nonlinear_state_vars %}rY[{{ state_var.state_var_index }}] = _guess[{{ loop.index0 }}]; + {%- endfor %} {%- endif %} }{% endif %} \ No newline at end of file diff --git a/chaste_codegen/templates/BE/kernels/ComputeResidualDevice b/chaste_codegen/templates/BE/kernels/ComputeResidualDevice index 02a811628..bea60a2d8 100644 --- a/chaste_codegen/templates/BE/kernels/ComputeResidualDevice +++ b/chaste_codegen/templates/BE/kernels/ComputeResidualDevice @@ -1,5 +1,4 @@ {% if nonlinear_state_vars|length > 0 -%} -/* Compute residual of non-linear system for the current guess */ template DEVICE void {{class_name}}::ComputeResidualDevice(ValueType {{free_variable.var_name}}, diff --git a/chaste_codegen/templates/BE/kernels/UpdateTransmembranePotentialDevice b/chaste_codegen/templates/BE/kernels/UpdateTransmembranePotentialDevice index 80dabcf81..e9bab9ea9 100644 --- a/chaste_codegen/templates/BE/kernels/UpdateTransmembranePotentialDevice +++ b/chaste_codegen/templates/BE/kernels/UpdateTransmembranePotentialDevice @@ -1,4 +1,3 @@ -/* Update transmembrane potential (GPU) */ template DEVICE void {{class_name}}::UpdateTransmembranePotentialDevice(ValueType {{free_variable.var_name}}, diff --git a/chaste_codegen/templates/Cvode/kernels/EvaluateAnalyticJacobianDevice b/chaste_codegen/templates/Cvode/kernels/EvaluateAnalyticJacobianDevice index 1f1b45464..d507c6301 100644 --- a/chaste_codegen/templates/Cvode/kernels/EvaluateAnalyticJacobianDevice +++ b/chaste_codegen/templates/Cvode/kernels/EvaluateAnalyticJacobianDevice @@ -1,16 +1,16 @@ {%- if jacobian_equations|length > 0 %} - template - DEVICE - void {{class_name}}::EvaluateAnalyticJacobianDevice(ValueType {{free_variable.var_name}}, const ValueType *rY, ValueType *rDY, ValueType *rJacobian, ValueType *rTmp1, ValueType *rTmp2, ValueType *rTmp3, const unsigned nvars, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType *mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim) - { - {% for state_var in state_vars %} - {%- if state_var.in_jacobian %}double {{ state_var.var }} = {{state_var.rY_lookup_device}}; - // Units: {{state_var.units}}; Initial value: {{state_var.initial_value}} - {% endif %}{%- endfor %} - {% for equation in jacobian_equations_device %}const double {{equation.lhs}} = {{equation.rhs}}; - {% endfor %} - // Matrix entries{% for entry in jacobian_entries_device %} - rJacobian[{{entry.j}} * nvars + {{entry.i}}] = {% if membrane_voltage_index == entry.i %}mSetVoltageDerivativeToZero ? 0.0 : ({{entry.entry}});{%- else %}{{entry.entry}};{%- endif %} - {%- endfor %} - } -{% endif -%} \ No newline at end of file +template +DEVICE +void {{class_name}}::EvaluateAnalyticJacobianDevice(ValueType {{free_variable.var_name}}, const ValueType *rY, ValueType *rDY, ValueType *rJacobian, ValueType *rTmp1, ValueType *rTmp2, ValueType *rTmp3, const unsigned nvars, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType *mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim) +{ + {% for state_var in state_vars %} + {%- if state_var.in_jacobian %}double {{ state_var.var }} = {{state_var.rY_lookup_device}}; + // Units: {{state_var.units}}; Initial value: {{state_var.initial_value}} + {% endif %}{%- endfor %} + {% for equation in jacobian_equations_device %}const double {{equation.lhs}} = {{equation.rhs}}; + {% endfor %} + // Matrix entries{% for entry in jacobian_entries_device %} + rJacobian[{{entry.j}} * nvars + {{entry.i}}] = {% if membrane_voltage_index == entry.i %}mSetVoltageDerivativeToZero ? CHASTE_CONST(0.0) : ({{entry.entry}});{%- else %}{{entry.entry}};{%- endif %} + {%- endfor %} +} +{%- endif -%} \ No newline at end of file diff --git a/chaste_codegen/templates/Cvode/kernels/EvaluateSparseAnalyticJacobianDevice b/chaste_codegen/templates/Cvode/kernels/EvaluateSparseAnalyticJacobianDevice index 497886ede..ac672e565 100644 --- a/chaste_codegen/templates/Cvode/kernels/EvaluateSparseAnalyticJacobianDevice +++ b/chaste_codegen/templates/Cvode/kernels/EvaluateSparseAnalyticJacobianDevice @@ -1,16 +1,16 @@ -{%- if jacobian_equations|length > 0 %} - template - DEVICE - void {{class_name}}::EvaluateSparseAnalyticJacobianDevice(ValueType {{free_variable.var_name}}, const ValueType *rY, ValueType *rDY, ValueType *rJacobian, ValueType *rTmp1, ValueType *rTmp2, ValueType *rTmp3, const unsigned nvars, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType *mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim) - { - {% for state_var in state_vars %} - {%- if state_var.in_jacobian %}double {{ state_var.var }} = {{state_var.rY_lookup_device}}; - // Units: {{state_var.units}}; Initial value: {{state_var.initial_value}} - {% endif %}{%- endfor %} - {% for equation in jacobian_equations_device %}const double {{equation.lhs}} = {{equation.rhs}}; - {% endfor %} - // Matrix entries{% for entry in sparse_jacobian_entries %} - rJacobian[ {{ loop.index0 }} ] = {% if membrane_voltage_index == entry.i %}mSetVoltageDerivativeToZero ? CHASTE_CONST(0.0) : ({{ entry.entry }});{% else %}{{ entry.entry }};{% endif %} - {% endfor -%} - } -{% endif -%} \ No newline at end of file +{%- if jacobian_equations|length > 0 -%} +template +DEVICE +void {{class_name}}::EvaluateSparseAnalyticJacobianDevice(ValueType {{free_variable.var_name}}, const ValueType *rY, ValueType *rDY, ValueType *rJacobian, ValueType *rTmp1, ValueType *rTmp2, ValueType *rTmp3, const unsigned nvars, const ValueType mSetVoltageDerivativeToZero, const ValueType mFixedVoltage, const ValueType *mParameters, const ValueType capacitance, const DeviceStimulusFunctor stim) +{ + {% for state_var in state_vars %} + {%- if state_var.in_jacobian %}double {{ state_var.var }} = {{state_var.rY_lookup_device}}; + // Units: {{state_var.units}}; Initial value: {{state_var.initial_value}} + {% endif %}{%- endfor %} + {% for equation in jacobian_equations_device %}const double {{equation.lhs}} = {{equation.rhs}}; + {% endfor %} + // Matrix entries{% for entry in jacobian_entries_device %} + rJacobian[{{loop.index0}}] = {% if membrane_voltage_index == entry.i %}mSetVoltageDerivativeToZero ? CHASTE_CONST(0.0) : ({{entry.entry}});{%- else %}{{entry.entry}};{%- endif %} + {%- endfor %} +} +{%- endif -%} \ No newline at end of file diff --git a/chaste_codegen/templates/Shared/kernels/EvaluateYDerivativesDevice b/chaste_codegen/templates/Shared/kernels/EvaluateYDerivativesDevice index 56283b3aa..8a3acd682 100644 --- a/chaste_codegen/templates/Shared/kernels/EvaluateYDerivativesDevice +++ b/chaste_codegen/templates/Shared/kernels/EvaluateYDerivativesDevice @@ -13,20 +13,21 @@ void {{class_name}}::EvaluateYDerivativesDevice(ValueType {{free_variable.var_na {%- for deriv in y_derivative_equations_device %}{%- if deriv.in_eqs_excl_voltage %} const double {{deriv.lhs}} = {{deriv.rhs}}; // {{deriv.units}}{%- endif %} {%- endfor %} + if (mSetVoltageDerivativeToZero) { {% for deriv in y_derivative_equations_device %}{%- if deriv.is_voltage %}{{ deriv.lhs }} = 0.0;{%- endif %}{%- endfor %} } else { - {% for deriv in y_derivative_equations_device %} - {%- if not deriv.in_eqs_excl_voltage %} - {# We treat everything as a standard derivative here, omitting Data Clamp branches #} - {% if not deriv.is_voltage %}const double {% endif %}{{ deriv.lhs }} = {{ deriv.rhs }}; - {%- endif %} + {% for deriv in y_derivative_equations_device -%} + {% if not deriv.in_eqs_excl_voltage -%} + {# We treat everything as a standard derivative here, omitting Data Clamp branches -#} + {% if not deriv.is_voltage %}const double {% endif %}{{ deriv.lhs }} = {{ deriv.rhs }}; + {%- endif %} {%- endfor %} } {% for deriv in y_derivatives %} - rDY[ {{loop.index0}} ] = {{deriv}}; + rDY[{{loop.index0}}] = {{deriv}}; {%- endfor %} } \ No newline at end of file diff --git a/chaste_codegen/templates/backward_euler_kernels.hpp b/chaste_codegen/templates/backward_euler_kernels.hpp index c960d645f..77721ff19 100644 --- a/chaste_codegen/templates/backward_euler_kernels.hpp +++ b/chaste_codegen/templates/backward_euler_kernels.hpp @@ -1,6 +1,7 @@ {% include "Shared/kernels/header_comments" %} {% include "Shared/kernels/includes" %} + {% include "BE/kernels/ComputeOneStepExceptVoltageDevice" %} {# (file contains SolveClosedFormVars, FillInitialGuess, ScatterSolution) #} {% if nonlinear_state_vars|length > 0 -%} diff --git a/chaste_codegen/templates/cvode_model_kernels.hpp b/chaste_codegen/templates/cvode_model_kernels.hpp index a74f2f153..ddd43e60d 100644 --- a/chaste_codegen/templates/cvode_model_kernels.hpp +++ b/chaste_codegen/templates/cvode_model_kernels.hpp @@ -1,8 +1,8 @@ {% include "Shared/kernels/header_comments" %} {% include "Shared/kernels/includes" %} -{% include "Shared/kernels/EvaluateYDerivativesDevice"%} +{% include "Shared/kernels/EvaluateYDerivativesDevice"%} {% include "Cvode/kernels/EvaluateAnalyticJacobianDevice" %} {% include "Cvode/kernels/EvaluateSparseAnalyticJacobianDevice" %} diff --git a/chaste_codegen/tests/conftest.py b/chaste_codegen/tests/conftest.py index 67fb89e81..25ec54ead 100644 --- a/chaste_codegen/tests/conftest.py +++ b/chaste_codegen/tests/conftest.py @@ -106,20 +106,20 @@ def compare_model_against_reference(chaste_model, tmp_path, model_type, referenc """ tmp_path = str(tmp_path) expected_path = os.path.join(TESTS_FOLDER, reference_folder, model_type, chaste_model.file_name) + extensions = list(chaste_model.DEFAULT_EXTENSIONS) + if chaste_model.will_generate_kernels: + extensions.append('Kernels.hpp') # Write generated files # Compare against reference - # Certain model types will also generate a kernels file, giving us 1 extra generated file - if model_type.startswith('BE') or 'Cvode' in model_type or 'CVODE' in model_type: - expected_len = len(chaste_model.DEFAULT_EXTENSIONS) + 1 - else: - expected_len = len(chaste_model.DEFAULT_EXTENSIONS) + expected_len = len(extensions) assert len(chaste_model.generated_code) == expected_len assert len(chaste_model.generated_code) > 0 - for ext, code in zip(chaste_model.DEFAULT_EXTENSIONS, chaste_model.generated_code): + for ext, code in zip(extensions, chaste_model.generated_code): gen_file_path = os.path.join(tmp_path, chaste_model.file_name + ext) write_file(gen_file_path, code) compare_file_against_reference(expected_path + ext, gen_file_path) +# TODO: Run this to generate 'golden' kernels and then cp them from tmp to chaste_reference_models def compare_file_against_reference(reference_file, file): """ Check a model's generated files against given reference files diff --git a/chaste_codegen/tests/test_codegen.py b/chaste_codegen/tests/test_codegen.py index be6d18981..baaddb285 100644 --- a/chaste_codegen/tests/test_codegen.py +++ b/chaste_codegen/tests/test_codegen.py @@ -199,7 +199,7 @@ def test_BE(tmp_path, model): LOGGER.info('Converting: BE: ' + class_name + '\n') # Generate chaste code with cg.BackwardEulerModel(cache_model(model['model']), model['model_name_from_file'], - class_name=class_name) as chaste_model: + class_name=class_name, will_generate_kernels=True) as chaste_model: chaste_model.generate_chaste_code() # Compare against reference compare_model_against_reference(chaste_model, tmp_path, 'BE') @@ -212,7 +212,8 @@ def test_Cvode_jacobian(tmp_path, model): LOGGER.info('Converting: Cvode: ' + class_name + ' with jacobian\n') # Generate chaste code with cg.CvodeChasteModel(cache_model(model['model']), model['model_name_from_file'], - class_name=class_name, use_analytic_jacobian=True) as chaste_model: + class_name=class_name, use_analytic_jacobian=True, + will_generate_kernels=True) as chaste_model: chaste_model.generate_chaste_code() # Compare against reference compare_model_against_reference(chaste_model, tmp_path, 'Cvode_with_jacobian') @@ -225,7 +226,7 @@ def test_Cvode(tmp_path, model): LOGGER.info('Converting: Cvode: ' + class_name + '\n') # Generate chaste code with cg.CvodeChasteModel(cache_model(model['model']), model['model_name_from_file'], - class_name=class_name) as chaste_model: + class_name=class_name, will_generate_kernels=True) as chaste_model: chaste_model.generate_chaste_code() # Compare against reference compare_model_against_reference(chaste_model, tmp_path, 'Cvode') From b4a65888bc0d395c5d4297b32f0ea9968117487d Mon Sep 17 00:00:00 2001 From: Joseph Simkin Date: Mon, 2 Mar 2026 21:32:04 +0000 Subject: [PATCH 28/28] Fixed formatting --- chaste_codegen/__init__.py | 2 +- chaste_codegen/_chaste_printer.py | 16 +++------------- chaste_codegen/_chaste_printer_common.py | 2 +- chaste_codegen/_command_line_script.py | 2 +- chaste_codegen/_load_template.py | 2 +- chaste_codegen/_lookup_tables.py | 2 +- chaste_codegen/chaste_model.py | 17 +++++++++-------- chaste_codegen/cvode_chaste_model.py | 8 ++++---- chaste_codegen/rush_larsen_c.py | 10 +++++----- chaste_codegen/tests/conftest.py | 1 - chaste_codegen/tests/test_printer.py | 3 ++- 11 files changed, 28 insertions(+), 37 deletions(-) diff --git a/chaste_codegen/__init__.py b/chaste_codegen/__init__.py index 581e15e78..6d324b39b 100644 --- a/chaste_codegen/__init__.py +++ b/chaste_codegen/__init__.py @@ -3,8 +3,8 @@ """ from cellmlmanip.parser import Transpiler -from ._chaste_printer_common import ChastePrinterCommon # noqa from ._chaste_printer import ChastePrinter # noqa +from ._chaste_printer_common import ChastePrinterCommon # noqa # # Load constants and version information # diff --git a/chaste_codegen/_chaste_printer.py b/chaste_codegen/_chaste_printer.py index fbafb1b3e..3a9aabdc2 100644 --- a/chaste_codegen/_chaste_printer.py +++ b/chaste_codegen/_chaste_printer.py @@ -1,13 +1,3 @@ -from cellmlmanip.printer import Printer -from sympy import ( - Mul, - Not, - Piecewise, - Pow, - Rational, - S, -) -from sympy.core.mul import _keep_coeff from sympy.printing import cxxcode from sympy.printing.precedence import precedence @@ -79,7 +69,7 @@ class ChastePrinter(ChastePrinterCommon): 'tanh': 'CHASTE_MATH::Tanh', 'sign': 'CHASTE_MATH::Sign', - + 'GetIntracellularAreaStimulus': 'CHASTE_STIM', 'HeartConfig::Instance()->GetCapacitance': 'CHASTE_CAP', 'GetExperimentalVoltageAtTimeT': 'CHASTE_EXP_VOLT' @@ -119,7 +109,7 @@ def _print_ordinary_pow(self, expr): def _print_float(self, expr): """ Handles ``float``s. All constants must be wrapped with a macro so that - generated code that ends up in a device kernel can easily be cast between + generated code that ends up in a device kernel can easily be cast between float and double as this has huge performance implications on device ChastePrinterCommon._print_Mul strips away - signs in the expression and then @@ -130,7 +120,7 @@ def _print_float(self, expr): # print integers as int if they are between min & max int in c++ if expr.is_integer() and C_MIN_INT < expr < C_MAX_INT: return cxxcode(int(expr), standard='C++11') - + num_str = cxxcode(float(expr), standard='C++11') if num_str.startswith('-'): return f'-CHASTE_CONST({num_str[1:]})' diff --git a/chaste_codegen/_chaste_printer_common.py b/chaste_codegen/_chaste_printer_common.py index 12a05b885..2f36bc0dd 100644 --- a/chaste_codegen/_chaste_printer_common.py +++ b/chaste_codegen/_chaste_printer_common.py @@ -233,4 +233,4 @@ def _print_Mul(self, expr): return a_str + ' / ' + (b_str if len(b) == 1 else '(' + b_str + ')') def _print_Not(self, expr): - return '!(' + self._print(Not(expr)) + ')' \ No newline at end of file + return '!(' + self._print(Not(expr)) + ')' diff --git a/chaste_codegen/_command_line_script.py b/chaste_codegen/_command_line_script.py index bbc5dadbd..3bf9079e2 100644 --- a/chaste_codegen/_command_line_script.py +++ b/chaste_codegen/_command_line_script.py @@ -198,7 +198,7 @@ def process_command_line(): outfile_path, model_name_from_file, outfile_base, ext = \ get_outfile_parts(args.outfile, args.output_dir, args.cellml_file, translator_class) - # Must make a copy of ext so that if we modify the extensions here, this is the only translator that gets those modifications + # Must make a copy of ext else we will later try to append to the actual DEFAULT_EXTENSIONS ext = list(ext) if ext else list(translator_class.DEFAULT_EXTENSIONS) # Make sure we generate GPU kernels for models that provide kernel templates (if they are wanted) diff --git a/chaste_codegen/_load_template.py b/chaste_codegen/_load_template.py index 90bb1c68f..9a04b190b 100644 --- a/chaste_codegen/_load_template.py +++ b/chaste_codegen/_load_template.py @@ -52,4 +52,4 @@ def load_template(*name): log.warning('Paths to templates must be specified as posix paths.') env = _jinja_environment() - return env.get_template(path) \ No newline at end of file + return env.get_template(path) diff --git a/chaste_codegen/_lookup_tables.py b/chaste_codegen/_lookup_tables.py index 60befe9e4..96a969838 100644 --- a/chaste_codegen/_lookup_tables.py +++ b/chaste_codegen/_lookup_tables.py @@ -55,7 +55,7 @@ class LookupTables: """ Holds information about lookuptables and methods to analyse the model for lookup tables. Note: the use of CHASTE_CONST and CHASTE_MATH inside of lookup tables is not completely tested. - There may be a mixture of floats wrapped in macros and some not wrapped in macros here (such as + There may be a mixture of floats wrapped in macros and some not wrapped in macros here (such as CHASTE_CONST(3.2) vs 3.2 by itself) because lookup tables have not been implemented on device. This will work as long as the macro definitions in Chaste remain sensible, however if we do implement lookup tables on device, we will want to ensure that we do wrap all literals with diff --git a/chaste_codegen/chaste_model.py b/chaste_codegen/chaste_model.py index f8dda016b..408abab92 100644 --- a/chaste_codegen/chaste_model.py +++ b/chaste_codegen/chaste_model.py @@ -49,12 +49,12 @@ def __enter__(self): """ Pre analysis preparation. Required to be able to use model in context (with). Defined for overwriting in sub-classes if pre-processing is needed to use the model for code generation. """ return self - + @contextmanager def _device_mode(self): - """ Creates an _is_currently_generating_kernel_code context where we can run methods under 'with' and if the method contains - any branches like: if self._is_currently_generating_kernel_code:, the if part will run when the method is called in this context - + """ Creates an _is_currently_generating_kernel_code context where we can run methods under 'with' and if the + method contains any branches like: if self._is_currently_generating_kernel_code:, the if part will run when + the method is called in this context Example: with self._device_mode(): @@ -67,10 +67,10 @@ def _device_mode(self): yield finally: self._is_currently_generating_kernel_code = original_state - + def _in_device_mode(self, func): """ Thin wrapper to allow use of the _is_currently_generating_kernel_code context in one line - + Example: self._in_device_mode(lambda: self._format_derivative_equations(self._derivative_equations)) @@ -103,7 +103,7 @@ def __init__(self, model, file_name, **kwargs): self._model = model - # By default we are generating CPU code, the context manager handles setting and unsetting this for device generation + # The context manager handles setting and unsetting this for kernel code generation self._is_currently_generating_kernel_code = False self.will_generate_kernels = kwargs.get('will_generate_kernels', False) @@ -182,7 +182,8 @@ def __init__(self, model, file_name, **kwargs): 'ionic_vars': self._format_ionic_vars(), 'y_derivatives': self._format_y_derivatives(), 'y_derivative_equations': self._format_derivative_equations(self._derivative_equations), - 'y_derivative_equations_device': self._in_device_mode(lambda: self._format_derivative_equations(self._derivative_equations)), + 'y_derivative_equations_device': + self._in_device_mode(lambda: self._format_derivative_equations(self._derivative_equations)), 'free_variable': self._format_free_variable(), 'ode_system_information': self._format_system_info(), 'named_attributes': self._format_named_attributes(), diff --git a/chaste_codegen/cvode_chaste_model.py b/chaste_codegen/cvode_chaste_model.py index e9d150ecf..d9739ae23 100644 --- a/chaste_codegen/cvode_chaste_model.py +++ b/chaste_codegen/cvode_chaste_model.py @@ -49,13 +49,13 @@ def __init__(self, model, file_name, **kwargs): jac_eqs_dev, jac_entries_dev = self._in_device_mode(self._print_jacobian) self._vars_for_template['jacobian_equations_device'] = jac_eqs_dev - self._vars_for_template['jacobian_entries_device'] = jac_entries_dev + self._vars_for_template['jacobian_entries_device'] = jac_entries_dev # TODO: not sure if we still need this sort or if the entries are guaranteed to be in this order anyway sorted_jac_entries = sorted(jac_entries_dev, key=lambda entry: (entry['i'], entry['j'])) n_vars = len(self._state_vars) - + # Build row_ptr (size n_vars + 1) row_counts = [0] * n_vars for entry in sorted_jac_entries: @@ -63,10 +63,10 @@ def __init__(self, model, file_name, **kwargs): row_ptr = [0] for count in row_counts: row_ptr.append(row_ptr[-1] + count) - + # Build col_ind (size num_entries) col_ind = [entry['j'] for entry in sorted_jac_entries] - + self._vars_for_template['sparse_jacobian_entries'] = sorted_jac_entries self._vars_for_template['sparse_rowptr'] = row_ptr self._vars_for_template['sparse_colind'] = col_ind diff --git a/chaste_codegen/rush_larsen_c.py b/chaste_codegen/rush_larsen_c.py index 303aa2103..2cc5c9065 100644 --- a/chaste_codegen/rush_larsen_c.py +++ b/chaste_codegen/rush_larsen_c.py @@ -137,11 +137,11 @@ def _add_printers(self, lookup_table_function=lambda e: None): # Print modifiable parameters as mParameters[index] self._printer = \ cg.ChastePrinterCommon(lambda variable: - get_variable_name(variable, variable in self._in_interface) - if variable not in self._model.modifiable_parameters - else self._print_modifiable_parameters(variable), - lambda deriv: get_variable_name(deriv), - lookup_table_function) + get_variable_name(variable, variable in self._in_interface) + if variable not in self._model.modifiable_parameters + else self._print_modifiable_parameters(variable), + lambda deriv: get_variable_name(deriv), + lookup_table_function) # Printer for printing variable in comments e.g. for ode system information self._name_printer = cg.ChastePrinterCommon(lambda variable: get_variable_name(variable)) diff --git a/chaste_codegen/tests/conftest.py b/chaste_codegen/tests/conftest.py index 25ec54ead..29daf8bfe 100644 --- a/chaste_codegen/tests/conftest.py +++ b/chaste_codegen/tests/conftest.py @@ -119,7 +119,6 @@ def compare_model_against_reference(chaste_model, tmp_path, model_type, referenc write_file(gen_file_path, code) compare_file_against_reference(expected_path + ext, gen_file_path) -# TODO: Run this to generate 'golden' kernels and then cp them from tmp to chaste_reference_models def compare_file_against_reference(reference_file, file): """ Check a model's generated files against given reference files diff --git a/chaste_codegen/tests/test_printer.py b/chaste_codegen/tests/test_printer.py index 98d094919..53755c6ee 100644 --- a/chaste_codegen/tests/test_printer.py +++ b/chaste_codegen/tests/test_printer.py @@ -73,7 +73,8 @@ def test_piecewise_expressions(self, printer, x, y, z): def testabs_(self, printer, x, y): assert printer.doprint(sp.Abs(x + y)) == 'CHASTE_MATH::Abs(x + y)' - assert printer.doprint(sp.Abs(sp.Float('3.2', 17), evaluate=False)) == 'CHASTE_MATH::Abs(CHASTE_CONST(3.2000000000000002))' + assert printer.doprint(sp.Abs(sp.Float('3.2', 17), evaluate=False)) \ + == 'CHASTE_MATH::Abs(CHASTE_CONST(3.2000000000000002))' assert printer.doprint(sp.Abs(-3, evaluate=False)) == 'CHASTE_MATH::Abs(-3)' def test_trig_functions(self, printer, x):