/*
 * This code is generated by BioUML FrameWork 
 * for BIOMD0000000023.xml diagram  at 2008.03.20 15:04:00
 */
import biouml.plugins.simulation.ae.NewtonSolver;
import biouml.plugins.simulation.java.JavaBaseModel;
import ru.biosoft.math.MathRoutines;

public class BIOMD0000000023 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_v1 = compartment*(v1_Vmax1*_compartment_Fruex_/(v1_Km1Fruex*(1 + x[0]/v1_Ki1Fru) + _compartment_Fruex_));
        rate_v10 = compartment*(v10_Vmax10*0.0575*x[2]/(v10_Km10F6P + 0.0575*x[2]));
        rate_v11 = compartment*compartment*(v11_Vmax11*x[3]/(v11_Km11Suc + x[3]));
        rate_v2 = compartment*(v2_Vmax2*_compartment_Glcex_/(v2_Km2Glcex*(1 + x[1]/v2_Ki2Glc) + _compartment_Glcex_));
        rate_v3 = compartment*(v3_Vmax3*(x[1]/v3_Km3Glc)*(_compartment_ATP_/v3_Km3ATP)/((1 + _compartment_ATP_/v3_Km3ATP)*(1 + x[1]/v3_Km3Glc + x[0]/v3_Km4Fru + 0.113*x[2]/v3_Ki3G6P + 0.0575*x[2]/v3_Ki4F6P)));
        rate_v4 = compartment*(v4_Vmax4*(x[0]/v4_Km4Fru)*(_compartment_ATP_/v4_Km4ATP)/((1 + _compartment_ATP_/v4_Km4ATP)*(1 + x[1]/v4_Km3Glc + x[0]/v4_Km4Fru + 0.113*x[2]/v4_Ki3G6P + 0.0575*x[2]/v4_Ki4F6P)));
        rate_v5 = compartment*(v5_Vmax5/(1 + x[0]/v5_Ki5Fru)*(x[0]/v5_Km5Fru)*(_compartment_ATP_/v5_Km5ATP)/(1 + x[0]/v5_Km5Fru + _compartment_ATP_/v5_Km5ATP + x[0]*_compartment_ATP_/(v5_Km5Fru*v5_Km5ATP) + _compartment_ADP_/v5_Ki5ADP));
        rate_v6 = compartment*(v6_Vmax6f*(0.0575*x[2]*0.8231*x[2] - x[4]*_compartment_UDP_/v6_Keq6)/(0.0575*x[2]*0.8231*x[2]*(1 + x[4]/v6_Ki6Suc6P) + v6_Km6F6P*(1 + _compartment_phos_/v6_Ki6Pi)*(0.8231*x[2] + v6_Ki6UDPGlc) + v6_Km6UDPGlc*0.0575*x[2] + v6_Vmax6f/(v6_Vmax6r*v6_Keq6)*(v6_Km6UDP*x[4]*(1 + 0.8231*x[2]/v6_Ki6UDPGlc) + _compartment_UDP_*(v6_Km6Suc6P*(1 + v6_Km6UDPGlc*0.0575*x[2]/(v6_Ki6UDPGlc*v6_Km6F6P*(1 + _compartment_phos_/v6_Ki6Pi))) + x[4]*(1 + 0.0575*x[2]/v6_Ki6F6P)))));
        rate_v7 = compartment*(v7_Vmax7*x[4]/(v7_Km7Suc6P + x[4]));
        rate_v8 = compartment*(-v8_Vmax8f*(x[3]*_compartment_UDP_ - x[0]*0.8231*x[2]/v8_Keq8)/(x[3]*_compartment_UDP_*(1 + x[0]/v8_Ki8Fru) + v8_Km8Suc*(_compartment_UDP_ + v8_Ki8UDP) + v8_Km8UDP*x[3] + v8_Vmax8f/(v8_Vmax8r*v8_Keq8)*(v8_Km8UDPGlc*x[0]*(1 + _compartment_UDP_/v8_Ki8UDP) + 0.8231*x[2]*(v8_Km8Fru*(1 + v8_Km8UDP*x[3]/(v8_Ki8UDP*v8_Km8Suc)) + x[0]*(1 + x[3]/v8_Ki8Suc)))));
        rate_v9 = compartment*(v9_Vmax9/(1 + x[1]/v9_Ki9Glc)*x[3]/(v9_Km9Suc*(1 + x[0]/v9_Ki9Fru) + x[3]));
    }

    public void Init()
    {
        initialValues = getInitialValues();
/*
 * Initialize variables
 */
        _compartment_ADP_ = 0.2; // initial value of $"compartment.ADP"
        _compartment_ATP_ = 1.0; // initial value of $"compartment.ATP"
        _compartment_Fruex_ = 5.0; // initial value of $"compartment.Fruex"
        _compartment_Glcex_ = 5.0; // initial value of $"compartment.Glcex"
        _compartment_UDP_ = 0.2; // initial value of $"compartment.UDP"
        _compartment_phos_ = 5.1; // initial value of $"compartment.phos"
        compartment = 1.0; // initial value of $compartment
        v10_Km10F6P = 0.2; // initial value of v10_Km10F6P
        v10_Vmax10 = 0.1; // initial value of v10_Vmax10
        v11_Km11Suc = 100.0; // initial value of v11_Km11Suc
        v11_Vmax11 = 1.0; // initial value of v11_Vmax11
        v1_Ki1Fru = 1.0; // initial value of v1_Ki1Fru
        v1_Km1Fruex = 0.2; // initial value of v1_Km1Fruex
        v1_Vmax1 = 0.286; // initial value of v1_Vmax1
        v2_Ki2Glc = 1.0; // initial value of v2_Ki2Glc
        v2_Km2Glcex = 0.2; // initial value of v2_Km2Glcex
        v2_Vmax2 = 0.286; // initial value of v2_Vmax2
        v3_Ki3G6P = 0.1; // initial value of v3_Ki3G6P
        v3_Ki4F6P = 10.0; // initial value of v3_Ki4F6P
        v3_Km3ATP = 0.25; // initial value of v3_Km3ATP
        v3_Km3Glc = 0.07; // initial value of v3_Km3Glc
        v3_Km4Fru = 10.0; // initial value of v3_Km4Fru
        v3_Vmax3 = 0.197; // initial value of v3_Vmax3
        v4_Ki3G6P = 0.1; // initial value of v4_Ki3G6P
        v4_Ki4F6P = 10.0; // initial value of v4_Ki4F6P
        v4_Km3Glc = 0.07; // initial value of v4_Km3Glc
        v4_Km4ATP = 0.25; // initial value of v4_Km4ATP
        v4_Km4Fru = 10.0; // initial value of v4_Km4Fru
        v4_Vmax4 = 0.197; // initial value of v4_Vmax4
        v5_Ki5ADP = 2.0; // initial value of v5_Ki5ADP
        v5_Ki5Fru = 12.0; // initial value of v5_Ki5Fru
        v5_Km5ATP = 0.085; // initial value of v5_Km5ATP
        v5_Km5Fru = 0.1; // initial value of v5_Km5Fru
        v5_Vmax5 = 0.164; // initial value of v5_Vmax5
        v6_Keq6 = 10.0; // initial value of v6_Keq6
        v6_Ki6F6P = 0.4; // initial value of v6_Ki6F6P
        v6_Ki6Pi = 3.0; // initial value of v6_Ki6Pi
        v6_Ki6Suc6P = 0.07; // initial value of v6_Ki6Suc6P
        v6_Ki6UDPGlc = 1.4; // initial value of v6_Ki6UDPGlc
        v6_Km6F6P = 0.6; // initial value of v6_Km6F6P
        v6_Km6Suc6P = 0.1; // initial value of v6_Km6Suc6P
        v6_Km6UDP = 0.3; // initial value of v6_Km6UDP
        v6_Km6UDPGlc = 1.8; // initial value of v6_Km6UDPGlc
        v6_Vmax6f = 0.379; // initial value of v6_Vmax6f
        v6_Vmax6r = 0.2; // initial value of v6_Vmax6r
        v7_Km7Suc6P = 0.1; // initial value of v7_Km7Suc6P
        v7_Vmax7 = 0.5; // initial value of v7_Vmax7
        v8_Keq8 = 5.0; // initial value of v8_Keq8
        v8_Ki8Fru = 4.0; // initial value of v8_Ki8Fru
        v8_Ki8Suc = 40.0; // initial value of v8_Ki8Suc
        v8_Ki8UDP = 0.3; // initial value of v8_Ki8UDP
        v8_Km8Fru = 4.0; // initial value of v8_Km8Fru
        v8_Km8Suc = 50.0; // initial value of v8_Km8Suc
        v8_Km8UDP = 0.3; // initial value of v8_Km8UDP
        v8_Km8UDPGlc = 0.3; // initial value of v8_Km8UDPGlc
        v8_Vmax8f = 0.677; // initial value of v8_Vmax8f
        v8_Vmax8r = 0.3; // initial value of v8_Vmax8r
        v9_Ki9Fru = 15.0; // initial value of v9_Ki9Fru
        v9_Ki9Glc = 15.0; // initial value of v9_Ki9Glc
        v9_Km9Suc = 10.0; // initial value of v9_Km9Suc
        v9_Vmax9 = 0.372; // initial value of v9_Vmax9
    }

    /*
     * Model variables initial values
     */
    protected double _compartment_ADP_;
    protected double _compartment_ATP_;
    protected double _compartment_Fruex_;
    protected double _compartment_Glcex_;
    protected double _compartment_Sucvac_;
    protected double _compartment_UDP_;
    protected double _compartment_glycolysis_;
    protected double _compartment_phos_;
    protected double rate_v1;
    protected double rate_v10;
    protected double rate_v11;
    protected double rate_v2;
    protected double rate_v3;
    protected double rate_v4;
    protected double rate_v5;
    protected double rate_v6;
    protected double rate_v7;
    protected double rate_v8;
    protected double rate_v9;
    protected double compartment;
    protected double v10_Km10F6P;
    protected double v10_Vmax10;
    protected double v11_Km11Suc;
    protected double v11_Vmax11;
    protected double v1_Ki1Fru;
    protected double v1_Km1Fruex;
    protected double v1_Vmax1;
    protected double v2_Ki2Glc;
    protected double v2_Km2Glcex;
    protected double v2_Vmax2;
    protected double v3_Ki3G6P;
    protected double v3_Ki4F6P;
    protected double v3_Km3ATP;
    protected double v3_Km3Glc;
    protected double v3_Km4Fru;
    protected double v3_Vmax3;
    protected double v4_Ki3G6P;
    protected double v4_Ki4F6P;
    protected double v4_Km3Glc;
    protected double v4_Km4ATP;
    protected double v4_Km4Fru;
    protected double v4_Vmax4;
    protected double v5_Ki5ADP;
    protected double v5_Ki5Fru;
    protected double v5_Km5ATP;
    protected double v5_Km5Fru;
    protected double v5_Vmax5;
    protected double v6_Keq6;
    protected double v6_Ki6F6P;
    protected double v6_Ki6Pi;
    protected double v6_Ki6Suc6P;
    protected double v6_Ki6UDPGlc;
    protected double v6_Km6F6P;
    protected double v6_Km6Suc6P;
    protected double v6_Km6UDP;
    protected double v6_Km6UDPGlc;
    protected double v6_Vmax6f;
    protected double v6_Vmax6r;
    protected double v7_Km7Suc6P;
    protected double v7_Vmax7;
    protected double v8_Keq8;
    protected double v8_Ki8Fru;
    protected double v8_Ki8Suc;
    protected double v8_Ki8UDP;
    protected double v8_Km8Fru;
    protected double v8_Km8Suc;
    protected double v8_Km8UDP;
    protected double v8_Km8UDPGlc;
    protected double v8_Vmax8f;
    protected double v8_Vmax8r;
    protected double v9_Ki9Fru;
    protected double v9_Ki9Glc;
    protected double v9_Km9Suc;
    protected double v9_Vmax9;

    public double[] extendResult(double time,double [] x)
    {
        this.time = time;


        double[] y = new double[5];
        y[0] = x[0];
        y[1] = x[1];
        y[2] = x[2];
        y[3] = x[3];
        y[4] = x[4];
        return y;
    }
    public double[] getInitialValues()
    {
        double [] x = new double[5];
        this.time = 0.0;
        x[0] = 1.0; // - $"compartment.Fru"
        x[1] = 1.0; // - $"compartment.Glc"
        x[2] = 1.0; // - $"compartment.HexP"
        x[3] = 1.0; // - $"compartment.Suc"
        x[4] = 1.0; // - $"compartment.Suc6P"

        __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 'BIOMD0000000023.xml' model
         */
    public void __internalDyDt_0(double time, double [] x, double[] result)
    {
        result[0] = +rate_v1-rate_v4-rate_v5-rate_v8+rate_v9;
        result[1] = +rate_v2-rate_v3+rate_v9;
        result[2] = -rate_v10+rate_v3+rate_v4+rate_v5-rate_v6*2-rate_v8;
        result[3] = -rate_v11+rate_v7+rate_v8-rate_v9;
        result[4] = +rate_v6-rate_v7;
    }
    protected double [] calculateResult(double time, double[] x)
    {
        double[] result = new double[5];
        __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 ...