10#include "Teko_MultPreconditionerFactory.hpp"
17 Teko::BlockedMultiVector &y,
const double ,
18 const double )
const {
29 Teko::applyOp(M1_, r, MOne_r);
30 Teko::applyOp(A_, MOne_r, t);
31 Teko::update(1., r, -1., t);
32 Teko::applyOp(M2_, t, w);
33 Teko::update(1., MOne_r, 1., w);
37MultPreconditionerFactory ::MultPreconditionerFactory(
38 const RCP<const Teko::BlockPreconditionerFactory> &FirstFactory,
39 const RCP<const Teko::BlockPreconditionerFactory> &SecondFactory)
40 : FirstFactory_(FirstFactory), SecondFactory_(SecondFactory) {}
47 mystate->StateOne_ = Teuchos::rcp_dynamic_cast<BlockPreconditionerState>(
48 FirstFactory_->buildPreconditionerState());
49 mystate->StateTwo_ = Teuchos::rcp_dynamic_cast<BlockPreconditionerState>(
50 SecondFactory_->buildPreconditionerState());
55Teko::LinearOp MultPreconditionerFactory ::buildPreconditionerOperator(
59 TEUCHOS_ASSERT(MyState != 0);
61 Teko::LinearOp M1 = FirstFactory_->buildPreconditionerOperator(blockOp, *MyState->StateOne_);
62 Teko::LinearOp M2 = SecondFactory_->buildPreconditionerOperator(blockOp, *MyState->StateTwo_);
92 std::string aStr =
"", bStr =
"";
95 aStr = pl.get<std::string>(
"Preconditioner A");
96 bStr = pl.get<std::string>(
"Preconditioner B");
98 RCP<const Teuchos::ParameterList> aSettings = invLib->getParameterList(aStr);
99 RCP<const Teuchos::ParameterList> bSettings = invLib->getParameterList(bStr);
102 std::string aType = aSettings->get<std::string>(
"Preconditioner Type");
103 RCP<Teko::PreconditionerFactory> precA =
105 aType, aSettings->sublist(
"Preconditioner Settings"), invLib);
108 std::string bType = bSettings->get<std::string>(
"Preconditioner Type");
109 RCP<Teko::PreconditionerFactory> precB =
111 bType, bSettings->sublist(
"Preconditioner Settings"), invLib);
114 FirstFactory_ = Teuchos::rcp_dynamic_cast<const Teko::BlockPreconditionerFactory>(precA);
115 SecondFactory_ = Teuchos::rcp_dynamic_cast<const Teko::BlockPreconditionerFactory>(precB);
MultiVector toMultiVector(BlockedMultiVector &bmv)
Convert to a MultiVector from a BlockedMultiVector.
MultiVector deepcopy(const MultiVector &v)
Perform a deep copy of the vector.
An implementation of a state object for block preconditioners.
MultPreconditionerFactory(const Teuchos::RCP< const Teko::BlockPreconditionerFactory > &FirstFactory, const Teuchos::RCP< const Teko::BlockPreconditionerFactory > &SecondFactory)
Constructor.
virtual Teuchos::RCP< Teko::PreconditionerState > buildPreconditionerState() const
Build the MultPrecondState object.
virtual void initializeFromParameterList(const Teuchos::ParameterList &pl)
Initialize from a parameter list.
virtual void implicitApply(const Teko::BlockedMultiVector &r, Teko::BlockedMultiVector &y, const double alpha=1.0, const double beta=0.0) const
Perform a matrix vector multiply with this implicitly defined blocked operator.
static Teuchos::RCP< PreconditionerFactory > buildPreconditionerFactory(const std::string &name, const Teuchos::ParameterList &settings, const Teuchos::RCP< const InverseLibrary > &invLib=Teuchos::null)
Builder function for creating preconditioner factories (yes this is a factory factory).
Teuchos::RCP< const InverseLibrary > getInverseLibrary() const
Get the inverse library used by this preconditioner factory.