/*
 * This code is generated by BioUML FrameWork 
 * for BIOMD0000000032.xml diagram  at 2008.03.20 15:04:09
 */
import biouml.plugins.simulation.ae.NewtonSolver;
import biouml.plugins.simulation.java.JavaBaseModel;
import ru.biosoft.math.MathRoutines;

public class BIOMD0000000032 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 = Extracellular*x[1]*x[0]*v1_k1;
        rate_v10 = _Extracellular_compartment_*x[13]*x[25]*v10_k10;
        rate_v11 = _Extracellular_compartment_*x[26]*v11_k11;
        rate_v12 = _Extracellular_compartment_*x[21]*x[15]*v12_k12;
        rate_v13 = _Extracellular_compartment_*x[23]*v13_k13;
        rate_v14 = _Extracellular_compartment_*x[22]*x[8]*v14_k14;
        rate_v15 = _Extracellular_compartment_*x[24]*v15_k15;
        rate_v16 = _Extracellular_compartment_*x[23]*x[24]*v16_k16;
        rate_v17 = _Extracellular_compartment_*x[25]*v17_k17;
        rate_v18 = _Extracellular_compartment_*x[26]*x[19]*v18_k18;
        rate_v19 = _Extracellular_compartment_*x[27]*v19_k19;
        rate_v2 = _Extracellular_compartment_*x[18]*x[1]*v2_k2;
        rate_v20 = _Extracellular_compartment_*x[27]*v20_k20;
        rate_v21 = _Extracellular_compartment_*x[27]*v21_k21;
        rate_v22 = _Extracellular_compartment_*x[28]*v22_k22;
        rate_v23 = _Extracellular_compartment_*x[28]*v23_k23;
        rate_v24 = _Extracellular_compartment_*x[29]*v24_k24;
        rate_v25 = _Extracellular_compartment_*x[29]*v25_k25;
        rate_v26 = _Extracellular_compartment_*x[30]*v26_k26;
        rate_v27 = _Extracellular_compartment_*x[30]*v27_k27;
        rate_v28 = _Extracellular_compartment_*x[31]*v28_k28;
        rate_v29 = _Extracellular_compartment_*x[33]*x[8]*v29_k29;
        rate_v3 = _Extracellular_compartment_*x[20]*v3_k3;
        rate_v30 = _Extracellular_compartment_*x[32]*v30_k30;
        rate_v31 = _Extracellular_compartment_*x[32]*v31_k31;
        rate_v32 = _Extracellular_compartment_*x[33]*v32_k32;
        rate_v33 = _Extracellular_compartment_*x[9]*v33_k33;
        rate_v34 = _Extracellular_compartment_*x[16]*x[9]*v34_k34;
        rate_v35 = _Extracellular_compartment_*x[17]*v35_k35;
        rate_v36 = _Extracellular_compartment_*x[17]*x[2]*v36_k36;
        rate_v37 = _Extracellular_compartment_*x[3]*v37_k37;
        rate_v38 = _Extracellular_compartment_*x[3]*v38_k38;
        rate_v39 = _Extracellular_compartment_*(x[5]*x[9]*x[9]/(10000.0 + x[9]*x[9]))*v39_k39;
        rate_v4 = _Extracellular_compartment_*x[20]*v4_k4;
        rate_v40 = _Extracellular_compartment_*x[6]*v40_k40;
        rate_v41 = _Extracellular_compartment_*x[5]*x[4]*v41_k41;
        rate_v42 = _Extracellular_compartment_*x[13]*x[6]*v42_k42;
        rate_v43 = _Extracellular_compartment_*x[34]*v43_k43;
        rate_v44 = _Extracellular_compartment_*x[35]*v44_k44;
        rate_v45 = _Extracellular_compartment_*x[6]*x[4]*v45_k45;
    }
    public void __internalRateVarInitFunc_1(double time, double[] x)
    {
        rate_v46 = _Extracellular_compartment_*(Math.pow(x[9], 2)/(16.0 + Math.pow(x[9], 2)))*v46_k46;
        rate_v47 = _Extracellular_compartment_*x[14]*v47_k47;
        rate_v5 = _Extracellular_compartment_*x[18]*v5_k5;
        rate_v6 = _Extracellular_compartment_*x[20]*x[12]*v6_k6;
        rate_v7 = _Extracellular_compartment_*x[11]*v7_k7;
        rate_v8 = _Extracellular_compartment_*x[11]*x[14]*v8_k8;
        rate_v9 = _Extracellular_compartment_*x[10]*x[13]*v9_k9;
    }

    public void Init()
    {
        initialValues = getInitialValues();
/*
 * Initialize variables
 */
        _Extracellular_compartment_ = 1.0; // initial value of $"Extracellular.compartment"
        Extracellular = 1.0; // initial value of $Extracellular
        v10_k10 = 0.1; // initial value of v10_k10
        v11_k11 = 5.0; // initial value of v11_k11
        v12_k12 = 1.0; // initial value of v12_k12
        v13_k13 = 3.0; // initial value of v13_k13
        v14_k14 = 1.0; // initial value of v14_k14
        v15_k15 = 3.0; // initial value of v15_k15
        v16_k16 = 3.0; // initial value of v16_k16
        v17_k17 = 100.0; // initial value of v17_k17
        v18_k18 = 5.0; // initial value of v18_k18
        v19_k19 = 1.0; // initial value of v19_k19
        v1_k1 = 0.03; // initial value of v1_k1
        v20_k20 = 10.0; // initial value of v20_k20
        v21_k21 = 5.0; // initial value of v21_k21
        v22_k22 = 47.0; // initial value of v22_k22
        v23_k23 = 5.0; // initial value of v23_k23
        v24_k24 = 345.0; // initial value of v24_k24
        v25_k25 = 5.0; // initial value of v25_k25
        v26_k26 = 50.0; // initial value of v26_k26
        v27_k27 = 5.0; // initial value of v27_k27
        v28_k28 = 140.0; // initial value of v28_k28
        v29_k29 = 10.0; // initial value of v29_k29
        v2_k2 = 0.0012; // initial value of v2_k2
        v30_k30 = 1.0; // initial value of v30_k30
        v31_k31 = 250.0; // initial value of v31_k31
        v32_k32 = 5.0; // initial value of v32_k32
        v33_k33 = 50.0; // initial value of v33_k33
        v34_k34 = 18.0; // initial value of v34_k34
        v35_k35 = 10.0; // initial value of v35_k35
        v36_k36 = 0.1; // initial value of v36_k36
        v37_k37 = 0.1; // initial value of v37_k37
        v38_k38 = 0.01; // initial value of v38_k38
        v39_k39 = 18.0; // initial value of v39_k39
        v3_k3 = 0.6; // initial value of v3_k3
        v40_k40 = 1.0; // initial value of v40_k40
        v41_k41 = 0.02; // initial value of v41_k41
        v42_k42 = 0.1; // initial value of v42_k42
        v43_k43 = 0.01; // initial value of v43_k43
        v44_k44 = 0.01; // initial value of v44_k44
        v45_k45 = 0.1; // initial value of v45_k45
        v46_k46 = 200.0; // initial value of v46_k46
        v47_k47 = 1.0; // initial value of v47_k47
        v4_k4 = 0.24; // initial value of v4_k4
        v5_k5 = 0.024; // initial value of v5_k5
        v6_k6 = 0.0036; // initial value of v6_k6
        v7_k7 = 0.24; // initial value of v7_k7
        v8_k8 = 0.033; // initial value of v8_k8
        v9_k9 = 2000.0; // initial value of v9_k9
    }

    /*
     * Model variables initial values
     */
    protected double _Extracellular_compartment_;
    protected double _Extracellular_compartment_p_;
    protected double rate_v1;
    protected double rate_v10;
    protected double rate_v11;
    protected double rate_v12;
    protected double rate_v13;
    protected double rate_v14;
    protected double rate_v15;
    protected double rate_v16;
    protected double rate_v17;
    protected double rate_v18;
    protected double rate_v19;
    protected double rate_v2;
    protected double rate_v20;
    protected double rate_v21;
    protected double rate_v22;
    protected double rate_v23;
    protected double rate_v24;
    protected double rate_v25;
    protected double rate_v26;
    protected double rate_v27;
    protected double rate_v28;
    protected double rate_v29;
    protected double rate_v3;
    protected double rate_v30;
    protected double rate_v31;
    protected double rate_v32;
    protected double rate_v33;
    protected double rate_v34;
    protected double rate_v35;
    protected double rate_v36;
    protected double rate_v37;
    protected double rate_v38;
    protected double rate_v39;
    protected double rate_v4;
    protected double rate_v40;
    protected double rate_v41;
    protected double rate_v42;
    protected double rate_v43;
    protected double rate_v44;
    protected double rate_v45;
    protected double rate_v46;
    protected double rate_v47;
    protected double rate_v5;
    protected double rate_v6;
    protected double rate_v7;
    protected double rate_v8;
    protected double rate_v9;
    protected double Extracellular;
    protected double v10_k10;
    protected double v11_k11;
    protected double v12_k12;
    protected double v13_k13;
    protected double v14_k14;
    protected double v15_k15;
    protected double v16_k16;
    protected double v17_k17;
    protected double v18_k18;
    protected double v19_k19;
    protected double v1_k1;
    protected double v20_k20;
    protected double v21_k21;
    protected double v22_k22;
    protected double v23_k23;
    protected double v24_k24;
    protected double v25_k25;
    protected double v26_k26;
    protected double v27_k27;
    protected double v28_k28;
    protected double v29_k29;
    protected double v2_k2;
    protected double v30_k30;
    protected double v31_k31;
    protected double v32_k32;
    protected double v33_k33;
    protected double v34_k34;
    protected double v35_k35;
    protected double v36_k36;
    protected double v37_k37;
    protected double v38_k38;
    protected double v39_k39;
    protected double v3_k3;
    protected double v40_k40;
    protected double v41_k41;
    protected double v42_k42;
    protected double v43_k43;
    protected double v44_k44;
    protected double v45_k45;
    protected double v46_k46;
    protected double v47_k47;
    protected double v4_k4;
    protected double v5_k5;
    protected double v6_k6;
    protected double v7_k7;
    protected double v8_k8;
    protected double v9_k9;

    public double[] extendResult(double time,double [] x)
    {
        this.time = time;


        double[] y = new double[36];
        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];
        y[18] = x[18];
        y[19] = x[19];
        y[20] = x[20];
        y[21] = x[21];
        y[22] = x[22];
        y[23] = x[23];
        y[24] = x[24];
        y[25] = x[25];
        y[26] = x[26];
        y[27] = x[27];
        y[28] = x[28];
        y[29] = x[29];
        y[30] = x[30];
        y[31] = x[31];
        y[32] = x[32];
        y[33] = x[33];
        y[34] = x[34];
        y[35] = x[35];
        return y;
    }
    public double[] getInitialValues()
    {
        double [] x = new double[36];
        this.time = 0.0;
        x[0] = 0.0; // - $"Extracellular.Bar1aex"
        x[1] = 100.0; // - $"Extracellular.alpha"
        x[2] = 200.0; // - $"Extracellular.compartment.Bar1"
        x[3] = 0.0; // - $"Extracellular.compartment.Bar1a"
        x[4] = 300.0; // - $"Extracellular.compartment.Cdc28"
        x[5] = 500.0; // - $"Extracellular.compartment.Far1"
        x[6] = 0.0; // - $"Extracellular.compartment.Far1PP"
        x[7] = 0.0; // - $"Extracellular.compartment.Far1U"
        x[8] = 686.399701640513; // - $"Extracellular.compartment.Fus3"
        x[9] = 0.0; // - $"Extracellular.compartment.Fus3PP"
        x[10] = 0.0; // - $"Extracellular.compartment.GaGDP"
        x[11] = 0.0; // - $"Extracellular.compartment.GaGTP"
        x[12] = 1666.6666667; // - $"Extracellular.compartment.Gabc"
        x[13] = 0.0; // - $"Extracellular.compartment.Gbc"
        x[14] = 0.0; // - $"Extracellular.compartment.Sst2"
        x[15] = 158.33176608789; // - $"Extracellular.compartment.Ste11"
        x[16] = 200.0; // - $"Extracellular.compartment.Ste12"
        x[17] = 0.0; // - $"Extracellular.compartment.Ste12a"
        x[18] = 1666.6666667; // - $"Extracellular.compartment.Ste2"
        x[19] = 1000.0; // - $"Extracellular.compartment.Ste20"
        x[20] = 0.0; // - $"Extracellular.compartment.Ste2a"
        x[21] = 158.33176608789; // - $"Extracellular.compartment.Ste5"
        x[22] = 36.3997016405141; // - $"Extracellular.compartment.Ste7"
        x[23] = 105.943298120207; // - $"Extracellular.compartment.complexA"
        x[24] = 77.8753625675829; // - $"Extracellular.compartment.complexB"
        x[25] = 235.724935791903; // - $"Extracellular.compartment.complexC"
        x[26] = 0.0; // - $"Extracellular.compartment.complexD"
        x[27] = 0.0; // - $"Extracellular.compartment.complexE"
        x[28] = 0.0; // - $"Extracellular.compartment.complexF"
        x[29] = 0.0; // - $"Extracellular.compartment.complexG"
        x[30] = 0.0; // - $"Extracellular.compartment.complexH"
        x[31] = 0.0; // - $"Extracellular.compartment.complexI"
        x[32] = 0.0; // - $"Extracellular.compartment.complexK"
        x[33] = 0.0; // - $"Extracellular.compartment.complexL"
        x[34] = 0.0; // - $"Extracellular.compartment.complexM"
        x[35] = 0.0; // - $"Extracellular.compartment.complexN"

        __internalRateVarInitFunc_0(time, x);
        __internalRateVarInitFunc_1(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);
        __internalRateVarInitFunc_1(time, x);

    }

        /*
         * calculate dy/dt for 'BIOMD0000000032.xml' model
         */
    public void __internalDyDt_0(double time, double [] x, double[] result)
    {
        result[0] = +rate_v38;
        result[1] = -rate_v1;
        result[2] = -rate_v36+rate_v37;
        result[3] = +rate_v36-rate_v37-rate_v38;
        result[4] = +rate_v44-rate_v45;
        result[5] = -rate_v39+rate_v40-rate_v41;
        result[6] = +rate_v39-rate_v40-rate_v42+rate_v43+rate_v44-rate_v45;
        result[7] = +rate_v41;
        result[8] = -rate_v14+rate_v15+rate_v17+rate_v21+rate_v23+rate_v25+rate_v27-rate_v29+rate_v30+rate_v33;
        result[9] = +rate_v28-rate_v33-rate_v34+rate_v35;
        result[10] = +rate_v7+rate_v8-rate_v9;
        result[11] = +rate_v6-rate_v7-rate_v8;
        result[12] = -rate_v6+rate_v9;
        result[13] = -rate_v10+rate_v11+rate_v21+rate_v23+rate_v25+rate_v27+rate_v32-rate_v42+rate_v43+rate_v6-rate_v9;
        result[14] = +rate_v46-rate_v47;
        result[15] = -rate_v12+rate_v13+rate_v17+rate_v21+rate_v23+rate_v25+rate_v27+rate_v32;
        result[16] = -rate_v34+rate_v35;
        result[17] = +rate_v34-rate_v35;
        result[18] = -rate_v2+rate_v3-rate_v5;
        result[19] = -rate_v18+rate_v19+rate_v21+rate_v23+rate_v25+rate_v27+rate_v32;
        result[20] = +rate_v2-rate_v3-rate_v4;
        result[21] = -rate_v12+rate_v13+rate_v17+rate_v21+rate_v23+rate_v25+rate_v27+rate_v32;
        result[22] = -rate_v14+rate_v15+rate_v17+rate_v21+rate_v23+rate_v25+rate_v27+rate_v32;
        result[23] = +rate_v12-rate_v13-rate_v16;
        result[24] = +rate_v14-rate_v15-rate_v16;
        result[25] = -rate_v10+rate_v11+rate_v16-rate_v17;
        result[26] = +rate_v10-rate_v11-rate_v18+rate_v19;
        result[27] = +rate_v18-rate_v19-rate_v20-rate_v21;
        result[28] = +rate_v20-rate_v22-rate_v23;
        result[29] = +rate_v22-rate_v24-rate_v25;
        result[30] = +rate_v24-rate_v26-rate_v27;
        result[31] = +rate_v26-rate_v28+rate_v31;
        result[32] = +rate_v29-rate_v30-rate_v31;
        result[33] = +rate_v28-rate_v29+rate_v30-rate_v32;
        result[34] = +rate_v42-rate_v43;
        result[35] = -rate_v44+rate_v45;
    }
    protected double [] calculateResult(double time, double[] x)
    {
        double[] result = new double[36];
        __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 ...