Generated Code

The following is matlab code generated by the CellML API from this CellML file. (Back to language selection)

The raw code is available.

function [VOI, STATES, ALGEBRAIC, CONSTANTS] = mainFunction()
    % This is the "main function".  In Matlab, things work best if you rename this function to match the filename.
   [VOI, STATES, ALGEBRAIC, CONSTANTS] = solveModel();
end

function [algebraicVariableCount] = getAlgebraicVariableCount() 
    % Used later when setting a global variable with the number of algebraic variables.
    % Note: This is not the "main method".  
    algebraicVariableCount =107;
end
% There are a total of 43 entries in each of the rate and state variable arrays.
% There are a total of 85 entries in the constant variable array.
%

function [VOI, STATES, ALGEBRAIC, CONSTANTS] = solveModel()
    % Create ALGEBRAIC of correct size
    global algebraicVariableCount;  algebraicVariableCount = getAlgebraicVariableCount();
    % Initialise constants and state variables
    [INIT_STATES, CONSTANTS] = initConsts;

    % Set timespan to solve over 
    tspan = [0, 10];

    % Set numerical accuracy options for ODE solver
    options = odeset('RelTol', 1e-06, 'AbsTol', 1e-06, 'MaxStep', 1);

    % Solve model with ODE solver
    [VOI, STATES] = ode15s(@(VOI, STATES)computeRates(VOI, STATES, CONSTANTS), tspan, INIT_STATES, options);

    % Compute algebraic variables
    [RATES, ALGEBRAIC] = computeRates(VOI, STATES, CONSTANTS);
    ALGEBRAIC = computeAlgebraic(ALGEBRAIC, CONSTANTS, STATES, VOI);

    % Plot state variables against variable of integration
    [LEGEND_STATES, LEGEND_ALGEBRAIC, LEGEND_VOI, LEGEND_CONSTANTS] = createLegends();
    figure();
    plot(VOI, STATES);
    xlabel(LEGEND_VOI);
    l = legend(LEGEND_STATES);
    set(l,'Interpreter','none');
end

