Пример #1
0
        private void Run_Click(object sender, EventArgs e)
        {
            nAtoms = (int)AtomsUP.Value;
            nSteps = (int)StepsUP.Value;

            if (nAtoms * nAtoms != MatrixS.Length)
            {
                MatrixReuse.Checked = false;
            }

            T = double.Parse(TempTB.Text.Replace(",", "."), Info);
            J = double.Parse(ChangeTB.Text.Replace(",", "."), Info);

            Run.Enabled      = false;
            CancelBT.Enabled = true;

            Zoom = ZoomBar.Value / 100.0f;

            int size = nAtoms * (AtomSize + AtomSpace) + 2 * Border;

            Engine.Width = (int)(size * Zoom);

            Engine.Height = Engine.Width;

            MainContainer_Resize(sender, e);

            Progress.Value = 0;

            T0 = DateTime.Now;

            SimTimer.Enabled = true;

            if (UseGPU.Checked)
            {
                CancelBT.Enabled = false;
                Progress.Style   = ProgressBarStyle.Continuous;
                SimulatorGPU.RunWorkerAsync();
            }
            else
            {
                Simulator.RunWorkerAsync();
            }

            Done = false;
        }
Пример #2
0
        public void SetRunAndSave(int Atoms, int Steps, double J, double T, bool UseGPU, String FinalImageFile, String InitialImage, String FinalMatrix, String InitialMatrix)
        {
            nAtoms = Atoms;
            nSteps = Steps;

            MatrixReuse.Checked = false;

            this.T = T;
            this.J = J;

            Run.Enabled      = false;
            CancelBT.Enabled = true;
            IsOffLine        = true;

            Zoom = ZoomBar.Value / 100.0f;

            int size = nAtoms * (AtomSize + AtomSpace) + 2 * Border;

            Engine.Width = (int)(size * Zoom);

            Engine.Height = Engine.Width;

            MainContainer_Resize(null, null);

            Progress.Value = 0;

            T0 = DateTime.Now;

            Done = false;

            if (UseGPU)
            {
                CancelBT.Enabled = false;
                Progress.Style   = ProgressBarStyle.Continuous;
                SimulatorGPU.RunWorkerAsync();
            }
            else
            {
                Simulator.RunWorkerAsync();
            }

            while (!Done)
            {
                if (UseGPU)
                {
                    System.Threading.Thread.Sleep(100);
                }
                else
                {
                    System.Threading.Thread.Sleep(1000);
                }
                Console.Out.Write(".");
            }


            Console.Out.WriteLine(" [DONE]");

            if (!String.IsNullOrEmpty(FinalImageFile))
            {
                Console.Out.WriteLine("Final Image [SAVED]");
                MatrixR = MatrixS;

                Engine.Refresh();

                using (Bitmap bmp = new Bitmap(Engine.Width, Engine.Height))
                {
                    Engine.DrawToBitmap(bmp, new Rectangle(0, 0, Engine.Width, Engine.Height));

                    bmp.Save(FinalImageFile);
                }
            }

            if (!String.IsNullOrEmpty(FinalMatrix))
            {
                Console.Out.WriteLine("Final Matrix [SAVED]");
                MatrixR = MatrixS;
                using (StreamWriter writer = new StreamWriter(FinalMatrix))
                {
                    for (int i = 0; i < nAtoms; i++)
                    {
                        String Line = "";

                        for (int j = 0; j < nAtoms; j++)
                        {
                            int p = i * nAtoms + j;

                            Line += String.Format("{0};", MatrixR[p]);
                        }

                        Line = Line.Remove(Line.Length - 1);

                        writer.WriteLine(Line);
                    }
                }
            }

            if (!String.IsNullOrEmpty(InitialMatrix))
            {
                Console.Out.WriteLine("Initial Matrix [SAVED]");
                MatrixR = Matrix0;
                using (StreamWriter writer = new StreamWriter(InitialMatrix))
                {
                    for (int i = 0; i < nAtoms; i++)
                    {
                        String Line = "";

                        for (int j = 0; j < nAtoms; j++)
                        {
                            int p = i * nAtoms + j;

                            Line += String.Format("{0};", MatrixR[p]);
                        }

                        Line = Line.Remove(Line.Length - 1);

                        writer.WriteLine(Line);
                    }
                }
            }

            if (!String.IsNullOrEmpty(InitialImage))
            {
                Console.Out.WriteLine("Initial Image [SAVED]");
                MatrixR = Matrix0;

                Engine.Refresh();

                using (Bitmap bmp = new Bitmap(Engine.Width, Engine.Height))
                {
                    Engine.DrawToBitmap(bmp, new Rectangle(0, 0, Engine.Width, Engine.Height));

                    bmp.Save(InitialImage);
                }
            }

            MatrixR = MatrixS;
        }