예제 #1
0
        public Chromato(Analyte givenAnalyte,
                        double givenInjectedConc,
                        double givenLenColumn,
                        int givenDivColumn,
                        double givenVelElu,
                        double givenTTotal,
                        double givenDt)
        {
            /* primary parameters set */
            analyte      = givenAnalyte;
            injectedConc = givenInjectedConc;
            lenColumn    = givenLenColumn;
            divColumn    = givenDivColumn;
            velElu       = givenVelElu;
            tTotal       = givenTTotal;
            dt           = givenDt;

            /* secondary paramers calculated and set*/
            dL          = lenColumn / divColumn;
            translCount = (int)(dL / (velElu * analyte.rTransl * dt));
            numTransl   = (int)(tTotal * velElu * analyte.rTransl / dL);
            numCells    = numTransl + divColumn + 1;

            /* cells allocated and initialized */
            c       = new double[numCells];
            idxHead = divColumn - 1;
            idxTail = 0;

            c[idxHead + 1] = injectedConc;
        }
예제 #2
0
        static void Main()
        {
            int clock;

            double injectedConc1 = 1.0;              //M
            double lenColumn     = 10.0 / 100.0;     //m
            int    divColumn     = 1000;             // no dimension
            double vElu          = 10e-2 / (1 * 60); // m/s
            double tTotal        = 15.0 * 60;        // seconds
            int    divTime       = 900000;
            double dt            = tTotal / divTime; // seconds

            double injectedConc2 = 0.02;             //M


            Analyte analyte1, analyte2;
            Column  column1, column2;

            analyte1 = new Analyte(/*rTransl*/ 0.1, /*k of decomp*/ 5.0e-4, /* D 4e-8 */ 4.0e-6);
            analyte2 = new Analyte(0.15, 0, 4.0e-6);

            column1 = new Column(analyte1, injectedConc1, lenColumn, divColumn, vElu, tTotal, dt);
            column2 = new Column(analyte2, injectedConc2, lenColumn, divColumn, vElu, tTotal, dt);


            for (clock = 0; clock <= divTime - 1; clock++)
            {
                column1.diffuse();
                column2.diffuse();
                column1.react(column2);

                if (clock % column1.translCount == 0)
                {
                    column1.translate();
                }

                if (clock % column2.translCount == 0)
                {
                    column2.translate();
                }
            }

            column1.output("outputtest1.csv");
            column2.output("outputtest2.csv");
        }
예제 #3
0
        /*constructor*/
        public Column(Analyte givenAnalyte,
                      double givenInjectedConc,
                      double givenLenColumn,
                      int givenDivColumn,
                      double givenVelElu,
                      double givenTTotal,
                      double givenDt)
        {
            /* primary parameters set */
            analyte      = givenAnalyte;
            injectedConc = givenInjectedConc;
            lenColumn    = givenLenColumn;
            divColumn    = givenDivColumn;
            velElu       = givenVelElu;
            tTotal       = givenTTotal;
            dt           = givenDt;

            /* secondary paramers calculated and set*/
            dL          = lenColumn / divColumn;
            translCount = (int)(dL / (velElu * analyte.rTransl * dt));
            //            numTransl = (int)(tTotal * velElu * analyte.rTransl / dL);
            numTransl = (int)(tTotal / (translCount * dt)) + 1;

            /*
             * Calculate numTransl by tTotal/(translCount*dt)+1.
             * If this is calulated by using primary parameters (velElu, rTransl, dt) and dL,
             * rounding error builds up, numTransl is evaluated small, and results in over-run of c[].
             * the last "1" means translation at count = 0.
             */
            numCells = numTransl + divColumn + 1;

            /* cells allocated and initialized */
            c             = new double[numCells];
            idxColumnHead = divColumn - 1;
            idxColumnTail = 0;

            c[idxColumnHead + 1] = injectedConc;
        }