protected TwoDAbstractParabolicPolarSolver(TwoDParabolicPolarProblem parabolicProblem, double nhr)
 {
     hal = 2 * Math.PI / 10;
     hr = nhr;
     problem = parabolicProblem;
     L = problem.L;
     J = (int)(L / hr);
     I = (int)(2 * Math.PI / hal);
     tau = 0.25 / (1 / (hr * hr) + 1 / (hal * hal * hr * hr) + 1 / (hr * hr * hr));
     //tau = 0.001;
 }
 public TwoDSplitParabolicPolarSolver(TwoDParabolicPolarProblem parabolicProblem, double nhr)
     : base(parabolicProblem, nhr)
 {
 }
Exemplo n.º 3
0
        public static void Polar()
        {
            do
            {
                Console.Write("hr = ");
                var h = double.Parse(Console.ReadLine());

                Console.Write("L = ");
                var L = double.Parse(Console.ReadLine());

                Console.Write("J = ");
                var J = int.Parse(Console.ReadLine());

                var parabolicProblem = new TwoDParabolicPolarProblem()
                {
                    L = L,
                    Fi = (r, al) => r,
                    Psi = (r, al, t) => r + t
                };
                var parabolicSolver = new TwoDExplicitParabolicPolarSolver(parabolicProblem, h);
                var parabolicSolver1 = new TwoDSplitParabolicPolarSolver(parabolicProblem, h);
                var parabolicSolver2 = new TwoDImplicitParabolicPolarSolver(parabolicProblem, h);
                var ans = parabolicSolver.Solve(J);
                var ans1 = parabolicSolver1.Solve(J);
                var ans2 = parabolicSolver2.Solve(J);
                var tmp = 666;
                if (ans == null)
                {
                    Console.WriteLine("Условия согласования не выполнены");
                }
                else
                {
                    var maxFail = 0.00;
                    Console.WriteLine("Layer # {0}", ans.Number);
                    Console.WriteLine("Explicit:        Implicit:       Splitting:      Failure(Splitting and Implicit):");
                    for (int i = 0; i < ans.Xy.GetLength(0); i++)
                    {
                        for (int j = 0; j < ans.Xy.GetLength(1); j++)
                        {
                            Console.WriteLine("{0:F6}   |   {1:F6}      |   {2:F6}  |   {3:F6}  |", ans1[i, j], ans2[i, j], ans[i, j], Math.Abs(ans1[i, j] - ans2[i, j]));
                            maxFail = Math.Max(maxFail, Math.Abs(ans2[i, j] - ans1[i, j]));
                        }
                    }

                    Console.WriteLine("Max Fail = {0:F6}", maxFail);
                }
            }
            while (true);
        }