function [LEGEND_STATES, LEGEND_ALGEBRAIC, LEGEND_VOI, LEGEND_CONSTANTS] = createLegends()
    LEGEND_STATES = ''; LEGEND_ALGEBRAIC = ''; LEGEND_VOI = ''; LEGEND_CONSTANTS = '';
    LEGEND_CONSTANTS(:,59) = strpad('Aj_nj in component cell (um2)');
    LEGEND_CONSTANTS(:,1) = strpad('BCa in component calcium (mM)');
    LEGEND_CONSTANTS(:,2) = strpad('CSQN in component calcium (mM)');
    LEGEND_STATES(:,1) = strpad('CaSR1 in component calcium (mM)');
    LEGEND_STATES(:,2) = strpad('CaSR2 in component calcium (mM)');
    LEGEND_STATES(:,3) = strpad('CaSR3 in component calcium (mM)');
    LEGEND_STATES(:,4) = strpad('CaSR4 in component calcium (mM)');
    LEGEND_STATES(:,5) = strpad('Cai1 in component calcium (mM)');
    LEGEND_STATES(:,6) = strpad('Cai2 in component calcium (mM)');
    LEGEND_STATES(:,7) = strpad('Cai3 in component calcium (mM)');
    LEGEND_STATES(:,8) = strpad('Cai4 in component calcium (mM)');
    LEGEND_STATES(:,9) = strpad('Cass in component calcium (mM)');
    LEGEND_CONSTANTS(:,3) = strpad('DCa in component calcium (m2_per_s_times_1e_minus_12)');
    LEGEND_CONSTANTS(:,4) = strpad('DCaBm in component calcium (m2_per_s_times_1e_minus_12)');
    LEGEND_CONSTANTS(:,5) = strpad('DCaSR in component calcium (m2_per_s_times_1e_minus_12)');
    LEGEND_CONSTANTS(:,6) = strpad('F in component phys (C_per_mol)');
    LEGEND_ALGEBRAIC(:,59) = strpad('ICaL in component ical (pA)');
    LEGEND_ALGEBRAIC(:,64) = strpad('ICaP in component icap (pA)');
    LEGEND_ALGEBRAIC(:,82) = strpad('ICab in component icab (pA)');
    LEGEND_ALGEBRAIC(:,72) = strpad('INaCa in component inaca (pA)');
    LEGEND_ALGEBRAIC(:,76) = strpad('JCa1 in component calcium (kat_times_1e_minus_12)');
    LEGEND_ALGEBRAIC(:,77) = strpad('JCa2 in component calcium (kat_times_1e_minus_12)');
    LEGEND_ALGEBRAIC(:,78) = strpad('JCa3 in component calcium (kat_times_1e_minus_12)');
    LEGEND_ALGEBRAIC(:,49) = strpad('JCa4 in component calcium (kat_times_1e_minus_12)');
    LEGEND_ALGEBRAIC(:,94) = strpad('JCass in component calcium (kat_times_1e_minus_12)');
    LEGEND_ALGEBRAIC(:,73) = strpad('JSRCa1 in component calcium (kat_times_1e_minus_12)');
    LEGEND_ALGEBRAIC(:,74) = strpad('JSRCa2 in component calcium (kat_times_1e_minus_12)');
    LEGEND_ALGEBRAIC(:,75) = strpad('JSRCa3 in component calcium (kat_times_1e_minus_12)');
    LEGEND_ALGEBRAIC(:,92) = strpad('JSRCa4 in component calcium (kat_times_1e_minus_12)');
    LEGEND_ALGEBRAIC(:,1) = strpad('JSRCaleak1 in component calcium (kat_times_1e_minus_12)');
    LEGEND_ALGEBRAIC(:,2) = strpad('JSRCaleak2 in component calcium (kat_times_1e_minus_12)');
    LEGEND_ALGEBRAIC(:,3) = strpad('JSRCaleak3 in component calcium (kat_times_1e_minus_12)');
    LEGEND_ALGEBRAIC(:,4) = strpad('JSRCaleakss in component calcium (kat_times_1e_minus_12)');
    LEGEND_ALGEBRAIC(:,65) = strpad('J_SERCASR1 in component serca (kat_times_1e_minus_12)');
    LEGEND_ALGEBRAIC(:,66) = strpad('J_SERCASR2 in component serca (kat_times_1e_minus_12)');
    LEGEND_ALGEBRAIC(:,67) = strpad('J_SERCASR3 in component serca (kat_times_1e_minus_12)');
    LEGEND_ALGEBRAIC(:,89) = strpad('J_SERCASRss in component serca (kat_times_1e_minus_12)');
    LEGEND_ALGEBRAIC(:,69) = strpad('J_bulkSERCA1 in component serca (kat_times_1e_minus_12)');
    LEGEND_ALGEBRAIC(:,70) = strpad('J_bulkSERCA2 in component serca (kat_times_1e_minus_12)');
    LEGEND_ALGEBRAIC(:,71) = strpad('J_bulkSERCA3 in component serca (kat_times_1e_minus_12)');
    LEGEND_ALGEBRAIC(:,91) = strpad('J_bulkSERCAss in component serca (kat_times_1e_minus_12)');
    LEGEND_ALGEBRAIC(:,32) = strpad('Jj_nj in component calcium (kat_times_1e_minus_12)');
    LEGEND_ALGEBRAIC(:,61) = strpad('Jrel1 in component ryr (kat_times_1e_minus_12)');
    LEGEND_ALGEBRAIC(:,62) = strpad('Jrel2 in component ryr (kat_times_1e_minus_12)');
    LEGEND_ALGEBRAIC(:,63) = strpad('Jrel3 in component ryr (kat_times_1e_minus_12)');
    LEGEND_ALGEBRAIC(:,87) = strpad('Jrelss in component ryr (kat_times_1e_minus_12)');
    LEGEND_CONSTANTS(:,7) = strpad('KdBCa in component calcium (mM)');
    LEGEND_CONSTANTS(:,8) = strpad('KdCSQN in component calcium (mM)');
    LEGEND_CONSTANTS(:,9) = strpad('KdSLhigh in component calcium (mM)');
    LEGEND_CONSTANTS(:,10) = strpad('KdSLlow in component calcium (mM)');
    LEGEND_CONSTANTS(:,11) = strpad('SLhigh in component calcium (mM)');
    LEGEND_CONSTANTS(:,12) = strpad('SLlow in component calcium (mM)');
    LEGEND_CONSTANTS(:,73) = strpad('VSR1 in component cell (nL)');
    LEGEND_CONSTANTS(:,78) = strpad('VSR2 in component cell (nL)');
    LEGEND_CONSTANTS(:,81) = strpad('VSR3 in component cell (nL)');
    LEGEND_CONSTANTS(:,84) = strpad('VSR4 in component cell (nL)');
    LEGEND_CONSTANTS(:,60) = strpad('Vnonjunct1 in component cell (nL)');
    LEGEND_CONSTANTS(:,72) = strpad('Vnonjunct2 in component cell (nL)');
    LEGEND_CONSTANTS(:,77) = strpad('Vnonjunct3 in component cell (nL)');
    LEGEND_CONSTANTS(:,80) = strpad('Vnonjunct4 in component cell (nL)');
    LEGEND_CONSTANTS(:,13) = strpad('Vss in component cell (nL)');
    LEGEND_ALGEBRAIC(:,29) = strpad('calcium_CaSR1_beta in component calcium (dimensionless)');
    LEGEND_ALGEBRAIC(:,30) = strpad('calcium_CaSR2_beta in component calcium (dimensionless)');
    LEGEND_ALGEBRAIC(:,31) = strpad('calcium_CaSR3_beta in component calcium (dimensionless)');
    LEGEND_ALGEBRAIC(:,50) = strpad('calcium_CaSR4_beta in component calcium (dimensionless)');
    LEGEND_ALGEBRAIC(:,51) = strpad('calcium_Cai1_beta in component calcium (dimensionless)');
    LEGEND_ALGEBRAIC(:,46) = strpad('calcium_Cai1_gamma in component calcium (dimensionless)');
    LEGEND_ALGEBRAIC(:,52) = strpad('calcium_Cai2_beta in component calcium (dimensionless)');
    LEGEND_ALGEBRAIC(:,47) = strpad('calcium_Cai2_gamma in component calcium (dimensionless)');
    LEGEND_ALGEBRAIC(:,53) = strpad('calcium_Cai3_beta in component calcium (dimensionless)');
    LEGEND_ALGEBRAIC(:,48) = strpad('calcium_Cai3_gamma in component calcium (dimensionless)');
    LEGEND_ALGEBRAIC(:,60) = strpad('calcium_Cai4_beta in component calcium (dimensionless)');
    LEGEND_ALGEBRAIC(:,54) = strpad('calcium_Cai4_gamma in component calcium (dimensionless)');
    LEGEND_ALGEBRAIC(:,55) = strpad('calcium_Cass_beta in component calcium (dimensionless)');
    LEGEND_ALGEBRAIC(:,83) = strpad('calcium_Cass_i_tot in component calcium (pA)');
    LEGEND_CONSTANTS(:,14) = strpad('dx in component cell (um)');
    LEGEND_CONSTANTS(:,15) = strpad('kSRleak in component calcium (hertz)');
    LEGEND_VOI = strpad('time in component engine (second)');
    LEGEND_CONSTANTS(:,61) = strpad('xj_nj in component cell (um)');
    LEGEND_CONSTANTS(:,16) = strpad('Cm in component cell (nF)');
    LEGEND_CONSTANTS(:,85) = strpad('Vcytosol in component cell (nL)');
    LEGEND_CONSTANTS(:,83) = strpad('Vnonjunct_Nai in component cell (nL)');
    LEGEND_CONSTANTS(:,17) = strpad('lcell in component cell (um)');
    LEGEND_CONSTANTS(:,18) = strpad('pi in component cell (dimensionless)');
    LEGEND_CONSTANTS(:,19) = strpad('rjunct in component cell (um)');
    LEGEND_CONSTANTS(:,62) = strpad('xj_nj_Nai in component cell (um)');
    LEGEND_CONSTANTS(:,20) = strpad('Cao in component extra (mM)');
    LEGEND_CONSTANTS(:,21) = strpad('Ko in component extra (mM)');
    LEGEND_CONSTANTS(:,22) = strpad('Nao in component extra (mM)');
    LEGEND_ALGEBRAIC(:,81) = strpad('ECa in component nernst (mV)');
    LEGEND_STATES(:,10) = strpad('V in component membrane (mV)');
    LEGEND_CONSTANTS(:,23) = strpad('gCab in component icab (nS)');
    LEGEND_CONSTANTS(:,24) = strpad('ECa_app in component ical (mV)');
    LEGEND_STATES(:,11) = strpad('d in component ical (hertz)');
    LEGEND_STATES(:,12) = strpad('f1 in component ical (hertz)');
    LEGEND_STATES(:,13) = strpad('f2 in component ical (hertz)');
    LEGEND_ALGEBRAIC(:,5) = strpad('f_inf in component ical (dimensionless)');
    LEGEND_STATES(:,14) = strpad('fca in component ical (hertz)');
    LEGEND_CONSTANTS(:,25) = strpad('gCaL in component ical (nS)');
    LEGEND_ALGEBRAIC(:,6) = strpad('ical_d_inf in component ical (dimensionless)');
    LEGEND_ALGEBRAIC(:,33) = strpad('ical_d_tau in component ical (second)');
    LEGEND_ALGEBRAIC(:,34) = strpad('ical_f1_tau in component ical (second)');
    LEGEND_ALGEBRAIC(:,35) = strpad('ical_f2_tau in component ical (second)');
    LEGEND_ALGEBRAIC(:,7) = strpad('ical_fca_inf in component ical (dimensionless)');
    LEGEND_CONSTANTS(:,26) = strpad('ical_fca_tau in component ical (second)');
    LEGEND_CONSTANTS(:,27) = strpad('kCa in component ical (mM)');
    LEGEND_CONSTANTS(:,28) = strpad('kCan in component ical (dimensionless)');
    LEGEND_CONSTANTS(:,29) = strpad('ICaPmax in component icap (pA)');
    LEGEND_CONSTANTS(:,30) = strpad('kCaP in component icap (mM)');
    LEGEND_ALGEBRAIC(:,84) = strpad('EK in component nernst (mV)');
    LEGEND_ALGEBRAIC(:,97) = strpad('ENa in component nernst (mV)');
    LEGEND_ALGEBRAIC(:,99) = strpad('If in component if (pA)');
    LEGEND_ALGEBRAIC(:,86) = strpad('IfK in component if (pA)');
    LEGEND_ALGEBRAIC(:,98) = strpad('IfNa in component if (pA)');
    LEGEND_CONSTANTS(:,31) = strpad('gIf in component if (nS)');
    LEGEND_ALGEBRAIC(:,8) = strpad('if_y_inf in component if (dimensionless)');
    LEGEND_ALGEBRAIC(:,36) = strpad('if_y_tau in component if (second)');
    LEGEND_STATES(:,15) = strpad('y in component if (hertz)');
    LEGEND_CONSTANTS(:,74) = strpad('FRT in component phys (per_mV)');
    LEGEND_ALGEBRAIC(:,88) = strpad('IK1 in component ik1 (pA)');
    LEGEND_CONSTANTS(:,63) = strpad('gK1 in component ik1 (nS)');
    LEGEND_ALGEBRAIC(:,90) = strpad('IKr in component ikr (pA)');
    LEGEND_CONSTANTS(:,32) = strpad('gKr in component ikr (nS)');
    LEGEND_ALGEBRAIC(:,9) = strpad('ikr_pa_inf in component ikr (dimensionless)');
    LEGEND_ALGEBRAIC(:,37) = strpad('ikr_pa_tau in component ikr (second)');
    LEGEND_STATES(:,16) = strpad('pa in component ikr (hertz)');
    LEGEND_ALGEBRAIC(:,68) = strpad('pi in component ikr (dimensionless)');
    LEGEND_ALGEBRAIC(:,93) = strpad('IKs in component iks (pA)');
    LEGEND_CONSTANTS(:,33) = strpad('gKs in component iks (nS)');
    LEGEND_ALGEBRAIC(:,10) = strpad('iks_n_inf in component iks (dimensionless)');
    LEGEND_ALGEBRAIC(:,38) = strpad('iks_n_tau in component iks (second)');
    LEGEND_STATES(:,17) = strpad('n in component iks (hertz)');
    LEGEND_ALGEBRAIC(:,95) = strpad('IKur in component ikur (pA)');
    LEGEND_CONSTANTS(:,64) = strpad('gKur in component ikur (nS)');
    LEGEND_ALGEBRAIC(:,11) = strpad('ikur_r_inf in component ikur (dimensionless)');
    LEGEND_ALGEBRAIC(:,39) = strpad('ikur_r_tau in component ikur (second)');
    LEGEND_ALGEBRAIC(:,12) = strpad('ikur_s_inf in component ikur (dimensionless)');
    LEGEND_ALGEBRAIC(:,40) = strpad('ikur_s_tau in component ikur (second)');
    LEGEND_STATES(:,18) = strpad('r in component ikur (hertz)');
    LEGEND_STATES(:,19) = strpad('s in component ikur (hertz)');
    LEGEND_ALGEBRAIC(:,100) = strpad('INa in component ina (pA)');
    LEGEND_CONSTANTS(:,34) = strpad('PNa in component ina (m3_per_s_times_1e_minus_12)');
    LEGEND_STATES(:,20) = strpad('h1 in component ina (hertz)');
    LEGEND_STATES(:,21) = strpad('h2 in component ina (hertz)');
    LEGEND_ALGEBRAIC(:,13) = strpad('h_inf in component ina (dimensionless)');
    LEGEND_ALGEBRAIC(:,41) = strpad('ina_h1_tau in component ina (second)');
    LEGEND_ALGEBRAIC(:,42) = strpad('ina_h2_tau in component ina (second)');
    LEGEND_ALGEBRAIC(:,14) = strpad('ina_m_inf in component ina (dimensionless)');
    LEGEND_ALGEBRAIC(:,43) = strpad('ina_m_tau in component ina (second)');
    LEGEND_STATES(:,22) = strpad('m in component ina (hertz)');
    LEGEND_ALGEBRAIC(:,101) = strpad('INab in component inab (pA)');
    LEGEND_CONSTANTS(:,35) = strpad('gNab in component inab (nS)');
    LEGEND_STATES(:,23) = strpad('Nass in component sodium (mM)');
    LEGEND_CONSTANTS(:,36) = strpad('dNaCa in component inaca (m12_per_mol4)');
    LEGEND_CONSTANTS(:,37) = strpad('fCaNCX in component inaca (dimensionless)');
    LEGEND_CONSTANTS(:,38) = strpad('gam in component inaca (dimensionless)');
    LEGEND_CONSTANTS(:,39) = strpad('kNaCa in component inaca (m12_A_per_mol4_times_1e_minus_12)');
    LEGEND_ALGEBRAIC(:,80) = strpad('INaK in component inak (pA)');
    LEGEND_CONSTANTS(:,40) = strpad('INaKmax in component inak (pA)');
    LEGEND_ALGEBRAIC(:,79) = strpad('Nass15 in component inak (dimensionless)');
    LEGEND_CONSTANTS(:,41) = strpad('kNaKK in component inak (mM)');
    LEGEND_CONSTANTS(:,42) = strpad('kNaKNa in component inak (dimensionless)');
    LEGEND_ALGEBRAIC(:,96) = strpad('It in component it (pA)');
    LEGEND_CONSTANTS(:,65) = strpad('gt in component it (nS)');
    LEGEND_ALGEBRAIC(:,15) = strpad('it_r_inf in component it (dimensionless)');
    LEGEND_ALGEBRAIC(:,44) = strpad('it_r_tau in component it (second)');
    LEGEND_ALGEBRAIC(:,16) = strpad('it_s_inf in component it (dimensionless)');
    LEGEND_ALGEBRAIC(:,45) = strpad('it_s_tau in component it (second)');
    LEGEND_STATES(:,24) = strpad('r in component it (hertz)');
    LEGEND_STATES(:,25) = strpad('s in component it (hertz)');
    LEGEND_ALGEBRAIC(:,102) = strpad('i_ion in component membrane (pA)');
    LEGEND_ALGEBRAIC(:,104) = strpad('i_stim in component stimulus (pA)');
    LEGEND_STATES(:,26) = strpad('Ki in component potassium (mM)');
    LEGEND_CONSTANTS(:,66) = strpad('RTF in component phys (mV)');
    LEGEND_CONSTANTS(:,43) = strpad('R in component phys (mJ_per_mol_per_K)');
    LEGEND_CONSTANTS(:,44) = strpad('T in component phys (kelvin)');
    LEGEND_ALGEBRAIC(:,106) = strpad('i_tot in component potassium (pA)');
    LEGEND_ALGEBRAIC(:,56) = strpad('SRCa1 in component ryr (dimensionless)');
    LEGEND_ALGEBRAIC(:,57) = strpad('SRCa2 in component ryr (dimensionless)');
    LEGEND_ALGEBRAIC(:,58) = strpad('SRCa3 in component ryr (dimensionless)');
    LEGEND_ALGEBRAIC(:,85) = strpad('SRCass in component ryr (dimensionless)');
    LEGEND_STATES(:,27) = strpad('a1 in component ryr (hertz)');
    LEGEND_STATES(:,28) = strpad('a2 in component ryr (hertz)');
    LEGEND_STATES(:,29) = strpad('a3 in component ryr (hertz)');
    LEGEND_ALGEBRAIC(:,17) = strpad('ainf1 in component ryr (dimensionless)');
    LEGEND_ALGEBRAIC(:,18) = strpad('ainf2 in component ryr (dimensionless)');
    LEGEND_ALGEBRAIC(:,19) = strpad('ainf3 in component ryr (dimensionless)');
    LEGEND_ALGEBRAIC(:,20) = strpad('ainfss in component ryr (dimensionless)');
    LEGEND_STATES(:,30) = strpad('ass in component ryr (hertz)');
    LEGEND_STATES(:,31) = strpad('c1 in component ryr (hertz)');
    LEGEND_STATES(:,32) = strpad('c2 in component ryr (hertz)');
    LEGEND_STATES(:,33) = strpad('c3 in component ryr (hertz)');
    LEGEND_ALGEBRAIC(:,21) = strpad('cinf1 in component ryr (dimensionless)');
    LEGEND_ALGEBRAIC(:,22) = strpad('cinf2 in component ryr (dimensionless)');
    LEGEND_ALGEBRAIC(:,23) = strpad('cinf3 in component ryr (dimensionless)');
    LEGEND_ALGEBRAIC(:,24) = strpad('cinfss in component ryr (dimensionless)');
    LEGEND_STATES(:,34) = strpad('css in component ryr (hertz)');
    LEGEND_CONSTANTS(:,75) = strpad('nu1 in component ryr (m3_per_s_times_1e_minus_12)');
    LEGEND_CONSTANTS(:,79) = strpad('nu2 in component ryr (m3_per_s_times_1e_minus_12)');
    LEGEND_CONSTANTS(:,82) = strpad('nu3 in component ryr (m3_per_s_times_1e_minus_12)');
    LEGEND_CONSTANTS(:,67) = strpad('nuss in component ryr (m3_per_s_times_1e_minus_12)');
    LEGEND_STATES(:,35) = strpad('o1 in component ryr (hertz)');
    LEGEND_STATES(:,36) = strpad('o2 in component ryr (hertz)');
    LEGEND_STATES(:,37) = strpad('o3 in component ryr (hertz)');
    LEGEND_ALGEBRAIC(:,25) = strpad('oinf1 in component ryr (dimensionless)');
    LEGEND_ALGEBRAIC(:,26) = strpad('oinf2 in component ryr (dimensionless)');
    LEGEND_ALGEBRAIC(:,27) = strpad('oinf3 in component ryr (dimensionless)');
    LEGEND_ALGEBRAIC(:,28) = strpad('oinfss in component ryr (dimensionless)');
    LEGEND_STATES(:,38) = strpad('oss in component ryr (hertz)');
    LEGEND_CONSTANTS(:,45) = strpad('tau_act in component ryr (second)');
    LEGEND_CONSTANTS(:,46) = strpad('tau_actss in component ryr (second)');
    LEGEND_CONSTANTS(:,47) = strpad('tau_adapt in component ryr (second)');
    LEGEND_CONSTANTS(:,48) = strpad('tau_inact in component ryr (second)');
    LEGEND_CONSTANTS(:,49) = strpad('tau_inactss in component ryr (second)');
    LEGEND_CONSTANTS(:,50) = strpad('SERCAKmf in component serca (mM)');
    LEGEND_CONSTANTS(:,51) = strpad('SERCAKmr in component serca (mM)');
    LEGEND_STATES(:,39) = strpad('a1 in component serca (mM)');
    LEGEND_STATES(:,40) = strpad('a2 in component serca (mM)');
    LEGEND_STATES(:,41) = strpad('a3 in component serca (mM)');
    LEGEND_STATES(:,42) = strpad('ass in component serca (mM)');
    LEGEND_CONSTANTS(:,52) = strpad('cpumps in component serca (mM)');
    LEGEND_CONSTANTS(:,68) = strpad('k1 in component serca (m6_per_s_per_mol2)');
    LEGEND_CONSTANTS(:,76) = strpad('k2 in component serca (hertz)');
    LEGEND_CONSTANTS(:,69) = strpad('k3 in component serca (m6_per_s_per_mol2)');
    LEGEND_CONSTANTS(:,53) = strpad('k4 in component serca (hertz)');
    LEGEND_CONSTANTS(:,70) = strpad('BNa in component sodium (mM)');
    LEGEND_CONSTANTS(:,54) = strpad('DNa in component sodium (m2_per_s_times_1e_minus_12)');
    LEGEND_ALGEBRAIC(:,103) = strpad('JNa in component sodium (kat_times_1e_minus_12)');
    LEGEND_CONSTANTS(:,55) = strpad('KdBNa in component sodium (mM)');
    LEGEND_STATES(:,43) = strpad('Nai in component sodium (mM)');
    LEGEND_ALGEBRAIC(:,105) = strpad('betaNass in component sodium (dimensionless)');
    LEGEND_ALGEBRAIC(:,107) = strpad('i_ss in component sodium (pA)');
    LEGEND_CONSTANTS(:,71) = strpad('amplitude in component stimulus (pA)');
    LEGEND_CONSTANTS(:,56) = strpad('duration in component stimulus (second)');
    LEGEND_CONSTANTS(:,57) = strpad('offset in component stimulus (second)');
    LEGEND_CONSTANTS(:,58) = strpad('period in component stimulus (second)');
    LEGEND_RATES(:,1) = strpad('d/dt CaSR1 in component calcium (mM)');
    LEGEND_RATES(:,2) = strpad('d/dt CaSR2 in component calcium (mM)');
    LEGEND_RATES(:,3) = strpad('d/dt CaSR3 in component calcium (mM)');
    LEGEND_RATES(:,4) = strpad('d/dt CaSR4 in component calcium (mM)');
    LEGEND_RATES(:,5) = strpad('d/dt Cai1 in component calcium (mM)');
    LEGEND_RATES(:,6) = strpad('d/dt Cai2 in component calcium (mM)');
    LEGEND_RATES(:,7) = strpad('d/dt Cai3 in component calcium (mM)');
    LEGEND_RATES(:,8) = strpad('d/dt Cai4 in component calcium (mM)');
    LEGEND_RATES(:,9) = strpad('d/dt Cass in component calcium (mM)');
    LEGEND_RATES(:,11) = strpad('d/dt d in component ical (hertz)');
    LEGEND_RATES(:,12) = strpad('d/dt f1 in component ical (hertz)');
    LEGEND_RATES(:,13) = strpad('d/dt f2 in component ical (hertz)');
    LEGEND_RATES(:,14) = strpad('d/dt fca in component ical (hertz)');
    LEGEND_RATES(:,15) = strpad('d/dt y in component if (hertz)');
    LEGEND_RATES(:,16) = strpad('d/dt pa in component ikr (hertz)');
    LEGEND_RATES(:,17) = strpad('d/dt n in component iks (hertz)');
    LEGEND_RATES(:,18) = strpad('d/dt r in component ikur (hertz)');
    LEGEND_RATES(:,19) = strpad('d/dt s in component ikur (hertz)');
    LEGEND_RATES(:,20) = strpad('d/dt h1 in component ina (hertz)');
    LEGEND_RATES(:,21) = strpad('d/dt h2 in component ina (hertz)');
    LEGEND_RATES(:,22) = strpad('d/dt m in component ina (hertz)');
    LEGEND_RATES(:,24) = strpad('d/dt r in component it (hertz)');
    LEGEND_RATES(:,25) = strpad('d/dt s in component it (hertz)');
    LEGEND_RATES(:,10) = strpad('d/dt V in component membrane (mV)');
    LEGEND_RATES(:,26) = strpad('d/dt Ki in component potassium (mM)');
    LEGEND_RATES(:,27) = strpad('d/dt a1 in component ryr (hertz)');
    LEGEND_RATES(:,28) = strpad('d/dt a2 in component ryr (hertz)');
    LEGEND_RATES(:,29) = strpad('d/dt a3 in component ryr (hertz)');
    LEGEND_RATES(:,30) = strpad('d/dt ass in component ryr (hertz)');
    LEGEND_RATES(:,31) = strpad('d/dt c1 in component ryr (hertz)');
    LEGEND_RATES(:,32) = strpad('d/dt c2 in component ryr (hertz)');
    LEGEND_RATES(:,33) = strpad('d/dt c3 in component ryr (hertz)');
    LEGEND_RATES(:,34) = strpad('d/dt css in component ryr (hertz)');
    LEGEND_RATES(:,35) = strpad('d/dt o1 in component ryr (hertz)');
    LEGEND_RATES(:,36) = strpad('d/dt o2 in component ryr (hertz)');
    LEGEND_RATES(:,37) = strpad('d/dt o3 in component ryr (hertz)');
    LEGEND_RATES(:,38) = strpad('d/dt oss in component ryr (hertz)');
    LEGEND_RATES(:,39) = strpad('d/dt a1 in component serca (mM)');
    LEGEND_RATES(:,40) = strpad('d/dt a2 in component serca (mM)');
    LEGEND_RATES(:,41) = strpad('d/dt a3 in component serca (mM)');
    LEGEND_RATES(:,42) = strpad('d/dt ass in component serca (mM)');
    LEGEND_RATES(:,43) = strpad('d/dt Nai in component sodium (mM)');
    LEGEND_RATES(:,23) = strpad('d/dt Nass in component sodium (mM)');
    LEGEND_STATES  = LEGEND_STATES';
    LEGEND_ALGEBRAIC = LEGEND_ALGEBRAIC';
    LEGEND_RATES = LEGEND_RATES';
    LEGEND_CONSTANTS = LEGEND_CONSTANTS';
