Teuchos::RCP< Epetra_LinearProblem > build_problem(Teuchos::ParameterList& test_params, const Epetra_Comm& comm) { Teuchos::Time timer("build_problem"); timer.start(); Epetra_CrsMatrix* A; Epetra_Vector* b = NULL; std::string mm_file("not specified"); std::string rhs_mm_file("not specified"); helper::GetParameter(test_params, "mm_file", mm_file); helper::GetParameter(test_params, "rhs_mm_file", rhs_mm_file); std::string hb_file("not specified"); helper::GetParameter(test_params, "hb_file", hb_file); if (mm_file != "not specified") { if (comm.MyPID() == 0) { std::cout << "Matrix-Market file: " << mm_file << std::endl; } A = read_matrix_mm(mm_file, comm); if (rhs_mm_file != "not specified") { if (comm.MyPID() == 0) { std::cout << "Matrix-Market file: " << rhs_mm_file << std::endl; } b = read_vector_mm(rhs_mm_file, comm); } } else if (hb_file != "not specified") { read_matrix_hb(hb_file, comm, A, b); } else { throw std::runtime_error("No matrix file specified."); } Teuchos::RCP<Epetra_LinearProblem> problem = build_problem_mm(test_params, A, b); timer.stop(); if (comm.MyPID() == 0) { std::cout << "proc 0 time to read matrix & create problem: " << timer.totalElapsedTime() << std::endl; } return problem; }
Teuchos::RCP< Belos::LinearProblem< Scalar, Tpetra::MultiVector<Scalar,LocalOrdinal,GlobalOrdinal,Node>, Tpetra::Operator<Scalar,LocalOrdinal,GlobalOrdinal,Node> > > build_problem(Teuchos::ParameterList& test_params, const Teuchos::RCP<const Teuchos::Comm<int> >& comm, Teuchos::RCP<Node> node) { typedef Tpetra::MultiVector<Scalar,LocalOrdinal,GlobalOrdinal,Node> TMV; typedef Tpetra::Operator<Scalar,LocalOrdinal,GlobalOrdinal,Node> TOP; typedef Tpetra::CrsMatrix<Scalar,LocalOrdinal,GlobalOrdinal,Node> TCRS; typedef Belos::LinearProblem<Scalar,TMV,TOP> BLinProb; Teuchos::RCP<const TCRS> A; Teuchos::RCP<TMV> b = Teuchos::null; Teuchos::RCP<TMV> nullVec = Teuchos::null; std::string mm_file("not specified"); std::string rhs_mm_file("not specified"); std::string nullMvec_mm_file("not specified"); Ifpack2::getParameter(test_params, "mm_file", mm_file); Ifpack2::getParameter(test_params, "rhs_mm_file", rhs_mm_file); std::string hb_file("not specified"); Ifpack2::getParameter(test_params, "hb_file", hb_file); if (mm_file != "not specified") { if (comm->getRank() == 0) { std::cout << "Matrix-Market file: " << mm_file << std::endl; } A = read_matrix_mm<Scalar,LocalOrdinal,GlobalOrdinal,Node>(mm_file, comm); if (rhs_mm_file != "not specified") { if (comm->getRank() == 0) { std::cout << "Right-hand-side Matrix-Market file: " << rhs_mm_file << std::endl; } b = read_vector_mm<Scalar,LocalOrdinal,GlobalOrdinal,Node>(rhs_mm_file, comm); } if (nullMvec_mm_file != "not specified") { if (comm->getRank() == 0) { std::cout << "null multivector Matrix-Market file: " << nullMvec_mm_file << std::endl; } nullVec = read_vector_mm<Scalar,LocalOrdinal,GlobalOrdinal,Node>(rhs_mm_file, comm); } } else if (hb_file != "not specified") { if (comm->getRank() == 0) { std::cout << "Harwell-Boeing file: " << hb_file << std::endl; } A = read_matrix_hb<Scalar,LocalOrdinal,GlobalOrdinal,Node>(hb_file, comm, node); } else { throw std::runtime_error("No matrix file specified."); } Teuchos::RCP<BLinProb> problem = build_problem_mm<Scalar,LocalOrdinal,GlobalOrdinal,Node>(test_params, A, b, nullVec); return problem; }