
    void {{class_name}}::UpdateTransmembranePotential(double {{free_variable.var_name}})
    {
        {{vector_decl}} rY = rGetStateVariables();
        const unsigned v_index = GetVoltageIndex();
        const double delta = 1e-8;
        const double yinit = rY[v_index];

        {% for state_var in state_vars %}{%- if state_var.in_voltage_deriv %}double {{ 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" %}
        // 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_membrane_voltage %}
        {% if not deriv.is_voltage%}const double {% endif %}{{deriv.lhs}} = {{deriv.rhs}}; // {{deriv.units}}{%- endif %}
        {%- endfor %}

        double evalF = {% for deriv in y_derivative_equations %}{%- if deriv.is_voltage%}{{deriv.lhs}};{%- endif %}{%- endfor %}
        mEvalF[{{membrane_voltage_index}}] = {% for deriv in y_derivative_equations %}{%- if deriv.is_voltage%}{{deriv.lhs}};{%- endif %}{%- endfor %}
        double partialF = EvaluatePartialDerivative{{membrane_voltage_index}}({{free_variable.var_name}}, rY, delta, true);
        if (fabs(partialF) < delta)
        {
            rY[v_index] += 0.5*evalF*mDt;
        }
        else
        {
            rY[v_index] += (evalF/partialF)*(exp(partialF*0.5*mDt)-1.0);
        }

        rY[v_index] = yinit;
        evalF = EvaluateYDerivative{{membrane_voltage_index}}({{free_variable.var_name}}, rY);
        mEvalF[{{membrane_voltage_index}}] = evalF;
        partialF = EvaluatePartialDerivative{{membrane_voltage_index}}({{free_variable.var_name}}, rY, delta, true);
        if (fabs(partialF) < delta)
        {
            rY[v_index] = yinit + evalF*mDt;
        }
        else
        {
            rY[v_index] = yinit + (evalF/partialF)*(exp(partialF*mDt)-1.0);
        }
    }