Tempus  Version of the Day
Time Integration
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Thyra_ReuseLinearOpWithSolveFactory.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_ReuseLinearOpWithSolveFactory_hpp
10 #define Thyra_ReuseLinearOpWithSolveFactory_hpp
11 
12 #include "Thyra_LinearOpWithSolveFactoryBase.hpp"
14 
15 namespace Thyra {
16 
20 template <class Scalar>
22  : virtual public LinearOpWithSolveFactoryBase<Scalar> {
23  public:
26 
29 
41  void nonconstInitialize(
42  const RCP<LinearOpWithSolveFactoryBase<Scalar> > &lowsf,
43  const RCP<PreconditionerBase<Scalar> > &prec);
44 
56  void initialize(const RCP<const LinearOpWithSolveFactoryBase<Scalar> > &lowsf,
57  const RCP<PreconditionerBase<Scalar> > &prec);
58 
59  RCP<LinearOpWithSolveFactoryBase<Scalar> > getUnderlyingLOWSF();
60 
61  RCP<const LinearOpWithSolveFactoryBase<Scalar> > getUnderlyingLOWSF() const;
62 
63  RCP<PreconditionerBase<Scalar> > getUnderlyingPreconditioner();
64 
65  RCP<const PreconditionerBase<Scalar> > getUnderlyingPreconditioner() const;
66 
68 
71 
72  std::string description() const;
73 
75 
79 
80  void setParameterList(RCP<ParameterList> const &paramList);
81  RCP<ParameterList> getNonconstParameterList();
82  RCP<ParameterList> unsetParameterList();
83  RCP<const ParameterList> getParameterList() const;
84  RCP<const ParameterList> getValidParameters() const;
85 
87 
90 
92  virtual bool acceptsPreconditionerFactory() const;
93 
95  virtual void setPreconditionerFactory(
96  const RCP<PreconditionerFactoryBase<Scalar> > &precFactory,
97  const std::string &precFactoryName);
98 
100  virtual RCP<PreconditionerFactoryBase<Scalar> > getPreconditionerFactory()
101  const;
102 
104  virtual void unsetPreconditionerFactory(
105  RCP<PreconditionerFactoryBase<Scalar> > *precFactory,
106  std::string *precFactoryName);
107 
108  virtual bool isCompatible(const LinearOpSourceBase<Scalar> &fwdOpSrc) const;
109 
110  virtual RCP<LinearOpWithSolveBase<Scalar> > createOp() const;
111 
112  virtual void initializeOp(
113  const RCP<const LinearOpSourceBase<Scalar> > &fwdOpSrc,
115  const ESupportSolveUse supportSolveUse) const;
116 
117  virtual void initializeAndReuseOp(
118  const RCP<const LinearOpSourceBase<Scalar> > &fwdOpSrc,
120 
121  virtual void uninitializeOp(
123  RCP<const LinearOpSourceBase<Scalar> > *fwdOpSrc,
124  RCP<const PreconditionerBase<Scalar> > *prec,
125  RCP<const LinearOpSourceBase<Scalar> > *approxFwdOpSrc,
126  ESupportSolveUse *supportSolveUse) const;
127 
128  virtual bool supportsPreconditionerInputType(
129  const EPreconditionerInputType precOpType) const;
130 
131  virtual void initializePreconditionedOp(
132  const RCP<const LinearOpSourceBase<Scalar> > &fwdOpSrc,
133  const RCP<const PreconditionerBase<Scalar> > &prec,
135  const ESupportSolveUse supportSolveUse) const;
136 
138  const RCP<const LinearOpSourceBase<Scalar> > &fwdOpSrc,
139  const RCP<const LinearOpSourceBase<Scalar> > &approxFwdOpSrc,
141  const ESupportSolveUse supportSolveUse) const;
142 
144 
145  protected:
148 
149  void informUpdatedVerbosityState() const;
150 
152 
153  private:
157 
159  RCP<PreconditionerBase<Scalar> > prec_;
160 };
161 
166 template <class Scalar>
167 RCP<ReuseLinearOpWithSolveFactory<Scalar> >
169  const RCP<LinearOpWithSolveFactoryBase<Scalar> > &lowsf,
170  const RCP<PreconditionerBase<Scalar> > &prec)
171 {
172  RCP<ReuseLinearOpWithSolveFactory<Scalar> > rlowsf =
174  rlowsf->nonconstInitialize(lowsf, prec);
175  return rlowsf;
176 }
177 
182 template <class Scalar>
183 RCP<ReuseLinearOpWithSolveFactory<Scalar> > reuseLinearOpWithSolveFactory(
184  const RCP<const LinearOpWithSolveFactoryBase<Scalar> > &lowsf,
185  const RCP<PreconditionerBase<Scalar> > &prec)
186 {
187  RCP<ReuseLinearOpWithSolveFactory<Scalar> > rlowsf =
189  rlowsf->initialize(lowsf, prec);
190  return rlowsf;
191 }
192 
193 // Overridden from Constructors/Initializers/Accessors
194 
195 template <class Scalar>
197  const RCP<LinearOpWithSolveFactoryBase<Scalar> > &lowsf,
198  const RCP<PreconditionerBase<Scalar> > &prec)
199 {
200 #ifdef TEUCHOS_DEBUG
203 #endif
204  lowsf_.initialize(lowsf);
205  prec_ = prec;
206 }
207 
208 template <class Scalar>
210  const RCP<const LinearOpWithSolveFactoryBase<Scalar> > &lowsf,
211  const RCP<PreconditionerBase<Scalar> > &prec)
212 {
213 #ifdef TEUCHOS_DEBUG
216 #endif
217  lowsf_.initialize(lowsf);
218  prec_ = prec;
219 }
220 
221 template <class Scalar>
222 RCP<LinearOpWithSolveFactoryBase<Scalar> >
224 {
225  return lowsf_.getNonconstObj();
226 }
227 
228 template <class Scalar>
229 RCP<const LinearOpWithSolveFactoryBase<Scalar> >
231 {
232  return lowsf_.getConstObj();
233 }
234 
235 template <class Scalar>
236 RCP<PreconditionerBase<Scalar> >
238 {
239  return prec_;
240 }
241 
242 template <class Scalar>
243 RCP<const PreconditionerBase<Scalar> >
245 {
246  return prec_;
247 }
248 
249 // Overridden from Teuchos::Describable
250 
251 template <class Scalar>
253 {
254  std::ostringstream oss;
255  oss << this->Teuchos::Describable::description() << "{"
256  << "lowsf=";
257  if (!is_null(lowsf_.getConstObj()))
258  oss << lowsf_.getConstObj()->description();
259  else
260  oss << "NULL";
261  oss << std::endl
262  << "prec=";
263  if (!is_null(prec_))
264  oss << prec_->description();
265  else
266  oss << "NULL";
267  oss << "}";
268  return oss.str();
269 }
270 
271 // Overridden from ParameterListAcceptor
272 
273 template <class Scalar>
275  RCP<ParameterList> const &paramList)
276 {
277  lowsf_.getNonconstObj()->setParameterList(paramList);
278 }
279 
280 template <class Scalar>
281 RCP<ParameterList>
283 {
284  return lowsf_.getNonconstObj()->getNonconstParameterList();
285 }
286 
287 template <class Scalar>
289 {
290  return lowsf_.getNonconstObj()->unsetParameterList();
291 }
292 
293 template <class Scalar>
294 RCP<const ParameterList>
296 {
297  return lowsf_.getConstObj()->getParameterList();
298 }
299 
300 template <class Scalar>
301 RCP<const ParameterList>
303 {
304  return lowsf_.getConstObj()->getValidParameters();
305 }
306 
307 // Overridden from LinearOpWithSolveFactoyBase
308 
309 template <class Scalar>
311 {
312  return false;
313 }
314 
315 template <class Scalar>
317  const RCP<PreconditionerFactoryBase<Scalar> > & /* precFactory */,
318  const std::string & /* precFactoryName */
319 )
320 {
321 }
322 
323 template <class Scalar>
324 RCP<PreconditionerFactoryBase<Scalar> >
326 {
327  return Thyra::reusePreconditionerFactory<Scalar>(prec_);
328 }
329 
330 template <class Scalar>
332  RCP<PreconditionerFactoryBase<Scalar> > * /* precFactory */,
333  std::string * /* precFactoryName */
334 )
335 {
336 }
337 
338 template <class Scalar>
340  const LinearOpSourceBase<Scalar> &fwdOpSrc) const
341 {
342  return lowsf_.getConstObj()->isCompatible(fwdOpSrc);
343 }
344 
345 template <class Scalar>
346 RCP<LinearOpWithSolveBase<Scalar> >
348 {
349  return lowsf_.getConstObj()->createOp();
350 }
351 
352 template <class Scalar>
354  const RCP<const LinearOpSourceBase<Scalar> > &fwdOpSrc,
356  const ESupportSolveUse supportSolveUse) const
357 {
358  lowsf_.getConstObj()->initializeOp(fwdOpSrc, Op, supportSolveUse);
359 }
360 
361 template <class Scalar>
363  const RCP<const LinearOpSourceBase<Scalar> > &fwdOpSrc,
365 {
366  lowsf_.getConstObj()->initializeAndReuseOp(fwdOpSrc, Op);
367 }
368 
369 template <class Scalar>
372  RCP<const LinearOpSourceBase<Scalar> > *fwdOpSrc,
373  RCP<const PreconditionerBase<Scalar> > *prec,
374  RCP<const LinearOpSourceBase<Scalar> > *approxFwdOpSrc,
375  ESupportSolveUse *supportSolveUse) const
376 {
377  lowsf_.getConstObj()->uninitializeOp(Op, fwdOpSrc, prec, approxFwdOpSrc,
378  supportSolveUse);
379 }
380 
381 template <class Scalar>
383  const EPreconditionerInputType precOpType) const
384 {
385  return lowsf_.getConstObj()->supportsPreconditionerInputType(precOpType);
386 }
387 
388 template <class Scalar>
390  const RCP<const LinearOpSourceBase<Scalar> > &fwdOpSrc,
391  const RCP<const PreconditionerBase<Scalar> > &prec,
393  const ESupportSolveUse supportSolveUse) const
394 {
395  lowsf_.getConstObj()->initializePreconditionedOp(fwdOpSrc, prec, Op,
396  supportSolveUse);
397 }
398 
399 template <class Scalar>
401  const RCP<const LinearOpSourceBase<Scalar> > &fwdOpSrc,
402  const RCP<const LinearOpSourceBase<Scalar> > &approxFwdOpSrc,
404  const ESupportSolveUse supportSolveUse) const
405 {
406  lowsf_.getConstObj()->initializeApproxPreconditionedOp(
407  fwdOpSrc, approxFwdOpSrc, Op, supportSolveUse);
408 }
409 
410 // protected
411 
412 template <class Scalar>
414 {
415  lowsf_.getConstObj()->setVerbLevel(this->getVerbLevel());
416  lowsf_.getConstObj()->setOStream(this->getOStream());
417 }
418 
419 } // namespace Thyra
420 
421 #endif
virtual void unsetPreconditionerFactory(RCP< PreconditionerFactoryBase< Scalar > > *precFactory, std::string *precFactoryName)
Throws exception.
RCP< LinearOpWithSolveFactoryBase< Scalar > > getUnderlyingLOWSF()
virtual void setPreconditionerFactory(const RCP< PreconditionerFactoryBase< Scalar > > &precFactory, const std::string &precFactoryName)
Throws exception.
virtual void uninitializeOp(LinearOpWithSolveBase< Scalar > *Op, RCP< const LinearOpSourceBase< Scalar > > *fwdOpSrc, RCP< const PreconditionerBase< Scalar > > *prec, RCP< const LinearOpSourceBase< Scalar > > *approxFwdOpSrc, ESupportSolveUse *supportSolveUse) const
bool is_null(const boost::shared_ptr< T > &p)
A LinearOpWithSolveFactory that is designed to reuse an already created/initialized preconditioner...
Teuchos::ConstNonconstObjectContainer< LinearOpWithSolveFactoryBase< Scalar > > LOWSF_t
virtual bool acceptsPreconditionerFactory() const
returns false.
RCP< const ParameterList > getValidParameters() const
RCP< ReuseLinearOpWithSolveFactory< Scalar > > reuseLinearOpWithSolveFactory(const RCP< const LinearOpWithSolveFactoryBase< Scalar > > &lowsf, const RCP< PreconditionerBase< Scalar > > &prec)
Nonmember constructor.
virtual bool isCompatible(const LinearOpSourceBase< Scalar > &fwdOpSrc) const
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
virtual void initializeAndReuseOp(const RCP< const LinearOpSourceBase< Scalar > > &fwdOpSrc, LinearOpWithSolveBase< Scalar > *Op) const
void informUpdatedVerbosityState() const
Overridden from Teuchos::VerboseObjectBase.
virtual void initializeOp(const RCP< const LinearOpSourceBase< Scalar > > &fwdOpSrc, LinearOpWithSolveBase< Scalar > *Op, const ESupportSolveUse supportSolveUse) const
virtual std::string description() const
virtual void initializePreconditionedOp(const RCP< const LinearOpSourceBase< Scalar > > &fwdOpSrc, const RCP< const PreconditionerBase< Scalar > > &prec, LinearOpWithSolveBase< Scalar > *Op, const ESupportSolveUse supportSolveUse) const
RCP< PreconditionerBase< Scalar > > getUnderlyingPreconditioner()
virtual bool supportsPreconditionerInputType(const EPreconditionerInputType precOpType) const
ESupportSolveUse
RCP< ReuseLinearOpWithSolveFactory< Scalar > > nonconstReuseLinearOpWithSolveFactory(const RCP< LinearOpWithSolveFactoryBase< Scalar > > &lowsf, const RCP< PreconditionerBase< Scalar > > &prec)
Nonmember constructor.
EPreconditionerInputType
virtual void initializeApproxPreconditionedOp(const RCP< const LinearOpSourceBase< Scalar > > &fwdOpSrc, const RCP< const LinearOpSourceBase< Scalar > > &approxFwdOpSrc, LinearOpWithSolveBase< Scalar > *Op, const ESupportSolveUse supportSolveUse) const
void nonconstInitialize(const RCP< LinearOpWithSolveFactoryBase< Scalar > > &lowsf, const RCP< PreconditionerBase< Scalar > > &prec)
Initialize given a single non-const LOWSFB object.
void setParameterList(RCP< ParameterList > const &paramList)
void initialize(const RCP< const LinearOpWithSolveFactoryBase< Scalar > > &lowsf, const RCP< PreconditionerBase< Scalar > > &prec)
Initialize given a single const LOWSFB object.
#define TEUCHOS_TEST_FOR_EXCEPT(throw_exception_test)
virtual RCP< LinearOpWithSolveBase< Scalar > > createOp() const
virtual RCP< PreconditionerFactoryBase< Scalar > > getPreconditionerFactory() const
Returns null .