#include "parallel/Mtl4Solver.h" #include "parallel/PITL_Solver.h" #include "parallel/ParallelMapper.h" namespace AMDiS { namespace Parallel { void Mtl4Solver::addPMTLSolvers() { OEMSolverCreator *creator; creator = new CGSolver::Creator; CreatorMap< OEMSolver >::addCreator("pcg", creator); creator = new CGSSolver::Creator; CreatorMap< OEMSolver >::addCreator("pcgs", creator); creator = new BiCGSolver::Creator; CreatorMap< OEMSolver >::addCreator("pbicg", creator); creator = new BiCGStabSolver::Creator; CreatorMap< OEMSolver >::addCreator("pbicgstab", creator); creator = new BiCGStab2Solver::Creator; CreatorMap< OEMSolver >::addCreator("pbicgstab2", creator); creator = new BiCGStabEllSolver::Creator; CreatorMap< OEMSolver >::addCreator("pbicgstab_ell", creator); creator = new QMRSolver::Creator; CreatorMap< OEMSolver >::addCreator("pqmr", creator); creator = new TFQMRSolver::Creator; CreatorMap< OEMSolver >::addCreator("ptfqmr", creator); creator = new GMResSolver::Creator; CreatorMap< OEMSolver >::addCreator("pgmres", creator); creator = new IDRsSolver::Creator; CreatorMap< OEMSolver >::addCreator("pidr_s", creator); creator = new MinResSolver::Creator; CreatorMap< OEMSolver >::addCreator("pminres", creator); } void Mtl4Solver::createSolver() { FUNCNAME("Parallel::Mtl4Solver::createSolver()"); // === create solver === std::string solverType("0"); Parameters::get(name + "->solver", solverType); solverType = "p" + solverType; OEMSolverCreator *solverCreator = dynamic_cast(CreatorMap::getCreator(solverType)); TEST_EXIT(solverCreator)("no solver type\n"); solverCreator->setName(name + "->solver"); solver = solverCreator->create(); solver->initParameters(); } void Mtl4Solver::createPrecon() {} void Mtl4Solver::solve(AdaptInfo* adaptInfo, bool fixedMatrix) { FUNCNAME("Mtl4Solver::solve()"); clock_t first = clock(); ParallelMapper pmapper(*meshDistributor, nComponents); solver->solveSystem(solverMatrix, *solution, *rhs, pmapper); INFO(info, 8)("solution of discrete system needed %.5f seconds\n", TIME_USED(first, clock())); } } template< > void CreatorMap< Parallel::ParallelPreconditioner >::addDefaultCreators() { Parallel::ParallelPreconditionCreator *creator; creator = new Parallel::DiagonalPreconditioner::Creator; addCreator("diag", creator); creator = new Parallel::ILUPreconditioner::Creator; addCreator("ilu", creator); creator = new Parallel::ICPreconditioner::Creator; addCreator("ic", creator); creator = new Parallel::IdentityPreconditioner::Creator; addCreator("no", creator); } }