/*
 * This code is generated by BioUML FrameWork 
 * for BIOMD0000000035.xml diagram  at 2008.03.20 15:04:14
 */
import biouml.plugins.simulation.ae.NewtonSolver;
import biouml.plugins.simulation.java.JavaBaseModel;
import ru.biosoft.math.MathRoutines;

public class BIOMD0000000035 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_Reaction1 = x[0]*x[4]*Reaction1_gammaC;
        rate_Reaction10 = x[7]*Reaction10_betaA;
        rate_Reaction11 = x[0]*x[6]*Reaction11_gammaR;
        rate_Reaction12 = x[3]*Reaction12_thetaR;
        rate_Reaction13 = x[6]*Reaction13_alphaR;
        rate_Reaction14 = x[3]*Reaction14_alphaRp;
        rate_Reaction15 = x[8]*Reaction15_deltaMR;
        rate_Reaction16 = x[8]*Reaction16_betaR;
        rate_Reaction2 = x[0]*Reaction2_deltaA;
        rate_Reaction3 = x[1]*Reaction3_deltaA;
        rate_Reaction4 = x[4]*Reaction4_deltaR;
        rate_Reaction5 = x[0]*x[5]*Reaction5_gammaA;
        rate_Reaction6 = x[2]*Reaction6_thetaA;
        rate_Reaction7 = x[5]*Reaction7_alphaA;
        rate_Reaction8 = x[2]*Reaction8_alphaAp;
        rate_Reaction9 = x[7]*Reaction9_deltaMA;
    }

    public void Init()
    {
        initialValues = getInitialValues();
/*
 * Initialize variables
 */
        Reaction10_betaA = 50.0; // initial value of Reaction10_betaA
        Reaction11_gammaR = 1.0; // initial value of Reaction11_gammaR
        Reaction12_thetaR = 100.0; // initial value of Reaction12_thetaR
        Reaction13_alphaR = 0.01; // initial value of Reaction13_alphaR
        Reaction14_alphaRp = 50.0; // initial value of Reaction14_alphaRp
        Reaction15_deltaMR = 0.5; // initial value of Reaction15_deltaMR
        Reaction16_betaR = 5.0; // initial value of Reaction16_betaR
        Reaction1_gammaC = 2.0; // initial value of Reaction1_gammaC
        Reaction2_deltaA = 1.0; // initial value of Reaction2_deltaA
        Reaction3_deltaA = 1.0; // initial value of Reaction3_deltaA
        Reaction4_deltaR = 0.2; // initial value of Reaction4_deltaR
        Reaction5_gammaA = 1.0; // initial value of Reaction5_gammaA
        Reaction6_thetaA = 50.0; // initial value of Reaction6_thetaA
        Reaction7_alphaA = 50.0; // initial value of Reaction7_alphaA
        Reaction8_alphaAp = 500.0; // initial value of Reaction8_alphaAp
        Reaction9_deltaMA = 10.0; // initial value of Reaction9_deltaMA
    }

    /*
     * Model variables initial values
     */
    protected double _deterministicOscillator_EmptySet_;
    protected double rate_Reaction1;
    protected double rate_Reaction10;
    protected double rate_Reaction11;
    protected double rate_Reaction12;
    protected double rate_Reaction13;
    protected double rate_Reaction14;
    protected double rate_Reaction15;
    protected double rate_Reaction16;
    protected double rate_Reaction2;
    protected double rate_Reaction3;
    protected double rate_Reaction4;
    protected double rate_Reaction5;
    protected double rate_Reaction6;
    protected double rate_Reaction7;
    protected double rate_Reaction8;
    protected double rate_Reaction9;
    protected double Reaction10_betaA;
    protected double Reaction11_gammaR;
    protected double Reaction12_thetaR;
    protected double Reaction13_alphaR;
    protected double Reaction14_alphaRp;
    protected double Reaction15_deltaMR;
    protected double Reaction16_betaR;
    protected double Reaction1_gammaC;
    protected double Reaction2_deltaA;
    protected double Reaction3_deltaA;
    protected double Reaction4_deltaR;
    protected double Reaction5_gammaA;
    protected double Reaction6_thetaA;
    protected double Reaction7_alphaA;
    protected double Reaction8_alphaAp;
    protected double Reaction9_deltaMA;

    public double[] extendResult(double time,double [] x)
    {
        this.time = time;


        double[] y = new double[9];
        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];
        return y;
    }
    public double[] getInitialValues()
    {
        double [] x = new double[9];
        this.time = 0.0;
        x[0] = 0.0; // - $"deterministicOscillator.A"
        x[1] = 0.0; // - $"deterministicOscillator.C"
        x[2] = 0.0; // - $"deterministicOscillator.DAp"
        x[3] = 0.0; // - $"deterministicOscillator.DRp"
        x[4] = 0.0; // - $"deterministicOscillator.R"
        x[5] = 1.0; // - $deterministicOscillator.DA
        x[6] = 1.0; // - $deterministicOscillator.DR
        x[7] = 0.0; // - $deterministicOscillator.MA
        x[8] = 0.0; // - $deterministicOscillator.MR

        __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 'BIOMD0000000035.xml' model
         */
    public void __internalDyDt_0(double time, double [] x, double[] result)
    {
        result[0] = +rate_Reaction10-rate_Reaction11+rate_Reaction12-rate_Reaction1-rate_Reaction2-rate_Reaction5+rate_Reaction6;
        result[1] = +rate_Reaction1-rate_Reaction3;
        result[2] = +rate_Reaction5-rate_Reaction6+rate_Reaction8-rate_Reaction8;
        result[3] = +rate_Reaction11-rate_Reaction12+rate_Reaction14-rate_Reaction14;
        result[4] = +rate_Reaction16-rate_Reaction1+rate_Reaction3-rate_Reaction4;
        result[5] = -rate_Reaction5+rate_Reaction6+rate_Reaction7-rate_Reaction7;
        result[6] = -rate_Reaction11+rate_Reaction12+rate_Reaction13-rate_Reaction13;
        result[7] = +rate_Reaction10-rate_Reaction10+rate_Reaction7+rate_Reaction8-rate_Reaction9;
        result[8] = +rate_Reaction13+rate_Reaction14-rate_Reaction15+rate_Reaction16-rate_Reaction16;
    }
    protected double [] calculateResult(double time, double[] x)
    {
        double[] result = new double[9];
        __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 ...