Beispiel #1
0
        ISparseSolver GetSolver(IMutableMatrixEx Mtx)
        {
            ISparseSolver solver;

            switch (WhichSolver)
            {
            case _whichSolver.PARDISO:
                solver = new PARDISOSolver();
                ((PARDISOSolver)solver).CacheFactorization = true;
                ((PARDISOSolver)solver).UseDoublePrecision = true;
                break;

            case _whichSolver.MUMPS:
                solver = new MUMPSSolver();
                break;

            case _whichSolver.Matlab:
                solver = new MatlabSolverWrapper();
                break;

            case _whichSolver.Lapack:
                solver = new DenseSolverWrapper();
                break;

            default:
                throw new NotImplementedException();
            }

            solver.DefineMatrix(Mtx);

            return(solver);
        }
Beispiel #2
0
        ISparseSolver GetSolver(IMutableMatrixEx Mtx)
        {
            ISparseSolver solver;


            switch (WhichSolver)
            {
            case _whichSolver.PARDISO:
                if (LinConfig != null)
                {
                    SingletonPARDISO.SetParallelism(LinConfig.Parallelism);
                }
                solver = new PARDISOSolver();
                ((PARDISOSolver)solver).CacheFactorization = true;
                ((PARDISOSolver)solver).UseDoublePrecision = true;
                break;

            case _whichSolver.MUMPS:
                if (LinConfig != null)
                {
                    SingletonMumps.SetParallelism(LinConfig.Parallelism);
                }
                solver = new MUMPSSolver();
                break;

            case _whichSolver.Matlab:
                solver = new MatlabSolverWrapper();
                break;

            case _whichSolver.Lapack:
                solver = new DenseSolverWrapper();
                break;

            case _whichSolver.CG:
                solver = new CG();
                ((CG)solver).DevType       = ilPSP.LinSolvers.monkey.DeviceType.Cuda;
                ((CG)solver).MaxIterations = Switcher <int>(((CG)solver).MaxIterations, LinConfig.MaxSolverIterations);
                ((CG)solver).Tolerance     = Switcher <double>(((CG)solver).Tolerance, LinConfig.ConvergenceCriterion);
                break;

            case _whichSolver.PCG:
                solver = new PCG();
                break;

            default:
                throw new NotImplementedException();
            }

            solver.DefineMatrix(Mtx);

            return(solver);
        }