public cluster(int numOfRacks, rack rackUsed)
        {
            this.numOfRacks = numOfRacks;
            this.rackUsed = rackUsed;

            for (int k = 0; k < numOfRacks; k++) {
                racks.Add (rackUsed);
            }
        }
        private void generateAllPossibleRacks()
        {
            try
            {
                Parallel.ForEach(nodesInRack, s =>
                {
                    foreach (int numc in cpusInNode) foreach (int numm in memsInNode) foreach (int numg in gpusInNode)
                                foreach (cpu cp in theCPUS) foreach (mem me in theMems) foreach (gpu gp in theGPUS)
                                        {
                                            rack tmpRack = new rack(s, new node(numc, numm, numg, cp, gp, me));
                                            allPossibleRacks.Add(tmpRack);
                                        }
                });

                txt_log.BeginInvoke((Action)(() =>
                {
                    txt_log.AppendText(Environment.NewLine + Environment.NewLine + "Possible Rack Configurations:\t" + allPossibleRacks.Count);
                    txt_log.AppendText(Environment.NewLine + Environment.NewLine + getBestComponents());
                }));
                readyToGenerateClusters = true;

            }
            catch(Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }