42 #ifndef THYRA_DEFAULT_SERIAL_DENSE_LINEAR_OP_WITH_SOLVE_FACTORY_HPP 43 #define THYRA_DEFAULT_SERIAL_DENSE_LINEAR_OP_WITH_SOLVE_FACTORY_HPP 46 #include "Thyra_DefaultSerialDenseLinearOpWithSolveFactory_decl.hpp" 47 #include "Thyra_DefaultSerialDenseLinearOpWithSolve.hpp" 48 #include "Thyra_LinearOpWithSolveFactoryHelpers.hpp" 49 #include "Thyra_ScaledAdjointLinearOpBase.hpp" 50 #include "Thyra_DefaultLinearOpSource.hpp" 59 template<
class Scalar>
61 RCP<ParameterList>
const& paramList
64 paramList->validateParameters(*this->getValidParameters());
69 template<
class Scalar>
70 RCP<const ParameterList>
73 static RCP<const ParameterList> validPL = Teuchos::parameterList();
81 template<
class Scalar>
88 template<
class Scalar>
91 const std::string &precFactoryName
94 TEUCHOS_TEST_FOR_EXCEPT_MSG(
true,
"Error, we don't support a preconditioner factory!");
98 template<
class Scalar>
99 RCP<PreconditionerFactoryBase<Scalar> >
102 return Teuchos::null;
106 template<
class Scalar>
109 std::string *precFactoryName
112 TEUCHOS_TEST_FOR_EXCEPT_MSG(
true,
"Error, we don't support a preconditioner factory!");
116 template<
class Scalar>
126 template<
class Scalar>
127 RCP<LinearOpWithSolveBase<Scalar> >
130 return defaultSerialDenseLinearOpWithSolve<Scalar>();
134 template<
class Scalar>
142 using Teuchos::dyn_cast;
143 using Teuchos::rcp_dynamic_cast;
146 TEUCHOS_TEST_FOR_EXCEPT(0==Op);
149 const RCP<const LinearOpBase<Scalar> > tmpFwdOp = fwdOpSrc->getOp();
150 RCP<const LinearOpBase<Scalar> > fwdOp;
151 Scalar fwdOp_scalar = 0.0;
153 unwrap<Scalar>(tmpFwdOp, &fwdOp_scalar, &fwdOp_transp, &fwdOp);
155 const RCP<const MultiVectorBase<Scalar> > fwdMv =
163 template<
class Scalar>
173 template<
class Scalar>
182 using Teuchos::dyn_cast;
183 using Teuchos::is_null;
185 TEUCHOS_TEST_FOR_EXCEPT(0==Op);
186 #endif // TEUCHOS_DEBUG 188 DSDLOWS &dsdlows = dyn_cast<DSDLOWS>(*Op);
191 const RCP<const LinearOpBase<Scalar> > fwdOp = dsdlows.
getFwdOp();
193 if (!is_null(fwdOp)) {
194 *fwdOpSrc = defaultLinearOpSource<Scalar>(fwdOp);
196 *fwdOpSrc = Teuchos::null;
199 if (prec) *prec = Teuchos::null;
200 if (approxFwdOpSrc) *approxFwdOpSrc = Teuchos::null;
204 template<
class Scalar>
214 template<
class Scalar>
222 TEUCHOS_TEST_FOR_EXCEPT_MSG(
true,
"Error, we don't support an external preconditioner!");
226 template<
class Scalar>
234 TEUCHOS_TEST_FOR_EXCEPT_MSG(
true,
"Error, we don't support an external preconditioner!");
241 #endif // THYRA_DEFAULT_SERIAL_DENSE_LINEAR_OP_WITH_SOLVE_FACTORY_HPP How the output LOWSB object will be useded for solves in unspecified.
Base class for all linear operators that can support a high-level solve operation.
EOpTransp
Enumeration for determining how a linear operator is applied. `*.
RCP< const LinearOpBase< Scalar > > getFwdOp() const
virtual void initializePreconditionedOp(const RCP< const LinearOpSourceBase< Scalar > > &fwdOpSrc, const RCP< const PreconditionerBase< Scalar > > &prec, LinearOpWithSolveBase< Scalar > *Op, const ESupportSolveUse supportSolveUse) const
Simple concreate subclass of LinearOpWithSolveBase for serial dense matrices implemented using LAPACK...
virtual RCP< PreconditionerFactoryBase< Scalar > > getPreconditionerFactory() const
Returns null .
virtual void initializeOp(const RCP< const LinearOpSourceBase< Scalar > > &fwdOpSrc, LinearOpWithSolveBase< Scalar > *Op, const ESupportSolveUse supportSolveUse) const
Simple interface class to access a precreated preconditioner as one or more linear operators objects ...
void initialize(const RCP< const MultiVectorBase< Scalar > > &M)
virtual void setPreconditionerFactory(const RCP< PreconditionerFactoryBase< Scalar > > &precFactory, const std::string &precFactoryName)
Throws exception.
virtual bool supportsPreconditionerInputType(const EPreconditionerInputType precOpType) const
Interface for a collection of column vectors called a multi-vector.
virtual void unsetPreconditionerFactory(RCP< PreconditionerFactoryBase< Scalar > > *precFactory, std::string *precFactoryName)
Throws exception.
Factory interface for creating preconditioner objects from LinearOpBase objects.
virtual void initializeAndReuseOp(const RCP< const LinearOpSourceBase< Scalar > > &fwdOpSrc, LinearOpWithSolveBase< Scalar > *Op) const
Base interface for objects that can return a linear operator.
ESupportSolveUse
Enum that specifies how a LinearOpWithSolveBase object will be used for solves after it is constructe...
virtual bool isCompatible(const LinearOpSourceBase< Scalar > &fwdOpSrc) const
RCP< const ParameterList > getValidParameters() 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
Returns a DefaultSerialDenseLinearOpWithSolve object .
virtual bool acceptsPreconditionerFactory() const
returns false.
EPreconditionerInputType
Enum defining the status of a preconditioner object.
void setParameterList(RCP< ParameterList > const ¶mList)
virtual Teuchos::RCP< const LinearOpBase< Scalar > > getOp() const =0
Return a const left preconditioner linear operator if one is designed or targeted to be applied on th...
virtual void uninitializeOp(LinearOpWithSolveBase< Scalar > *Op, RCP< const LinearOpSourceBase< Scalar > > *fwdOpSrc, RCP< const PreconditionerBase< Scalar > > *prec, RCP< const LinearOpSourceBase< Scalar > > *approxFwdOpSrc, ESupportSolveUse *supportSolveUse) const