Tempus  Version of the Day
Time Integration
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Thyra_MultiVectorLinearOpWithSolveFactory.hpp
Go to the documentation of this file.
1 //@HEADER
2 // *****************************************************************************
3 // Tempus: Time Integration and Sensitivity Analysis Package
4 //
5 // Copyright 2017 NTESS and the Tempus contributors.
6 // SPDX-License-Identifier: BSD-3-Clause
7 // *****************************************************************************
8 //@HEADER
9 
10 #ifndef Thyra_MultiVectorLinearOpWithSolveFactory_hpp
11 #define Thyra_MultiVectorLinearOpWithSolveFactory_hpp
12 
13 #include "Thyra_LinearOpWithSolveFactoryBase.hpp"
17 #include "Thyra_DefaultMultiVectorLinearOpWithSolve.hpp"
18 #include "Thyra_DefaultMultiVectorProductVectorSpace.hpp"
19 #include "Thyra_DefaultLinearOpSource.hpp"
20 
21 namespace Thyra {
22 
25 template <class Scalar>
27  : virtual public LinearOpWithSolveFactoryBase<Scalar> {
28  public:
31 
34 
47  void nonconstInitialize(
48  const RCP<LinearOpWithSolveFactoryBase<Scalar> > &lowsf,
50  &multiVecRange,
52  &multiVecDomain);
53 
66  void initialize(const RCP<const LinearOpWithSolveFactoryBase<Scalar> > &lowsf,
68  &multiVecRange,
70  &multiVecDomain);
71 
72  RCP<LinearOpWithSolveFactoryBase<Scalar> > getUnderlyingLOWSF();
73 
74  RCP<const LinearOpWithSolveFactoryBase<Scalar> > getUnderlyingLOWSF() const;
75 
77 
80 
81  std::string description() const;
82 
84 
88 
89  void setParameterList(RCP<ParameterList> const &paramList);
90  RCP<ParameterList> getNonconstParameterList();
91  RCP<ParameterList> unsetParameterList();
92  RCP<const ParameterList> getParameterList() const;
93  RCP<const ParameterList> getValidParameters() const;
94 
96 
99 
101  virtual bool acceptsPreconditionerFactory() const;
102 
104  virtual void setPreconditionerFactory(
105  const RCP<PreconditionerFactoryBase<Scalar> > &precFactory,
106  const std::string &precFactoryName);
107 
109  virtual RCP<PreconditionerFactoryBase<Scalar> > getPreconditionerFactory()
110  const;
111 
113  virtual void unsetPreconditionerFactory(
114  RCP<PreconditionerFactoryBase<Scalar> > *precFactory,
115  std::string *precFactoryName);
116 
117  virtual bool isCompatible(const LinearOpSourceBase<Scalar> &fwdOpSrc) const;
118 
119  virtual RCP<LinearOpWithSolveBase<Scalar> > createOp() const;
120 
121  virtual void initializeOp(
122  const RCP<const LinearOpSourceBase<Scalar> > &fwdOpSrc,
124  const ESupportSolveUse supportSolveUse) const;
125 
126  virtual void initializeAndReuseOp(
127  const RCP<const LinearOpSourceBase<Scalar> > &fwdOpSrc,
129 
130  virtual void uninitializeOp(
132  RCP<const LinearOpSourceBase<Scalar> > *fwdOpSrc,
133  RCP<const PreconditionerBase<Scalar> > *prec,
134  RCP<const LinearOpSourceBase<Scalar> > *approxFwdOpSrc,
135  ESupportSolveUse *supportSolveUse) const;
136 
137  virtual bool supportsPreconditionerInputType(
138  const EPreconditionerInputType precOpType) const;
139 
140  virtual void initializePreconditionedOp(
141  const RCP<const LinearOpSourceBase<Scalar> > &fwdOpSrc,
142  const RCP<const PreconditionerBase<Scalar> > &prec,
144  const ESupportSolveUse supportSolveUse) const;
145 
147  const RCP<const LinearOpSourceBase<Scalar> > &fwdOpSrc,
148  const RCP<const LinearOpSourceBase<Scalar> > &approxFwdOpSrc,
150  const ESupportSolveUse supportSolveUse) const;
151 
153 
154  protected:
157 
158  void informUpdatedVerbosityState() const;
159 
161 
162  private:
166 
168  RCP<const DefaultMultiVectorProductVectorSpace<Scalar> > multiVecRange_;
169  RCP<const DefaultMultiVectorProductVectorSpace<Scalar> > multiVecDomain_;
170 };
171 
176 template <class Scalar>
177 RCP<MultiVectorLinearOpWithSolveFactory<Scalar> >
179  const RCP<LinearOpWithSolveFactoryBase<Scalar> > &lowsf,
181  &multiVecRange,
183  &multiVecDomain)
184 {
185  RCP<MultiVectorLinearOpWithSolveFactory<Scalar> > mvlowsf =
187  mvlowsf->nonconstInitialize(lowsf, multiVecRange, multiVecDomain);
188  return mvlowsf;
189 }
190 
195 template <class Scalar>
196 RCP<MultiVectorLinearOpWithSolveFactory<Scalar> >
198  const RCP<LinearOpWithSolveFactoryBase<Scalar> > &lowsf,
199  const int num_blocks)
200 {
201  RCP<LinearOpWithSolveBase<Scalar> > op = lowsf->createOp();
202  RCP<const Thyra::DefaultMultiVectorProductVectorSpace<Scalar> > mv_domain =
203  Thyra::multiVectorProductVectorSpace(op->domain(), num_blocks);
204  RCP<const Thyra::DefaultMultiVectorProductVectorSpace<Scalar> > mv_range =
205  Thyra::multiVectorProductVectorSpace(op->range(), num_blocks);
206  return nonconstMultiVectorLinearOpWithSolveFactory(lowsf, mv_range,
207  mv_domain);
208 }
209 
214 template <class Scalar>
215 RCP<MultiVectorLinearOpWithSolveFactory<Scalar> >
217  const RCP<const LinearOpWithSolveFactoryBase<Scalar> > &lowsf,
219  &multiVecRange,
221  &multiVecDomain)
222 {
223  RCP<MultiVectorLinearOpWithSolveFactory<Scalar> > mvlowsf =
225  mvlowsf->initialize(lowsf, multiVecRange, multiVecDomain);
226  return mvlowsf;
227 }
228 
233 template <class Scalar>
234 RCP<MultiVectorLinearOpWithSolveFactory<Scalar> >
236  const RCP<const LinearOpWithSolveFactoryBase<Scalar> > &lowsf,
237  const int num_blocks)
238 {
239  RCP<LinearOpWithSolveBase<Scalar> > op = lowsf->createOp();
240  RCP<const Thyra::DefaultMultiVectorProductVectorSpace<Scalar> > mv_domain =
241  Thyra::multiVectorProductVectorSpace(op->domain(), num_blocks);
242  RCP<const Thyra::DefaultMultiVectorProductVectorSpace<Scalar> > mv_range =
243  Thyra::multiVectorProductVectorSpace(op->range(), num_blocks);
244  return multiVectorLinearOpWithSolveFactory(lowsf, mv_range, mv_domain);
245 }
246 
247 // Overridden from Constructors/Initializers/Accessors
248 
249 template <class Scalar>
251  const RCP<LinearOpWithSolveFactoryBase<Scalar> > &lowsf,
253  &multiVecRange,
255  &multiVecDomain)
256 {
257 #ifdef TEUCHOS_DEBUG
259 #endif
260  lowsf_.initialize(lowsf);
261  multiVecRange_ = multiVecRange;
262  multiVecDomain_ = multiVecDomain;
263 }
264 
265 template <class Scalar>
267  const RCP<const LinearOpWithSolveFactoryBase<Scalar> > &lowsf,
269  &multiVecRange,
271  &multiVecDomain)
272 {
273 #ifdef TEUCHOS_DEBUG
275 #endif
276  lowsf_.initialize(lowsf);
277  multiVecRange_ = multiVecRange;
278  multiVecDomain_ = multiVecDomain;
279 }
280 
281 template <class Scalar>
282 RCP<LinearOpWithSolveFactoryBase<Scalar> >
284 {
285  return lowsf_.getNonconstObj();
286 }
287 
288 template <class Scalar>
289 RCP<const LinearOpWithSolveFactoryBase<Scalar> >
291 {
292  return lowsf_.getConstObj();
293 }
294 
295 // Overridden from Teuchos::Describable
296 
297 template <class Scalar>
299 {
300  std::ostringstream oss;
301  oss << this->Teuchos::Describable::description() << "{"
302  << "lowsf=";
303  if (!is_null(lowsf_.getConstObj()))
304  oss << lowsf_.getConstObj()->description();
305  else
306  oss << "NULL";
307  oss << "}";
308  return oss.str();
309 }
310 
311 // Overridden from ParameterListAcceptor
312 
313 template <class Scalar>
315  RCP<ParameterList> const &paramList)
316 {
317  lowsf_.getNonconstObj()->setParameterList(paramList);
318 }
319 
320 template <class Scalar>
321 RCP<ParameterList>
323 {
324  return lowsf_.getNonconstObj()->getNonconstParameterList();
325 }
326 
327 template <class Scalar>
328 RCP<ParameterList>
330 {
331  return lowsf_.getNonconstObj()->unsetParameterList();
332 }
333 
334 template <class Scalar>
335 RCP<const ParameterList>
337 {
338  return lowsf_.getConstObj()->getParameterList();
339 }
340 
341 template <class Scalar>
342 RCP<const ParameterList>
344 {
345  return lowsf_.getConstObj()->getValidParameters();
346 }
347 
348 // Overridden from LinearOpWithSolveFactoyBase
349 
350 template <class Scalar>
352  const
353 {
354  return lowsf_.getConstObj()->acceptsPreconditionerFactory();
355 }
356 
357 template <class Scalar>
359  const RCP<PreconditionerFactoryBase<Scalar> > &precFactory,
360  const std::string &precFactoryName)
361 {
363  RCP<MVPF> mvpf = Teuchos::rcp_dynamic_cast<MVPF>(precFactory);
364  lowsf_.getNonconstObj()->setPreconditionerFactory(
365  mvpf->getNonconstPreconditionerFactory(), precFactoryName);
366 }
367 
368 template <class Scalar>
369 RCP<PreconditionerFactoryBase<Scalar> >
371 {
372  RCP<PreconditionerFactoryBase<Scalar> > prec_fac =
373  lowsf_.getConstObj()->getPreconditionerFactory();
374  if (prec_fac == Teuchos::null)
375  return Teuchos::null;
376  else
377  return nonconstMultiVectorPreconditionerFactory(prec_fac, multiVecRange_,
378  multiVecDomain_);
379 }
380 
381 template <class Scalar>
383  RCP<PreconditionerFactoryBase<Scalar> > *precFactory,
384  std::string *precFactoryName)
385 {
386  RCP<PreconditionerFactoryBase<Scalar> > inner_precFactory;
387  lowsf_.getNonconstObj()->unsetPreconditionerFactory(
388  precFactory ? &inner_precFactory : NULL, precFactoryName);
389  if (precFactory)
390  *precFactory = nonconstMultiVectorPreconditionerFactory(
391  inner_precFactory, multiVecRange_, multiVecDomain_);
392 }
393 
394 template <class Scalar>
396  const LinearOpSourceBase<Scalar> &fwdOpSrc) const
397 {
398  typedef MultiVectorLinearOp<Scalar> MVLO;
399  RCP<const MVLO> mvlo =
400  Teuchos::rcp_dynamic_cast<const MVLO>(fwdOpSrc.getOp().assert_not_null());
401  RCP<const LinearOpSourceBase<Scalar> > inner_fwdOpSrc =
402  defaultLinearOpSource<Scalar>(mvlo->getLinearOp());
403  return lowsf_.getConstObj()->isCompatible(*inner_fwdOpSrc);
404 }
405 
406 template <class Scalar>
407 RCP<LinearOpWithSolveBase<Scalar> >
409 {
410  return nonconstMultiVectorLinearOpWithSolve<Scalar>(
411  lowsf_.getConstObj()->createOp(), multiVecRange_, multiVecDomain_);
412 }
413 
414 template <class Scalar>
416  const RCP<const LinearOpSourceBase<Scalar> > &fwdOpSrc,
418  const ESupportSolveUse supportSolveUse) const
419 {
420  using Teuchos::dyn_cast;
421  using Teuchos::rcp_dynamic_cast;
422 
423 #ifdef TEUCHOS_DEBUG
424  TEUCHOS_TEST_FOR_EXCEPT(0 == Op);
425 #endif
426 
427  // Set the verbosity settings for the wrapped LOWSF object!
428  lowsf_.getConstObj()->setOStream(this->getOStream());
429  lowsf_.getConstObj()->setVerbLevel(this->getVerbLevel());
430 
431  typedef MultiVectorLinearOp<Scalar> MVLO;
433  const RCP<const MVLO> mvlo =
434  rcp_dynamic_cast<const MVLO>(fwdOpSrc->getOp().assert_not_null());
435  MVLOWS &mvlows = dyn_cast<MVLOWS>(*Op);
436 
437  lowsf_.getConstObj()->initializeOp(
438  defaultLinearOpSource<Scalar>(mvlo->getLinearOp()),
439  mvlows.getNonconstLinearOpWithSolve().get(), supportSolveUse);
440 }
441 
442 template <class Scalar>
444  const RCP<const LinearOpSourceBase<Scalar> > &fwdOpSrc,
446 {
447  using Teuchos::dyn_cast;
448  using Teuchos::rcp_dynamic_cast;
449 
450 #ifdef TEUCHOS_DEBUG
451  TEUCHOS_TEST_FOR_EXCEPT(0 == Op);
452 #endif
453 
454  // Set the verbosity settings for the wrapped LOWSF object!
455  lowsf_.getConstObj()->setOStream(this->getOStream());
456  lowsf_.getConstObj()->setVerbLevel(this->getVerbLevel());
457 
458  typedef MultiVectorLinearOp<Scalar> MVLO;
460  const RCP<const MVLO> mvlo =
461  rcp_dynamic_cast<const MVLO>(fwdOpSrc->getOp().assert_not_null());
462  MVLOWS &mvlows = dyn_cast<MVLOWS>(*Op);
463 
464  lowsf_.getConstObj()->initializeAndReuseOp(
465  defaultLinearOpSource<Scalar>(mvlo->getLinearOp()),
466  mvlows.getNonconstLinearOpWithSolve().get());
467 }
468 
469 template <class Scalar>
472  RCP<const LinearOpSourceBase<Scalar> > *fwdOpSrc,
473  RCP<const PreconditionerBase<Scalar> > *prec,
474  RCP<const LinearOpSourceBase<Scalar> > *approxFwdOpSrc,
475  ESupportSolveUse *supportSolveUse) const
476 {
477  using Teuchos::dyn_cast;
478 
479 #ifdef TEUCHOS_DEBUG
480  TEUCHOS_TEST_FOR_EXCEPT(0 == Op);
481 #endif
483  MVLOWS &mvlowsOp = dyn_cast<MVLOWS>(*Op);
484  RCP<const LinearOpSourceBase<Scalar> > inner_fwdOpSrc;
485  RCP<const PreconditionerBase<Scalar> > inner_prec;
486  RCP<const LinearOpSourceBase<Scalar> > inner_approxFwdOpSrc;
487  lowsf_.getConstObj()->uninitializeOp(
488  mvlowsOp.getNonconstLinearOpWithSolve().get(),
489  fwdOpSrc ? &inner_fwdOpSrc : NULL, prec ? &inner_prec : NULL,
490  approxFwdOpSrc ? &inner_approxFwdOpSrc : NULL, supportSolveUse);
491  if (fwdOpSrc)
492  *fwdOpSrc = defaultLinearOpSource<Scalar>(multiVectorLinearOp(
493  inner_fwdOpSrc->getOp(), multiVecRange_, multiVecDomain_));
494  if (prec)
495  *prec =
496  multiVectorPreconditioner(inner_prec, multiVecRange_, multiVecDomain_);
497  if (fwdOpSrc)
498  *approxFwdOpSrc = defaultLinearOpSource<Scalar>(multiVectorLinearOp(
499  inner_approxFwdOpSrc->getOp(), multiVecRange_, multiVecDomain_));
500 }
501 
502 template <class Scalar>
504  Scalar>::supportsPreconditionerInputType(const EPreconditionerInputType
505  precOpType) const
506 {
507  return lowsf_.getConstObj()->supportsPreconditionerInputType(precOpType);
508 }
509 
510 template <class Scalar>
512  const RCP<const LinearOpSourceBase<Scalar> > &fwdOpSrc,
513  const RCP<const PreconditionerBase<Scalar> > &prec,
515  const ESupportSolveUse supportSolveUse) const
516 {
517  using Teuchos::dyn_cast;
518  using Teuchos::rcp_dynamic_cast;
519 
520 #ifdef TEUCHOS_DEBUG
521  TEUCHOS_TEST_FOR_EXCEPT(0 == Op);
522 #endif
523 
524  // Set the verbosity settings for the wrapped LOWSF object!
525  lowsf_.getConstObj()->setOStream(this->getOStream());
526  lowsf_.getConstObj()->setVerbLevel(this->getVerbLevel());
527 
528  typedef MultiVectorLinearOp<Scalar> MVLO;
531  const RCP<const MVLO> mvlo =
532  rcp_dynamic_cast<const MVLO>(fwdOpSrc->getOp().assert_not_null());
533  const RCP<const MVP> mvp = rcp_dynamic_cast<const MVP>(prec);
534  MVLOWS &mvlows = dyn_cast<MVLOWS>(*Op);
535 
536  lowsf_.getConstObj()->initializePreconditionedOp(
537  defaultLinearOpSource<Scalar>(mvlo->getLinearOp()),
538  mvp->getPreconditioner(), mvlows.getNonconstLinearOpWithSolve().get(),
539  supportSolveUse);
540 }
541 
542 template <class Scalar>
545  const RCP<const LinearOpSourceBase<Scalar> > &fwdOpSrc,
546  const RCP<const LinearOpSourceBase<Scalar> > &approxFwdOpSrc,
548  const ESupportSolveUse supportSolveUse) const
549 {
550  using Teuchos::dyn_cast;
551  using Teuchos::rcp_dynamic_cast;
552 
553 #ifdef TEUCHOS_DEBUG
554  TEUCHOS_TEST_FOR_EXCEPT(0 == Op);
555 #endif
556 
557  // Set the verbosity settings for the wrapped LOWSF object!
558  lowsf_.getConstObj()->setOStream(this->getOStream());
559  lowsf_.getConstObj()->setVerbLevel(this->getVerbLevel());
560 
561  typedef MultiVectorLinearOp<Scalar> MVLO;
563  const RCP<const MVLO> mvlo =
564  rcp_dynamic_cast<const MVLO>(fwdOpSrc->getOp().assert_not_null());
565  const RCP<const MVLO> amvlo =
566  rcp_dynamic_cast<const MVLO>(approxFwdOpSrc->getOp().assert_not_null());
567  MVLOWS &mvlows = dyn_cast<MVLOWS>(*Op);
568 
569  lowsf_.getConstObj()->initializeApproxPreconditionedOp(
570  defaultLinearOpSource<Scalar>(mvlo->getLinearOp()),
571  defaultLinearOpSource<Scalar>(amvlo->getLinearOp()),
572  mvlows.getNonconstLinearOpWithSolve().get(), supportSolveUse);
573 }
574 
575 // protected
576 
577 template <class Scalar>
579  const
580 {
581  lowsf_.getConstObj()->setVerbLevel(this->getVerbLevel());
582  lowsf_.getConstObj()->setOStream(this->getOStream());
583 }
584 
585 } // namespace Thyra
586 
587 #endif
virtual void initializePreconditionedOp(const RCP< const LinearOpSourceBase< Scalar > > &fwdOpSrc, const RCP< const PreconditionerBase< Scalar > > &prec, LinearOpWithSolveBase< Scalar > *Op, const ESupportSolveUse supportSolveUse) const
Concrete PreconditionerFactoryBase subclass that wraps a preconditioner in MultiVectorPreconditioner...
RCP< const DefaultMultiVectorProductVectorSpace< Scalar > > multiVecRange_
bool is_null(const boost::shared_ptr< T > &p)
RCP< const DefaultMultiVectorProductVectorSpace< Scalar > > multiVecDomain_
virtual bool supportsPreconditionerInputType(const EPreconditionerInputType precOpType) const
virtual void initializeOp(const RCP< const LinearOpSourceBase< Scalar > > &fwdOpSrc, LinearOpWithSolveBase< Scalar > *Op, const ESupportSolveUse supportSolveUse) const
RCP< MultiVectorLinearOpWithSolveFactory< Scalar > > multiVectorLinearOpWithSolveFactory(const RCP< const LinearOpWithSolveFactoryBase< Scalar > > &lowsf, const RCP< const DefaultMultiVectorProductVectorSpace< Scalar > > &multiVecRange, const RCP< const DefaultMultiVectorProductVectorSpace< Scalar > > &multiVecDomain)
Nonmember constructor.
T_To & dyn_cast(T_From &from)
virtual RCP< LinearOpWithSolveBase< Scalar > > createOp() const
Create a LinearOpWithSolveFactory for a flattened-out multi-vector.
RCP< LinearOpWithSolveFactoryBase< Scalar > > getUnderlyingLOWSF()
virtual void setPreconditionerFactory(const RCP< PreconditionerFactoryBase< Scalar > > &precFactory, const std::string &precFactoryName)
Throws exception.
RCP< MultiVectorLinearOpWithSolveFactory< Scalar > > nonconstMultiVectorLinearOpWithSolveFactory(const RCP< LinearOpWithSolveFactoryBase< Scalar > > &lowsf, const RCP< const DefaultMultiVectorProductVectorSpace< Scalar > > &multiVecRange, const RCP< const DefaultMultiVectorProductVectorSpace< Scalar > > &multiVecDomain)
Nonmember constructor.
virtual RCP< PreconditionerFactoryBase< Scalar > > getPreconditionerFactory() const
Returns null .
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
RCP< MultiVectorLinearOpWithSolveFactory< Scalar > > nonconstMultiVectorLinearOpWithSolveFactory(const RCP< LinearOpWithSolveFactoryBase< Scalar > > &lowsf, const int num_blocks)
Nonmember constructor.
void nonconstInitialize(const RCP< LinearOpWithSolveFactoryBase< Scalar > > &lowsf, const RCP< const DefaultMultiVectorProductVectorSpace< Scalar > > &multiVecRange, const RCP< const DefaultMultiVectorProductVectorSpace< Scalar > > &multiVecDomain)
Initialize given a single non-const LOWSFB object.
virtual std::string description() const
virtual void initializeAndReuseOp(const RCP< const LinearOpSourceBase< Scalar > > &fwdOpSrc, LinearOpWithSolveBase< Scalar > *Op) const
ESupportSolveUse
void initialize(const RCP< const LinearOpWithSolveFactoryBase< Scalar > > &lowsf, const RCP< const DefaultMultiVectorProductVectorSpace< Scalar > > &multiVecRange, const RCP< const DefaultMultiVectorProductVectorSpace< Scalar > > &multiVecDomain)
Initialize given a single const LOWSFB object.
virtual void unsetPreconditionerFactory(RCP< PreconditionerFactoryBase< Scalar > > *precFactory, std::string *precFactoryName)
Throws exception.
Implicit concrete LinearOpBase subclass that takes a flattended out multi-vector and performs a multi...
Concrete PreconditionerBase subclass that wraps a preconditioner operator in MultiVectorLinearOp.
virtual bool isCompatible(const LinearOpSourceBase< Scalar > &fwdOpSrc) const
virtual void uninitializeOp(LinearOpWithSolveBase< Scalar > *Op, RCP< const LinearOpSourceBase< Scalar > > *fwdOpSrc, RCP< const PreconditionerBase< Scalar > > *prec, RCP< const LinearOpSourceBase< Scalar > > *approxFwdOpSrc, ESupportSolveUse *supportSolveUse) const
EPreconditionerInputType
virtual void initializeApproxPreconditionedOp(const RCP< const LinearOpSourceBase< Scalar > > &fwdOpSrc, const RCP< const LinearOpSourceBase< Scalar > > &approxFwdOpSrc, LinearOpWithSolveBase< Scalar > *Op, const ESupportSolveUse supportSolveUse) const
RCP< MultiVectorLinearOpWithSolveFactory< Scalar > > multiVectorLinearOpWithSolveFactory(const RCP< const LinearOpWithSolveFactoryBase< Scalar > > &lowsf, const int num_blocks)
Nonmember constructor.
virtual Teuchos::RCP< const LinearOpBase< Scalar > > getOp() const =0
Teuchos::ConstNonconstObjectContainer< LinearOpWithSolveFactoryBase< Scalar > > LOWSF_t
#define TEUCHOS_TEST_FOR_EXCEPT(throw_exception_test)
void informUpdatedVerbosityState() const
Overridden from Teuchos::VerboseObjectBase.