/*
 * This code is generated by BioUML FrameWork 
 * for BIOMD0000000013.xml diagram  at 2008.03.20 15:03:28
 */
import biouml.plugins.simulation.ae.NewtonSolver;
import biouml.plugins.simulation.java.JavaBaseModel;
import ru.biosoft.math.MathRoutines;

public class BIOMD0000000013 extends JavaBaseModel
{

/*
 * Write rules to calculate equation parameters
 */


/*
 * Write rules to calculate equation parameters excluding internal variables.
 */
    public void __internalRateVarInitFunc_0(double time, double[] x)
    {
        rate_J0 = Light_on*J0_Rbco_vm*x[14]/(x[14] + J0_Rbco_km*(1 + x[10]/J0_Rbco_KiPGA + x[6]/J0_Rbco_KiFBP + x[16]/J0_Rbco_KiSBP + x[11]/J0_Rbco_KiPi + _uVol_x_NADPH_ch_/J0_Rbco_KiNADPH));
        rate_J1 = J1_TPI_v*(x[9] - x[3]/J1_q4);
        rate_J10 = J10_PGI_v*(x[5] - x[8]/J10_q14);
        rate_J11 = J11_PGM_v*(x[8] - x[7]/J11_q15);
        rate_J12 = Light_on*J12_LR_vm*x[0]*x[11]/((x[0] + J12_LR_kmADP)*(x[11] + J12_LR_kmPi));
        rate_J13 = Light_on*J13_Ru5Pk_ch_vm*x[13]*x[1]/((x[13] + J13_Ru5Pk_ch_km1*(1 + x[10]/J13_Ru5Pk_ch_KiPGA + x[14]/J13_Ru5Pk_ch_KiRuBP + x[11]/J13_Ru5Pk_ch_KiPi))*(x[1]*(1 + x[0]/J13_Ru5Pk_ch_KiADP1) + J13_Ru5Pk_ch_km2*(1 + x[0]/J13_Ru5Pk_ch_KiADP2)));
        rate_J14 = Light_on*J14_PGK_v*(x[10]*x[1] - x[2]*x[0]/J14_q2);
        rate_J15 = J15_StSyn_vm*x[7]*x[1]/((x[7] + J15_stsyn_ch_km1)*(1 + x[0]/J15_stsyn_ch_Ki)*(x[1] + J15_stsyn_ch_km2) + J15_stsyn_ch_km2*x[11]/(J15_stsyn_ch_ka1*x[10]) + J15_stsyn_ch_ka2*x[5] + J15_stsyn_ch_ka3*x[6]);
        rate_J16 = J16_StPase_Vm*x[11]/(x[11] + J16_StPase_km*(1 + x[7]/J16_StPase_kiG1P));
        rate_J17 = Light_on*J17_FBPase_ch_vm*x[6]/(x[6] + J17_FBPase_ch_km*(1 + x[5]/J17_FBPase_ch_KiF6P + x[11]/J17_FBPase_ch_KiPi));
        rate_J18 = J18_TP_Piap_vm*x[3]/(J18_TP_Piap_kDHAP_ch*(1 + (1 + J18_TP_Piap_kPi_cyt/_uVol_x_Pi_cyt_)*(x[11]/J18_TP_Piap_kPi_ch + x[10]/J18_TP_Piap_kPGA_ch + x[3]/J18_TP_Piap_kDHAP_ch + x[9]/J18_TP_Piap_kGAP_ch)));
        rate_J19 = Light_on*J19_G3Pdh_v*(x[2]*_uVol_x_NADPH_ch_*_uVol_x_Proton_ch_ - _uVol_x_NADP_ch_*x[9]*x[11]/J19_q3);
        rate_J2 = J2_F_Aldo_v*(x[3]*x[9] - x[6]/J2_q5);
        rate_J20 = Light_on*J20_SBPase_ch_vm*x[16]/(x[16] + J20_SBPase_ch_km*(1 + x[11]/J20_SBPase_ch_KiPi));
        rate_J3 = J3_F_TKL_v*(x[5]*x[9] - x[4]*x[17]/J3_q7);
        rate_J4 = J4_E_Aldo_v*(x[4]*x[3] - x[16]/J4_q8);
        rate_J5 = J5_G_TKL_v*(x[9]*x[15] - x[17]*x[12]/J5_q10);
        rate_J6 = J6_R5Piso_v*(x[12] - x[13]/J6_q11);
        rate_J7 = J7_X5Pepi_v*(x[17] - x[13]/J7_q12);
        rate_J8 = J8_PGA_xpMult*J8_TP_Piap_vm*x[10]/(J8_TP_Piap_kPGA_ch*(1 + (1 + J8_TP_Piap_kPi_cyt/_uVol_x_Pi_cyt_)*(x[11]/J8_TP_Piap_kPi_ch + x[10]/J8_TP_Piap_kPGA_ch + x[3]/J8_TP_Piap_kDHAP_ch + x[9]/J8_TP_Piap_kGAP_ch)));
        rate_J9 = J9_TP_Piap_vm*x[9]/(J9_TP_Piap_kGAP_ch*(1 + (1 + J9_TP_Piap_kPi_cyt/_uVol_x_Pi_cyt_)*(x[11]/J9_TP_Piap_kPi_ch + x[10]/J9_TP_Piap_kPGA_ch + x[3]/J9_TP_Piap_kDHAP_ch + x[9]/J9_TP_Piap_kGAP_ch)));
    }

