//runs the batch simulation
        public void RunBatchSimulation()
        {
            feedA = 0.001;
            killB = 0.001;
            double diffA = 0;
            double diffB = 0;
            IColourPicker colourScheme = new GrayScaleColours();
            for(int i = 0; i < 3; i++)
            {
                //set laplacian function and related diffusion rates
                if(i == 0)
                {
                    lapFunc = LaplacianFunctions.PerpendicularLaplacian;
                    diffA = perpDiffA;
                    diffB = PerpDiffB;
                }
                else if (i == 1)
                {
                    lapFunc = LaplacianFunctions.ConvolutionLaplacian;
                    diffA = convDeltDiffA;
                    diffB = convDeltDiffB;
                }
                else if (i == 2)
                {
                    lapFunc = LaplacianFunctions.DeltaMeansLaplacian;
                    diffA = convDeltDiffA;
                    diffB = convDeltDiffB;
                }

                //changes feed A until it reaches 0.099
                while(feedA <= 0.099)
                {
                    //changes kill b untill it reaches 0.099
                    while (killB <= 0.099)
                    {
                        //makes a new grid with those numbers
                        grid = new Grid(canvas, bounds, lapFunc, colourScheme, cellSize, gridSize, diffA, diffB, feedA, killB);
                        //runs throught the simulation for 5000 iterations - enough to become stable
                        for (int j = 0; j < numOfIterations; j++)
                        {
                            grid.GetCellsNextValues();
                            grid.UpdateCellsValues();
                        }
                        //once it has become stable draws to screen then saves the image
                        grid.DrawGrid();
                        formGraphics.DrawImage(pattern, 0, 0);
                        SaveImage();

                        killB += 0.001;
                    }
                    feedA += 0.001;
                    killB = 0.001;

                }
            }
        }
        //runs the batch simulation
        public void RunBatchSimulation()
        {
            feedA = 0.001;
            killB = 0.001;
            double        diffA        = 0;
            double        diffB        = 0;
            IColourPicker colourScheme = new GrayScaleColours();

            for (int i = 0; i < 3; i++)
            {
                //set laplacian function and related diffusion rates
                if (i == 0)
                {
                    lapFunc = LaplacianFunctions.PerpendicularLaplacian;
                    diffA   = perpDiffA;
                    diffB   = PerpDiffB;
                }
                else if (i == 1)
                {
                    lapFunc = LaplacianFunctions.ConvolutionLaplacian;
                    diffA   = convDeltDiffA;
                    diffB   = convDeltDiffB;
                }
                else if (i == 2)
                {
                    lapFunc = LaplacianFunctions.DeltaMeansLaplacian;
                    diffA   = convDeltDiffA;
                    diffB   = convDeltDiffB;
                }

                //changes feed A until it reaches 0.099
                while (feedA <= 0.099)
                {
                    //changes kill b untill it reaches 0.099
                    while (killB <= 0.099)
                    {
                        //makes a new grid with those numbers
                        grid = new Grid(canvas, bounds, lapFunc, colourScheme, cellSize, gridSize, diffA, diffB, feedA, killB);
                        //runs throught the simulation for 5000 iterations - enough to become stable
                        for (int j = 0; j < numOfIterations; j++)
                        {
                            grid.GetCellsNextValues();
                            grid.UpdateCellsValues();
                        }
                        //once it has become stable draws to screen then saves the image
                        grid.DrawGrid();
                        formGraphics.DrawImage(pattern, 0, 0);
                        SaveImage();

                        killB += 0.001;
                    }
                    feedA += 0.001;
                    killB  = 0.001;
                }
            }
        }
        //makes the colour scheme that is to be used
        public IColourPicker MakeColour(ColourChoices choice)
        {
            IColourPicker newColour = new GrayScaleColours();

            switch (choice)
            {
                case ColourChoices.GrayScale:
                    newColour = new GrayScaleColours();
                    break;
                case ColourChoices.Colour1:
                    newColour = new ColourScheme1();
                    break;
                case ColourChoices.Colour2:
                    newColour = new ColourScheme2();
                    break;
            }
            return newColour;
        }
        //makes the colour scheme that is to be used
        public IColourPicker MakeColour(ColourChoices choice)
        {
            IColourPicker newColour = new GrayScaleColours();

            switch (choice)
            {
            case ColourChoices.GrayScale:
                newColour = new GrayScaleColours();
                break;

            case ColourChoices.Colour1:
                newColour = new ColourScheme1();
                break;

            case ColourChoices.Colour2:
                newColour = new ColourScheme2();
                break;
            }
            return(newColour);
        }