44 #include "Epetra_RowMatrix.h" 45 #include "Epetra_CrsMatrix.h" 46 #include "Teuchos_Assert.hpp" 47 #ifdef HAVE_STOKHOS_IFPACK 57 Teuchos::RCP<Epetra_Operator>
59 compute(
const Teuchos::RCP<Epetra_Operator>& op,
bool compute_prec) {
60 #ifdef HAVE_STOKHOS_IFPACK 61 Teuchos::RCP<Epetra_RowMatrix> mat =
62 Teuchos::rcp_dynamic_cast<Epetra_RowMatrix>(op,
true);
64 std::string prec = precParams->get(
"Ifpack Preconditioner",
"ILU");
65 int overlap = precParams->get(
"Overlap", 0);
66 Teuchos::RCP<Ifpack_Preconditioner> ifpackPrec =
67 Teuchos::rcp(Factory.Create(prec, mat.get(), overlap));
68 ifpackPrec->SetParameters(*precParams);
69 ifpackPrec->Initialize();
71 ifpackPrec->Compute();
74 TEUCHOS_TEST_FOR_EXCEPTION(
true, std::logic_error,
75 "Stokhos::IfpackPreconditionerFactory is available " <<
76 "only with configured with Ifpack support!");
78 #endif // HAVE_STOKHOS_IFPACK 84 const Teuchos::RCP<Epetra_Operator>& prec_op) {
85 #ifdef HAVE_STOKHOS_IFPACK 87 Teuchos::RCP<Epetra_CrsMatrix> mat =
88 Teuchos::rcp_dynamic_cast<Epetra_CrsMatrix>(op,
true);
89 Teuchos::RCP<Ifpack_Preconditioner> ifpackPrec =
90 Teuchos::rcp_dynamic_cast<Ifpack_Preconditioner>(prec_op);
91 const Epetra_RowMatrix& prec_mat = ifpackPrec->Matrix();
92 const Epetra_CrsMatrix& prec_crs_mat =
93 dynamic_cast<const Epetra_CrsMatrix&
>(prec_mat);
94 Epetra_CrsMatrix& non_const_prec_crs_mat =
95 const_cast<Epetra_CrsMatrix&
>(prec_crs_mat);
96 non_const_prec_crs_mat = *mat;
99 ifpackPrec->Compute();
101 TEUCHOS_TEST_FOR_EXCEPTION(
true, std::logic_error,
102 "Stokhos::IfpackPreconditionerFactory is available " <<
103 "only with configured with Ifpack support!");
104 #endif // HAVE_STOKHOS_IFPACK IfpackPreconditionerFactory(const Teuchos::RCP< Teuchos::ParameterList > &p)
Constructor.
virtual void recompute(const Teuchos::RCP< Epetra_Operator > &op, const Teuchos::RCP< Epetra_Operator > &prec)
Recompute preconditioner operator for a new matrix.
virtual Teuchos::RCP< Epetra_Operator > compute(const Teuchos::RCP< Epetra_Operator > &op, bool compute_prec=true)
Compute preconditioner.