end

function [STATES, CONSTANTS] = initConsts()
    VOI = 0; CONSTANTS = []; STATES = []; ALGEBRAIC = [];
    CONSTANTS(:,1) = 0.024;
    CONSTANTS(:,2) = 6.7;
    STATES(:,1) = 0.6189225;
    STATES(:,2) = 0.6076289;
    STATES(:,3) = 0.5905266;
    STATES(:,4) = 0.5738108;
    STATES(:,5) = 1.35496500000000013e-04;
    STATES(:,6) = 1.38142100000000014e-04;
    STATES(:,7) = 1.44208699999999994e-04;
    STATES(:,8) = 1.56184399999999995e-04;
    STATES(:,9) = 1.61937700000000013e-04;
    CONSTANTS(:,3) = 780.0;
    CONSTANTS(:,4) = 25.0;
    CONSTANTS(:,5) = 44.0;
    CONSTANTS(:,6) = 96487.0;
    CONSTANTS(:,7) = 0.00238;
    CONSTANTS(:,8) = 0.8;
    CONSTANTS(:,9) = 0.013;
    CONSTANTS(:,10) = 1.1;
    CONSTANTS(:,11) = 13.0;
    CONSTANTS(:,12) = 165.0;
    CONSTANTS(:,13) = 4.99231999999999966e-05;
    CONSTANTS(:,14) = 1.625;
    CONSTANTS(:,15) = 0.006;
    CONSTANTS(:,16) = 0.05;
    CONSTANTS(:,17) = 122.051;
    CONSTANTS(:,18) = 3.14159265358979312e+00;
    CONSTANTS(:,19) = 6.5;
    CONSTANTS(:,20) = 1.8;
    CONSTANTS(:,21) = 5.4;
    CONSTANTS(:,22) = 130.0;
    STATES(:,10) = -75.42786;
    CONSTANTS(:,23) = 0.0952;
    CONSTANTS(:,24) = 60.0;
    STATES(:,11) = 1.06091699999999996e-05;
    STATES(:,12) = 0.9988566;
    STATES(:,13) = 0.9988624;
    STATES(:,14) = 0.9744374;
    CONSTANTS(:,25) = 25.3125;
    CONSTANTS(:,26) = 0.002;
    CONSTANTS(:,27) = 0.001;
    CONSTANTS(:,28) = 2.0;
    CONSTANTS(:,29) = 2.0;
    CONSTANTS(:,30) = 0.0005;
    CONSTANTS(:,31) = 1.0;
    STATES(:,15) = 5.62066499999999969e-02;
    CONSTANTS(:,32) = 0.5;
    STATES(:,16) = 4.18941700000000008e-05;
    CONSTANTS(:,33) = 1.0;
    STATES(:,17) = 4.10975100000000003e-03;
    STATES(:,18) = 3.11170299999999984e-04;
    STATES(:,19) = 0.9751094;
    CONSTANTS(:,34) = 0.0018;
    STATES(:,20) = 0.90391;
    STATES(:,21) = 0.9039673;
    STATES(:,22) = 2.77581199999999990e-03;
    CONSTANTS(:,35) = 0.060599;
    STATES(:,23) = 8.691504;
    CONSTANTS(:,36) = 0.0003;
    CONSTANTS(:,37) = 1.0;
    CONSTANTS(:,38) = 0.45;
    CONSTANTS(:,39) = 0.0084;
    CONSTANTS(:,40) = 70.8253;
    CONSTANTS(:,41) = 1.0;
    CONSTANTS(:,42) = 11.0;
    STATES(:,24) = 9.59425800000000026e-04;
    STATES(:,25) = 0.954338;
    STATES(:,26) = 134.6313;
    CONSTANTS(:,43) = 8314.0;
    CONSTANTS(:,44) = 306.15;
    STATES(:,27) = 0.1925362;
    STATES(:,28) = 0.2010345;
    STATES(:,29) = 0.2163122;
    STATES(:,30) = 0.2455297;
    STATES(:,31) = 0.9993722;
    STATES(:,32) = 0.9995086;
    STATES(:,33) = 0.9995604;
    STATES(:,34) = 0.9999717;
    STATES(:,35) = 9.47851400000000044e-05;
    STATES(:,36) = 7.76550300000000031e-05;
    STATES(:,37) = 5.67494700000000006e-05;
    STATES(:,38) = 3.97509699999999973e-05;
    CONSTANTS(:,45) = 0.01875;
    CONSTANTS(:,46) = 0.005;
    CONSTANTS(:,47) = 1.0;
    CONSTANTS(:,48) = 0.0875;
    CONSTANTS(:,49) = 0.015;
    CONSTANTS(:,50) = 0.00025;
    CONSTANTS(:,51) = 1.8;
    STATES(:,39) = 4.63856499999999988e-03;
    STATES(:,40) = 4.51207800000000010e-03;
    STATES(:,41) = 4.32640899999999981e-03;
    STATES(:,42) = 4.25044500000000026e-03;
    CONSTANTS(:,52) = 0.04;
    CONSTANTS(:,53) = 7.5;
    CONSTANTS(:,54) = 0.12;
    CONSTANTS(:,55) = 10.0;
    STATES(:,43) = 9.28686;
    CONSTANTS(:,56) = 0.001;
    CONSTANTS(:,57) = 0.01;
    CONSTANTS(:,58) = 1.0;
    CONSTANTS(:,59) =  ( ( ( CONSTANTS(:,18).*CONSTANTS(:,19)).*2.00000).*CONSTANTS(:,17)).*0.500000;
    CONSTANTS(:,60) =  ( ( ( (power( 1.00000.*CONSTANTS(:,14), 2.00000) - power( 0.00000.*CONSTANTS(:,14), 2.00000)).*CONSTANTS(:,18)).*CONSTANTS(:,17)).*0.500000).*1.00000e-06;
    CONSTANTS(:,61) = 0.0200000./2.00000+CONSTANTS(:,14)./2.00000;
    CONSTANTS(:,62) = 0.0200000./2.00000+ 2.00000.*CONSTANTS(:,14);
    CONSTANTS(:,63) =  3.82500.*0.900000;
    CONSTANTS(:,64) =  0.890000.*2.75000;
    CONSTANTS(:,65) =  1.09000.*7.50000;
    CONSTANTS(:,66) = ( CONSTANTS(:,43).*CONSTANTS(:,44))./CONSTANTS(:,6);
    CONSTANTS(:,67) =  625.000.*CONSTANTS(:,13);
    CONSTANTS(:,68) =  power(1000.00, 2.00000).*CONSTANTS(:,53);
    CONSTANTS(:,69) = CONSTANTS(:,53)./power(CONSTANTS(:,51), 2.00000);
    CONSTANTS(:,70) =  0.490000.*2.31000;
    CONSTANTS(:,71) =  - 2500.00;
    CONSTANTS(:,72) =  ( ( ( (power( 2.00000.*CONSTANTS(:,14), 2.00000) - power( 1.00000.*CONSTANTS(:,14), 2.00000)).*CONSTANTS(:,18)).*CONSTANTS(:,17)).*0.500000).*1.00000e-06;
    CONSTANTS(:,73) =  (( 0.0500000.*CONSTANTS(:,60))./2.00000).*0.900000;
    CONSTANTS(:,74) = 1.00000./CONSTANTS(:,66);
    CONSTANTS(:,75) =  1.00000.*CONSTANTS(:,60);
    CONSTANTS(:,76) =  CONSTANTS(:,68).*power(CONSTANTS(:,50), 2.00000);
    CONSTANTS(:,77) =  ( ( ( (power( 3.00000.*CONSTANTS(:,14), 2.00000) - power( 2.00000.*CONSTANTS(:,14), 2.00000)).*CONSTANTS(:,18)).*CONSTANTS(:,17)).*0.500000).*1.00000e-06;
    CONSTANTS(:,78) =  (( 0.0500000.*CONSTANTS(:,72))./2.00000).*0.900000;
    CONSTANTS(:,79) =  1.00000.*CONSTANTS(:,72);
    CONSTANTS(:,80) =  ( ( ( (power( 4.00000.*CONSTANTS(:,14), 2.00000) - power( 3.00000.*CONSTANTS(:,14), 2.00000)).*CONSTANTS(:,18)).*CONSTANTS(:,17)).*0.500000).*1.00000e-06;
    CONSTANTS(:,81) =  (( 0.0500000.*CONSTANTS(:,77))./2.00000).*0.900000;
    CONSTANTS(:,82) =  1.00000.*CONSTANTS(:,77);
    CONSTANTS(:,83) = ((CONSTANTS(:,60)+CONSTANTS(:,72))+CONSTANTS(:,77))+CONSTANTS(:,80);
    CONSTANTS(:,84) =  (( 0.0500000.*CONSTANTS(:,80))./2.00000).*0.900000;
    CONSTANTS(:,85) = CONSTANTS(:,83)+CONSTANTS(:,13);
    if (isempty(STATES)), warning('Initial values for states not set');, end
