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: Copyright (2017) Sandia Corporation
4 //
5 // Distributed under BSD 3-clause license (See accompanying file Copyright.txt)
6 // ****************************************************************************
7 // @HEADER
8 
9 #ifndef Thyra_MultiVectorLinearOpWithSolveFactory_hpp
10 #define Thyra_MultiVectorLinearOpWithSolveFactory_hpp
11 
12 #include "Thyra_LinearOpWithSolveFactoryBase.hpp"
16 #include "Thyra_DefaultMultiVectorLinearOpWithSolve.hpp"
17 #include "Thyra_DefaultMultiVectorProductVectorSpace.hpp"
18 #include "Thyra_DefaultLinearOpSource.hpp"
19 
20 namespace Thyra {
21 
24 template <class Scalar>
26  : virtual public LinearOpWithSolveFactoryBase<Scalar> {
27  public:
30 
33 
46  void nonconstInitialize(
47  const RCP<LinearOpWithSolveFactoryBase<Scalar> > &lowsf,
49  &multiVecRange,
51  &multiVecDomain);
52 
65  void initialize(const RCP<const LinearOpWithSolveFactoryBase<Scalar> > &lowsf,
67  &multiVecRange,
69  &multiVecDomain);
70 
71  RCP<LinearOpWithSolveFactoryBase<Scalar> > getUnderlyingLOWSF();
72 
73  RCP<const LinearOpWithSolveFactoryBase<Scalar> > getUnderlyingLOWSF() const;
74 
76 
79 
80  std::string description() const;
81 
83 
87 
88  void setParameterList(RCP<ParameterList> const &paramList);
89  RCP<ParameterList> getNonconstParameterList();
90  RCP<ParameterList> unsetParameterList();
91  RCP<const ParameterList> getParameterList() const;
92  RCP<const ParameterList> getValidParameters() const;
93 
95 
98 
100  virtual bool acceptsPreconditionerFactory() const;
101 
103  virtual void setPreconditionerFactory(
104  const RCP<PreconditionerFactoryBase<Scalar> > &precFactory,
105  const std::string &precFactoryName);
106 
108  virtual RCP<PreconditionerFactoryBase<Scalar> > getPreconditionerFactory()
109  const;
110 
112  virtual void unsetPreconditionerFactory(
113  RCP<PreconditionerFactoryBase<Scalar> > *precFactory,
114  std::string *precFactoryName);
115 
116  virtual bool isCompatible(const LinearOpSourceBase<Scalar> &fwdOpSrc) const;
117 
118  virtual RCP<LinearOpWithSolveBase<Scalar> > createOp() const;
119 
120  virtual void initializeOp(
121  const RCP<const LinearOpSourceBase<Scalar> > &fwdOpSrc,
123  const ESupportSolveUse supportSolveUse) const;
124 
125  virtual void initializeAndReuseOp(
126  const RCP<const LinearOpSourceBase<Scalar> > &fwdOpSrc,
128 
129  virtual void uninitializeOp(
131  RCP<const LinearOpSourceBase<Scalar> > *fwdOpSrc,
132  RCP<const PreconditionerBase<Scalar> > *prec,
133  RCP<const LinearOpSourceBase<Scalar> > *approxFwdOpSrc,
134  ESupportSolveUse *supportSolveUse) const;
135 
136  virtual bool supportsPreconditionerInputType(
137  const EPreconditionerInputType precOpType) const;
138 
139  virtual void initializePreconditionedOp(
140  const RCP<const LinearOpSourceBase<Scalar> > &fwdOpSrc,
141  const RCP<const PreconditionerBase<Scalar> > &prec,
143  const ESupportSolveUse supportSolveUse) const;
144 
146  const RCP<const LinearOpSourceBase<Scalar> > &fwdOpSrc,
147  const RCP<const LinearOpSourceBase<Scalar> > &approxFwdOpSrc,
149  const ESupportSolveUse supportSolveUse) const;
150 
152 
153  protected:
156 
157  void informUpdatedVerbosityState() const;
158 
160 
161  private:
165 
167  RCP<const DefaultMultiVectorProductVectorSpace<Scalar> > multiVecRange_;
168  RCP<const DefaultMultiVectorProductVectorSpace<Scalar> > multiVecDomain_;
169 };
170 
175 template <class Scalar>
176 RCP<MultiVectorLinearOpWithSolveFactory<Scalar> >
178  const RCP<LinearOpWithSolveFactoryBase<Scalar> > &lowsf,
180  &multiVecRange,
182  &multiVecDomain)
183 {
184  RCP<MultiVectorLinearOpWithSolveFactory<Scalar> > mvlowsf =
186  mvlowsf->nonconstInitialize(lowsf, multiVecRange, multiVecDomain);
187  return mvlowsf;
188 }
189 
194 template <class Scalar>
195 RCP<MultiVectorLinearOpWithSolveFactory<Scalar> >
197  const RCP<LinearOpWithSolveFactoryBase<Scalar> > &lowsf,
198  const int num_blocks)
199 {
200  RCP<LinearOpWithSolveBase<Scalar> > op = lowsf->createOp();
201  RCP<const Thyra::DefaultMultiVectorProductVectorSpace<Scalar> > mv_domain =
202  Thyra::multiVectorProductVectorSpace(op->domain(), num_blocks);
203  RCP<const Thyra::DefaultMultiVectorProductVectorSpace<Scalar> > mv_range =
204  Thyra::multiVectorProductVectorSpace(op->range(), num_blocks);
205  return nonconstMultiVectorLinearOpWithSolveFactory(lowsf, mv_range,
206  mv_domain);
207 }
208 
213 template <class Scalar>
214 RCP<MultiVectorLinearOpWithSolveFactory<Scalar> >
216  const RCP<const LinearOpWithSolveFactoryBase<Scalar> > &lowsf,
218  &multiVecRange,
220  &multiVecDomain)
221 {
222  RCP<MultiVectorLinearOpWithSolveFactory<Scalar> > mvlowsf =
224  mvlowsf->initialize(lowsf, multiVecRange, multiVecDomain);
225  return mvlowsf;
226 }
227 
232 template <class Scalar>
233 RCP<MultiVectorLinearOpWithSolveFactory<Scalar> >
235  const RCP<const LinearOpWithSolveFactoryBase<Scalar> > &lowsf,
236  const int num_blocks)
237 {
238  RCP<LinearOpWithSolveBase<Scalar> > op = lowsf->createOp();
239  RCP<const Thyra::DefaultMultiVectorProductVectorSpace<Scalar> > mv_domain =
240  Thyra::multiVectorProductVectorSpace(op->domain(), num_blocks);
241  RCP<const Thyra::DefaultMultiVectorProductVectorSpace<Scalar> > mv_range =
242  Thyra::multiVectorProductVectorSpace(op->range(), num_blocks);
243  return multiVectorLinearOpWithSolveFactory(lowsf, mv_range, mv_domain);
244 }
245 
246 // Overridden from Constructors/Initializers/Accessors
247 
248 template <class Scalar>
250  const RCP<LinearOpWithSolveFactoryBase<Scalar> > &lowsf,
252  &multiVecRange,
254  &multiVecDomain)
255 {
256 #ifdef TEUCHOS_DEBUG
258 #endif
259  lowsf_.initialize(lowsf);
260  multiVecRange_ = multiVecRange;
261  multiVecDomain_ = multiVecDomain;
262 }
263 
264 template <class Scalar>
266  const RCP<const LinearOpWithSolveFactoryBase<Scalar> > &lowsf,
268  &multiVecRange,
270  &multiVecDomain)
271 {
272 #ifdef TEUCHOS_DEBUG
274 #endif
275  lowsf_.initialize(lowsf);
276  multiVecRange_ = multiVecRange;
277  multiVecDomain_ = multiVecDomain;
278 }
279 
280 template <class Scalar>
281 RCP<LinearOpWithSolveFactoryBase<Scalar> >
283 {
284  return lowsf_.getNonconstObj();
285 }
286 
287 template <class Scalar>
288 RCP<const LinearOpWithSolveFactoryBase<Scalar> >
290 {
291  return lowsf_.getConstObj();
292 }
293 
294 // Overridden from Teuchos::Describable
295 
296 template <class Scalar>
298 {
299  std::ostringstream oss;
300  oss << this->Teuchos::Describable::description() << "{"
301  << "lowsf=";
302  if (!is_null(lowsf_.getConstObj()))
303  oss << lowsf_.getConstObj()->description();
304  else
305  oss << "NULL";
306  oss << "}";
307  return oss.str();
308 }
309 
310 // Overridden from ParameterListAcceptor
311 
312 template <class Scalar>
314  RCP<ParameterList> const &paramList)
315 {
316  lowsf_.getNonconstObj()->setParameterList(paramList);
317 }
318 
319 template <class Scalar>
320 RCP<ParameterList>
322 {
323  return lowsf_.getNonconstObj()->getNonconstParameterList();
324 }
325 
326 template <class Scalar>
327 RCP<ParameterList>
329 {
330  return lowsf_.getNonconstObj()->unsetParameterList();
331 }
332 
333 template <class Scalar>
334 RCP<const ParameterList>
336 {
337  return lowsf_.getConstObj()->getParameterList();
338 }
339 
340 template <class Scalar>
341 RCP<const ParameterList>
343 {
344  return lowsf_.getConstObj()->getValidParameters();
345 }
346 
347 // Overridden from LinearOpWithSolveFactoyBase
348 
349 template <class Scalar>
351  const
352 {
353  return lowsf_.getConstObj()->acceptsPreconditionerFactory();
354 }
355 
356 template <class Scalar>
358  const RCP<PreconditionerFactoryBase<Scalar> > &precFactory,
359  const std::string &precFactoryName)
360 {
362  RCP<MVPF> mvpf = Teuchos::rcp_dynamic_cast<MVPF>(precFactory);
363  lowsf_.getNonconstObj()->setPreconditionerFactory(
364  mvpf->getNonconstPreconditionerFactory(), precFactoryName);
365 }
366 
367 template <class Scalar>
368 RCP<PreconditionerFactoryBase<Scalar> >
370 {
371  RCP<PreconditionerFactoryBase<Scalar> > prec_fac =
372  lowsf_.getConstObj()->getPreconditionerFactory();
373  if (prec_fac == Teuchos::null)
374  return Teuchos::null;
375  else
376  return nonconstMultiVectorPreconditionerFactory(prec_fac, multiVecRange_,
377  multiVecDomain_);
378 }
379 
380 template <class Scalar>
382  RCP<PreconditionerFactoryBase<Scalar> > *precFactory,
383  std::string *precFactoryName)
384 {
385  RCP<PreconditionerFactoryBase<Scalar> > inner_precFactory;
386  lowsf_.getNonconstObj()->unsetPreconditionerFactory(
387  precFactory ? &inner_precFactory : NULL, precFactoryName);
388  if (precFactory)
389  *precFactory = nonconstMultiVectorPreconditionerFactory(
390  inner_precFactory, multiVecRange_, multiVecDomain_);
391 }
392 
393 template <class Scalar>
395  const LinearOpSourceBase<Scalar> &fwdOpSrc) const
396 {
397  typedef MultiVectorLinearOp<Scalar> MVLO;
398  RCP<const MVLO> mvlo =
399  Teuchos::rcp_dynamic_cast<const MVLO>(fwdOpSrc.getOp().assert_not_null());
400  RCP<const LinearOpSourceBase<Scalar> > inner_fwdOpSrc =
401  defaultLinearOpSource<Scalar>(mvlo->getLinearOp());
402  return lowsf_.getConstObj()->isCompatible(*inner_fwdOpSrc);
403 }
404 
405 template <class Scalar>
406 RCP<LinearOpWithSolveBase<Scalar> >
408 {
409  return nonconstMultiVectorLinearOpWithSolve<Scalar>(
410  lowsf_.getConstObj()->createOp(), multiVecRange_, multiVecDomain_);
411 }
412 
413 template <class Scalar>
415  const RCP<const LinearOpSourceBase<Scalar> > &fwdOpSrc,
417  const ESupportSolveUse supportSolveUse) const
418 {
419  using Teuchos::dyn_cast;
420  using Teuchos::rcp_dynamic_cast;
421 
422 #ifdef TEUCHOS_DEBUG
423  TEUCHOS_TEST_FOR_EXCEPT(0 == Op);
424 #endif
425 
426  // Set the verbosity settings for the wrapped LOWSF object!
427  lowsf_.getConstObj()->setOStream(this->getOStream());
428  lowsf_.getConstObj()->setVerbLevel(this->getVerbLevel());
429 
430  typedef MultiVectorLinearOp<Scalar> MVLO;
432  const RCP<const MVLO> mvlo =
433  rcp_dynamic_cast<const MVLO>(fwdOpSrc->getOp().assert_not_null());
434  MVLOWS &mvlows = dyn_cast<MVLOWS>(*Op);
435 
436  lowsf_.getConstObj()->initializeOp(
437  defaultLinearOpSource<Scalar>(mvlo->getLinearOp()),
438  mvlows.getNonconstLinearOpWithSolve().get(), supportSolveUse);
439 }
440 
441 template <class Scalar>
443  const RCP<const LinearOpSourceBase<Scalar> > &fwdOpSrc,
445 {
446  using Teuchos::dyn_cast;
447  using Teuchos::rcp_dynamic_cast;
448 
449 #ifdef TEUCHOS_DEBUG
450  TEUCHOS_TEST_FOR_EXCEPT(0 == Op);
451 #endif
452 
453  // Set the verbosity settings for the wrapped LOWSF object!
454  lowsf_.getConstObj()->setOStream(this->getOStream());
455  lowsf_.getConstObj()->setVerbLevel(this->getVerbLevel());
456 
457  typedef MultiVectorLinearOp<Scalar> MVLO;
459  const RCP<const MVLO> mvlo =
460  rcp_dynamic_cast<const MVLO>(fwdOpSrc->getOp().assert_not_null());
461  MVLOWS &mvlows = dyn_cast<MVLOWS>(*Op);
462 
463  lowsf_.getConstObj()->initializeAndReuseOp(
464  defaultLinearOpSource<Scalar>(mvlo->getLinearOp()),
465  mvlows.getNonconstLinearOpWithSolve().get());
466 }
467 
468 template <class Scalar>
471  RCP<const LinearOpSourceBase<Scalar> > *fwdOpSrc,
472  RCP<const PreconditionerBase<Scalar> > *prec,
473  RCP<const LinearOpSourceBase<Scalar> > *approxFwdOpSrc,
474  ESupportSolveUse *supportSolveUse) const
475 {
476  using Teuchos::dyn_cast;
477 
478 #ifdef TEUCHOS_DEBUG
479  TEUCHOS_TEST_FOR_EXCEPT(0 == Op);
480 #endif
482  MVLOWS &mvlowsOp = dyn_cast<MVLOWS>(*Op);
483  RCP<const LinearOpSourceBase<Scalar> > inner_fwdOpSrc;
484  RCP<const PreconditionerBase<Scalar> > inner_prec;
485  RCP<const LinearOpSourceBase<Scalar> > inner_approxFwdOpSrc;
486  lowsf_.getConstObj()->uninitializeOp(
487  mvlowsOp.getNonconstLinearOpWithSolve().get(),
488  fwdOpSrc ? &inner_fwdOpSrc : NULL, prec ? &inner_prec : NULL,
489  approxFwdOpSrc ? &inner_approxFwdOpSrc : NULL, supportSolveUse);
490  if (fwdOpSrc)
491  *fwdOpSrc = defaultLinearOpSource<Scalar>(multiVectorLinearOp(
492  inner_fwdOpSrc->getOp(), multiVecRange_, multiVecDomain_));
493  if (prec)
494  *prec =
495  multiVectorPreconditioner(inner_prec, multiVecRange_, multiVecDomain_);
496  if (fwdOpSrc)
497  *approxFwdOpSrc = defaultLinearOpSource<Scalar>(multiVectorLinearOp(
498  inner_approxFwdOpSrc->getOp(), multiVecRange_, multiVecDomain_));
499 }
500 
501 template <class Scalar>
503  Scalar>::supportsPreconditionerInputType(const EPreconditionerInputType
504  precOpType) const
505 {
506  return lowsf_.getConstObj()->supportsPreconditionerInputType(precOpType);
507 }
508 
509 template <class Scalar>
511  const RCP<const LinearOpSourceBase<Scalar> > &fwdOpSrc,
512  const RCP<const PreconditionerBase<Scalar> > &prec,
514  const ESupportSolveUse supportSolveUse) const
515 {
516  using Teuchos::dyn_cast;
517  using Teuchos::rcp_dynamic_cast;
518 
519 #ifdef TEUCHOS_DEBUG
520  TEUCHOS_TEST_FOR_EXCEPT(0 == Op);
521 #endif
522 
523  // Set the verbosity settings for the wrapped LOWSF object!
524  lowsf_.getConstObj()->setOStream(this->getOStream());
525  lowsf_.getConstObj()->setVerbLevel(this->getVerbLevel());
526 
527  typedef MultiVectorLinearOp<Scalar> MVLO;
530  const RCP<const MVLO> mvlo =
531  rcp_dynamic_cast<const MVLO>(fwdOpSrc->getOp().assert_not_null());
532  const RCP<const MVP> mvp = rcp_dynamic_cast<const MVP>(prec);
533  MVLOWS &mvlows = dyn_cast<MVLOWS>(*Op);
534 
535  lowsf_.getConstObj()->initializePreconditionedOp(
536  defaultLinearOpSource<Scalar>(mvlo->getLinearOp()),
537  mvp->getPreconditioner(), mvlows.getNonconstLinearOpWithSolve().get(),
538  supportSolveUse);
539 }
540 
541 template <class Scalar>
544  const RCP<const LinearOpSourceBase<Scalar> > &fwdOpSrc,
545  const RCP<const LinearOpSourceBase<Scalar> > &approxFwdOpSrc,
547  const ESupportSolveUse supportSolveUse) const
548 {
549  using Teuchos::dyn_cast;
550  using Teuchos::rcp_dynamic_cast;
551 
552 #ifdef TEUCHOS_DEBUG
553  TEUCHOS_TEST_FOR_EXCEPT(0 == Op);
554 #endif
555 
556  // Set the verbosity settings for the wrapped LOWSF object!
557  lowsf_.getConstObj()->setOStream(this->getOStream());
558  lowsf_.getConstObj()->setVerbLevel(this->getVerbLevel());
559 
560  typedef MultiVectorLinearOp<Scalar> MVLO;
562  const RCP<const MVLO> mvlo =
563  rcp_dynamic_cast<const MVLO>(fwdOpSrc->getOp().assert_not_null());
564  const RCP<const MVLO> amvlo =
565  rcp_dynamic_cast<const MVLO>(approxFwdOpSrc->getOp().assert_not_null());
566  MVLOWS &mvlows = dyn_cast<MVLOWS>(*Op);
567 
568  lowsf_.getConstObj()->initializeApproxPreconditionedOp(
569  defaultLinearOpSource<Scalar>(mvlo->getLinearOp()),
570  defaultLinearOpSource<Scalar>(amvlo->getLinearOp()),
571  mvlows.getNonconstLinearOpWithSolve().get(), supportSolveUse);
572 }
573 
574 // protected
575 
576 template <class Scalar>
578  const
579 {
580  lowsf_.getConstObj()->setVerbLevel(this->getVerbLevel());
581  lowsf_.getConstObj()->setOStream(this->getOStream());
582 }
583 
584 } // namespace Thyra
585 
586 #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.