    public void Init()
    {
        initialValues = getInitialValues();
/*
 * Initialize variables
 */
        _uVol_x_CO2_ = 1.0; // initial value of $"uVol.x_CO2"
        _uVol_x_DHAP_cyt_ = 1.0; // initial value of $"uVol.x_DHAP_cyt"
        _uVol_x_GAP_cyt_ = 1.0; // initial value of $"uVol.x_GAP_cyt"
        _uVol_x_NADPH_ch_ = 0.21; // initial value of $"uVol.x_NADPH_ch"
        _uVol_x_NADP_ch_ = 0.29; // initial value of $"uVol.x_NADP_ch"
        _uVol_x_PGA_cyt_ = 1.0; // initial value of $"uVol.x_PGA_cyt"
        _uVol_x_Pi_cyt_ = 0.5; // initial value of $"uVol.x_Pi_cyt"
        _uVol_x_Proton_ch_ = 1.26E-5; // initial value of $"uVol.x_Proton_ch"
        _uVol_x_Starch_ch_ = 1.0; // initial value of $"uVol.x_Starch_ch"
        J0_Rbco_KiFBP = 0.04; // initial value of J0_Rbco_KiFBP
        J0_Rbco_KiNADPH = 0.07; // initial value of J0_Rbco_KiNADPH
        J0_Rbco_KiPGA = 0.84; // initial value of J0_Rbco_KiPGA
        J0_Rbco_KiPi = 0.9; // initial value of J0_Rbco_KiPi
        J0_Rbco_KiSBP = 0.075; // initial value of J0_Rbco_KiSBP
        J0_Rbco_km = 0.02; // initial value of J0_Rbco_km
        J0_Rbco_vm = 340.0; // initial value of J0_Rbco_vm
        J10_PGI_v = 5.0E9; // initial value of J10_PGI_v
        J10_q14 = 2.3; // initial value of J10_q14
        J11_PGM_v = 5.0E9; // initial value of J11_PGM_v
        J11_q15 = 0.058; // initial value of J11_q15
        J12_LR_kmADP = 0.014; // initial value of J12_LR_kmADP
        J12_LR_kmPi = 0.3; // initial value of J12_LR_kmPi
        J12_LR_vm = 1500.0; // initial value of J12_LR_vm
        J13_Ru5Pk_ch_KiADP1 = 2.5; // initial value of J13_Ru5Pk_ch_KiADP1
        J13_Ru5Pk_ch_KiADP2 = 0.4; // initial value of J13_Ru5Pk_ch_KiADP2
        J13_Ru5Pk_ch_KiPGA = 2.0; // initial value of J13_Ru5Pk_ch_KiPGA
        J13_Ru5Pk_ch_KiPi = 4.0; // initial value of J13_Ru5Pk_ch_KiPi
        J13_Ru5Pk_ch_KiRuBP = 0.7; // initial value of J13_Ru5Pk_ch_KiRuBP
        J13_Ru5Pk_ch_km1 = 0.05; // initial value of J13_Ru5Pk_ch_km1
        J13_Ru5Pk_ch_km2 = 0.05; // initial value of J13_Ru5Pk_ch_km2
        J13_Ru5Pk_ch_vm = 10000.0; // initial value of J13_Ru5Pk_ch_vm
        J14_PGK_v = 5.0E9; // initial value of J14_PGK_v
        J14_q2 = 3.1E-4; // initial value of J14_q2
        J15_StSyn_vm = 40.0; // initial value of J15_StSyn_vm
        J15_stsyn_ch_Ki = 10.0; // initial value of J15_stsyn_ch_Ki
        J15_stsyn_ch_ka1 = 0.1; // initial value of J15_stsyn_ch_ka1
        J15_stsyn_ch_ka2 = 0.02; // initial value of J15_stsyn_ch_ka2
        J15_stsyn_ch_ka3 = 0.02; // initial value of J15_stsyn_ch_ka3
        J15_stsyn_ch_km1 = 0.08; // initial value of J15_stsyn_ch_km1
        J15_stsyn_ch_km2 = 0.08; // initial value of J15_stsyn_ch_km2
        J16_StPase_Vm = 40.0; // initial value of J16_StPase_Vm
        J16_StPase_kiG1P = 3.12; // initial value of J16_StPase_kiG1P
        J16_StPase_km = 5.0; // initial value of J16_StPase_km
        J17_FBPase_ch_KiF6P = 0.7; // initial value of J17_FBPase_ch_KiF6P
        J17_FBPase_ch_KiPi = 12.0; // initial value of J17_FBPase_ch_KiPi
        J17_FBPase_ch_km = 0.03; // initial value of J17_FBPase_ch_km
        J17_FBPase_ch_vm = 200.0; // initial value of J17_FBPase_ch_vm
        J18_TP_Piap_kDHAP_ch = 0.077; // initial value of J18_TP_Piap_kDHAP_ch
        J18_TP_Piap_kGAP_ch = 0.075; // initial value of J18_TP_Piap_kGAP_ch
        J18_TP_Piap_kPGA_ch = 0.25; // initial value of J18_TP_Piap_kPGA_ch
        J18_TP_Piap_kPi_ch = 0.63; // initial value of J18_TP_Piap_kPi_ch
        J18_TP_Piap_kPi_cyt = 0.74; // initial value of J18_TP_Piap_kPi_cyt
        J18_TP_Piap_vm = 250.0; // initial value of J18_TP_Piap_vm
        J19_G3Pdh_v = 5.0E9; // initial value of J19_G3Pdh_v
        J19_q3 = 1.6E7; // initial value of J19_q3
        J1_TPI_v = 5.0E9; // initial value of J1_TPI_v
        J1_q4 = 22.0; // initial value of J1_q4
        J20_SBPase_ch_KiPi = 12.0; // initial value of J20_SBPase_ch_KiPi
        J20_SBPase_ch_km = 0.013; // initial value of J20_SBPase_ch_km
        J20_SBPase_ch_vm = 40.0; // initial value of J20_SBPase_ch_vm
        J2_F_Aldo_v = 5.0E9; // initial value of J2_F_Aldo_v
        J2_q5 = 7.1; // initial value of J2_q5
        J3_F_TKL_v = 5.0E9; // initial value of J3_F_TKL_v
        J3_q7 = 0.084; // initial value of J3_q7
        J4_E_Aldo_v = 5.0E9; // initial value of J4_E_Aldo_v
        J4_q8 = 13.0; // initial value of J4_q8
        J5_G_TKL_v = 5.0E9; // initial value of J5_G_TKL_v
        J5_q10 = 0.85; // initial value of J5_q10
        J6_R5Piso_v = 5.0E9; // initial value of J6_R5Piso_v
        J6_q11 = 0.4; // initial value of J6_q11
        J7_X5Pepi_v = 5.0E9; // initial value of J7_X5Pepi_v
        J7_q12 = 0.67; // initial value of J7_q12
        J8_PGA_xpMult = 0.2; // initial value of J8_PGA_xpMult
        J8_TP_Piap_kDHAP_ch = 0.077; // initial value of J8_TP_Piap_kDHAP_ch
        J8_TP_Piap_kGAP_ch = 0.075; // initial value of J8_TP_Piap_kGAP_ch
        J8_TP_Piap_kPGA_ch = 0.25; // initial value of J8_TP_Piap_kPGA_ch
        J8_TP_Piap_kPi_ch = 0.63; // initial value of J8_TP_Piap_kPi_ch
        J8_TP_Piap_kPi_cyt = 0.74; // initial value of J8_TP_Piap_kPi_cyt
        J8_TP_Piap_vm = 250.0; // initial value of J8_TP_Piap_vm
        J9_TP_Piap_kDHAP_ch = 0.077; // initial value of J9_TP_Piap_kDHAP_ch
        J9_TP_Piap_kGAP_ch = 0.075; // initial value of J9_TP_Piap_kGAP_ch
        J9_TP_Piap_kPGA_ch = 0.25; // initial value of J9_TP_Piap_kPGA_ch
        J9_TP_Piap_kPi_ch = 0.63; // initial value of J9_TP_Piap_kPi_ch
        J9_TP_Piap_kPi_cyt = 0.74; // initial value of J9_TP_Piap_kPi_cyt
        J9_TP_Piap_vm = 250.0; // initial value of J9_TP_Piap_vm
        Light_on = 1.0; // initial value of Light_on
    }

