예제 #1
0
파일: Form1.cs 프로젝트: dptph/lat-qcd
        private void button10_Click(object sender, EventArgs e)
        {
            double beta = 10;
            SU3 Field = new SU3(int.Parse(tbNs.Text), int.Parse(tbNt.Text), beta, 0, true);//4х2 field beta=6 flux=0
            for (int i = 0; i < 10; i++) Field.Sweep(false);
            Dirac Dt = new Dirac(Field);
            Complex res = Complex.Zero;

            for (int n = 0; n < Dirac.N; n++)
                for (byte alpha = 0; alpha < 4; alpha++)
                    for (byte a = 0; a < 3; a++)
                    {
                        DateTime t = DateTime.Now;
                        Dirac D = new Dirac(Field);

                        D.phi[n, alpha, a] = Complex.One;
                        //double philen = Dirac.V1hermV2(D.phi, D.phi).Module();

                        D.Prepare();
                        for (int i = 0; i < 5; i++)
                        {
                            D.Iter();
                            //Vector phinew = D.MulD(D.x);
                            //double r = 0;// D.V1hermV2(phinew, phinew).Module(); //D.V1hermV2(D.ri, D.ri).Module();
                            //Text = "i = " + i.ToString() + "    philen=" + philen.ToString() + "  =?  " + r.ToString() + "     " + (DateTime.Now - t).ToString();
                            //t = DateTime.Now;
                        }
                        res += D.x[n, alpha, a];
                        Text = n.ToString() + " " + (res / new Complex((n + 1) * 12, 0)).ToString();
                        Application.DoEvents();
                        if (CloseMe) break;
                    }
            Text = (res / new Complex(Dirac.N, 0)).ToString();

            //for (int exp = 0; exp < 1; exp++)
            //{
            //    double beta = 6;// 1 + 10 * exp;
            //    SU3 Field = new SU3(4, 2, beta, 0, true);//4х2 field beta=6 flux=0
            //    for (int i = 0; i < 10; i++) Field.Sweep(false);

            //    DateTime t = DateTime.Now;

            //    int K = 100;
            //    Vector[] chi = new Vector[K];
            //    Complex tr = new Complex();
            //    for (int k = 0; k < K; k++)
            //    {
            //        Dirac D = new Dirac(Field);
            //        chi[k] = new Vector(Dirac.N, rand.Next());
            //        chi[k].FillGaussRandom();
            //        D.phi = chi[k];
            //        //double philen = Dirac.V1hermV2(D.phi, D.phi).Module();
            //        D.Prepare();
            //        for (int i = 0; i < 4; i++)
            //        {
            //            D.Iter();
            //            //Vector v = D.MulD(D.x);
            //            //Text = Dirac.V1hermV2(D.ri, D.ri).ToString();//"Dx = " + Dirac.V1hermV2(v, v).Module() + "   phi = " + philen.ToString();
            //            //Application.DoEvents();
            //        }
            //        tr += Dirac.V1hermV2(D.phi, D.x);
            //        Text = beta.ToString() + " " + k.ToString();

            //        Application.DoEvents();
            //    }

            //    tr *= new Complex(1 / (double)K / (4 * 4 * 4 * 2 * 12 * 2), 0);
            //    Text = tr.ToString();
            //    chart1.Series[0].Points.AddXY(beta, tr.x);

            //}
        }
예제 #2
0
파일: Form1.cs 프로젝트: dptph/lat-qcd
        private void button12_Click(object sender, EventArgs e)
        {
            double beta = 6;
            SU3 Field = new SU3(int.Parse(tbNs.Text), int.Parse(tbNt.Text), beta, 0, true);//4х2 field beta=6 flux=0
            //for (int i = 0; i < 10; i++) Field.Sweep(false);
            Complex res = Complex.Zero;
            Dirac D = new Dirac(Field);

            D.phi.FillRandom();

            DateTime t = DateTime.Now;

            D.Prepare();
            //for (int i = 0; i < 10; i++)
                D.Iter();

            Text = ((DateTime.Now - t).TotalMilliseconds).ToString();
        }