10#ifndef THYRA_DEFAULT_BLOCKED_TRIANGULAR_LINEAR_OP_WITH_SOLVE_FACTORY_HPP
11#define THYRA_DEFAULT_BLOCKED_TRIANGULAR_LINEAR_OP_WITH_SOLVE_FACTORY_HPP
14#include "Thyra_DefaultBlockedTriangularLinearOpWithSolveFactory_decl.hpp"
15#include "Thyra_LinearOpWithSolveBase.hpp"
16#include "Thyra_LinearOpWithSolveFactoryHelpers.hpp"
17#include "Thyra_PhysicallyBlockedLinearOpBase.hpp"
18#include "Thyra_PhysicallyBlockedLinearOpWithSolveBase.hpp"
19#include "Thyra_DefaultBlockedTriangularLinearOpWithSolve.hpp"
20#include "Thyra_DefaultLinearOpSource.hpp"
37 lowsf_.initialize(lowsf);
49 lowsf_.initialize(lowsf);
57 return lowsf_.getNonconstObj();
65 return lowsf_.getConstObj();
76 std::ostringstream oss;
80 if (!is_null(lowsf_.getConstObj()))
81 oss << lowsf_.getConstObj()->description();
98 lowsf_.getNonconstObj()->setParameterList(paramList);
102template<
class Scalar>
106 return lowsf_.getNonconstObj()->getNonconstParameterList();
110template<
class Scalar>
114 return lowsf_.getNonconstObj()->unsetParameterList();
118template<
class Scalar>
122 return lowsf_.getConstObj()->getParameterList();
126template<
class Scalar>
130 return lowsf_.getConstObj()->getValidParameters();
137template<
class Scalar>
145template<
class Scalar>
153 "Error, we don't support a preconditioner factory!");
157template<
class Scalar>
165template<
class Scalar>
172 "Error, we don't support a preconditioner factory!");
176template<
class Scalar>
187template<
class Scalar>
191 return defaultBlockedTriangularLinearOpWithSolve<Scalar>();
195template<
class Scalar>
205 using Teuchos::rcp_dynamic_cast;
212 lowsf_.getConstObj()->setOStream(this->getOStream());
213 lowsf_.getConstObj()->setVerbLevel(this->getVerbLevel());
218 rcp_dynamic_cast<const PBLOB>(fwdOpSrc->getOp().assert_not_null());
224 DBTLOWS &btlows = dyn_cast<DBTLOWS>(*Op);
229 const bool firstTime = is_null(btlows.range());
234 btlows.beginBlockFill(blo->productRange(),blo->productDomain());
236 const int N = blo->productRange()->numBlocks();
237 for (
int k = 0; k < N; ++k ) {
243 btlows.setNonconstLOWSBlock( k, k,
244 linearOpWithSolve<Scalar>(*lowsf_.getConstObj(),fwdOp_k)
253 Thyra::initializeOp<Scalar>(*lowsf_.getConstObj(), fwdOp_k, invOp_k.
ptr());
260 btlows.endBlockFill();
265 btlows.setBlocks(blo);
268 btlows.setOStream(this->getOStream());
269 btlows.setVerbLevel(this->getVerbLevel());
274template<
class Scalar>
285template<
class Scalar>
296 using Teuchos::rcp_implicit_cast;
297 using Teuchos::rcp_dynamic_cast;
300 DBTLOWS &btlowsOp = dyn_cast<DBTLOWS>(*Op);
304 *fwdOpSrc = defaultLinearOpSource<Scalar>(fwdOp);
313template<
class Scalar>
328template<
class Scalar>
338 "Error, we don't support an external preconditioner!");
342template<
class Scalar>
352 "Error, we don't support an external preconditioner!");
359template<
class Scalar>
363 lowsf_.getConstObj()->setVerbLevel(this->getVerbLevel());
364 lowsf_.getConstObj()->setOStream(this->getOStream());
virtual std::string description() const
const RCP< T > & assert_not_null() const
Implicit subclass that takes a blocked triangular LOWB object and turns it into a LOWSB object.
virtual void setPreconditionerFactory(const RCP< PreconditionerFactoryBase< Scalar > > &precFactory, const std::string &precFactoryName)
Throws exception.
RCP< LinearOpWithSolveFactoryBase< Scalar > > getUnderlyingLOWSF()
RCP< ParameterList > unsetParameterList()
virtual bool isCompatible(const LinearOpSourceBase< Scalar > &fwdOpSrc) const
std::string description() const
virtual void initializeAndReuseOp(const RCP< const LinearOpSourceBase< Scalar > > &fwdOpSrc, LinearOpWithSolveBase< Scalar > *Op) const
virtual void initializePreconditionedOp(const RCP< const LinearOpSourceBase< Scalar > > &fwdOpSrc, const RCP< const PreconditionerBase< Scalar > > &prec, LinearOpWithSolveBase< Scalar > *Op, const ESupportSolveUse supportSolveUse) const
RCP< ParameterList > getNonconstParameterList()
virtual RCP< PreconditionerFactoryBase< Scalar > > getPreconditionerFactory() const
Returns null .
void setParameterList(RCP< ParameterList > const ¶mList)
virtual bool supportsPreconditionerInputType(const EPreconditionerInputType precOpType) const
RCP< const ParameterList > getValidParameters() const
virtual void unsetPreconditionerFactory(RCP< PreconditionerFactoryBase< Scalar > > *precFactory, std::string *precFactoryName)
Throws exception.
void informUpdatedVerbosityState() const
Overridden from Teuchos::VerboseObjectBase.
RCP< const ParameterList > getParameterList() const
virtual bool acceptsPreconditionerFactory() const
returns false.
virtual void uninitializeOp(LinearOpWithSolveBase< Scalar > *Op, RCP< const LinearOpSourceBase< Scalar > > *fwdOpSrc, RCP< const PreconditionerBase< Scalar > > *prec, RCP< const LinearOpSourceBase< Scalar > > *approxFwdOpSrc, ESupportSolveUse *supportSolveUse) const
virtual void initializeApproxPreconditionedOp(const RCP< const LinearOpSourceBase< Scalar > > &fwdOpSrc, const RCP< const LinearOpSourceBase< Scalar > > &approxFwdOpSrc, LinearOpWithSolveBase< Scalar > *Op, const ESupportSolveUse supportSolveUse) const
virtual RCP< LinearOpWithSolveBase< Scalar > > createOp() const
virtual void initializeOp(const RCP< const LinearOpSourceBase< Scalar > > &fwdOpSrc, LinearOpWithSolveBase< Scalar > *Op, const ESupportSolveUse supportSolveUse) const
Concrete composite LinearOpWithSolveBase subclass that creates single upper or lower block triangular...
Base interface for objects that can return a linear operator.
Base class for all linear operators that can support a high-level solve operation.
Factory interface for creating LinearOpWithSolveBase objects from compatible LinearOpBase objects.
Base interface for physically blocked linear operators.
Simple interface class to access a precreated preconditioner as one or more linear operators objects ...
Factory interface for creating preconditioner objects from LinearOpBase objects.
#define TEUCHOS_TEST_FOR_EXCEPT(throw_exception_test)
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
EPreconditionerInputType
Enum defining the status of a preconditioner object.
ESupportSolveUse
Enum that specifies how a LinearOpWithSolveBase object will be used for solves after it is constructe...
#define TEUCHOS_UNREACHABLE_RETURN(dummyReturnVal)
T_To & dyn_cast(T_From &from)