    /*
     * Model variables initial values
     */
    protected double _uVol_x_CO2_;
    protected double _uVol_x_DHAP_cyt_;
    protected double _uVol_x_GAP_cyt_;
    protected double _uVol_x_NADPH_ch_;
    protected double _uVol_x_NADP_ch_;
    protected double _uVol_x_PGA_cyt_;
    protected double _uVol_x_Pi_cyt_;
    protected double _uVol_x_Proton_ch_;
    protected double _uVol_x_Starch_ch_;
    protected double rate_J0;
    protected double rate_J1;
    protected double rate_J10;
    protected double rate_J11;
    protected double rate_J12;
    protected double rate_J13;
    protected double rate_J14;
    protected double rate_J15;
    protected double rate_J16;
    protected double rate_J17;
    protected double rate_J18;
    protected double rate_J19;
    protected double rate_J2;
    protected double rate_J20;
    protected double rate_J3;
    protected double rate_J4;
    protected double rate_J5;
    protected double rate_J6;
    protected double rate_J7;
    protected double rate_J8;
    protected double rate_J9;
    protected double J0_Rbco_KiFBP;
    protected double J0_Rbco_KiNADPH;
    protected double J0_Rbco_KiPGA;
    protected double J0_Rbco_KiPi;
    protected double J0_Rbco_KiSBP;
    protected double J0_Rbco_km;
    protected double J0_Rbco_vm;
    protected double J10_PGI_v;
    protected double J10_q14;
    protected double J11_PGM_v;
    protected double J11_q15;
    protected double J12_LR_kmADP;
    protected double J12_LR_kmPi;
    protected double J12_LR_vm;
    protected double J13_Ru5Pk_ch_KiADP1;
    protected double J13_Ru5Pk_ch_KiADP2;
    protected double J13_Ru5Pk_ch_KiPGA;
    protected double J13_Ru5Pk_ch_KiPi;
    protected double J13_Ru5Pk_ch_KiRuBP;
    protected double J13_Ru5Pk_ch_km1;
    protected double J13_Ru5Pk_ch_km2;
    protected double J13_Ru5Pk_ch_vm;
    protected double J14_PGK_v;
    protected double J14_q2;
    protected double J15_StSyn_vm;
    protected double J15_stsyn_ch_Ki;
    protected double J15_stsyn_ch_ka1;
    protected double J15_stsyn_ch_ka2;
    protected double J15_stsyn_ch_ka3;
    protected double J15_stsyn_ch_km1;
    protected double J15_stsyn_ch_km2;
    protected double J16_StPase_Vm;
    protected double J16_StPase_kiG1P;
    protected double J16_StPase_km;
    protected double J17_FBPase_ch_KiF6P;
    protected double J17_FBPase_ch_KiPi;
    protected double J17_FBPase_ch_km;
    protected double J17_FBPase_ch_vm;
    protected double J18_TP_Piap_kDHAP_ch;
    protected double J18_TP_Piap_kGAP_ch;
    protected double J18_TP_Piap_kPGA_ch;
    protected double J18_TP_Piap_kPi_ch;
    protected double J18_TP_Piap_kPi_cyt;
    protected double J18_TP_Piap_vm;
    protected double J19_G3Pdh_v;
    protected double J19_q3;
    protected double J1_TPI_v;
    protected double J1_q4;
    protected double J20_SBPase_ch_KiPi;
    protected double J20_SBPase_ch_km;
    protected double J20_SBPase_ch_vm;
    protected double J2_F_Aldo_v;
    protected double J2_q5;
    protected double J3_F_TKL_v;
    protected double J3_q7;
    protected double J4_E_Aldo_v;
    protected double J4_q8;
    protected double J5_G_TKL_v;
    protected double J5_q10;
    protected double J6_R5Piso_v;
    protected double J6_q11;
    protected double J7_X5Pepi_v;
    protected double J7_q12;
    protected double J8_PGA_xpMult;
    protected double J8_TP_Piap_kDHAP_ch;
    protected double J8_TP_Piap_kGAP_ch;
    protected double J8_TP_Piap_kPGA_ch;
    protected double J8_TP_Piap_kPi_ch;
    protected double J8_TP_Piap_kPi_cyt;
    protected double J8_TP_Piap_vm;
    protected double J9_TP_Piap_kDHAP_ch;
    protected double J9_TP_Piap_kGAP_ch;
    protected double J9_TP_Piap_kPGA_ch;
    protected double J9_TP_Piap_kPi_ch;
    protected double J9_TP_Piap_kPi_cyt;
    protected double J9_TP_Piap_vm;
    protected double Light_on;

