47#include "Teko_MultPreconditionerFactory.hpp"
54 const double ,
const double )
const
66 Teko::applyOp(M1_, r, MOne_r);
67 Teko::applyOp(A_, MOne_r, t);
68 Teko::update(1.,r,-1.,t);
69 Teko::applyOp(M2_, t, w);
70 Teko::update(1.,MOne_r, 1., w);
74MultPreconditionerFactory
75 ::MultPreconditionerFactory(
const RCP<const Teko::BlockPreconditionerFactory> & FirstFactory,
76 const RCP<const Teko::BlockPreconditionerFactory> & SecondFactory)
77 : FirstFactory_(FirstFactory), SecondFactory_(SecondFactory)
80MultPreconditionerFactory::MultPreconditionerFactory()
87 mystate->StateOne_ = Teuchos::rcp_dynamic_cast<BlockPreconditionerState>(FirstFactory_->buildPreconditionerState());
88 mystate->StateTwo_ = Teuchos::rcp_dynamic_cast<BlockPreconditionerState>(SecondFactory_->buildPreconditionerState());
94Teko::LinearOp MultPreconditionerFactory
95 ::buildPreconditionerOperator(Teko::BlockedLinearOp & blockOp,
101 TEUCHOS_ASSERT(MyState != 0);
103 Teko::LinearOp M1 = FirstFactory_->buildPreconditionerOperator(blockOp, *MyState->StateOne_);
104 Teko::LinearOp M2 = SecondFactory_->buildPreconditionerOperator(blockOp, *MyState->StateTwo_);
129void MultPreconditionerFactory::initializeFromParameterList(
const Teuchos::ParameterList & pl)
131 RCP<const InverseLibrary> invLib = getInverseLibrary();
134 std::string aStr=
"", bStr=
"";
137 aStr = pl.get<std::string>(
"Preconditioner A");
138 bStr = pl.get<std::string>(
"Preconditioner B");
140 RCP<const Teuchos::ParameterList> aSettings = invLib->getParameterList(aStr);
141 RCP<const Teuchos::ParameterList> bSettings = invLib->getParameterList(bStr);
144 std::string aType = aSettings->get<std::string>(
"Preconditioner Type");
145 RCP<Teko::PreconditionerFactory> precA
149 std::string bType = bSettings->get<std::string>(
"Preconditioner Type");
150 RCP<Teko::PreconditionerFactory> precB
154 FirstFactory_ = Teuchos::rcp_dynamic_cast<const Teko::BlockPreconditionerFactory>(precA);
155 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.
virtual Teuchos::RCP< Teko::PreconditionerState > buildPreconditionerState() const
Build the MultPrecondState object.
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).