• No results found

using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.IO; using System.Windows.Forms; namespace EupForms {

public partial class Form1 : Form

{ public Form1() { InitializeComponent(); GridButton.Checked = true; }

private void ExitButton_Click(object sender, EventArgs e) {

Application.Exit(); }

// constants

List<Blocks> fblocks =new List<Blocks>();// Blocks in the lake

List<Blocks> fblocksupdate=new List<Blocks>();// Blocks in the lake

List<GridBlocks>gblocks=newList<GridBlocks>();//grid showing neghbor blocks //List<NeigborBlocks> fnblocks = new List<NeigborBlocks>();

private int blx = 20, bly = 5, blz = 3; private double velocityx = 0.20 ;

private double diffusivityEk = 1.0 / 10; private double timestep = 1.0 / 10; private double deltaxy=10.0;

private double concentration = 0.0;

// specify source concentrations

private double source1 = 0.0; private double source2 = 0.0; private double source3 = 0.0; private double source4 = 0.0;

// specify source flow rates

private double sourcerate1 = 6.0; private double sourcerate2 = 18.0; private double sourcerate3 = 42.2; private double sourcerate4 = 3.8;

//private double source1 = 9.0;

//private double source2 = 7.0;

class Blocks

{

public int Blocknum;// number in reservoir

public double Xpos;// position cordinate in x

public double Ypos;// position cordinate in y

public double Zpos;// position cordinate in z

public double Conc; // public double Source;

public double source1; public double source2; public double source3; public double source4; }

class GridBlocks

{

public int blocknum;

public int right;// number in reservoir

public int left;// position cordinate in x

public int rear;// position cordinate in y

public int front;// position cordinate in z

public int upper; public int lower; }

public void SetBlocks()// sets number and cordinate of blocks

{

for (int num = 0; num < blx * bly * blz; num++) {

Blocks bks = new Blocks(); bks.Blocknum = num;

bks.Xpos = (num % blx) * deltaxy + 5.0; bks.Ypos = (num / blx) * deltaxy + 5.0;

bks.Zpos = (num / (blx * bly * blz)) * deltaxy + 5.0; fblocks.Add(bks);

fblocksupdate.Add(bks); }

}

public void SetInitialConcentrationBlocks()// sets concentration in blocks

{

{

fblocks[num].Conc = 0.0; fblocks[num].Conc = 0.0;

fblocks[num].Conc = concentration; fblocksupdate[num].Conc = concentration;

/* if (num == 1||num == 46||num == 54||num == 201||num == 246||num == 254 ) { fblocksupdate[num].Conc = concentration; }*/ } //fblocks[1].Conc = 1.210; //fblocks[46].Conc = 1.240; //fblocks[54].Conc = 3.090; //fblocks[201].Conc = 0.930; //fblocks[246].Conc = 0.930; //fblocks[254].Conc = 1.200; }

public void SetInitialSourcesBlocks()// sets concentration in blocks

{

for (int num = 0; num < blx * bly * blz; num++) { fblocks[num].source1 = 0.0; fblocksupdate[num].source1 = 0.0; fblocks[num].source2 = 0.0; fblocksupdate[num].source2 = 0.0; fblocks[num].source3 = 0.0; fblocksupdate[num].source3 = 0.0; fblocks[num].source4 = 0.0; fblocksupdate[num].source4 = 0.0; }

fblocks[82 ].source1 = source1 ;

fblocks[80].source2 = source2; fblocks[86].source3 = source3; fblocks[10].source4 = source4; }

public void SetBlockGrids()// sets block grid

for (int num = 0; num < blx * bly * blz; num++) {

GridBlocks bks = new GridBlocks();

bks.blocknum = num; gblocks.Add(bks); }

for (int num = 0; num < blx * bly * blz; num++) {

if (num%(blx*bly) < 20)gblocks[num].left =-1;//sets left most block neigbor

else gblocks[num].left = num - blx;

if (num % (blx * bly)>= 80)gblocks[num].right =-2;//sets right most block neigbor

else gblocks[num].right = num + blx;

if (num % (blx) ==blx-1) gblocks[num].front = -3;// sets front

else gblocks[num].front = num + 1; if (num % (blx) == 0) gblocks[num].rear = -4;// sets rear

else gblocks[num].rear = num - 1;

if (num < (blx*bly )) gblocks[num].upper = -5;// sets upper

else gblocks[num].upper = num - (blx*bly);

if (num >= (blx * bly*(blz -1))) gblocks[num].lower = -6;// sets lower

else gblocks[num].lower = num + (blx * bly);

} }

public void ExecutionProgram() {

for (int timenum = 1; timenum < MaxStep; timenum++)// calculations for all blocks

{

// DiffusionSolver();

for (int num = 0; num < blx * bly * blz; num++)// calculations for all blocks

{

//fblocksupdate[num].Conc = fblocks[num].Conc + AdvectionSolver(num) - DiffusionSolver(num) + fblocks[num].source1 * timestep / (Math.Pow(10, 3));// total diffusion and advection

fblocksupdate[num].Conc = fblocks[num].Conc + AdvectionSolver(num) - DiffusionSolver(num) + (fblocks[num].source1 +fblocks[num].source2 + fblocks[num].source3 + fblocks[num].source4) * timestep/ (Math.Pow(10, - 11));// total diffusion and advection

//fblocksupdate[num].Conc = fblocks[num].Conc + AdvectionSolver(num);// advection only//fblocksupdate[num].Conc = fblocks[num].Conc -

DiffusionSolver(num);// diffusion only

//fblocksupdate[num].Conc = fblocks[num].Source *timestep /(Math .Pow (10,3));

} SetUpBetweenSteps(); SaveConcentrationData(timenum); SaveVelocityData(timenum); } }

public double DiffusionSolver(int num) {

double sum = 0;

// for (int num = 0; num < blx * bly * blz; num++)

//{

// sum = 0.0;

// Test if left most block neigbor

if (gblocks[num].left == -1) {

} else {

sum+=(fblocks [num].Conc -fblocks [ gblocks[num].left].Conc )*timestep *diffusivityEk /(Math .Pow (deltaxy ,2));

}

// sets right most block neigbor

if (gblocks[num].right == -2) {

} else {

sum += (fblocks[num].Conc - fblocks[gblocks[num].right].Conc) * timestep * diffusivityEk / (Math.Pow(deltaxy, 2));

} // sets front if (gblocks[num].front == -3) { } else {

sum += (fblocks[num].Conc - fblocks[gblocks[num].front].Conc) * timestep * diffusivityEk / (Math.Pow(deltaxy, 2));

} // sets rear if ( gblocks[num].rear ==-4) { } else {

sum += (fblocks[num].Conc - fblocks[gblocks[num].rear].Conc) * timestep * diffusivityEk / (Math.Pow(deltaxy, 2));

}

// sets upper

if (gblocks[num].upper == -5) {

} else {

sum += (fblocks[num].Conc - fblocks[gblocks[num].upper].Conc) * timestep * diffusivityEk / (Math.Pow(deltaxy, 2));

} // sets lower if (gblocks[num].lower == -6) { } else {

sum += (fblocks[num].Conc - fblocks[gblocks[num].lower].Conc) * timestep * diffusivityEk / (Math.Pow(deltaxy, 2));

}

