/*
 * This code is generated by BioUML FrameWork 
 * for BIOMD0000000022.xml diagram  at 2008.03.20 15:03:59
 */
import biouml.plugins.simulation.ae.NewtonSolver;
import biouml.plugins.simulation.java.JavaBaseModel;
import ru.biosoft.math.MathRoutines;

public class BIOMD0000000022 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 = compartment_0000003*(Reaction1_c1 + (Reaction1_B1 + Math.pow((x[8]/Reaction1_A1), Reaction1_a))*Reaction1_s1/(1 + Reaction1_B1 + Math.pow((x[8]/Reaction1_A1), Reaction1_a) + Math.pow((x[9]/Reaction1_r1), Reaction1_r)));
        rate_Reaction10 = compartment_0000003*(x[3]*Reaction10_T1/(Reaction10_k1 + x[3]));
        rate_Reaction11 = compartment_0000003*(x[1]*Reaction11_v3*_compartment_0000003_species_0000012_ - Reaction11_parameter_0000073*x[0]);
        rate_Reaction12 = compartment_0000003*(x[4]*x[6]*Reaction12_v1 - Reaction12_parameter_0000072*x[3]);
        rate_Reaction16 = compartment_0000003*Reaction16_s4*x[7];
        rate_Reaction18 = compartment_0000003*x[2]*Reaction18_s6;
        rate_Reaction19 = compartment_0000003*Reaction19_s2*x[5];
        rate_Reaction2 = compartment_0000003*Reaction2_D0*x[5];
        rate_Reaction20 = Drosophilia*Reaction20_D0*x[4];
        rate_Reaction21 = compartment_0000003*Reaction21_D0*x[3];
        rate_Reaction23 = _compartment_0000003_compartment_0000002_*Reaction23_D0*x[9];
        rate_Reaction24 = compartment_0000003*x[0]*Reaction24_D0;
        rate_Reaction25 = compartment_0000003*x[1]*Reaction25_D0;
        rate_Reaction26 = _compartment_0000003_compartment_0000002_*x[8]*Reaction26_D0;
        rate_Reaction27 = compartment_0000003*Reaction27_D0*x[6];
        rate_Reaction28 = compartment_0000003*(Reaction28_D1*x[5]/(Reaction28_L1 + x[5]));
        rate_Reaction29 = compartment_0000003*(Reaction29_D2*_compartment_0000003_species_0000013_*x[4]/(Reaction29_L2 + x[4]));
        rate_Reaction3 = compartment_0000003*(Reaction3_c2 + (Reaction3_B2 + Math.pow((x[8]/Reaction3_A2), Reaction3_a))*Reaction3_s3/(1 + Reaction3_B2 + Math.pow((x[8]/Reaction3_A2), Reaction3_a) + Math.pow((x[9]/Reaction3_r2), Reaction3_r)));
        rate_Reaction30 = compartment_0000003*(Reaction30_D3*x[7]/(Reaction30_L3 + x[7]));
        rate_Reaction31 = compartment_0000003*(Reaction31_D4*x[6]/(Reaction31_L4 + x[6]));
        rate_Reaction32 = compartment_0000003*(Reaction32_D5*x[3]/(Reaction32_L5 + x[3]));
        rate_Reaction33 = _compartment_0000003_compartment_0000002_*(Reaction33_D6*x[9]/(Reaction33_L6 + x[9]));
        rate_Reaction34 = compartment_0000003*(x[2]*Reaction34_D7/(x[2] + Reaction34_L7));
        rate_Reaction35 = compartment_0000003*(x[1]*Reaction35_D8/(x[1] + Reaction35_L8));
        rate_Reaction36 = compartment_0000003*(x[0]*Reaction36_D9/(x[0] + Reaction36_L9));
        rate_Reaction37 = _compartment_0000003_compartment_0000002_*(x[8]*Reaction37_D10/(x[8] + Reaction37_L10));
        rate_Reaction4 = Drosophilia*Reaction4_D0*x[7];
        rate_Reaction5 = compartment_0000003*(Reaction5_c3 + (Reaction5_B3 + Math.pow((x[9]/Reaction5_A3), Reaction5_a))*Reaction5_s5/(1 + Reaction5_B3 + Math.pow((x[9]/Reaction5_A3), Reaction5_a) + Math.pow((x[8]/Reaction5_r3), Reaction5_r)));
        rate_Reaction6 = Drosophilia*x[2]*Reaction6_D0;
        rate_Reaction7 = compartment_0000003*(x[0]*Reaction7_T3/(Reaction7_k3 + x[0]));
        rate_Reaction8 = _compartment_0000003_compartment_0000002_*(x[8]*Reaction8_T4/(Reaction8_k4 + x[8]));
        rate_Reaction9 = _compartment_0000003_compartment_0000002_*(x[9]*Reaction9_T2/(Reaction9_k2 + x[9]));
    }

    public void Init()
    {
        initialValues = getInitialValues();
/*
 * Initialize variables
 */
        _compartment_0000003_compartment_0000002_ = 1.0; // initial value of $"compartment_0000003.compartment_0000002"
        _compartment_0000003_species_0000012_ = 1.0; // initial value of $"compartment_0000003.species_0000012"
        _compartment_0000003_species_0000013_ = 1.0; // initial value of $"compartment_0000003.species_0000013"
        Drosophilia = 1.0; // initial value of $Drosophilia
        compartment_0000003 = 1.0; // initial value of $compartment_0000003
        Reaction10_T1 = 1.73; // initial value of Reaction10_T1
        Reaction10_k1 = 2.0; // initial value of Reaction10_k1
        Reaction11_parameter_0000073 = 1.63; // initial value of Reaction11_parameter_0000073
        Reaction11_v3 = 1.63; // initial value of Reaction11_v3
        Reaction12_parameter_0000072 = 1.45; // initial value of Reaction12_parameter_0000072
        Reaction12_v1 = 1.45; // initial value of Reaction12_v1
        Reaction16_s4 = 0.48; // initial value of Reaction16_s4
        Reaction18_s6 = 0.47; // initial value of Reaction18_s6
        Reaction19_s2 = 0.48; // initial value of Reaction19_s2
        Reaction1_A1 = 0.45; // initial value of Reaction1_A1
        Reaction1_a = 1.0; // initial value of Reaction1_a
        Reaction1_r = 4.0; // initial value of Reaction1_r
        Reaction1_r1 = 1.02; // initial value of Reaction1_r1
        Reaction1_s1 = 1.45; // initial value of Reaction1_s1
        Reaction20_D0 = 0.012; // initial value of Reaction20_D0
        Reaction21_D0 = 0.012; // initial value of Reaction21_D0
        Reaction23_D0 = 0.012; // initial value of Reaction23_D0
        Reaction24_D0 = 0.012; // initial value of Reaction24_D0
        Reaction25_D0 = 0.012; // initial value of Reaction25_D0
        Reaction26_D0 = 0.012; // initial value of Reaction26_D0
        Reaction27_D0 = 0.012; // initial value of Reaction27_D0
        Reaction28_D1 = 0.94; // initial value of Reaction28_D1
        Reaction28_L1 = 0.3; // initial value of Reaction28_L1
        Reaction29_D2 = 0.44; // initial value of Reaction29_D2
        Reaction29_L2 = 0.2; // initial value of Reaction29_L2
        Reaction2_D0 = 0.012; // initial value of Reaction2_D0
        Reaction30_D3 = 0.94; // initial value of Reaction30_D3
        Reaction30_L3 = 0.3; // initial value of Reaction30_L3
        Reaction31_D4 = 0.44; // initial value of Reaction31_D4
        Reaction31_L4 = 0.2; // initial value of Reaction31_L4
        Reaction32_D5 = 0.44; // initial value of Reaction32_D5
        Reaction32_L5 = 0.2; // initial value of Reaction32_L5
        Reaction33_D6 = 0.29; // initial value of Reaction33_D6
        Reaction33_L6 = 0.2; // initial value of Reaction33_L6
        Reaction34_D7 = 0.54; // initial value of Reaction34_D7
        Reaction34_L7 = 0.13; // initial value of Reaction34_L7
        Reaction35_D8 = 0.6; // initial value of Reaction35_D8
        Reaction35_L8 = 0.2; // initial value of Reaction35_L8
        Reaction36_D9 = 0.6; // initial value of Reaction36_D9
        Reaction36_L9 = 0.2; // initial value of Reaction36_L9
        Reaction37_D10 = 0.3; // initial value of Reaction37_D10
        Reaction37_L10 = 0.2; // initial value of Reaction37_L10
        Reaction3_A2 = 0.45; // initial value of Reaction3_A2
        Reaction3_a = 1.0; // initial value of Reaction3_a
        Reaction3_r = 4.0; // initial value of Reaction3_r
        Reaction3_r2 = 1.02; // initial value of Reaction3_r2
        Reaction3_s3 = 1.45; // initial value of Reaction3_s3
        Reaction4_D0 = 0.012; // initial value of Reaction4_D0
        Reaction5_A3 = 0.8; // initial value of Reaction5_A3
        Reaction5_B3 = 0.6; // initial value of Reaction5_B3
        Reaction5_a = 1.0; // initial value of Reaction5_a
        Reaction5_r = 4.0; // initial value of Reaction5_r
        Reaction5_r3 = 0.89; // initial value of Reaction5_r3
        Reaction5_s5 = 1.63; // initial value of Reaction5_s5
        Reaction6_D0 = 0.012; // initial value of Reaction6_D0
        Reaction7_T3 = 1.63; // initial value of Reaction7_T3
        Reaction7_k3 = 2.0; // initial value of Reaction7_k3
        Reaction8_T4 = 0.52; // initial value of Reaction8_T4
        Reaction8_k4 = 2.0; // initial value of Reaction8_k4
        Reaction9_T2 = 0.72; // initial value of Reaction9_T2
        Reaction9_k2 = 2.0; // initial value of Reaction9_k2
    }

    /*
     * Model variables initial values
     */
    protected double _Drosophilia_EmptySet_;
    protected double _compartment_0000003_compartment_0000002_;
    protected double _compartment_0000003_species_0000012_;
    protected double _compartment_0000003_species_0000013_;
    protected double rate_Reaction1;
    protected double rate_Reaction10;
    protected double rate_Reaction11;
    protected double rate_Reaction12;
    protected double rate_Reaction16;
    protected double rate_Reaction18;
    protected double rate_Reaction19;
    protected double rate_Reaction2;
    protected double rate_Reaction20;
    protected double rate_Reaction21;
    protected double rate_Reaction23;
    protected double rate_Reaction24;
    protected double rate_Reaction25;
    protected double rate_Reaction26;
    protected double rate_Reaction27;
    protected double rate_Reaction28;
    protected double rate_Reaction29;
    protected double rate_Reaction3;
    protected double rate_Reaction30;
    protected double rate_Reaction31;
    protected double rate_Reaction32;
    protected double rate_Reaction33;
    protected double rate_Reaction34;
    protected double rate_Reaction35;
    protected double rate_Reaction36;
    protected double rate_Reaction37;
    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 Drosophilia;
    protected double compartment_0000003;
    protected double Reaction10_T1;
    protected double Reaction10_k1;
    protected double Reaction11_parameter_0000073;
    protected double Reaction11_v3;
    protected double Reaction12_parameter_0000072;
    protected double Reaction12_v1;
    protected double Reaction16_s4;
    protected double Reaction18_s6;
    protected double Reaction19_s2;
    protected double Reaction1_A1;
    protected double Reaction1_B1;
    protected double Reaction1_a;
    protected double Reaction1_c1;
    protected double Reaction1_r;
    protected double Reaction1_r1;
    protected double Reaction1_s1;
    protected double Reaction20_D0;
    protected double Reaction21_D0;
    protected double Reaction23_D0;
    protected double Reaction24_D0;
    protected double Reaction25_D0;
    protected double Reaction26_D0;
    protected double Reaction27_D0;
    protected double Reaction28_D1;
    protected double Reaction28_L1;
    protected double Reaction29_D2;
    protected double Reaction29_L2;
    protected double Reaction2_D0;
    protected double Reaction30_D3;
    protected double Reaction30_L3;
    protected double Reaction31_D4;
    protected double Reaction31_L4;
    protected double Reaction32_D5;
    protected double Reaction32_L5;
    protected double Reaction33_D6;
    protected double Reaction33_L6;
    protected double Reaction34_D7;
    protected double Reaction34_L7;
    protected double Reaction35_D8;
    protected double Reaction35_L8;
    protected double Reaction36_D9;
    protected double Reaction36_L9;
    protected double Reaction37_D10;
    protected double Reaction37_L10;
    protected double Reaction3_A2;
    protected double Reaction3_B2;
    protected double Reaction3_a;
    protected double Reaction3_c2;
    protected double Reaction3_r;
    protected double Reaction3_r2;
    protected double Reaction3_s3;
    protected double Reaction4_D0;
    protected double Reaction5_A3;
    protected double Reaction5_B3;
    protected double Reaction5_a;
    protected double Reaction5_c3;
    protected double Reaction5_r;
    protected double Reaction5_r3;
    protected double Reaction5_s5;
    protected double Reaction6_D0;
    protected double Reaction7_T3;
    protected double Reaction7_k3;
    protected double Reaction8_T4;
    protected double Reaction8_k4;
    protected double Reaction9_T2;
    protected double Reaction9_k2;

    public double[] extendResult(double time,double [] x)
    {
        this.time = time;


        double[] y = new double[10];
        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];
        return y;
    }
    public double[] getInitialValues()
    {
        double [] x = new double[10];
        this.time = 0.0;
        x[0] = 0.3; // - $"compartment_0000003.CCc"
        x[1] = 0.2; // - $"compartment_0000003.Clkc"
        x[2] = 0.1; // - $"compartment_0000003.Clkm"
        x[3] = 0.9; // - $"compartment_0000003.PTc"
        x[4] = 0.6; // - $"compartment_0000003.Perc"
        x[5] = 0.5; // - $"compartment_0000003.Perm"
        x[6] = 0.8; // - $"compartment_0000003.Timc"
        x[7] = 0.7; // - $"compartment_0000003.Timm"
        x[8] = 0.4; // - $"compartment_0000003.compartment_0000002.CCn"
        x[9] = 1.0; // - $"compartment_0000003.compartment_0000002.PTn"

        __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 'BIOMD0000000022.xml' model
         */
    public void __internalDyDt_0(double time, double [] x, double[] result)
    {
        result[0] = +rate_Reaction11-rate_Reaction24-rate_Reaction36-rate_Reaction7+rate_Reaction8;
        result[1] = -rate_Reaction11+rate_Reaction18-rate_Reaction25-rate_Reaction35;
        result[2] = -rate_Reaction34+rate_Reaction5-rate_Reaction6;
        result[3] = -rate_Reaction10+rate_Reaction12-rate_Reaction21-rate_Reaction32+rate_Reaction9;
        result[4] = -rate_Reaction12+rate_Reaction19-rate_Reaction20-rate_Reaction29;
        result[5] = +rate_Reaction1-rate_Reaction28-rate_Reaction2;
        result[6] = -rate_Reaction12+rate_Reaction16-rate_Reaction27-rate_Reaction31;
        result[7] = -rate_Reaction30+rate_Reaction3-rate_Reaction4;
        result[8] = -rate_Reaction26-rate_Reaction37+rate_Reaction7-rate_Reaction8;
        result[9] = +rate_Reaction10-rate_Reaction23-rate_Reaction33-rate_Reaction9;
    }
    protected double [] calculateResult(double time, double[] x)
    {
        double[] result = new double[10];
        __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 ...