t-sakashita / rokko

Integrated Interface for libraries of eigenvalue decomposition
Boost Software License 1.0
10 stars 2 forks source link

Anasaziのソルバの生成をcreator等を作って行う。 #506

Open t-sakashita opened 4 years ago

t-sakashita commented 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);
  }
t-sakashita commented 4 years ago

ソルバ名の文字列とポインタ型との対応は、std::mapで作っておく。 ただ、std::mapは、コンパイル時に作成することはできない。