47 #include "Teko_ProbingPreconditionerFactory.hpp"
49 #ifdef Teko_ENABLE_Isorropia
51 #include "Teko_EpetraOperatorWrapper.hpp"
53 #include "Thyra_get_Epetra_Operator.hpp"
54 #include "Thyra_EpetraLinearOp.hpp"
55 #include "Epetra_CrsMatrix.h"
59 using Teuchos::rcp_dynamic_cast;
60 using Teuchos::rcpFromRef;
66 ProbingPreconditionerFactory::ProbingPreconditionerFactory() {
67 prober = rcp(
new Isorropia::Epetra::Prober);
70 LinearOp ProbingPreconditionerFactory::buildPreconditionerOperator(
71 LinearOp& lo, PreconditionerState& state)
const {
79 RCP<Epetra_CrsMatrix> retOp = prober->probe(*epetraLo);
80 Teko::LinearOp probedOp = Thyra::epetraLinearOp(retOp);
85 void ProbingPreconditionerFactory::initializeFromParameterList(
const Teuchos::ParameterList& pl) {
86 RCP<const InverseLibrary> invLib = getInverseLibrary();
88 const std::string inverse_type =
"Inverse Type";
89 const std::string probing_graph_operator =
"Probing Graph Operator";
90 const std::string probing_graph =
"Probing Graph";
91 const std::string user_graph =
"User Will Set Probing Graph";
94 std::string invStr =
"Amesos";
95 if (pl.isParameter(inverse_type)) invStr = pl.get<std::string>(inverse_type);
97 if (pl.isParameter(probing_graph_operator))
98 setGraphOperator(pl.get<Teko::LinearOp>(probing_graph_operator));
99 else if (pl.isParameter(probing_graph))
100 setGraph(pl.get<RCP<const Epetra_CrsGraph> >(probing_graph));
101 else if (pl.isParameter(user_graph) && pl.get<
bool>(
"User Will Set Probing Graph")) {
104 Teuchos::RCP<Teko::RequestHandler> rh = getRequestHandler();
105 rh->preRequest<RCP<const Epetra_CrsGraph> >(Teko::RequestMesg(
"Probing Graph"));
106 setGraph(rh->request<RCP<const Epetra_CrsGraph> >(Teko::RequestMesg(
"Probing Graph")));
109 setInverseFactory(invLib->getInverseFactory(invStr));
112 void ProbingPreconditionerFactory::setGraphOperator(
const Teko::LinearOp& graphOp) {
113 RCP<const Epetra_CrsMatrix> crsMatrix =
114 rcp_dynamic_cast<
const Epetra_CrsMatrix>(Thyra::get_Epetra_Operator(*graphOp));
115 setGraph(Teuchos::rcpFromRef(crsMatrix->Graph()));
118 void ProbingPreconditionerFactory::setGraph(
const Teuchos::RCP<const Epetra_CrsGraph>& graph) {
119 prober->setGraph(graph);
122 void ProbingPreconditionerFactory::setProberList(
const Teuchos::ParameterList& list) {
123 prober->setList(list);
Implements the Epetra_Operator interface with a Thyra LinearOperator. This enables the use of absrtac...
InverseLinearOp buildInverse(const InverseFactory &factory, const LinearOp &A)
Build an inverse operator using a factory and a linear operator.