Example #1
0
 public GridController(int gridWidth, int gridHeight)
 {
     currentGrid         = new Grid(gridWidth, gridHeight);
     nextStepGrid        = new Grid(gridWidth, gridHeight);
     nucleonsPopulation  = 1;
     CurrentNucleonID    = 0;
     emptyCount          = Grid.SizeX * Grid.SizeY;
     ProbabilityOfChange = 100;
     mcEngine            = new MonteCarloEngine();
     rcEngine            = new RecrystallizationEngine();
 }
Example #2
0
            public void Run()
            {
                dumpfile = Path.Combine(Directory, DumpFile);
                if (File.Exists(dumpfile))
                {
                    cluster = new Cluster();
                    cluster.LoadFromFile(dumpfile, null, new XYZReader(-1));

                    tstart  = Convert.ToDouble(cluster["temperature"].ToString(), CultureInfo.InvariantCulture);
                    mcstart = Convert.ToInt32(cluster["mcstep"].ToString());
                }
                else
                {
                    cluster = new Cluster();
                    cluster.LoadFromFile(LoadConfig);
                    tstart  = StartTemperature;
                    mcstart = -1;
                }
                cluster.RefreshComment();
                mce = new MonteCarloEngine(cluster, MaxTranslation);
                foreach (var line in Potentials)
                {
                    if (line.StartsWith("gupt"))
                    {
                        mce.AddGuptaParams(line.Replace("gupt", "").Trim());
                    }
                    if (line.StartsWith("lj"))
                    {
                        mce.AddLJParams(line.Replace("lj", "").Trim());
                    }
                }
                mce.Init();
                StepTemperature = StartTemperature < FinishTemperature ? StepTemperature : -StepTemperature;
                for (double T = tstart; ContinueCondition(T); T += StepTemperature)
                {
                    for (int step = mcstart + 1; step < MacroSteps; ++step)
                    {
                        Console.WriteLine($"[{Directory}]:\n Launching macrostep {step} for temperature {T.ToString(CultureInfo.InvariantCulture)}");
                        mce.Run(MicroSteps, T);

                        Console.WriteLine($"Saving results for macrostep {step} for temperature {T.ToString(CultureInfo.InvariantCulture)} in {dumpfile}");
                        cluster["temperature"] = T.ToString(CultureInfo.InvariantCulture);
                        cluster["mcstep"]      = step.ToString();

                        DescriptiveStatistics stat = new DescriptiveStatistics(cluster.GetEnergies());
                        cluster["energy"]     = stat.Mean.ToString(CultureInfo.InvariantCulture);
                        cluster["sigma"]      = stat.StandardDeviation.ToString(CultureInfo.InvariantCulture);
                        cluster["max_energy"] = stat.Maximum.ToString(CultureInfo.InvariantCulture);
                        cluster["min_energy"] = stat.Minimum.ToString(CultureInfo.InvariantCulture);

                        Console.WriteLine("Average energy of cluster: " + cluster["energy"] + " eV/atom");
                        Console.WriteLine("Standart deviation of energy: " + cluster["sigma"] + " eV/atom");
                        Console.WriteLine("Max energy: " + cluster["max_energy"] + " eV");
                        Console.WriteLine("Min energy: " + cluster["min_energy"] + " eV");

                        cluster.RefreshComment(false);

                        cluster.DumpToFile(dumpfile);
                        Console.WriteLine();
                    }
                    mcstart = -1;
                }
            }