end

function [RATES, ALGEBRAIC] = computeRates(VOI, STATES, CONSTANTS)
    global algebraicVariableCount;
    statesSize = size(STATES);
    statesColumnCount = statesSize(2);
    if ( statesColumnCount == 1)
        STATES = STATES';
        ALGEBRAIC = zeros(1, algebraicVariableCount);
        utilOnes = 1;
    else
        statesRowCount = statesSize(1);
        ALGEBRAIC = zeros(statesRowCount, algebraicVariableCount);
        RATES = zeros(statesRowCount, statesColumnCount);
        utilOnes = ones(statesRowCount, 1);
    end
    ALGEBRAIC(:,7) = 1.00000 - 1.00000./(1.00000+power(CONSTANTS(:,27)./STATES(:,9), CONSTANTS(:,28)));
    RATES(:,14) = (ALGEBRAIC(:,7) - STATES(:,14))./CONSTANTS(:,26);
    ALGEBRAIC(:,17) = 0.505000 - 0.427000./(1.00000+exp(( STATES(:,5).*1000.00 - 0.290000)./0.0820000));
    RATES(:,27) = (ALGEBRAIC(:,17) - STATES(:,27))./CONSTANTS(:,47);
    ALGEBRAIC(:,18) = 0.505000 - 0.427000./(1.00000+exp(( STATES(:,6).*1000.00 - 0.290000)./0.0820000));
    RATES(:,28) = (ALGEBRAIC(:,18) - STATES(:,28))./CONSTANTS(:,47);
    ALGEBRAIC(:,19) = 0.505000 - 0.427000./(1.00000+exp(( STATES(:,7).*1000.00 - 0.290000)./0.0820000));
    RATES(:,29) = (ALGEBRAIC(:,19) - STATES(:,29))./CONSTANTS(:,47);
    ALGEBRAIC(:,20) = 0.505000 - 0.427000./(1.00000+exp(( STATES(:,9).*1000.00 - 0.290000)./0.0820000));
    RATES(:,30) = (ALGEBRAIC(:,20) - STATES(:,30))./CONSTANTS(:,47);
    ALGEBRAIC(:,21) = 1.00000./(1.00000+exp(( STATES(:,5).*1000.00 - (STATES(:,27)+0.0200000))./0.0100000));
    RATES(:,31) = (ALGEBRAIC(:,21) - STATES(:,31))./CONSTANTS(:,48);
    ALGEBRAIC(:,22) = 1.00000./(1.00000+exp(( STATES(:,6).*1000.00 - (STATES(:,28)+0.0200000))./0.0100000));
    RATES(:,32) = (ALGEBRAIC(:,22) - STATES(:,32))./CONSTANTS(:,48);
    ALGEBRAIC(:,23) = 1.00000./(1.00000+exp(( STATES(:,7).*1000.00 - (STATES(:,29)+0.0200000))./0.0100000));
    RATES(:,33) = (ALGEBRAIC(:,23) - STATES(:,33))./CONSTANTS(:,48);
    ALGEBRAIC(:,24) = 1.00000./(1.00000+exp(( STATES(:,9).*1000.00 - (STATES(:,30)+0.0200000))./0.0100000));
    RATES(:,34) = (ALGEBRAIC(:,24) - STATES(:,34))./CONSTANTS(:,49);
    ALGEBRAIC(:,25) = 1.00000 - 1.00000./(1.00000+exp(( STATES(:,5).*1000.00 - (STATES(:,27)+0.220000))./0.0300000));
    RATES(:,35) = (ALGEBRAIC(:,25) - STATES(:,35))./CONSTANTS(:,45);
    ALGEBRAIC(:,26) = 1.00000 - 1.00000./(1.00000+exp(( STATES(:,6).*1000.00 - (STATES(:,28)+0.220000))./0.0300000));
    RATES(:,36) = (ALGEBRAIC(:,26) - STATES(:,36))./CONSTANTS(:,45);
    ALGEBRAIC(:,27) = 1.00000 - 1.00000./(1.00000+exp(( STATES(:,7).*1000.00 - (STATES(:,29)+0.220000))./0.0300000));
    RATES(:,37) = (ALGEBRAIC(:,27) - STATES(:,37))./CONSTANTS(:,45);
    ALGEBRAIC(:,28) = 1.00000 - 1.00000./(1.00000+exp(( STATES(:,9).*1000.00 - (STATES(:,30)+0.220000))./0.0300000));
    RATES(:,38) = (ALGEBRAIC(:,28) - STATES(:,38))./CONSTANTS(:,46);
    ALGEBRAIC(:,6) = 1.00000./(1.00000+exp((STATES(:,10)+9.00000)./ - 5.80000));
    ALGEBRAIC(:,33) =  0.00270000.*exp( - power((STATES(:,10)+35.0000)./30.0000, 2.00000))+0.00200000;
    RATES(:,11) = (ALGEBRAIC(:,6) - STATES(:,11))./ALGEBRAIC(:,33);
    ALGEBRAIC(:,5) = 1.00000./(1.00000+exp((STATES(:,10)+27.4000)./7.10000));
    ALGEBRAIC(:,34) = (( 0.986980.*exp( - power((STATES(:,10)+30.1605)./7.09396, 2.00000))+0.0427500./(1.00000+exp((STATES(:,10) - 51.6155)./ - 80.6133)))+0.0357600./(1.00000+exp((STATES(:,10)+29.5727)./13.2176))) - 0.00821000;
    RATES(:,12) = (ALGEBRAIC(:,5) - STATES(:,12))./ALGEBRAIC(:,34);
    ALGEBRAIC(:,35) =  1.33230.*exp( - power((STATES(:,10)+40.0000)./14.2000, 2.00000))+0.0626000;
    RATES(:,13) = (ALGEBRAIC(:,5) - STATES(:,13))./ALGEBRAIC(:,35);
    ALGEBRAIC(:,8) = 1.00000./(1.00000+exp((STATES(:,10)+97.8287)./12.4802));
    ALGEBRAIC(:,36) = 1.00000./( 0.00332000.*exp( - STATES(:,10)./16.5410)+ 23.7184.*exp(STATES(:,10)./16.5410));
    RATES(:,15) = (ALGEBRAIC(:,8) - STATES(:,15))./ALGEBRAIC(:,36);
    ALGEBRAIC(:,9) = 1.00000./(1.00000+exp((STATES(:,10)+15.0000)./ - 6.00000));
    ALGEBRAIC(:,37) =  0.217180.*exp( - power((STATES(:,10)+20.1376)./22.1996, 2.00000))+0.0311800;
    RATES(:,16) = (ALGEBRAIC(:,9) - STATES(:,16))./ALGEBRAIC(:,37);
    ALGEBRAIC(:,10) = 1.00000./(1.00000+exp((STATES(:,10) - 19.9000)./ - 12.7000));
    ALGEBRAIC(:,38) =  0.400000.*exp( - power((STATES(:,10) - 20.0000)./20.0000, 2.00000))+0.700000;
    RATES(:,17) = (ALGEBRAIC(:,10) - STATES(:,17))./ALGEBRAIC(:,38);
    ALGEBRAIC(:,11) = 1.00000./(1.00000+exp((STATES(:,10)+6.00000)./ - 8.60000));
    ALGEBRAIC(:,39) = 0.00900000./(1.00000+exp((STATES(:,10)+5.00000)./12.0000))+0.000500000;
    RATES(:,18) = (ALGEBRAIC(:,11) - STATES(:,18))./ALGEBRAIC(:,39);
    ALGEBRAIC(:,12) = 1.00000./(1.00000+exp((STATES(:,10)+7.50000)./10.0000));
    ALGEBRAIC(:,40) = 0.590000./(1.00000+exp((STATES(:,10)+60.0000)./10.0000))+3.05000;
    RATES(:,19) = (ALGEBRAIC(:,12) - STATES(:,19))./ALGEBRAIC(:,40);
    ALGEBRAIC(:,13) = 1.00000./(1.00000+exp((STATES(:,10)+63.6000)./5.30000));
    ALGEBRAIC(:,41) = 0.0300000./(1.00000+exp((STATES(:,10)+35.1000)./3.20000))+0.000300000;
    RATES(:,20) = (ALGEBRAIC(:,13) - STATES(:,20))./ALGEBRAIC(:,41);
    ALGEBRAIC(:,42) = 0.120000./(1.00000+exp((STATES(:,10)+35.1000)./3.20000))+0.00300000;
    RATES(:,21) = (ALGEBRAIC(:,13) - STATES(:,21))./ALGEBRAIC(:,42);
    ALGEBRAIC(:,14) = 1.00000./(1.00000+exp((STATES(:,10)+27.1200)./ - 8.21000));
    ALGEBRAIC(:,43) =  4.20000e-05.*exp( - power((STATES(:,10)+25.5700)./28.8000, 2.00000))+2.40000e-05;
    RATES(:,22) = (ALGEBRAIC(:,14) - STATES(:,22))./ALGEBRAIC(:,43);
    ALGEBRAIC(:,15) = 1.00000./(1.00000+exp((STATES(:,10) - 1.00000)./ - 11.0000));
    ALGEBRAIC(:,44) =  0.00350000.*exp( - power((STATES(:,10)+0.00000)./30.0000, 2.00000))+0.00150000;
    RATES(:,24) = (ALGEBRAIC(:,15) - STATES(:,24))./ALGEBRAIC(:,44);
    ALGEBRAIC(:,16) = 1.00000./(1.00000+exp((STATES(:,10)+40.5000)./11.5000));
    ALGEBRAIC(:,45) =  0.0256350.*exp( - power((STATES(:,10)+52.4500)./15.8827, 2.00000))+0.0141400;
    RATES(:,25) = (ALGEBRAIC(:,16) - STATES(:,25))./ALGEBRAIC(:,45);
    ALGEBRAIC(:,32) =  ( (( CONSTANTS(:,3).*CONSTANTS(:,59))./CONSTANTS(:,61)).*(STATES(:,9) - STATES(:,8))).*1.00000e-06;
    ALGEBRAIC(:,49) = ALGEBRAIC(:,32);
    ALGEBRAIC(:,54) = ( CONSTANTS(:,1).*CONSTANTS(:,7))./power(STATES(:,8)+CONSTANTS(:,7), 2.00000);
    ALGEBRAIC(:,60) = 1.00000./(1.00000+ALGEBRAIC(:,54));
    RATES(:,8) = ( ( ALGEBRAIC(:,60).*(CONSTANTS(:,3)+ ALGEBRAIC(:,54).*CONSTANTS(:,4))).*(((STATES(:,8) -  2.00000.*STATES(:,8))+STATES(:,7))./power(CONSTANTS(:,14), 2.00000)+(STATES(:,8) - STATES(:,7))./( ( 2.00000.*4.00000).*power(CONSTANTS(:,14), 2.00000))) -  (( ( ( 2.00000.*ALGEBRAIC(:,60)).*ALGEBRAIC(:,54)).*CONSTANTS(:,4))./(CONSTANTS(:,7)+STATES(:,8))).*power((STATES(:,8) - STATES(:,7))./( 2.00000.*CONSTANTS(:,14)), 2.00000))+ (ALGEBRAIC(:,49)./CONSTANTS(:,80)).*ALGEBRAIC(:,60);
    ALGEBRAIC(:,1) =  ( CONSTANTS(:,15).*(STATES(:,1) - STATES(:,5))).*CONSTANTS(:,60);
    ALGEBRAIC(:,65) =  ( ( (  - CONSTANTS(:,69).*power(STATES(:,1), 2.00000)).*(CONSTANTS(:,52) - STATES(:,39))+ CONSTANTS(:,53).*STATES(:,39)).*CONSTANTS(:,60)).*2.00000;
    ALGEBRAIC(:,56) = 1.00000 - 1.00000./(1.00000+exp((STATES(:,1) - 0.300000)./0.100000));
    ALGEBRAIC(:,61) =  ( ( ( CONSTANTS(:,75).*STATES(:,35)).*STATES(:,31)).*ALGEBRAIC(:,56)).*(STATES(:,1) - STATES(:,5));
    ALGEBRAIC(:,73) = (ALGEBRAIC(:,65) - ALGEBRAIC(:,1)) - ALGEBRAIC(:,61);
    ALGEBRAIC(:,29) = 1.00000./(1.00000+( CONSTANTS(:,2).*CONSTANTS(:,8))./power(STATES(:,1)+CONSTANTS(:,8), 2.00000));
    RATES(:,1) =  ( ALGEBRAIC(:,29).*CONSTANTS(:,5)).*(((STATES(:,2) -  2.00000.*STATES(:,1))+STATES(:,1))./power(CONSTANTS(:,14), 2.00000)+(STATES(:,2) - STATES(:,1))./( ( 2.00000.*1.00000).*power(CONSTANTS(:,14), 2.00000)))+ (ALGEBRAIC(:,73)./CONSTANTS(:,73)).*ALGEBRAIC(:,29);
    ALGEBRAIC(:,2) =  ( CONSTANTS(:,15).*(STATES(:,2) - STATES(:,6))).*CONSTANTS(:,72);
    ALGEBRAIC(:,66) =  ( ( (  - CONSTANTS(:,69).*power(STATES(:,2), 2.00000)).*(CONSTANTS(:,52) - STATES(:,40))+ CONSTANTS(:,53).*STATES(:,40)).*CONSTANTS(:,72)).*2.00000;
    ALGEBRAIC(:,57) = 1.00000 - 1.00000./(1.00000+exp((STATES(:,2) - 0.300000)./0.100000));
    ALGEBRAIC(:,62) =  ( ( ( CONSTANTS(:,79).*STATES(:,36)).*STATES(:,32)).*ALGEBRAIC(:,57)).*(STATES(:,2) - STATES(:,6));
    ALGEBRAIC(:,74) = (ALGEBRAIC(:,66) - ALGEBRAIC(:,2)) - ALGEBRAIC(:,62);
    ALGEBRAIC(:,30) = 1.00000./(1.00000+( CONSTANTS(:,2).*CONSTANTS(:,8))./power(STATES(:,2)+CONSTANTS(:,8), 2.00000));
    RATES(:,2) =  ( ALGEBRAIC(:,30).*CONSTANTS(:,5)).*(((STATES(:,3) -  2.00000.*STATES(:,2))+STATES(:,1))./power(CONSTANTS(:,14), 2.00000)+(STATES(:,3) - STATES(:,1))./( ( 2.00000.*2.00000).*power(CONSTANTS(:,14), 2.00000)))+ (ALGEBRAIC(:,74)./CONSTANTS(:,78)).*ALGEBRAIC(:,30);
    ALGEBRAIC(:,3) =  ( CONSTANTS(:,15).*(STATES(:,3) - STATES(:,7))).*CONSTANTS(:,77);
    ALGEBRAIC(:,67) =  ( ( (  - CONSTANTS(:,69).*power(STATES(:,3), 2.00000)).*(CONSTANTS(:,52) - STATES(:,41))+ CONSTANTS(:,53).*STATES(:,41)).*CONSTANTS(:,77)).*2.00000;
    ALGEBRAIC(:,58) = 1.00000 - 1.00000./(1.00000+exp((STATES(:,3) - 0.300000)./0.100000));
    ALGEBRAIC(:,63) =  ( ( ( CONSTANTS(:,82).*STATES(:,37)).*STATES(:,33)).*ALGEBRAIC(:,58)).*(STATES(:,3) - STATES(:,7));
    ALGEBRAIC(:,75) = (ALGEBRAIC(:,67) - ALGEBRAIC(:,3)) - ALGEBRAIC(:,63);
    ALGEBRAIC(:,31) = 1.00000./(1.00000+( CONSTANTS(:,2).*CONSTANTS(:,8))./power(STATES(:,3)+CONSTANTS(:,8), 2.00000));
    RATES(:,3) =  ( ALGEBRAIC(:,31).*CONSTANTS(:,5)).*(((STATES(:,4) -  2.00000.*STATES(:,3))+STATES(:,2))./power(CONSTANTS(:,14), 2.00000)+(STATES(:,4) - STATES(:,2))./( ( 2.00000.*3.00000).*power(CONSTANTS(:,14), 2.00000)))+ (ALGEBRAIC(:,75)./CONSTANTS(:,81)).*ALGEBRAIC(:,31);
    ALGEBRAIC(:,69) =  ( ( ( CONSTANTS(:,68).*power(STATES(:,5), 2.00000)).*(CONSTANTS(:,52) - STATES(:,39)) -  CONSTANTS(:,76).*STATES(:,39)).*CONSTANTS(:,60)).*2.00000;
    RATES(:,39) = ( 0.500000.*( - ALGEBRAIC(:,65)+ALGEBRAIC(:,69)))./CONSTANTS(:,60);
    ALGEBRAIC(:,70) =  ( ( ( CONSTANTS(:,68).*power(STATES(:,6), 2.00000)).*(CONSTANTS(:,52) - STATES(:,40)) -  CONSTANTS(:,76).*STATES(:,40)).*CONSTANTS(:,72)).*2.00000;
    RATES(:,40) = ( 0.500000.*( - ALGEBRAIC(:,66)+ALGEBRAIC(:,70)))./CONSTANTS(:,72);
    ALGEBRAIC(:,71) =  ( ( ( CONSTANTS(:,68).*power(STATES(:,7), 2.00000)).*(CONSTANTS(:,52) - STATES(:,41)) -  CONSTANTS(:,76).*STATES(:,41)).*CONSTANTS(:,77)).*2.00000;
    RATES(:,41) = ( 0.500000.*( - ALGEBRAIC(:,67)+ALGEBRAIC(:,71)))./CONSTANTS(:,77);
    ALGEBRAIC(:,76) = ( - ALGEBRAIC(:,69)+ALGEBRAIC(:,1))+ALGEBRAIC(:,61);
    ALGEBRAIC(:,46) = ( CONSTANTS(:,1).*CONSTANTS(:,7))./power(STATES(:,5)+CONSTANTS(:,7), 2.00000);
    ALGEBRAIC(:,51) = 1.00000./(1.00000+ALGEBRAIC(:,46));
    RATES(:,5) = ( ( ALGEBRAIC(:,51).*(CONSTANTS(:,3)+ ALGEBRAIC(:,46).*CONSTANTS(:,4))).*(((STATES(:,6) -  2.00000.*STATES(:,5))+STATES(:,5))./power(CONSTANTS(:,14), 2.00000)+(STATES(:,6) - STATES(:,5))./( ( 2.00000.*1.00000).*power(CONSTANTS(:,14), 2.00000))) -  (( ( ( 2.00000.*ALGEBRAIC(:,51)).*ALGEBRAIC(:,46)).*CONSTANTS(:,4))./(CONSTANTS(:,7)+STATES(:,5))).*power((STATES(:,6) - STATES(:,5))./( 2.00000.*CONSTANTS(:,14)), 2.00000))+ (ALGEBRAIC(:,76)./CONSTANTS(:,60)).*ALGEBRAIC(:,51);
    ALGEBRAIC(:,77) = ( - ALGEBRAIC(:,70)+ALGEBRAIC(:,2))+ALGEBRAIC(:,62);
    ALGEBRAIC(:,47) = ( CONSTANTS(:,1).*CONSTANTS(:,7))./power(STATES(:,6)+CONSTANTS(:,7), 2.00000);
    ALGEBRAIC(:,52) = 1.00000./(1.00000+ALGEBRAIC(:,47));
    RATES(:,6) = ( ( ALGEBRAIC(:,52).*(CONSTANTS(:,3)+ ALGEBRAIC(:,47).*CONSTANTS(:,4))).*(((STATES(:,7) -  2.00000.*STATES(:,6))+STATES(:,5))./power(CONSTANTS(:,14), 2.00000)+(STATES(:,7) - STATES(:,5))./( ( 2.00000.*2.00000).*power(CONSTANTS(:,14), 2.00000))) -  (( ( ( 2.00000.*ALGEBRAIC(:,52)).*ALGEBRAIC(:,47)).*CONSTANTS(:,4))./(CONSTANTS(:,7)+STATES(:,6))).*power((STATES(:,7) - STATES(:,5))./( 2.00000.*CONSTANTS(:,14)), 2.00000))+ (ALGEBRAIC(:,77)./CONSTANTS(:,72)).*ALGEBRAIC(:,52);
    ALGEBRAIC(:,78) = ( - ALGEBRAIC(:,71)+ALGEBRAIC(:,3))+ALGEBRAIC(:,63);
    ALGEBRAIC(:,48) = ( CONSTANTS(:,1).*CONSTANTS(:,7))./power(STATES(:,7)+CONSTANTS(:,7), 2.00000);
    ALGEBRAIC(:,53) = 1.00000./(1.00000+ALGEBRAIC(:,48));
    RATES(:,7) = ( ( ALGEBRAIC(:,53).*(CONSTANTS(:,3)+ ALGEBRAIC(:,48).*CONSTANTS(:,4))).*(((STATES(:,8) -  2.00000.*STATES(:,7))+STATES(:,6))./power(CONSTANTS(:,14), 2.00000)+(STATES(:,8) - STATES(:,6))./( ( 2.00000.*3.00000).*power(CONSTANTS(:,14), 2.00000))) -  (( ( ( 2.00000.*ALGEBRAIC(:,53)).*ALGEBRAIC(:,48)).*CONSTANTS(:,4))./(CONSTANTS(:,7)+STATES(:,7))).*power((STATES(:,8) - STATES(:,6))./( 2.00000.*CONSTANTS(:,14)), 2.00000))+ (ALGEBRAIC(:,78)./CONSTANTS(:,77)).*ALGEBRAIC(:,53);
    ALGEBRAIC(:,4) =  ( CONSTANTS(:,15).*(STATES(:,4) - STATES(:,9))).*CONSTANTS(:,13);
    ALGEBRAIC(:,89) =  ( ( (  - CONSTANTS(:,69).*power(STATES(:,4), 2.00000)).*(CONSTANTS(:,52) - STATES(:,42))+ CONSTANTS(:,53).*STATES(:,42)).*CONSTANTS(:,13)).*2.00000;
    ALGEBRAIC(:,85) = 1.00000 - 1.00000./(1.00000+exp((STATES(:,4) - 0.300000)./0.100000));
    ALGEBRAIC(:,87) =  ( ( ( CONSTANTS(:,67).*STATES(:,38)).*STATES(:,34)).*ALGEBRAIC(:,85)).*(STATES(:,4) - STATES(:,9));
    ALGEBRAIC(:,92) = (ALGEBRAIC(:,89) - ALGEBRAIC(:,4)) - ALGEBRAIC(:,87);
    ALGEBRAIC(:,50) = 1.00000./(1.00000+( CONSTANTS(:,2).*CONSTANTS(:,8))./power(STATES(:,4)+CONSTANTS(:,8), 2.00000));
    RATES(:,4) =  ( ALGEBRAIC(:,50).*CONSTANTS(:,5)).*(((STATES(:,4) -  2.00000.*STATES(:,4))+STATES(:,3))./power(CONSTANTS(:,14), 2.00000)+(STATES(:,4) - STATES(:,3))./( ( 2.00000.*4.00000).*power(CONSTANTS(:,14), 2.00000)))+ (ALGEBRAIC(:,92)./CONSTANTS(:,84)).*ALGEBRAIC(:,50);
    ALGEBRAIC(:,91) =  ( ( ( CONSTANTS(:,68).*power(STATES(:,9), 2.00000)).*(CONSTANTS(:,52) - STATES(:,42)) -  CONSTANTS(:,76).*STATES(:,42)).*CONSTANTS(:,13)).*2.00000;
    RATES(:,42) = ( 0.500000.*( - ALGEBRAIC(:,89)+ALGEBRAIC(:,91)))./CONSTANTS(:,13);
    ALGEBRAIC(:,94) = (( - ALGEBRAIC(:,32)+ALGEBRAIC(:,4)) - ALGEBRAIC(:,91))+ALGEBRAIC(:,87);
    ALGEBRAIC(:,55) = 1.00000./(((1.00000+( CONSTANTS(:,12).*CONSTANTS(:,10))./power(STATES(:,9)+CONSTANTS(:,10), 2.00000))+( CONSTANTS(:,11).*CONSTANTS(:,9))./power(STATES(:,9)+CONSTANTS(:,9), 2.00000))+( CONSTANTS(:,1).*CONSTANTS(:,7))./power(STATES(:,9)+CONSTANTS(:,7), 2.00000));
    ALGEBRAIC(:,59) =  ( ( ( ( CONSTANTS(:,25).*STATES(:,11)).*STATES(:,14)).*STATES(:,12)).*STATES(:,13)).*(STATES(:,10) - CONSTANTS(:,24));
    ALGEBRAIC(:,64) = ( CONSTANTS(:,29).*STATES(:,9))./(CONSTANTS(:,30)+STATES(:,9));
    ALGEBRAIC(:,81) = ( CONSTANTS(:,66).*log(CONSTANTS(:,20)./STATES(:,9)))./2.00000;
    ALGEBRAIC(:,82) =  CONSTANTS(:,23).*(STATES(:,10) - ALGEBRAIC(:,81));
    ALGEBRAIC(:,72) = ( CONSTANTS(:,39).*( ( exp( ( CONSTANTS(:,38).*STATES(:,10)).*CONSTANTS(:,74)).*power(STATES(:,23), 3.00000)).*CONSTANTS(:,20) -  ( ( exp( ( (CONSTANTS(:,38) - 1.00000).*STATES(:,10)).*CONSTANTS(:,74)).*power(CONSTANTS(:,22), 3.00000)).*STATES(:,9)).*CONSTANTS(:,37)))./(1.00000+ CONSTANTS(:,36).*( ( power(CONSTANTS(:,22), 3.00000).*STATES(:,9)).*CONSTANTS(:,37)+ power(STATES(:,23), 3.00000).*CONSTANTS(:,20)));
    ALGEBRAIC(:,83) = (( - ALGEBRAIC(:,59) - ALGEBRAIC(:,82)) - ALGEBRAIC(:,64))+ 2.00000.*ALGEBRAIC(:,72);
    RATES(:,9) =  ALGEBRAIC(:,55).*(ALGEBRAIC(:,94)./CONSTANTS(:,13)+ALGEBRAIC(:,83)./( ( 2.00000.*CONSTANTS(:,13)).*CONSTANTS(:,6)));
    ALGEBRAIC(:,103) =  ( (( CONSTANTS(:,54).*CONSTANTS(:,59))./CONSTANTS(:,62)).*(STATES(:,23) - STATES(:,43))).*1.00000e-06;
    RATES(:,43) = ALGEBRAIC(:,103)./CONSTANTS(:,83);
    ALGEBRAIC(:,84) =  CONSTANTS(:,66).*log(CONSTANTS(:,21)./STATES(:,26));
    ALGEBRAIC(:,86) =  ( CONSTANTS(:,31).*STATES(:,15)).*( (1.00000 - 0.267700).*(STATES(:,10) - ALGEBRAIC(:,84)));
    ALGEBRAIC(:,97) =  CONSTANTS(:,66).*log(CONSTANTS(:,22)./STATES(:,23));
    ALGEBRAIC(:,98) =  ( CONSTANTS(:,31).*STATES(:,15)).*( 0.267700.*(STATES(:,10) - ALGEBRAIC(:,97)));
    ALGEBRAIC(:,99) = ALGEBRAIC(:,86)+ALGEBRAIC(:,98);
    ALGEBRAIC(:,88) = ( ( CONSTANTS(:,63).*power( CONSTANTS(:,21).*1.00000, 0.445700)).*(STATES(:,10) - ALGEBRAIC(:,84)))./(1.00000+exp( ( 1.50000.*((STATES(:,10) - ALGEBRAIC(:,84))+3.60000)).*CONSTANTS(:,74)));
    ALGEBRAIC(:,68) = 1.00000./(1.00000+exp((STATES(:,10)+55.0000)./24.0000));
    ALGEBRAIC(:,90) =  ( ( CONSTANTS(:,32).*STATES(:,16)).*ALGEBRAIC(:,68)).*(STATES(:,10) - ALGEBRAIC(:,84));
    ALGEBRAIC(:,93) =  ( CONSTANTS(:,33).*STATES(:,17)).*(STATES(:,10) - ALGEBRAIC(:,84));
    ALGEBRAIC(:,95) =  ( ( CONSTANTS(:,64).*STATES(:,18)).*STATES(:,19)).*(STATES(:,10) - ALGEBRAIC(:,84));
    ALGEBRAIC(:,100) = ( ( ( ( ( ( ( CONSTANTS(:,34).*power(STATES(:,22), 3.00000)).*( 0.900000.*STATES(:,20)+ 0.100000.*STATES(:,21))).*CONSTANTS(:,22)).*STATES(:,10)).*CONSTANTS(:,6)).*CONSTANTS(:,74)).*(exp( (STATES(:,10) - ALGEBRAIC(:,97)).*CONSTANTS(:,74)) - 1.00000))./(exp( STATES(:,10).*CONSTANTS(:,74)) - 1.00000);
    ALGEBRAIC(:,101) =  CONSTANTS(:,35).*(STATES(:,10) - ALGEBRAIC(:,97));
    ALGEBRAIC(:,79) = power( STATES(:,23).*1.00000, 1.50000);
    ALGEBRAIC(:,80) = ( (( (( CONSTANTS(:,40).*CONSTANTS(:,21))./(CONSTANTS(:,21)+CONSTANTS(:,41))).*ALGEBRAIC(:,79))./(ALGEBRAIC(:,79)+power(CONSTANTS(:,42), 1.50000))).*(STATES(:,10)+150.000))./(STATES(:,10)+200.000);
    ALGEBRAIC(:,96) =  ( ( CONSTANTS(:,65).*STATES(:,24)).*STATES(:,25)).*(STATES(:,10) - ALGEBRAIC(:,84));
    ALGEBRAIC(:,102) = ((((((((((((ALGEBRAIC(:,100))+ALGEBRAIC(:,59))+ALGEBRAIC(:,96))+ALGEBRAIC(:,95))+ALGEBRAIC(:,88))+ALGEBRAIC(:,90))+ALGEBRAIC(:,93))+ALGEBRAIC(:,101))+ALGEBRAIC(:,82))+ALGEBRAIC(:,80))+ALGEBRAIC(:,64))+ALGEBRAIC(:,72))+ALGEBRAIC(:,99);
    ALGEBRAIC(:,104) =  piecewise({(VOI - CONSTANTS(:,57)) -  CONSTANTS(:,58).*floor((VOI - CONSTANTS(:,57))./CONSTANTS(:,58))<CONSTANTS(:,56), 1.00000 }, 0.00000).*CONSTANTS(:,71);
    RATES(:,10) =  - (ALGEBRAIC(:,102)+ALGEBRAIC(:,104))./CONSTANTS(:,16);
    ALGEBRAIC(:,106) = (((((((ALGEBRAIC(:,96))+ALGEBRAIC(:,95))+ALGEBRAIC(:,88))+ALGEBRAIC(:,90))+ALGEBRAIC(:,93)) -  2.00000.*ALGEBRAIC(:,80))+ALGEBRAIC(:,86))+ALGEBRAIC(:,104);
    RATES(:,26) =  - ALGEBRAIC(:,106)./( CONSTANTS(:,85).*CONSTANTS(:,6));
    ALGEBRAIC(:,105) = 1.00000./(1.00000+( CONSTANTS(:,70).*CONSTANTS(:,55))./power(STATES(:,23)+CONSTANTS(:,55), 2.00000));
    ALGEBRAIC(:,107) = ((((ALGEBRAIC(:,100))+ALGEBRAIC(:,101))+ 3.00000.*ALGEBRAIC(:,80))+ 3.00000.*ALGEBRAIC(:,72))+ALGEBRAIC(:,98);
    RATES(:,23) =  ALGEBRAIC(:,105).*( - ALGEBRAIC(:,103)./CONSTANTS(:,13) - ALGEBRAIC(:,107)./( CONSTANTS(:,13).*CONSTANTS(:,6)));
   RATES = RATES';
end

% Calculate algebraic variables
function ALGEBRAIC = computeAlgebraic(ALGEBRAIC, CONSTANTS, STATES, VOI)
    statesSize = size(STATES);
    statesColumnCount = statesSize(2);
    if ( statesColumnCount == 1)
        STATES = STATES';
        utilOnes = 1;
    else
        statesRowCount = statesSize(1);
        utilOnes = ones(statesRowCount, 1);
    end
    ALGEBRAIC(:,7) = 1.00000 - 1.00000./(1.00000+power(CONSTANTS(:,27)./STATES(:,9), CONSTANTS(:,28)));
    ALGEBRAIC(:,17) = 0.505000 - 0.427000./(1.00000+exp(( STATES(:,5).*1000.00 - 0.290000)./0.0820000));
    ALGEBRAIC(:,18) = 0.505000 - 0.427000./(1.00000+exp(( STATES(:,6).*1000.00 - 0.290000)./0.0820000));
    ALGEBRAIC(:,19) = 0.505000 - 0.427000./(1.00000+exp(( STATES(:,7).*1000.00 - 0.290000)./0.0820000));
    ALGEBRAIC(:,20) = 0.505000 - 0.427000./(1.00000+exp(( STATES(:,9).*1000.00 - 0.290000)./0.0820000));
    ALGEBRAIC(:,21) = 1.00000./(1.00000+exp(( STATES(:,5).*1000.00 - (STATES(:,27)+0.0200000))./0.0100000));
    ALGEBRAIC(:,22) = 1.00000./(1.00000+exp(( STATES(:,6).*1000.00 - (STATES(:,28)+0.0200000))./0.0100000));
    ALGEBRAIC(:,23) = 1.00000./(1.00000+exp(( STATES(:,7).*1000.00 - (STATES(:,29)+0.0200000))./0.0100000));
    ALGEBRAIC(:,24) = 1.00000./(1.00000+exp(( STATES(:,9).*1000.00 - (STATES(:,30)+0.0200000))./0.0100000));
    ALGEBRAIC(:,25) = 1.00000 - 1.00000./(1.00000+exp(( STATES(:,5).*1000.00 - (STATES(:,27)+0.220000))./0.0300000));
    ALGEBRAIC(:,26) = 1.00000 - 1.00000./(1.00000+exp(( STATES(:,6).*1000.00 - (STATES(:,28)+0.220000))./0.0300000));
    ALGEBRAIC(:,27) = 1.00000 - 1.00000./(1.00000+exp(( STATES(:,7).*1000.00 - (STATES(:,29)+0.220000))./0.0300000));
    ALGEBRAIC(:,28) = 1.00000 - 1.00000./(1.00000+exp(( STATES(:,9).*1000.00 - (STATES(:,30)+0.220000))./0.0300000));
    ALGEBRAIC(:,6) = 1.00000./(1.00000+exp((STATES(:,10)+9.00000)./ - 5.80000));
    ALGEBRAIC(:,33) =  0.00270000.*exp( - power((STATES(:,10)+35.0000)./30.0000, 2.00000))+0.00200000;
    ALGEBRAIC(:,5) = 1.00000./(1.00000+exp((STATES(:,10)+27.4000)./7.10000));
    ALGEBRAIC(:,34) = (( 0.986980.*exp( - power((STATES(:,10)+30.1605)./7.09396, 2.00000))+0.0427500./(1.00000+exp((STATES(:,10) - 51.6155)./ - 80.6133)))+0.0357600./(1.00000+exp((STATES(:,10)+29.5727)./13.2176))) - 0.00821000;
    ALGEBRAIC(:,35) =  1.33230.*exp( - power((STATES(:,10)+40.0000)./14.2000, 2.00000))+0.0626000;
    ALGEBRAIC(:,8) = 1.00000./(1.00000+exp((STATES(:,10)+97.8287)./12.4802));
    ALGEBRAIC(:,36) = 1.00000./( 0.00332000.*exp( - STATES(:,10)./16.5410)+ 23.7184.*exp(STATES(:,10)./16.5410));
    ALGEBRAIC(:,9) = 1.00000./(1.00000+exp((STATES(:,10)+15.0000)./ - 6.00000));
    ALGEBRAIC(:,37) =  0.217180.*exp( - power((STATES(:,10)+20.1376)./22.1996, 2.00000))+0.0311800;
    ALGEBRAIC(:,10) = 1.00000./(1.00000+exp((STATES(:,10) - 19.9000)./ - 12.7000));
    ALGEBRAIC(:,38) =  0.400000.*exp( - power((STATES(:,10) - 20.0000)./20.0000, 2.00000))+0.700000;
    ALGEBRAIC(:,11) = 1.00000./(1.00000+exp((STATES(:,10)+6.00000)./ - 8.60000));
    ALGEBRAIC(:,39) = 0.00900000./(1.00000+exp((STATES(:,10)+5.00000)./12.0000))+0.000500000;
    ALGEBRAIC(:,12) = 1.00000./(1.00000+exp((STATES(:,10)+7.50000)./10.0000));
    ALGEBRAIC(:,40) = 0.590000./(1.00000+exp((STATES(:,10)+60.0000)./10.0000))+3.05000;
    ALGEBRAIC(:,13) = 1.00000./(1.00000+exp((STATES(:,10)+63.6000)./5.30000));
    ALGEBRAIC(:,41) = 0.0300000./(1.00000+exp((STATES(:,10)+35.1000)./3.20000))+0.000300000;
    ALGEBRAIC(:,42) = 0.120000./(1.00000+exp((STATES(:,10)+35.1000)./3.20000))+0.00300000;
    ALGEBRAIC(:,14) = 1.00000./(1.00000+exp((STATES(:,10)+27.1200)./ - 8.21000));
    ALGEBRAIC(:,43) =  4.20000e-05.*exp( - power((STATES(:,10)+25.5700)./28.8000, 2.00000))+2.40000e-05;
    ALGEBRAIC(:,15) = 1.00000./(1.00000+exp((STATES(:,10) - 1.00000)./ - 11.0000));
    ALGEBRAIC(:,44) =  0.00350000.*exp( - power((STATES(:,10)+0.00000)./30.0000, 2.00000))+0.00150000;
    ALGEBRAIC(:,16) = 1.00000./(1.00000+exp((STATES(:,10)+40.5000)./11.5000));
    ALGEBRAIC(:,45) =  0.0256350.*exp( - power((STATES(:,10)+52.4500)./15.8827, 2.00000))+0.0141400;
    ALGEBRAIC(:,32) =  ( (( CONSTANTS(:,3).*CONSTANTS(:,59))./CONSTANTS(:,61)).*(STATES(:,9) - STATES(:,8))).*1.00000e-06;
    ALGEBRAIC(:,49) = ALGEBRAIC(:,32);
    ALGEBRAIC(:,54) = ( CONSTANTS(:,1).*CONSTANTS(:,7))./power(STATES(:,8)+CONSTANTS(:,7), 2.00000);
    ALGEBRAIC(:,60) = 1.00000./(1.00000+ALGEBRAIC(:,54));
    ALGEBRAIC(:,1) =  ( CONSTANTS(:,15).*(STATES(:,1) - STATES(:,5))).*CONSTANTS(:,60);
    ALGEBRAIC(:,65) =  ( ( (  - CONSTANTS(:,69).*power(STATES(:,1), 2.00000)).*(CONSTANTS(:,52) - STATES(:,39))+ CONSTANTS(:,53).*STATES(:,39)).*CONSTANTS(:,60)).*2.00000;
    ALGEBRAIC(:,56) = 1.00000 - 1.00000./(1.00000+exp((STATES(:,1) - 0.300000)./0.100000));
    ALGEBRAIC(:,61) =  ( ( ( CONSTANTS(:,75).*STATES(:,35)).*STATES(:,31)).*ALGEBRAIC(:,56)).*(STATES(:,1) - STATES(:,5));
    ALGEBRAIC(:,73) = (ALGEBRAIC(:,65) - ALGEBRAIC(:,1)) - ALGEBRAIC(:,61);
    ALGEBRAIC(:,29) = 1.00000./(1.00000+( CONSTANTS(:,2).*CONSTANTS(:,8))./power(STATES(:,1)+CONSTANTS(:,8), 2.00000));
    ALGEBRAIC(:,2) =  ( CONSTANTS(:,15).*(STATES(:,2) - STATES(:,6))).*CONSTANTS(:,72);
    ALGEBRAIC(:,66) =  ( ( (  - CONSTANTS(:,69).*power(STATES(:,2), 2.00000)).*(CONSTANTS(:,52) - STATES(:,40))+ CONSTANTS(:,53).*STATES(:,40)).*CONSTANTS(:,72)).*2.00000;
    ALGEBRAIC(:,57) = 1.00000 - 1.00000./(1.00000+exp((STATES(:,2) - 0.300000)./0.100000));
    ALGEBRAIC(:,62) =  ( ( ( CONSTANTS(:,79).*STATES(:,36)).*STATES(:,32)).*ALGEBRAIC(:,57)).*(STATES(:,2) - STATES(:,6));
    ALGEBRAIC(:,74) = (ALGEBRAIC(:,66) - ALGEBRAIC(:,2)) - ALGEBRAIC(:,62);
    ALGEBRAIC(:,30) = 1.00000./(1.00000+( CONSTANTS(:,2).*CONSTANTS(:,8))./power(STATES(:,2)+CONSTANTS(:,8), 2.00000));
    ALGEBRAIC(:,3) =  ( CONSTANTS(:,15).*(STATES(:,3) - STATES(:,7))).*CONSTANTS(:,77);
    ALGEBRAIC(:,67) =  ( ( (  - CONSTANTS(:,69).*power(STATES(:,3), 2.00000)).*(CONSTANTS(:,52) - STATES(:,41))+ CONSTANTS(:,53).*STATES(:,41)).*CONSTANTS(:,77)).*2.00000;
    ALGEBRAIC(:,58) = 1.00000 - 1.00000./(1.00000+exp((STATES(:,3) - 0.300000)./0.100000));
    ALGEBRAIC(:,63) =  ( ( ( CONSTANTS(:,82).*STATES(:,37)).*STATES(:,33)).*ALGEBRAIC(:,58)).*(STATES(:,3) - STATES(:,7));
    ALGEBRAIC(:,75) = (ALGEBRAIC(:,67) - ALGEBRAIC(:,3)) - ALGEBRAIC(:,63);
    ALGEBRAIC(:,31) = 1.00000./(1.00000+( CONSTANTS(:,2).*CONSTANTS(:,8))./power(STATES(:,3)+CONSTANTS(:,8), 2.00000));
    ALGEBRAIC(:,69) =  ( ( ( CONSTANTS(:,68).*power(STATES(:,5), 2.00000)).*(CONSTANTS(:,52) - STATES(:,39)) -  CONSTANTS(:,76).*STATES(:,39)).*CONSTANTS(:,60)).*2.00000;
    ALGEBRAIC(:,70) =  ( ( ( CONSTANTS(:,68).*power(STATES(:,6), 2.00000)).*(CONSTANTS(:,52) - STATES(:,40)) -  CONSTANTS(:,76).*STATES(:,40)).*CONSTANTS(:,72)).*2.00000;
    ALGEBRAIC(:,71) =  ( ( ( CONSTANTS(:,68).*power(STATES(:,7), 2.00000)).*(CONSTANTS(:,52) - STATES(:,41)) -  CONSTANTS(:,76).*STATES(:,41)).*CONSTANTS(:,77)).*2.00000;
    ALGEBRAIC(:,76) = ( - ALGEBRAIC(:,69)+ALGEBRAIC(:,1))+ALGEBRAIC(:,61);
    ALGEBRAIC(:,46) = ( CONSTANTS(:,1).*CONSTANTS(:,7))./power(STATES(:,5)+CONSTANTS(:,7), 2.00000);
    ALGEBRAIC(:,51) = 1.00000./(1.00000+ALGEBRAIC(:,46));
    ALGEBRAIC(:,77) = ( - ALGEBRAIC(:,70)+ALGEBRAIC(:,2))+ALGEBRAIC(:,62);
    ALGEBRAIC(:,47) = ( CONSTANTS(:,1).*CONSTANTS(:,7))./power(STATES(:,6)+CONSTANTS(:,7), 2.00000);
    ALGEBRAIC(:,52) = 1.00000./(1.00000+ALGEBRAIC(:,47));
    ALGEBRAIC(:,78) = ( - ALGEBRAIC(:,71)+ALGEBRAIC(:,3))+ALGEBRAIC(:,63);
    ALGEBRAIC(:,48) = ( CONSTANTS(:,1).*CONSTANTS(:,7))./power(STATES(:,7)+CONSTANTS(:,7), 2.00000);
    ALGEBRAIC(:,53) = 1.00000./(1.00000+ALGEBRAIC(:,48));
    ALGEBRAIC(:,4) =  ( CONSTANTS(:,15).*(STATES(:,4) - STATES(:,9))).*CONSTANTS(:,13);
    ALGEBRAIC(:,89) =  ( ( (  - CONSTANTS(:,69).*power(STATES(:,4), 2.00000)).*(CONSTANTS(:,52) - STATES(:,42))+ CONSTANTS(:,53).*STATES(:,42)).*CONSTANTS(:,13)).*2.00000;
    ALGEBRAIC(:,85) = 1.00000 - 1.00000./(1.00000+exp((STATES(:,4) - 0.300000)./0.100000));
    ALGEBRAIC(:,87) =  ( ( ( CONSTANTS(:,67).*STATES(:,38)).*STATES(:,34)).*ALGEBRAIC(:,85)).*(STATES(:,4) - STATES(:,9));
    ALGEBRAIC(:,92) = (ALGEBRAIC(:,89) - ALGEBRAIC(:,4)) - ALGEBRAIC(:,87);
    ALGEBRAIC(:,50) = 1.00000./(1.00000+( CONSTANTS(:,2).*CONSTANTS(:,8))./power(STATES(:,4)+CONSTANTS(:,8), 2.00000));
    ALGEBRAIC(:,91) =  ( ( ( CONSTANTS(:,68).*power(STATES(:,9), 2.00000)).*(CONSTANTS(:,52) - STATES(:,42)) -  CONSTANTS(:,76).*STATES(:,42)).*CONSTANTS(:,13)).*2.00000;
    ALGEBRAIC(:,94) = (( - ALGEBRAIC(:,32)+ALGEBRAIC(:,4)) - ALGEBRAIC(:,91))+ALGEBRAIC(:,87);
    ALGEBRAIC(:,55) = 1.00000./(((1.00000+( CONSTANTS(:,12).*CONSTANTS(:,10))./power(STATES(:,9)+CONSTANTS(:,10), 2.00000))+( CONSTANTS(:,11).*CONSTANTS(:,9))./power(STATES(:,9)+CONSTANTS(:,9), 2.00000))+( CONSTANTS(:,1).*CONSTANTS(:,7))./power(STATES(:,9)+CONSTANTS(:,7), 2.00000));
    ALGEBRAIC(:,59) =  ( ( ( ( CONSTANTS(:,25).*STATES(:,11)).*STATES(:,14)).*STATES(:,12)).*STATES(:,13)).*(STATES(:,10) - CONSTANTS(:,24));
    ALGEBRAIC(:,64) = ( CONSTANTS(:,29).*STATES(:,9))./(CONSTANTS(:,30)+STATES(:,9));
    ALGEBRAIC(:,81) = ( CONSTANTS(:,66).*log(CONSTANTS(:,20)./STATES(:,9)))./2.00000;
    ALGEBRAIC(:,82) =  CONSTANTS(:,23).*(STATES(:,10) - ALGEBRAIC(:,81));
    ALGEBRAIC(:,72) = ( CONSTANTS(:,39).*( ( exp( ( CONSTANTS(:,38).*STATES(:,10)).*CONSTANTS(:,74)).*power(STATES(:,23), 3.00000)).*CONSTANTS(:,20) -  ( ( exp( ( (CONSTANTS(:,38) - 1.00000).*STATES(:,10)).*CONSTANTS(:,74)).*power(CONSTANTS(:,22), 3.00000)).*STATES(:,9)).*CONSTANTS(:,37)))./(1.00000+ CONSTANTS(:,36).*( ( power(CONSTANTS(:,22), 3.00000).*STATES(:,9)).*CONSTANTS(:,37)+ power(STATES(:,23), 3.00000).*CONSTANTS(:,20)));
    ALGEBRAIC(:,83) = (( - ALGEBRAIC(:,59) - ALGEBRAIC(:,82)) - ALGEBRAIC(:,64))+ 2.00000.*ALGEBRAIC(:,72);
    ALGEBRAIC(:,103) =  ( (( CONSTANTS(:,54).*CONSTANTS(:,59))./CONSTANTS(:,62)).*(STATES(:,23) - STATES(:,43))).*1.00000e-06;
    ALGEBRAIC(:,84) =  CONSTANTS(:,66).*log(CONSTANTS(:,21)./STATES(:,26));
    ALGEBRAIC(:,86) =  ( CONSTANTS(:,31).*STATES(:,15)).*( (1.00000 - 0.267700).*(STATES(:,10) - ALGEBRAIC(:,84)));
    ALGEBRAIC(:,97) =  CONSTANTS(:,66).*log(CONSTANTS(:,22)./STATES(:,23));
    ALGEBRAIC(:,98) =  ( CONSTANTS(:,31).*STATES(:,15)).*( 0.267700.*(STATES(:,10) - ALGEBRAIC(:,97)));
    ALGEBRAIC(:,99) = ALGEBRAIC(:,86)+ALGEBRAIC(:,98);
    ALGEBRAIC(:,88) = ( ( CONSTANTS(:,63).*power( CONSTANTS(:,21).*1.00000, 0.445700)).*(STATES(:,10) - ALGEBRAIC(:,84)))./(1.00000+exp( ( 1.50000.*((STATES(:,10) - ALGEBRAIC(:,84))+3.60000)).*CONSTANTS(:,74)));
    ALGEBRAIC(:,68) = 1.00000./(1.00000+exp((STATES(:,10)+55.0000)./24.0000));
    ALGEBRAIC(:,90) =  ( ( CONSTANTS(:,32).*STATES(:,16)).*ALGEBRAIC(:,68)).*(STATES(:,10) - ALGEBRAIC(:,84));
    ALGEBRAIC(:,93) =  ( CONSTANTS(:,33).*STATES(:,17)).*(STATES(:,10) - ALGEBRAIC(:,84));
    ALGEBRAIC(:,95) =  ( ( CONSTANTS(:,64).*STATES(:,18)).*STATES(:,19)).*(STATES(:,10) - ALGEBRAIC(:,84));
    ALGEBRAIC(:,100) = ( ( ( ( ( ( ( CONSTANTS(:,34).*power(STATES(:,22), 3.00000)).*( 0.900000.*STATES(:,20)+ 0.100000.*STATES(:,21))).*CONSTANTS(:,22)).*STATES(:,10)).*CONSTANTS(:,6)).*CONSTANTS(:,74)).*(exp( (STATES(:,10) - ALGEBRAIC(:,97)).*CONSTANTS(:,74)) - 1.00000))./(exp( STATES(:,10).*CONSTANTS(:,74)) - 1.00000);
    ALGEBRAIC(:,101) =  CONSTANTS(:,35).*(STATES(:,10) - ALGEBRAIC(:,97));
    ALGEBRAIC(:,79) = power( STATES(:,23).*1.00000, 1.50000);
    ALGEBRAIC(:,80) = ( (( (( CONSTANTS(:,40).*CONSTANTS(:,21))./(CONSTANTS(:,21)+CONSTANTS(:,41))).*ALGEBRAIC(:,79))./(ALGEBRAIC(:,79)+power(CONSTANTS(:,42), 1.50000))).*(STATES(:,10)+150.000))./(STATES(:,10)+200.000);
    ALGEBRAIC(:,96) =  ( ( CONSTANTS(:,65).*STATES(:,24)).*STATES(:,25)).*(STATES(:,10) - ALGEBRAIC(:,84));
    ALGEBRAIC(:,102) = ((((((((((((ALGEBRAIC(:,100))+ALGEBRAIC(:,59))+ALGEBRAIC(:,96))+ALGEBRAIC(:,95))+ALGEBRAIC(:,88))+ALGEBRAIC(:,90))+ALGEBRAIC(:,93))+ALGEBRAIC(:,101))+ALGEBRAIC(:,82))+ALGEBRAIC(:,80))+ALGEBRAIC(:,64))+ALGEBRAIC(:,72))+ALGEBRAIC(:,99);
    ALGEBRAIC(:,104) =  piecewise({(VOI - CONSTANTS(:,57)) -  CONSTANTS(:,58).*floor((VOI - CONSTANTS(:,57))./CONSTANTS(:,58))<CONSTANTS(:,56), 1.00000 }, 0.00000).*CONSTANTS(:,71);
    ALGEBRAIC(:,106) = (((((((ALGEBRAIC(:,96))+ALGEBRAIC(:,95))+ALGEBRAIC(:,88))+ALGEBRAIC(:,90))+ALGEBRAIC(:,93)) -  2.00000.*ALGEBRAIC(:,80))+ALGEBRAIC(:,86))+ALGEBRAIC(:,104);
    ALGEBRAIC(:,105) = 1.00000./(1.00000+( CONSTANTS(:,70).*CONSTANTS(:,55))./power(STATES(:,23)+CONSTANTS(:,55), 2.00000));
    ALGEBRAIC(:,107) = ((((ALGEBRAIC(:,100))+ALGEBRAIC(:,101))+ 3.00000.*ALGEBRAIC(:,80))+ 3.00000.*ALGEBRAIC(:,72))+ALGEBRAIC(:,98);
end

% Compute result of a piecewise function
function x = piecewise(cases, default)
    set = [0];
    for i = 1:2:length(cases)
        if (length(cases{i+1}) == 1)
            x(cases{i} & ~set,:) = cases{i+1};
        else
            x(cases{i} & ~set,:) = cases{i+1}(cases{i} & ~set);
        end
        set = set | cases{i};
        if(set), break, end
    end
    if (length(default) == 1)
        x(~set,:) = default;
    else
        x(~set,:) = default(~set);
    end
end

% Pad out or shorten strings to a set length
function strout = strpad(strin)
    req_length = 160;
    insize = size(strin,2);
    if insize > req_length
        strout = strin(1:req_length);
    else
        strout = [strin, blanks(req_length - insize)];
    end
end