Thyra  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Thyra_PreconditionerFactoryBase_decl.hpp
1 // @HEADER
2 // *****************************************************************************
3 // Thyra: Interfaces and Support for Abstract Numerical Algorithms
4 //
5 // Copyright 2004 NTESS and the Thyra contributors.
6 // SPDX-License-Identifier: BSD-3-Clause
7 // *****************************************************************************
8 // @HEADER
9 
10 #ifndef THYRA_PRECONDITIONER_FACTORY_BASE_DECL_HPP
11 #define THYRA_PRECONDITIONER_FACTORY_BASE_DECL_HPP
12 
13 #include "Thyra_PreconditionerBase.hpp"
14 #include "Thyra_LinearOpSourceBase.hpp"
15 #include "Teuchos_Describable.hpp"
16 #include "Teuchos_ParameterListAcceptor.hpp"
17 #include "Teuchos_VerboseObject.hpp"
18 
19 
20 namespace Thyra {
21 
22 
30 template<class Scalar>
31 class PreconditionerFactoryBase
32  : virtual public Teuchos::Describable,
33  virtual public Teuchos::ParameterListAcceptor,
34  virtual public Teuchos::VerboseObject<PreconditionerFactoryBase<Scalar> >
35 {
36 public:
37 
40 
44  virtual bool isCompatible(const LinearOpSourceBase<Scalar> &fwdOpSrc) const = 0;
45 
55  virtual RCP<PreconditionerBase<Scalar> > createPrec() const = 0;
56 
127  virtual void initializePrec(
128  const RCP<const LinearOpSourceBase<Scalar> > &fwdOpSrc,
129  PreconditionerBase<Scalar> *precOp,
130  const ESupportSolveUse supportSolveUse = SUPPORT_SOLVE_UNSPECIFIED
131  ) const = 0;
132 
181  virtual void uninitializePrec(
182  PreconditionerBase<Scalar> *prec,
183  RCP<const LinearOpSourceBase<Scalar> > *fwdOpSrc = NULL,
184  ESupportSolveUse *supportSolveUse = NULL
185  ) const = 0;
186 
188 
191 
198  virtual bool applySupportsConj(EConj conj) const;
199 
205  virtual bool applyTransposeSupportsConj(EConj conj) const;
206 
208 
209 private:
210 
211  // Not defined and not to be called
212  PreconditionerFactoryBase<Scalar>&
213  operator=(const PreconditionerFactoryBase<Scalar>&);
214 
215 };
216 
217 
218 } // namespace Thyra
219 
220 
221 #endif // THYRA_PRECONDITIONER_FACTORY_BASE_DECL_HPP
How the output LOWSB object will be useded for solves in unspecified.
virtual void uninitializePrec(PreconditionerBase< Scalar > *prec, RCP< const LinearOpSourceBase< Scalar > > *fwdOpSrc=NULL, ESupportSolveUse *supportSolveUse=NULL) const =0
Uninitialize a LinearOpBase preconditioner object and return its remembered forward linear operator...
virtual RCP< PreconditionerBase< Scalar > > createPrec() const =0
Create an (uninitialized) LinearOpBase object to be initialized as the preconditioner later in this-&gt;...
Teuchos::RCP< PreconditionerBase< Scalar > > prec(const PreconditionerFactoryBase< Scalar > &precFactory, const Teuchos::RCP< const LinearOpBase< Scalar > > &fwdOp, const ESupportSolveUse supportSolveUse=SUPPORT_SOLVE_UNSPECIFIED)
Create and initialize a preconditioner from a forward linear operator.
virtual bool applyTransposeSupportsConj(EConj conj) const
Return if precOp-&gt;solveTranspose() supports the argument conj.
virtual bool applySupportsConj(EConj conj) const
Return if precOp-&gt;apply() supports the argument conj.
virtual void initializePrec(const RCP< const LinearOpSourceBase< Scalar > > &fwdOpSrc, PreconditionerBase< Scalar > *precOp, const ESupportSolveUse supportSolveUse=SUPPORT_SOLVE_UNSPECIFIED) const =0
Initialize a pre-created LinearOpBase preconditioner object given a &quot;compatible&quot; LinearOpBase object...
ESupportSolveUse
Enum that specifies how a LinearOpWithSolveBase object will be used for solves after it is constructe...
EConj
Enumeration for determining how a linear operator is applied. `*.
virtual bool isCompatible(const LinearOpSourceBase< Scalar > &fwdOpSrc) const =0
Check that a LinearOpBase object is compatible with *this factory object.