Open t-sakashita opened 4 years ago
現状では、if文で処理している。
static std::unique_ptr<solvermanager_t> create_solver_manager(std::string const& routine, Teuchos::RCP<eigenproblem_t> problem, Teuchos::ParameterList& pl) { if ((routine == "LOBPCG") || (routine == "")) return std::make_unique<Anasazi::LOBPCGSolMgr<value_type, Epetra_MultiVector, Epetra_Operator>>(problem, pl); else if (routine == "BlockKrylovSchur") return std::make_unique<Anasazi::BlockKrylovSchurSolMgr<value_type, Epetra_MultiVector, Epetra_Operator>>(problem, pl); else if (routine == "BlockDavidson") return std::make_unique<Anasazi::BlockDavidsonSolMgr<value_type, Epetra_MultiVector, Epetra_Operator>>(problem, pl); else if (routine == "RTR") return std::make_unique<Anasazi::RTRSolMgr<value_type, Epetra_MultiVector, Epetra_Operator>>(problem, pl); }
ソルバ名の文字列とポインタ型との対応は、std::mapで作っておく。 ただ、std::mapは、コンパイル時に作成することはできない。
現状では、if文で処理している。