Tempus  Version of the Day
Time Integration
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Thyra_ScaledIdentityLinearOpWithSolveFactory.hpp
Go to the documentation of this file.
1 // @HEADER
2 // ****************************************************************************
3 // Tempus: Copyright (2017) Sandia Corporation
4 //
5 // Distributed under BSD 3-clause license (See accompanying file Copyright.txt)
6 // ****************************************************************************
7 // @HEADER
8 
9 #ifndef Thyra_ScaledIdentityLinearOpWithSolveFactory_hpp
10 #define Thyra_ScaledIdentityLinearOpWithSolveFactory_hpp
11 
12 #include "Thyra_LinearOpWithSolveFactoryBase.hpp"
17 #include "Thyra_DefaultLinearOpSource.hpp"
18 
19 namespace Thyra {
20 
23 template <class Scalar>
25  : virtual public LinearOpWithSolveFactoryBase<Scalar> {
26  public:
29 
32 
35  void initialize(const RCP<const VectorSpaceBase<Scalar> > &space,
36  const Scalar &s)
37  {
38  space_ = space;
39  s_ = s;
40  }
41 
43 
46 
47  void setParameterList(RCP<ParameterList> const & /* paramList */) {}
48  RCP<ParameterList> getNonconstParameterList()
49  {
50  return Teuchos::parameterList();
51  }
52  RCP<ParameterList> unsetParameterList() { return Teuchos::parameterList(); }
53  RCP<const ParameterList> getParameterList() const
54  {
55  return Teuchos::parameterList();
56  }
57  RCP<const ParameterList> getValidParameters() const
58  {
59  return Teuchos::parameterList();
60  }
61 
63 
66 
68  virtual bool acceptsPreconditionerFactory() const { return false; }
69 
72  const RCP<PreconditionerFactoryBase<Scalar> > & /* precFactory */,
73  const std::string & /* precFactoryName */
74  )
75  {
76  }
77 
79  virtual RCP<PreconditionerFactoryBase<Scalar> > getPreconditionerFactory()
80  const
81  {
82  return Teuchos::null;
83  }
84 
87  RCP<PreconditionerFactoryBase<Scalar> > * /* precFactory */,
88  std::string * /* precFactoryName */
89  )
90  {
91  }
92 
93  virtual bool isCompatible(const LinearOpSourceBase<Scalar> &fwdOpSrc) const
94  {
95  return !is_null(
96  Teuchos::rcp_dynamic_cast<
98  }
99 
100  virtual RCP<LinearOpWithSolveBase<Scalar> > createOp() const
101  {
102  return scaledIdentity(space_, s_);
103  }
104 
105  virtual void initializeOp(
106  const RCP<const LinearOpSourceBase<Scalar> > &fwdOpSrc,
108  const ESupportSolveUse supportSolveUse) const;
109 
110  virtual void initializeAndReuseOp(
111  const RCP<const LinearOpSourceBase<Scalar> > &fwdOpSrc,
113  {
115  }
116 
117  virtual void uninitializeOp(
119  RCP<const LinearOpSourceBase<Scalar> > *fwdOpSrc,
120  RCP<const PreconditionerBase<Scalar> > *prec,
121  RCP<const LinearOpSourceBase<Scalar> > *approxFwdOpSrc,
122  ESupportSolveUse *supportSolveUse) const;
123 
125  const EPreconditionerInputType /* precOpType */
126  ) const
127  {
128  return false;
129  }
130 
132  const RCP<const LinearOpSourceBase<Scalar> > & /* fwdOpSrc */,
133  const RCP<const PreconditionerBase<Scalar> > & /* prec */,
135  const ESupportSolveUse /* supportSolveUse */
136  ) const
137  {
138  }
139 
141  const RCP<const LinearOpSourceBase<Scalar> > & /* fwdOpSrc */,
142  const RCP<const LinearOpSourceBase<Scalar> > & /* approxFwdOpSrc */,
144  const ESupportSolveUse /* supportSolveUse */
145  ) const
146  {
147  }
148 
150 
151  protected:
154 
156 
158 
159  private:
160  RCP<const VectorSpaceBase<Scalar> > space_;
161  Scalar s_;
162 };
163 
168 template <class Scalar>
169 RCP<ScaledIdentityLinearOpWithSolveFactory<Scalar> > scaledIdentitySolveFactory(
170  const RCP<const VectorSpaceBase<Scalar> > &space, const Scalar &s)
171 {
172  RCP<ScaledIdentityLinearOpWithSolveFactory<Scalar> > lowsf =
174  lowsf->initialize(space, s);
175  return lowsf;
176 }
177 
178 // Overridden from LinearOpWithSolveFactoyBase
179 
180 template <class Scalar>
182  const RCP<const LinearOpSourceBase<Scalar> > &fwdOpSrc,
184  const ESupportSolveUse /* supportSolveUse */
185 ) const
186 {
187  using Teuchos::dyn_cast;
188  using Teuchos::rcp_dynamic_cast;
189 
190 #ifdef TEUCHOS_DEBUG
191  TEUCHOS_TEST_FOR_EXCEPT(0 == Op);
192 #endif
193 
194  const RCP<const LinearOpBase<Scalar> > tmpFwdOp = fwdOpSrc->getOp();
195  RCP<const LinearOpBase<Scalar> > fwdOp;
196  Scalar fwdOp_scalar = 0.0;
197  EOpTransp fwdOp_transp;
198  unwrap<Scalar>(tmpFwdOp, &fwdOp_scalar, &fwdOp_transp, &fwdOp);
199 
200  const RCP<const ScaledIdentityLinearOpWithSolve<Scalar> > fwdSi =
201  rcp_dynamic_cast<const ScaledIdentityLinearOpWithSolve<Scalar> >(fwdOp,
202  true);
203 
205  fwdSi->space(), fwdSi->scale());
206 }
207 
208 template <class Scalar>
211  RCP<const LinearOpSourceBase<Scalar> > *fwdOpSrc,
212  RCP<const PreconditionerBase<Scalar> > *prec,
213  RCP<const LinearOpSourceBase<Scalar> > *approxFwdOpSrc,
214  ESupportSolveUse * /* supportSolveUse */
215 ) const
216 {
217  using Teuchos::dyn_cast;
218  using Teuchos::is_null;
219 #ifdef TEUCHOS_DEBUG
220  TEUCHOS_TEST_FOR_EXCEPT(0 == Op);
221 #else
222  (void)Op;
223 #endif // TEUCHOS_DEBUG
224  if (fwdOpSrc) *fwdOpSrc = Teuchos::null;
225  if (prec) *prec = Teuchos::null;
226  if (approxFwdOpSrc) *approxFwdOpSrc = Teuchos::null;
227 }
228 
229 } // namespace Thyra
230 
231 #endif
virtual bool supportsPreconditionerInputType(const EPreconditionerInputType) const
Implicit concrete LinearOpBase subclass that takes a flattended out multi-vector and performs a multi...
bool is_null(const boost::shared_ptr< T > &p)
EOpTransp
bool is_null(const std::shared_ptr< T > &p)
virtual bool isCompatible(const LinearOpSourceBase< Scalar > &fwdOpSrc) const
T_To & dyn_cast(T_From &from)
void initialize(const RCP< const VectorSpaceBase< Scalar > > &space, const Scalar &s)
virtual void uninitializeOp(LinearOpWithSolveBase< Scalar > *Op, RCP< const LinearOpSourceBase< Scalar > > *fwdOpSrc, RCP< const PreconditionerBase< Scalar > > *prec, RCP< const LinearOpSourceBase< Scalar > > *approxFwdOpSrc, ESupportSolveUse *supportSolveUse) const
void initialize(const RCP< const VectorSpaceBase< Scalar > > &space, const Scalar &s)
Initialize.
virtual RCP< LinearOpWithSolveBase< Scalar > > createOp() const
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
Create a LinearOpWithSolveFactory for a flattened-out multi-vector.
virtual void initializeApproxPreconditionedOp(const RCP< const LinearOpSourceBase< Scalar > > &, const RCP< const LinearOpSourceBase< Scalar > > &, LinearOpWithSolveBase< Scalar > *, const ESupportSolveUse) const
virtual void initializeOp(const RCP< const LinearOpSourceBase< Scalar > > &fwdOpSrc, LinearOpWithSolveBase< Scalar > *Op, const ESupportSolveUse supportSolveUse) const
virtual RCP< PreconditionerFactoryBase< Scalar > > getPreconditionerFactory() const
Returns null .
ESupportSolveUse
void informUpdatedVerbosityState() const
Overridden from Teuchos::VerboseObjectBase.
EPreconditionerInputType
RCP< ScaledIdentityLinearOpWithSolveFactory< Scalar > > scaledIdentitySolveFactory(const RCP< const VectorSpaceBase< Scalar > > &space, const Scalar &s)
Nonmember constructor.
virtual void initializeAndReuseOp(const RCP< const LinearOpSourceBase< Scalar > > &fwdOpSrc, LinearOpWithSolveBase< Scalar > *Op) const
virtual void setPreconditionerFactory(const RCP< PreconditionerFactoryBase< Scalar > > &, const std::string &)
Throws exception.
virtual Teuchos::RCP< const LinearOpBase< Scalar > > getOp() const =0
#define TEUCHOS_TEST_FOR_EXCEPT(throw_exception_test)
virtual void unsetPreconditionerFactory(RCP< PreconditionerFactoryBase< Scalar > > *, std::string *)
Throws exception.
virtual void initializePreconditionedOp(const RCP< const LinearOpSourceBase< Scalar > > &, const RCP< const PreconditionerBase< Scalar > > &, LinearOpWithSolveBase< Scalar > *, const ESupportSolveUse) const