// fblocksupdate[num].Conc = fblocks[num].Conc -

return sum; //}

}

public double AdvectionSolver(int num) {

//double sum = 0.0;

//for (int num = 0; num < blx * bly * blz; num++)

// {

double sum = 0.0;

if (num % blx < 2) velocityx = 21.00;//equivalent to 24 cubic meters/sec

else if (num % blx < 6) velocityx = 21.00 * (sourcerate1 + sourcerate2 + sourcerate3) / (sourcerate1 + sourcerate2);

else velocityx = 21.00 * (sourcerate1 + sourcerate2+sourcerate3+sourcerate4 ) / (sourcerate1 + sourcerate2); // sets front if (gblocks[num].front>=0 &&(gblocks[num].front==gblocks[num].blocknum + 1)) {

sum -= (fblocks[num].Conc) * timestep *velocityx / deltaxy; }

// sets rear

if (gblocks[num].rear >=0 && (gblocks[num].rear == gblocks[num].blocknum - 1))

{

sum += (fblocks[gblocks[num].rear].Conc) * timestep * velocityx / deltaxy; }

/*

// Test if left most block neigbor if (gblocks[num].left == -1) { } else { sum += (fblocks[num].Conc -

fblocks[gblocks[num].left].Conc) * timestep * diffusivityEk / (Math.Pow(deltaxy, 2));

// sets right most block neigbor if (gblocks[num].right == -2) { } else { sum += (fblocks[num].Conc -

fblocks[gblocks[num].right].Conc) * timestep * diffusivityEk / (Math.Pow(deltaxy, 2)); } // sets upper if (gblocks[num].upper == -5) { } else { sum += (fblocks[num].Conc -

fblocks[gblocks[num].upper].Conc) * timestep * diffusivityEk / (Math.Pow(deltaxy, 2)); } // sets lower if (gblocks[num].lower == -6) { } else { sum += (fblocks[num].Conc -

fblocks[gblocks[num].lower].Conc) * timestep * diffusivityEk / (Math.Pow(deltaxy, 2)); }*/ //fblocksupdate[num].Conc = fblocks[num].Conc + return sum; //} }

public void SetUpBetweenSteps() {

for (int num = 0; num < blx * bly * blz; num++) {

fblocks[num].Conc=fblocksupdate[num].Conc; }

}

public void SetConcentrationFile() {

string str = " ,"; int number = 0; StreamWriter fileout = new

StreamWriter("Concentration.txt",false); fileout .Write ("Step,");

for (int num = 0; num < blx * bly * blz; num++)// save title

{

str+=fblocks[num].Blocknum .ToString (); str+=" ,"; fileout.Write(str); } fileout.WriteLine(); str = " ,"; fileout.Write(number.ToString()); fileout.Write(str); for (int num = 0; num < blx * bly * blz; num++) { fileout.Write(fblocks[num].Conc.ToString()); fileout.Write(str); } fileout.WriteLine(); fileout.Close(); }

