/*
 * This code is generated by BioUML FrameWork 
 * for BIOMD0000000061.xml diagram  at 2008.03.20 15:04:46
 */
import biouml.plugins.simulation.ae.NewtonSolver;
import biouml.plugins.simulation.java.JavaBaseModel;
import ru.biosoft.math.MathRoutines;

public class BIOMD0000000061 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_vADH = _extracellular_cytosol_*(vADH_V12m*x[5]*x[19]/((vADH_K12NADH + x[19])*(vADH_K12ACA + x[5])));
        rate_vAK = _extracellular_cytosol_*(vAK_k24f*x[7]*x[8] - vAK_k24r*Math.pow(x[6], 2));
        rate_vALD = _extracellular_cytosol_*(vALD_V6f*x[13]/(vALD_K6FBP + x[13] + x[15]*vALD_K6DHAP*vALD_V6f/(vALD_K6eq*vALD_V6f*vALD_ratio6) + x[10]*vALD_K6GAP*vALD_V6f/(vALD_K6eq*vALD_V6f*vALD_ratio6) + x[13]*x[15]/vALD_K6IGAP + x[15]*x[10]*vALD_V6f/(vALD_K6eq*vALD_V6f*vALD_ratio6)) - vALD_V6f*x[15]*x[10]/vALD_K6eq/(vALD_K6FBP + x[13] + x[15]*vALD_K6DHAP*vALD_V6f/(vALD_K6eq*vALD_V6f*vALD_ratio6) + x[10]*vALD_K6GAP*vALD_V6f/(vALD_K6eq*vALD_V6f*vALD_ratio6) + x[13]*x[15]/vALD_K6IGAP + x[15]*x[10]*vALD_V6f/(vALD_K6eq*vALD_V6f*vALD_ratio6)));
        rate_vGAPDH = _extracellular_cytosol_*(vGAPDH_V8f*x[15]*x[18]/vGAPDH_K8GAP/vGAPDH_K8NAD/((1 + x[15]/vGAPDH_K8GAP + x[9]/vGAPDH_K8BPG)*(1 + x[18]/vGAPDH_K8NAD + x[19]/vGAPDH_K8NADH)) - vGAPDH_V8r*x[9]*x[19]/vGAPDH_K8eq/vGAPDH_K8GAP/vGAPDH_K8NAD/((1 + x[15]/vGAPDH_K8GAP + x[9]/vGAPDH_K8BPG)*(1 + x[18]/vGAPDH_K8NAD + x[19]/vGAPDH_K8NADH)));
        rate_vGlcTrans = extracellular*vGlcTrans_V2f/vGlcTrans_Yvol*(x[3]/vGlcTrans_K2Glc/(1 + x[3]/vGlcTrans_K2Glc + (vGlcTrans_P2*(x[3]/vGlcTrans_K2Glc) + 1)/(vGlcTrans_P2*(x[16]/vGlcTrans_K2Glc) + 1)*(1 + x[16]/vGlcTrans_K2Glc + x[14]/vGlcTrans_K2IG6P + x[16]*x[14]/(vGlcTrans_K2Glc*vGlcTrans_K2IIG6P)))) - _extracellular_cytosol_*vGlcTrans_V2r/vGlcTrans_Yvol*(x[16]/vGlcTrans_K2Glc/(1 + x[16]/vGlcTrans_K2Glc + (vGlcTrans_P2*(x[16]/vGlcTrans_K2Glc) + 1)/(vGlcTrans_P2*(x[3]/vGlcTrans_K2Glc) + 1)*(1 + x[3]/vGlcTrans_K2Glc) + x[14]/vGlcTrans_K2IG6P + x[16]*x[14]/(vGlcTrans_K2Glc*vGlcTrans_K2IIG6P)));
        rate_vHK = _extracellular_cytosol_*vHK_V3m*x[8]*x[16]/(vHK_K3DGlc*vHK_K3ATP + vHK_K3Glc*x[8] + vHK_K3ATP*x[16] + x[16]*x[8]);
        rate_vPDC = _extracellular_cytosol_*(vPDC_V11m*x[21]/(vPDC_K11 + x[21]));
        rate_vPFK = _extracellular_cytosol_*(vPFK_V5m*Math.pow(x[12], 2)/(vPFK_K5*(1 + vPFK_kappa5*(x[8]/x[7])*(x[8]/x[7])) + Math.pow(x[12], 2)));
        rate_vPGI = _extracellular_cytosol_*(vPGI_V4f*x[14]/(vPGI_K4G6P + x[14] + vPGI_K4G6P/vPGI_K4F6P*x[12]) - vPGI_V4r*(x[12]/vPGI_K4eq)/(vPGI_K4G6P + x[14] + vPGI_K4G6P/vPGI_K4F6P*x[12]));
        rate_vPK = _extracellular_cytosol_*(vPK_V10m*x[6]*x[20]/((vPK_K10PEP + x[20])*(vPK_K10ADP + x[6])));
        rate_vTIM = _extracellular_cytosol_*(vTIM_V7f*x[10]/(vTIM_K7DHAP + x[10] + vTIM_K7DHAP/vTIM_K7GAP*x[15]) - vTIM_V7r*(x[15]/vTIM_K7eq)/(vTIM_K7DHAP + x[10] + vTIM_K7DHAP/vTIM_K7GAP*x[15]));
        rate_vconsum = _extracellular_cytosol_*vconsum_k23*x[8];
        rate_vdifACA = vdifACA_k18/vdifACA_Yvol*(_extracellular_cytosol_*x[5] - extracellular*x[0]);
        rate_vdifEtOH = vdifEtOH_k13/vdifEtOH_Yvol*(_extracellular_cytosol_*x[11] - extracellular*x[2]);
        rate_vdifGlyc = vdifGlyc_k16/vdifGlyc_Yvol*(_extracellular_cytosol_*x[17] - extracellular*x[4]);
        rate_vinCN = extracellular*vinCN_k0*(_extracellular_CNX0_ - x[1]);
        rate_vinGlc = extracellular*vinGlc_k0*(_extracellular_GlcX0_ - x[3]);
        rate_vlacto = extracellular*vlacto_k20*x[0]*x[1];
        rate_vlpGlyc = _extracellular_cytosol_*(vlpGlyc_V15m*x[10]/(vlpGlyc_K15DHAP*(1 + vlpGlyc_K15INADH/x[19]*(1 + x[18]/vlpGlyc_K15INAD)) + x[10]*(1 + vlpGlyc_K15NADH/x[19]*(1 + x[18]/vlpGlyc_K15INAD))));
        rate_vlpPEP = _extracellular_cytosol_*(vlpPEP_k9f*x[9]*x[6] - vlpPEP_k9r*x[20]*x[8]);
        rate_voutACA = extracellular*voutACA_k0*x[0];
        rate_voutEtOH = extracellular*voutEtOH_k0*x[2];
        rate_voutGlyc = extracellular*voutGlyc_k0*x[4];
        rate_vstorage = _extracellular_cytosol_*vstorage_k22*x[8]*x[14];
    }

    public void Init()
    {
        initialValues = getInitialValues();
/*
 * Initialize variables
 */
        _extracellular_CNX0_ = 5.6; // initial value of $"extracellular.CNX0"
        _extracellular_GlcX0_ = 24.0; // initial value of $"extracellular.GlcX0"
        _extracellular_cytosol_ = 1.0; // initial value of $"extracellular.cytosol"
        extracellular = 1.0; // initial value of $extracellular
        vADH_K12ACA = 0.71; // initial value of vADH_K12ACA
        vADH_K12NADH = 0.1; // initial value of vADH_K12NADH
        vADH_V12m = 89.8023; // initial value of vADH_V12m
        vAK_k24f = 432.9; // initial value of vAK_k24f
        vAK_k24r = 133.333; // initial value of vAK_k24r
        vALD_K6DHAP = 2.0; // initial value of vALD_K6DHAP
        vALD_K6FBP = 0.3; // initial value of vALD_K6FBP
        vALD_K6GAP = 4.0; // initial value of vALD_K6GAP
        vALD_K6IGAP = 10.0; // initial value of vALD_K6IGAP
        vALD_K6eq = 0.081; // initial value of vALD_K6eq
        vALD_V6f = 2207.82; // initial value of vALD_V6f
        vALD_ratio6 = 5.0; // initial value of vALD_ratio6
        vGAPDH_K8BPG = 0.01; // initial value of vGAPDH_K8BPG
        vGAPDH_K8GAP = 0.6; // initial value of vGAPDH_K8GAP
        vGAPDH_K8NAD = 0.1; // initial value of vGAPDH_K8NAD
        vGAPDH_K8NADH = 0.06; // initial value of vGAPDH_K8NADH
        vGAPDH_K8eq = 0.0055; // initial value of vGAPDH_K8eq
        vGAPDH_V8f = 833.858; // initial value of vGAPDH_V8f
        vGAPDH_V8r = 833.858; // initial value of vGAPDH_V8r
        vGlcTrans_K2Glc = 1.7; // initial value of vGlcTrans_K2Glc
        vGlcTrans_K2IG6P = 1.2; // initial value of vGlcTrans_K2IG6P
        vGlcTrans_K2IIG6P = 7.2; // initial value of vGlcTrans_K2IIG6P
        vGlcTrans_P2 = 1.0; // initial value of vGlcTrans_P2
        vGlcTrans_V2f = 1014.96; // initial value of vGlcTrans_V2f
        vGlcTrans_V2r = 1014.96; // initial value of vGlcTrans_V2r
        vGlcTrans_Yvol = 59.0; // initial value of vGlcTrans_Yvol
        vHK_K3ATP = 0.1; // initial value of vHK_K3ATP
        vHK_K3DGlc = 0.37; // initial value of vHK_K3DGlc
        vHK_V3m = 51.7547; // initial value of vHK_V3m
        vPDC_K11 = 0.3; // initial value of vPDC_K11
        vPDC_V11m = 53.1328; // initial value of vPDC_V11m
        vPFK_K5 = 0.021; // initial value of vPFK_K5
        vPFK_V5m = 45.4327; // initial value of vPFK_V5m
        vPFK_kappa5 = 0.15; // initial value of vPFK_kappa5
        vPGI_K4F6P = 0.15; // initial value of vPGI_K4F6P
        vPGI_K4G6P = 0.8; // initial value of vPGI_K4G6P
        vPGI_K4eq = 0.13; // initial value of vPGI_K4eq
        vPGI_V4f = 496.042; // initial value of vPGI_V4f
        vPGI_V4r = 496.042; // initial value of vPGI_V4r
        vPK_K10ADP = 0.17; // initial value of vPK_K10ADP
        vPK_K10PEP = 0.2; // initial value of vPK_K10PEP
        vPK_V10m = 343.096; // initial value of vPK_V10m
        vTIM_K7DHAP = 1.23; // initial value of vTIM_K7DHAP
        vTIM_K7GAP = 1.27; // initial value of vTIM_K7GAP
        vTIM_K7eq = 0.055; // initial value of vTIM_K7eq
        vTIM_V7f = 116.365; // initial value of vTIM_V7f
        vTIM_V7r = 116.365; // initial value of vTIM_V7r
        vconsum_k23 = 3.2076; // initial value of vconsum_k23
        vdifACA_Yvol = 59.0; // initial value of vdifACA_Yvol
        vdifACA_k18 = 24.7; // initial value of vdifACA_k18
        vdifEtOH_Yvol = 59.0; // initial value of vdifEtOH_Yvol
        vdifEtOH_k13 = 16.72; // initial value of vdifEtOH_k13
        vdifGlyc_Yvol = 59.0; // initial value of vdifGlyc_Yvol
        vdifGlyc_k16 = 1.9; // initial value of vdifGlyc_k16
        vinCN_k0 = 0.048; // initial value of vinCN_k0
        vinGlc_k0 = 0.048; // initial value of vinGlc_k0
        vlacto_k20 = 0.00283828; // initial value of vlacto_k20
        vlpGlyc_K15DHAP = 25.0; // initial value of vlpGlyc_K15DHAP
        vlpGlyc_K15INAD = 0.13; // initial value of vlpGlyc_K15INAD
        vlpGlyc_K15INADH = 0.034; // initial value of vlpGlyc_K15INADH
        vlpGlyc_K15NADH = 0.13; // initial value of vlpGlyc_K15NADH
        vlpGlyc_V15m = 81.4797; // initial value of vlpGlyc_V15m
        vlpPEP_k9f = 443866.0; // initial value of vlpPEP_k9f
        vlpPEP_k9r = 1528.62; // initial value of vlpPEP_k9r
        voutACA_k0 = 0.048; // initial value of voutACA_k0
        voutEtOH_k0 = 0.048; // initial value of voutEtOH_k0
        voutGlyc_k0 = 0.048; // initial value of voutGlyc_k0
        vstorage_k22 = 2.25932; // initial value of vstorage_k22
    }

    /*
     * Model variables initial values
     */
    protected double _extracellular_CNX0_;
    protected double _extracellular_GlcX0_;
    protected double _extracellular_P_;
    protected double _extracellular_cytosol_;
    protected double rate_vADH;
    protected double rate_vAK;
    protected double rate_vALD;
    protected double rate_vGAPDH;
    protected double rate_vGlcTrans;
    protected double rate_vHK;
    protected double rate_vPDC;
    protected double rate_vPFK;
    protected double rate_vPGI;
    protected double rate_vPK;
    protected double rate_vTIM;
    protected double rate_vconsum;
    protected double rate_vdifACA;
    protected double rate_vdifEtOH;
    protected double rate_vdifGlyc;
    protected double rate_vinCN;
    protected double rate_vinGlc;
    protected double rate_vlacto;
    protected double rate_vlpGlyc;
    protected double rate_vlpPEP;
    protected double rate_voutACA;
    protected double rate_voutEtOH;
    protected double rate_voutGlyc;
    protected double rate_vstorage;
    protected double extracellular;
    protected double vADH_K12ACA;
    protected double vADH_K12NADH;
    protected double vADH_V12m;
    protected double vAK_k24f;
    protected double vAK_k24r;
    protected double vALD_K6DHAP;
    protected double vALD_K6FBP;
    protected double vALD_K6GAP;
    protected double vALD_K6IGAP;
    protected double vALD_K6eq;
    protected double vALD_V6f;
    protected double vALD_ratio6;
    protected double vGAPDH_K8BPG;
    protected double vGAPDH_K8GAP;
    protected double vGAPDH_K8NAD;
    protected double vGAPDH_K8NADH;
    protected double vGAPDH_K8eq;
    protected double vGAPDH_V8f;
    protected double vGAPDH_V8r;
    protected double vGlcTrans_K2Glc;
    protected double vGlcTrans_K2IG6P;
    protected double vGlcTrans_K2IIG6P;
    protected double vGlcTrans_P2;
    protected double vGlcTrans_V2f;
    protected double vGlcTrans_V2r;
    protected double vGlcTrans_Yvol;
    protected double vHK_K3ATP;
    protected double vHK_K3DGlc;
    protected double vHK_K3Glc;
    protected double vHK_V3m;
    protected double vPDC_K11;
    protected double vPDC_V11m;
    protected double vPFK_K5;
    protected double vPFK_V5m;
    protected double vPFK_kappa5;
    protected double vPGI_K4F6P;
    protected double vPGI_K4G6P;
    protected double vPGI_K4eq;
    protected double vPGI_V4f;
    protected double vPGI_V4r;
    protected double vPK_K10ADP;
    protected double vPK_K10PEP;
    protected double vPK_V10m;
    protected double vTIM_K7DHAP;
    protected double vTIM_K7GAP;
    protected double vTIM_K7eq;
    protected double vTIM_V7f;
    protected double vTIM_V7r;
    protected double vconsum_k23;
    protected double vdifACA_Yvol;
    protected double vdifACA_k18;
    protected double vdifEtOH_Yvol;
    protected double vdifEtOH_k13;
    protected double vdifGlyc_Yvol;
    protected double vdifGlyc_k16;
    protected double vinCN_k0;
    protected double vinGlc_k0;
    protected double vlacto_k20;
    protected double vlpGlyc_K15DHAP;
    protected double vlpGlyc_K15INAD;
    protected double vlpGlyc_K15INADH;
    protected double vlpGlyc_K15NADH;
    protected double vlpGlyc_V15m;
    protected double vlpPEP_k9f;
    protected double vlpPEP_k9r;
    protected double voutACA_k0;
    protected double voutEtOH_k0;
    protected double voutGlyc_k0;
    protected double vstorage_k22;

    public double[] extendResult(double time,double [] x)
    {
        this.time = time;


        double[] y = new double[22];
        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];
        return y;
    }
    public double[] getInitialValues()
    {
        double [] x = new double[22];
        this.time = 0.0;
        x[0] = 1.28836; // - $"extracellular.ACAX"
        x[1] = 5.20358; // - $"extracellular.CNX"
        x[2] = 16.4514; // - $"extracellular.EtOHX"
        x[3] = 6.7; // - $"extracellular.GlcX"
        x[4] = 1.68478; // - $"extracellular.GlycX"
        x[5] = 1.48153; // - $"extracellular.cytosol.ACA"
        x[6] = 1.5; // - $"extracellular.cytosol.ADP"
        x[7] = 0.33; // - $"extracellular.cytosol.AMP"
        x[8] = 2.1; // - $"extracellular.cytosol.ATP"
        x[9] = 2.7E-4; // - $"extracellular.cytosol.BPG"
        x[10] = 2.95; // - $"extracellular.cytosol.DHAP"
        x[11] = 19.2379; // - $"extracellular.cytosol.EtOH"
        x[12] = 0.49; // - $"extracellular.cytosol.F6P"
        x[13] = 4.64; // - $"extracellular.cytosol.FBP"
        x[14] = 4.2; // - $"extracellular.cytosol.G6P"
        x[15] = 0.115; // - $"extracellular.cytosol.GAP"
        x[16] = 0.573074; // - $"extracellular.cytosol.Glc"
        x[17] = 4.196; // - $"extracellular.cytosol.Glyc"
        x[18] = 0.65; // - $"extracellular.cytosol.NAD"
        x[19] = 0.33; // - $"extracellular.cytosol.NADH"
        x[20] = 0.04; // - $"extracellular.cytosol.PEP"
        x[21] = 8.7; // - $"extracellular.cytosol.Pyr"

        __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 'BIOMD0000000061.xml' model
         */
    public void __internalDyDt_0(double time, double [] x, double[] result)
    {
        result[0] = +rate_vdifACA-rate_vlacto-rate_voutACA;
        result[1] = +rate_vinCN-rate_vlacto;
        result[2] = +rate_vdifEtOH-rate_voutEtOH;
        result[3] = -rate_vGlcTrans+rate_vinGlc;
        result[4] = +rate_vdifGlyc-rate_voutGlyc;
        result[5] = -rate_vADH+rate_vPDC-rate_vdifACA*59;
        result[6] = +rate_vAK*2+rate_vHK+rate_vPFK-rate_vPK+rate_vconsum-rate_vlpPEP+rate_vstorage;
        result[7] = -rate_vAK;
        result[8] = -rate_vAK-rate_vHK-rate_vPFK+rate_vPK-rate_vconsum+rate_vlpPEP-rate_vstorage;
        result[9] = +rate_vGAPDH-rate_vlpPEP;
        result[10] = +rate_vALD-rate_vTIM-rate_vlpGlyc;
        result[11] = +rate_vADH-rate_vdifEtOH*59;
        result[12] = -rate_vPFK+rate_vPGI;
        result[13] = -rate_vALD+rate_vPFK;
        result[14] = +rate_vHK-rate_vPGI-rate_vstorage;
        result[15] = +rate_vALD-rate_vGAPDH+rate_vTIM;
        result[16] = +rate_vGlcTrans*59-rate_vHK;
        result[17] = -rate_vdifGlyc*59+rate_vlpGlyc;
        result[18] = +rate_vADH-rate_vGAPDH+rate_vlpGlyc;
        result[19] = -rate_vADH+rate_vGAPDH-rate_vlpGlyc;
        result[20] = -rate_vPK+rate_vlpPEP;
        result[21] = -rate_vPDC+rate_vPK;
    }
    protected double [] calculateResult(double time, double[] x)
    {
        double[] result = new double[22];
        __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 ...