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(); }
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; } }