public void SaveConcentrationData(int number) {

string str = " ,";

StreamWriter fileout = new StreamWriter("Concentration.txt", true);

fileout.Write(number.ToString ()); fileout.Write(str);

for (int num = 0; num < blx * bly * blz; num++) { fileout.Write(fblocks[num].Conc .ToString()); fileout.Write(str); } fileout.WriteLine(); fileout.Close(); } //

public void SetVelocityFile() {

string str = " ,"; int number = 0;

StreamWriter fileout = new StreamWriter("Velocityx.txt", false);

fileout.Write("Step,");

for (int num = 0; num < blx * bly * blz; num++)// save title

{ str = "Blknum:"; str += fblocks[num].Blocknum.ToString(); str += " ,"; fileout.Write(str); } fileout.WriteLine(); str = " ,"; fileout.Write(number.ToString()); fileout.Write(str); for (int num = 0; num < blx * bly * blz; num++) {

fileout.Write(fblocks[num].Conc.ToString()); fileout.Write(str); } fileout.WriteLine(); fileout.Close(); }

public void SaveVelocityData(int number) {

string str = " ,";

StreamWriter fileout = new StreamWriter("Velocity.txt", true); fileout.Write(number.ToString()); fileout.Write(str);

if (number % blx < 2) velocityx = 21.00;//equivalent to 24 cubic meters/sec

else if (number % blx < 6) velocityx = 21.00 * (sourcerate1 + sourcerate2 + sourcerate3) / (sourcerate1 + sourcerate2);

else velocityx = 21.00 * (sourcerate1 + sourcerate2 + sourcerate3 + sourcerate4) / (sourcerate1 + sourcerate2 );

for (int num = 0; num < blx * bly * blz; num++) { fileout.Write(velocityx.ToString()); fileout.Write(str); } fileout.WriteLine(); fileout.Close(); } //

public void SaveBlockNighbdata() {

StreamWriter fileout = new StreamWriter("kabakagrid.txt"); foreach (GridBlocks blks in gblocks)

{

string str = "Block number ";

str += Convert.ToString(blks.blocknum); str += "; "; str += blks.left .ToString(); str += "; "; str += blks.right.ToString(); str += "; "; str += blks.front.ToString(); str += "; "; str += blks.rear.ToString(); str += "; "; str += blks.upper.ToString(); str += "; "; str += blks.lower.ToString(); str += "; "; fileout.WriteLine(str); str = " "; } fileout.Close(); }

public void SaveBlockdata() {

StreamWriter fileout = new StreamWriter("kabaka.txt"); foreach (Blocks blks in fblocks)

{

string str="Block number ";

str += Convert .ToString ( blks.Blocknum); str += "; "; str += blks.Xpos.ToString (); str += "; "; str += blks.Ypos.ToString (); str += "; "; str += blks.Zpos.ToString () ; str += "; "; str += blks.Conc .ToString(); str += "; "; fileout.WriteLine(str); str = " "; } fileout.Close(); }

/* private void RunButton_Click(object sender, EventArgs e) {

// On cliking the button 'run', a new window loads SetUpWindow dlg = new SetUpWindow();

dlg.ShowDialog(); diffusivityEk = dlg.diffusivity; velocityx = dlg.velocity; deltaxy = dlg.deltaxy; source = dlg.source; concentration=dlg.concentration ; MaxStep = dlg.maxtimesteps; SetBlocks(); SetInitialConcentrationBlocks(); SetBlockGrids(); SaveBlockdata(); SetConcentrationFile(); SaveBlockNighbdata(); SetInitialSourcesBlocks(); ExecutionProgram(); } */

private void RunButton_Click(object sender, EventArgs e) {

// On cliking the button 'run', a new window loads

h dlg = new h(); dlg.ShowDialog(); diffusivityEk = dlg.diffusivity; velocityx = dlg.velocityx; deltaxy = dlg.deltaxy; source1 = dlg.source1;

source2 = dlg.source2; source3 = dlg.source3; source4 = dlg.source4; sourcerate1 = 42.0; sourcerate2 = 18.0; sourcerate3 = 6.0; sourcerate4 = 3.8; concentration = dlg.concentration; MaxStep = dlg.maxtimesteps; SetBlocks(); SetInitialConcentrationBlocks(); SetBlockGrids(); SaveBlockdata(); SetConcentrationFile(); SaveBlockNighbdata(); SetInitialSourcesBlocks(); SetVelocityFile(); ExecutionProgram(); }

private void ReadFileButton_Click(object sender, EventArgs e) {

if (GridButton.Checked) {

FileTextBox.Clear();

FileTextBox.Lines = File.ReadAllLines("kabakagrid.txt"); }

else if (CordinateButton.Checked) {

FileTextBox.Clear();

FileTextBox.Lines = File.ReadAllLines("kabaka.txt"); }

else {

FileTextBox.Clear();

FileTextBox.Lines = File.ReadAllLines("Concentration.txt"); }

}

private void Form1_Load(object sender, EventArgs e) {

} } }

APPENDIX III: GRID RESULTS SHOWING BLOCK NUMBER AND

Related documents