    public double[] extendResult(double time,double [] x)
    {
        this.time = time;


        double[] y = new double[18];
        y[0] = x[0];
        y[1] = x[1];
        y[2] = x[2];
        y[3] = x[3];
        y[4] = x[4];
        y[5] = x[5];
        y[6] = x[6];
        y[7] = x[7];
        y[8] = x[8];
        y[9] = x[9];
        y[10] = x[10];
        y[11] = x[11];
        y[12] = x[12];
        y[13] = x[13];
        y[14] = x[14];
        y[15] = x[15];
        y[16] = x[16];
        y[17] = x[17];
        return y;
    }
    public double[] getInitialValues()
    {
        double [] x = new double[18];
        this.time = 0.0;
        x[0] = 0.00149; // - $"uVol.ADP_ch"
        x[1] = 0.49806; // - $"uVol.ATP_ch"
        x[2] = 0.14825; // - $"uVol.BPGA_ch"
        x[3] = 0.29345; // - $"uVol.DHAP_ch"
        x[4] = 0.41021; // - $"uVol.E4P_ch"
        x[5] = 1.36481; // - $"uVol.F6P_ch"
        x[6] = 0.02776; // - $"uVol.FBP_ch"
        x[7] = 0.18206; // - $"uVol.G1P_ch"
        x[8] = 3.1396; // - $"uVol.G6P_ch"
        x[9] = 0.01334; // - $"uVol.GAP_ch"
        x[10] = 3.35479; // - $"uVol.PGA_ch"
        x[11] = 1.5662; // - $"uVol.Pi_ch"
        x[12] = 0.00599; // - $"uVol.R5P_ch"
        x[13] = 0.00235; // - $"uVol.Ru5P_ch"
        x[14] = 0.33644; // - $"uVol.RuBP_ch"
        x[15] = 0.00541; // - $"uVol.S7P_ch"
        x[16] = 1.56486; // - $"uVol.SBP_ch"
        x[17] = 0.00363; // - $"uVol.X5P_ch"

        __internalRateVarInitFunc_0(time, x);

        return x;
    }

/*
 * code for algebraic rules calculations
 */

/*
 * end of code for algebraic rules calculations
 */

