/*
 * This code is generated by BioUML FrameWork 
 * for BIOMD0000000052.xml diagram  at 2008.03.20 15:04:37
 */
import biouml.plugins.simulation.ae.NewtonSolver;
import biouml.plugins.simulation.java.JavaBaseModel;
import ru.biosoft.math.MathRoutines;

public class BIOMD0000000052 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__J1 = _J1_K1*x[5];
        rate__J10 = _J10_K10*x[4]*x[8];
        rate__J11 = _J11_K11*x[0];
        rate__J2 = _J2_K2*x[4];
        rate__J3 = _J3_K3*x[5];
        rate__J4 = _J4_K4*x[4];
        rate__J5 = _J5_K5*x[4];
        rate__J6 = _J6_K6*x[7];
        rate__J7 = _J7_K7*x[5]*x[8];
        rate__J8 = _J8_K8*x[2];
        rate__J9 = _J9_K9*x[2];
    }

    public void Init()
    {
        initialValues = getInitialValues();
/*
 * Initialize variables
 */
        _J10_K10 = 1.5E-4; // initial value of _J10_K10
        _J11_K11 = 0.12514; // initial value of _J11_K11
        _J1_K1 = 0.01; // initial value of _J1_K1
        _J2_K2 = 0.00509; // initial value of _J2_K2
        _J3_K3 = 4.7E-4; // initial value of _J3_K3
        _J4_K4 = 0.0011; // initial value of _J4_K4
        _J5_K5 = 0.00712; // initial value of _J5_K5
        _J6_K6 = 0.00439; // initial value of _J6_K6
        _J7_K7 = 1.8E-4; // initial value of _J7_K7
        _J8_K8 = 0.11134; // initial value of _J8_K8
        _J9_K9 = 0.14359; // initial value of _J9_K9
    }

    /*
     * Model variables initial values
     */
    protected double rate__J1;
    protected double rate__J10;
    protected double rate__J11;
    protected double rate__J2;
    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 _J10_K10;
    protected double _J11_K11;
    protected double _J1_K1;
    protected double _J2_K2;
    protected double _J3_K3;
    protected double _J4_K4;
    protected double _J5_K5;
    protected double _J6_K6;
    protected double _J7_K7;
    protected double _J8_K8;
    protected double _J9_K9;

    public double[] extendResult(double time,double [] x)
    {
        this.time = time;


        double[] y = new double[11];
        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];
        return y;
    }
    public double[] getInitialValues()
    {
        double [] x = new double[11];
        this.time = 0.0;
        x[0] = 0.0; // - $"compartment.AMP"
        x[1] = 0.0; // - $"compartment.Acetic_acid"
        x[2] = 0.0; // - $"compartment.Amadori"
        x[3] = 0.0; // - $"compartment.Formic_acid"
        x[4] = 0.0; // - $"compartment.Fru"
        x[5] = 160.0; // - $"compartment.Glu"
        x[6] = 0.0; // - $"compartment.Melanoidin"
        x[7] = 0.0; // - $"compartment.Triose"
        x[8] = 15.0; // - $"compartment.lys_R"
        x[9] = 0.0; // - $compartment.C5
        x[10] = 0.0; // - $compartment.Cn

        __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 'BIOMD0000000052.xml' model
         */
    public void __internalDyDt_0(double time, double [] x, double[] result)
    {
        result[0] = +rate__J10-rate__J11+rate__J9;
        result[1] = +rate__J6+rate__J8;
        result[2] = +rate__J7-rate__J8-rate__J9;
        result[3] = +rate__J3+rate__J4;
        result[4] = -rate__J10+rate__J1-rate__J2-rate__J4-rate__J5;
        result[5] = -rate__J1+rate__J2-rate__J3-rate__J7;
        result[6] = +rate__J11;
        result[7] = +rate__J5*2-rate__J6;
        result[8] = -rate__J10-rate__J7+rate__J8;
        result[9] = +rate__J3+rate__J4;
        result[10] = +rate__J6;
    }
    protected double [] calculateResult(double time, double[] x)
    {
        double[] result = new double[11];
        __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 ...