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