    protected void calculateRates(double time, double[] x)
    {

        __internalRateVarInitFunc_0(time, x);

    }

        /*
         * calculate dy/dt for 'BIOMD0000000013.xml' model
         */
    public void __internalDyDt_0(double time, double [] x, double[] result)
    {
        result[0] = -rate_J12+rate_J13+rate_J14+rate_J15;
        result[1] = +rate_J12-rate_J13-rate_J14-rate_J15;
        result[2] = +rate_J14-rate_J19;
        result[3] = -rate_J18+rate_J1-rate_J2-rate_J4;
        result[4] = +rate_J3-rate_J4;
        result[5] = -rate_J10+rate_J17-rate_J3;
        result[6] = -rate_J17+rate_J2;
        result[7] = +rate_J11-rate_J15+rate_J16;
        result[8] = +rate_J10-rate_J11;
        result[9] = +rate_J19-rate_J1-rate_J2-rate_J3-rate_J5-rate_J9;
        result[10] = +rate_J0*2-rate_J14-rate_J8;
        result[11] = -rate_J12+rate_J15-rate_J16+rate_J17+rate_J18+rate_J19+rate_J20+rate_J8+rate_J9;
        result[12] = +rate_J5-rate_J6;
        result[13] = -rate_J13+rate_J6+rate_J7;
        result[14] = -rate_J0+rate_J13;
        result[15] = +rate_J20-rate_J5;
        result[16] = -rate_J20+rate_J4;
        result[17] = +rate_J3+rate_J5-rate_J7;
    }
    protected double [] calculateResult(double time, double[] x)
    {
        double[] result = new double[18];
        __internalDyDt_0(time, x, result);
        return result;
    }
    public double[] dy_dt(double time, double[] x)
    {
        this.time = time;
        calculateRates( time,x );

        return calculateResult( time,x );
    }

} // class ...