public ImplicitConvDiffSolver(ConvDiffProblem problem, double hx)
 {
     this.hx = hx;
     this.Nx = (int)(problem.L / hx + 1E-6);
     this.ht = hx / Math.Abs(problem.a) / 2.0;
     this.problem = problem;
 }
Exemplo n.º 2
0
        public static void ConvDiff()
        {
            do
            {
                Console.Write("h = ");

                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 convProblem = new ConvDiffProblem()
                {
                    a = 20,
                    L = L,
                    f = (x, t) => Math.Cos(x) * Math.Sin(t),
                    psi = (t) => t,
                    U0 = (x) => Math.Sin(x * Math.PI / L)
                };

                int needLayer = J;
                double maxFail = 0.0D;
                var explicitSolver = new ExplicitConvDiffSolver(convProblem, h);
                var implicitSolver = new ImplicitConvDiffSolver(convProblem, h);
                var expl = explicitSolver.Solve(needLayer);

                if (expl == null)
                {
                    Console.WriteLine("Условия согласования не выполнены");
                    return;
                }
                var impl = implicitSolver.Solve(needLayer);

                Console.WriteLine("Layer # {0}\nExplicit:    Implicit:    Failure", needLayer);
                for (int i = 0; i < expl.X.Length; i++)
                {

                    Console.WriteLine("{0:F8} | {1:F8} | {2:F8}", expl[i], impl[i], Math.Abs(expl[i] - impl[i]));
                    maxFail = Math.Max(maxFail, Math.Abs(expl[i] - impl[i]));
                }

                Console.WriteLine("\nMaximal fail = {0:F6}", maxFail);
                Console.WriteLine(new string('-', 50) + Environment.NewLine);
            }
            while (true);
        }