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; }
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"); }
/*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; }