/// <summary> Constructor for AbstractLinearSolver, using the DefaultConvergenceTest and
        /// no preconditioning.
        /// </summary>
        public AbstractLinearSolver()
        {
            M    = new IdentityPreconditioner();
            iter = new DefaultLinearIteration();

            BLAS = Blas.Default;
        }
Exemplo n.º 2
0
 private double[] solve(IMatrix A, IVector b, IVector x, ILinearSolver solver,
                        IPreconditioner M, ILinearIteration iter)
 {
     M.Setup(A);
     solver.Preconditioner = M;
     solver.Iteration      = iter;
     return(Blas.Default.GetArrayCopy(solver.Solve(A, b, x)));
 }
Exemplo n.º 3
0
        private void Helper2(IElementalAccessMatrix A, IElementalAccessVector b,
                             IElementalAccessVector x, ILinearSolver solver, IPreconditioner M, ILinearIteration iter)
        {
            Random r = new Random();
            double K = r.NextDouble(), f = r.NextDouble(), gl = r.NextDouble(), gr = r.NextDouble();

            //assemble(A, b, K, f);
            //boundary(A, b, x, gl, gr);

            A.SetValue(0, 0, 1);
            A.SetValue(0, 1, 1);
            A.SetValue(0, 2, 1.3);
            A.SetValue(1, 0, -0.5);
            A.SetValue(1, 1, -0.25);
            A.SetValue(1, 2, -1.25);
            A.SetValue(2, 0, 2.5);
            A.SetValue(2, 1, 3.25);
            A.SetValue(2, 2, -1.25);
            b.SetValue(0, 1.25);
            b.SetValue(1, 3.75);
            b.SetValue(1, -2.35);


            double[] ans = solve(A, b, x, solver, M, iter);
            //double[] ref_Renamed = reference(b.Length - 1, K, f, gl, gr);
            //checkEqual(ans, ref_Renamed);

            Console.WriteLine("!:  " + solver + " " + M + " " + iter + "    " + x.GetValue(0) + " " + x.GetValue(1) + " " + x.GetValue(2));

            Blas.Default.Zero(A);
            Blas.Default.Zero(b);
            Blas.Default.Zero(x);
        }
Exemplo n.º 4
0
 /// <summary> Constructor for AbstractMixedSolver, with CG as solver and default
 /// linear iteration object.</summary>
 public AbstractMixedSolver()
 {
     this.iter   = new DefaultLinearIteration();
     this.solver = new CGSolver();
     blas        = Blas.Default;
 }
Exemplo n.º 5
0
        private void Helper2(IElementalAccessMatrix A, IElementalAccessVector b,
                             IElementalAccessVector x, ILinearSolver solver, IPreconditioner M, ILinearIteration iter)
        {
            Random r = new Random();
            double K = r.NextDouble(), f = r.NextDouble(), gl = r.NextDouble(), gr = r.NextDouble();

            assemble(A, b, K, f);
            boundary(A, b, x, gl, gr);
            double[] ans         = solve(A, b, x, solver, M, iter);
            double[] ref_Renamed = reference(b.Length - 1, K, f, gl, gr);

            checkEqual(ans, ref_Renamed);

            Blas.Default.Zero(A);
            Blas.Default.Zero(b);
            Blas.Default.Zero(x);
        }