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