Tempus Version of the Day
Time Integration
Loading...
Searching...
No Matches
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
20namespace Thyra {
21
24template<class Scalar>
26 : virtual public LinearOpWithSolveFactoryBase<Scalar>
27{
28public:
29
32
35
49 const RCP<LinearOpWithSolveFactoryBase<Scalar> > &lowsf,
50 const RCP<const DefaultMultiVectorProductVectorSpace<Scalar> > &multiVecRange,
51 const RCP<const DefaultMultiVectorProductVectorSpace<Scalar> > &multiVecDomain
52 );
53
54
67 void initialize(
68 const RCP<const LinearOpWithSolveFactoryBase<Scalar> > &lowsf,
69 const RCP<const DefaultMultiVectorProductVectorSpace<Scalar> > &multiVecRange,
70 const RCP<const DefaultMultiVectorProductVectorSpace<Scalar> > &multiVecDomain
71 );
72
73 RCP<LinearOpWithSolveFactoryBase<Scalar> > getUnderlyingLOWSF();
74
75 RCP<const LinearOpWithSolveFactoryBase<Scalar> > getUnderlyingLOWSF() const;
76
78
81
82 std::string description() const;
83
85
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 );
108
110 virtual RCP<PreconditionerFactoryBase<Scalar> >
112
114 virtual void unsetPreconditionerFactory(
115 RCP<PreconditionerFactoryBase<Scalar> > *precFactory,
116 std::string *precFactoryName
117 );
118
119 virtual bool isCompatible(
120 const LinearOpSourceBase<Scalar> &fwdOpSrc
121 ) const;
122
123 virtual RCP<LinearOpWithSolveBase<Scalar> > createOp() const;
124
125 virtual void initializeOp(
126 const RCP<const LinearOpSourceBase<Scalar> > &fwdOpSrc,
127 LinearOpWithSolveBase<Scalar> *Op,
128 const ESupportSolveUse supportSolveUse
129 ) const;
130
131 virtual void initializeAndReuseOp(
132 const RCP<const LinearOpSourceBase<Scalar> > &fwdOpSrc,
133 LinearOpWithSolveBase<Scalar> *Op
134 ) const;
135
136 virtual void uninitializeOp(
137 LinearOpWithSolveBase<Scalar> *Op,
138 RCP<const LinearOpSourceBase<Scalar> > *fwdOpSrc,
139 RCP<const PreconditionerBase<Scalar> > *prec,
140 RCP<const LinearOpSourceBase<Scalar> > *approxFwdOpSrc,
141 ESupportSolveUse *supportSolveUse
142 ) const;
143
145 const EPreconditionerInputType precOpType
146 ) const;
147
148 virtual void initializePreconditionedOp(
149 const RCP<const LinearOpSourceBase<Scalar> > &fwdOpSrc,
150 const RCP<const PreconditionerBase<Scalar> > &prec,
151 LinearOpWithSolveBase<Scalar> *Op,
152 const ESupportSolveUse supportSolveUse
153 ) const;
154
156 const RCP<const LinearOpSourceBase<Scalar> > &fwdOpSrc,
157 const RCP<const LinearOpSourceBase<Scalar> > &approxFwdOpSrc,
158 LinearOpWithSolveBase<Scalar> *Op,
159 const ESupportSolveUse supportSolveUse
160 ) const;
161
163
164protected:
165
168
169 void informUpdatedVerbosityState() const;
170
172
173private:
174
175 typedef Teuchos::ConstNonconstObjectContainer<LinearOpWithSolveFactoryBase<Scalar> > LOWSF_t;
176
178 RCP<const DefaultMultiVectorProductVectorSpace<Scalar> > multiVecRange_;
179 RCP<const DefaultMultiVectorProductVectorSpace<Scalar> > multiVecDomain_;
180
181};
182
187template<class Scalar>
188RCP<MultiVectorLinearOpWithSolveFactory<Scalar> >
190 const RCP<LinearOpWithSolveFactoryBase<Scalar> > &lowsf,
191 const RCP<const DefaultMultiVectorProductVectorSpace<Scalar> > &multiVecRange,
192 const RCP<const DefaultMultiVectorProductVectorSpace<Scalar> > &multiVecDomain
193 )
194{
195 RCP<MultiVectorLinearOpWithSolveFactory<Scalar> > mvlowsf =
196 Teuchos::rcp(new MultiVectorLinearOpWithSolveFactory<Scalar>);
197 mvlowsf->nonconstInitialize(lowsf,multiVecRange,multiVecDomain);
198 return mvlowsf;
199}
200
205template<class Scalar>
206RCP<MultiVectorLinearOpWithSolveFactory<Scalar> >
208 const RCP<LinearOpWithSolveFactoryBase<Scalar> > &lowsf,
209 const int num_blocks
210 )
211{
212 RCP< LinearOpWithSolveBase<Scalar> > op = lowsf->createOp();
213 RCP<const Thyra::DefaultMultiVectorProductVectorSpace<Scalar> > mv_domain =
214 Thyra::multiVectorProductVectorSpace(op->domain(), num_blocks);
215 RCP<const Thyra::DefaultMultiVectorProductVectorSpace<Scalar> > mv_range =
216 Thyra::multiVectorProductVectorSpace(op->range(), num_blocks);
217 return nonconstMultiVectorLinearOpWithSolveFactory(lowsf, mv_range, mv_domain);
218}
219
224template<class Scalar>
225RCP<MultiVectorLinearOpWithSolveFactory<Scalar> >
227 const RCP<const LinearOpWithSolveFactoryBase<Scalar> > &lowsf,
228 const RCP<const DefaultMultiVectorProductVectorSpace<Scalar> > &multiVecRange,
229 const RCP<const DefaultMultiVectorProductVectorSpace<Scalar> > &multiVecDomain
230 )
231{
232 RCP<MultiVectorLinearOpWithSolveFactory<Scalar> > mvlowsf =
233 Teuchos::rcp(new MultiVectorLinearOpWithSolveFactory<Scalar>);
234 mvlowsf->initialize(lowsf,multiVecRange,multiVecDomain);
235 return mvlowsf;
236}
237
242template<class Scalar>
243RCP<MultiVectorLinearOpWithSolveFactory<Scalar> >
245 const RCP<const LinearOpWithSolveFactoryBase<Scalar> > &lowsf,
246 const int num_blocks
247 )
248{
249 RCP< LinearOpWithSolveBase<Scalar> > op = lowsf->createOp();
250 RCP<const Thyra::DefaultMultiVectorProductVectorSpace<Scalar> > mv_domain =
251 Thyra::multiVectorProductVectorSpace(op->domain(), num_blocks);
252 RCP<const Thyra::DefaultMultiVectorProductVectorSpace<Scalar> > mv_range =
253 Thyra::multiVectorProductVectorSpace(op->range(), num_blocks);
254 return multiVectorLinearOpWithSolveFactory(lowsf, mv_range, mv_domain);
255}
256
257// Overridden from Constructors/Initializers/Accessors
258
259template<class Scalar>
260void
263 const RCP<LinearOpWithSolveFactoryBase<Scalar> > &lowsf,
264 const RCP<const DefaultMultiVectorProductVectorSpace<Scalar> > &multiVecRange,
265 const RCP<const DefaultMultiVectorProductVectorSpace<Scalar> > &multiVecDomain
266 )
267{
268#ifdef TEUCHOS_DEBUG
269 TEUCHOS_TEST_FOR_EXCEPT(is_null(lowsf));
270#endif
271 lowsf_.initialize(lowsf);
272 multiVecRange_ = multiVecRange;
273 multiVecDomain_ = multiVecDomain;
274}
275
276template<class Scalar>
277void
280 const RCP<const LinearOpWithSolveFactoryBase<Scalar> > &lowsf,
281 const RCP<const DefaultMultiVectorProductVectorSpace<Scalar> > &multiVecRange,
282 const RCP<const DefaultMultiVectorProductVectorSpace<Scalar> > &multiVecDomain
283 )
284{
285#ifdef TEUCHOS_DEBUG
286 TEUCHOS_TEST_FOR_EXCEPT(is_null(lowsf));
287#endif
288 lowsf_.initialize(lowsf);
289 multiVecRange_ = multiVecRange;
290 multiVecDomain_ = multiVecDomain;
291}
292
293template<class Scalar>
294RCP<LinearOpWithSolveFactoryBase<Scalar> >
297{
298 return lowsf_.getNonconstObj();
299}
300
301template<class Scalar>
302RCP<const LinearOpWithSolveFactoryBase<Scalar> >
304getUnderlyingLOWSF() const
305{
306 return lowsf_.getConstObj();
307}
308
309// Overridden from Teuchos::Describable
310
311template<class Scalar>
312std::string
314description() const
315{
316 std::ostringstream oss;
317 oss << this->Teuchos::Describable::description()
318 << "{"
319 << "lowsf=";
320 if (!is_null(lowsf_.getConstObj()))
321 oss << lowsf_.getConstObj()->description();
322 else
323 oss << "NULL";
324 oss << "}";
325 return oss.str();
326}
327
328// Overridden from ParameterListAcceptor
329
330template<class Scalar>
331void
334 RCP<ParameterList> const& paramList
335 )
336{
337 lowsf_.getNonconstObj()->setParameterList(paramList);
338}
339
340template<class Scalar>
341RCP<ParameterList>
344{
345 return lowsf_.getNonconstObj()->getNonconstParameterList();
346}
347
348template<class Scalar>
349RCP<ParameterList>
352{
353 return lowsf_.getNonconstObj()->unsetParameterList();
354}
355
356template<class Scalar>
357RCP<const ParameterList>
359getParameterList() const
360{
361 return lowsf_.getConstObj()->getParameterList();
362}
363
364template<class Scalar>
365RCP<const ParameterList>
367getValidParameters() const
368{
369 return lowsf_.getConstObj()->getValidParameters();
370}
371
372// Overridden from LinearOpWithSolveFactoyBase
373
374template<class Scalar>
375bool
378{
379 return lowsf_.getConstObj()->acceptsPreconditionerFactory();
380}
381
382template<class Scalar>
383void
386 const RCP<PreconditionerFactoryBase<Scalar> > &precFactory,
387 const std::string &precFactoryName
388 )
389{
390 typedef MultiVectorPreconditionerFactory<Scalar> MVPF;
391 RCP<MVPF> mvpf = Teuchos::rcp_dynamic_cast<MVPF>(precFactory);
392 lowsf_.getNonconstObj()->setPreconditionerFactory(
393 mvpf->getNonconstPreconditionerFactory(),
394 precFactoryName);
395}
396
397template<class Scalar>
398RCP<PreconditionerFactoryBase<Scalar> >
401{
402 RCP<PreconditionerFactoryBase<Scalar> > prec_fac =
403 lowsf_.getConstObj()->getPreconditionerFactory();
404 if (prec_fac == Teuchos::null)
405 return Teuchos::null;
406 else
407 return nonconstMultiVectorPreconditionerFactory(
408 prec_fac,
409 multiVecRange_, multiVecDomain_);
410}
411
412template<class Scalar>
415 RCP<PreconditionerFactoryBase<Scalar> > *precFactory,
416 std::string *precFactoryName
417 )
418{
419 RCP<PreconditionerFactoryBase<Scalar> > inner_precFactory;
420 lowsf_.getNonconstObj()->unsetPreconditionerFactory(
421 precFactory ? &inner_precFactory : NULL,
422 precFactoryName);
423 if (precFactory)
424 *precFactory = nonconstMultiVectorPreconditionerFactory(inner_precFactory,
425 multiVecRange_,
426 multiVecDomain_);
427}
428
429template<class Scalar>
430bool
433 const LinearOpSourceBase<Scalar> &fwdOpSrc
434 ) const
435{
436 typedef MultiVectorLinearOp<Scalar> MVLO;
437 RCP<const MVLO> mvlo =
438 Teuchos::rcp_dynamic_cast<const MVLO>(fwdOpSrc.getOp().assert_not_null());
439 RCP<const LinearOpSourceBase<Scalar> > inner_fwdOpSrc =
440 defaultLinearOpSource<Scalar>(mvlo->getLinearOp());
441 return lowsf_.getConstObj()->isCompatible(*inner_fwdOpSrc);
442}
443
444template<class Scalar>
445RCP<LinearOpWithSolveBase<Scalar> >
447createOp() const
448{
449 return nonconstMultiVectorLinearOpWithSolve<Scalar>(
450 lowsf_.getConstObj()->createOp(),
451 multiVecRange_,
452 multiVecDomain_);
453}
454
455template<class Scalar>
456void
459 const RCP<const LinearOpSourceBase<Scalar> > &fwdOpSrc,
460 LinearOpWithSolveBase<Scalar> *Op,
461 const ESupportSolveUse supportSolveUse
462 ) const
463{
464 using Teuchos::dyn_cast;
465 using Teuchos::rcp_dynamic_cast;
466
467#ifdef TEUCHOS_DEBUG
468 TEUCHOS_TEST_FOR_EXCEPT(0==Op);
469#endif
470
471 // Set the verbosity settings for the wrapped LOWSF object!
472 lowsf_.getConstObj()->setOStream(this->getOStream());
473 lowsf_.getConstObj()->setVerbLevel(this->getVerbLevel());
474
475 typedef MultiVectorLinearOp<Scalar> MVLO;
476 typedef DefaultMultiVectorLinearOpWithSolve<Scalar> MVLOWS;
477 const RCP<const MVLO> mvlo =
478 rcp_dynamic_cast<const MVLO>(fwdOpSrc->getOp().assert_not_null());
479 MVLOWS &mvlows = dyn_cast<MVLOWS>(*Op);
480
481 lowsf_.getConstObj()->initializeOp(
482 defaultLinearOpSource<Scalar>(mvlo->getLinearOp()),
483 mvlows.getNonconstLinearOpWithSolve().get(),
484 supportSolveUse);
485}
486
487template<class Scalar>
488void
491 const RCP<const LinearOpSourceBase<Scalar> > &fwdOpSrc,
492 LinearOpWithSolveBase<Scalar> *Op
493 ) const
494{
495 using Teuchos::dyn_cast;
496 using Teuchos::rcp_dynamic_cast;
497
498#ifdef TEUCHOS_DEBUG
499 TEUCHOS_TEST_FOR_EXCEPT(0==Op);
500#endif
501
502 // Set the verbosity settings for the wrapped LOWSF object!
503 lowsf_.getConstObj()->setOStream(this->getOStream());
504 lowsf_.getConstObj()->setVerbLevel(this->getVerbLevel());
505
506 typedef MultiVectorLinearOp<Scalar> MVLO;
507 typedef DefaultMultiVectorLinearOpWithSolve<Scalar> MVLOWS;
508 const RCP<const MVLO> mvlo =
509 rcp_dynamic_cast<const MVLO>(fwdOpSrc->getOp().assert_not_null());
510 MVLOWS &mvlows = dyn_cast<MVLOWS>(*Op);
511
512 lowsf_.getConstObj()->initializeAndReuseOp(
513 defaultLinearOpSource<Scalar>(mvlo->getLinearOp()),
514 mvlows.getNonconstLinearOpWithSolve().get());
515}
516
517template<class Scalar>
518void
521 LinearOpWithSolveBase<Scalar> *Op,
522 RCP<const LinearOpSourceBase<Scalar> > *fwdOpSrc,
523 RCP<const PreconditionerBase<Scalar> > *prec,
524 RCP<const LinearOpSourceBase<Scalar> > *approxFwdOpSrc,
525 ESupportSolveUse *supportSolveUse
526 ) const
527{
528 using Teuchos::dyn_cast;
529
530#ifdef TEUCHOS_DEBUG
531 TEUCHOS_TEST_FOR_EXCEPT(0==Op);
532#endif
533 typedef DefaultMultiVectorLinearOpWithSolve<Scalar> MVLOWS;
534 MVLOWS &mvlowsOp = dyn_cast<MVLOWS>(*Op);
535 RCP<const LinearOpSourceBase<Scalar> > inner_fwdOpSrc;
536 RCP<const PreconditionerBase<Scalar> > inner_prec;
537 RCP<const LinearOpSourceBase<Scalar> > inner_approxFwdOpSrc;
538 lowsf_.getConstObj()->uninitializeOp(
539 mvlowsOp.getNonconstLinearOpWithSolve().get(),
540 fwdOpSrc ? &inner_fwdOpSrc : NULL,
541 prec ? &inner_prec : NULL,
542 approxFwdOpSrc ? &inner_approxFwdOpSrc : NULL,
543 supportSolveUse);
544 if (fwdOpSrc)
545 *fwdOpSrc =
546 defaultLinearOpSource<Scalar>(multiVectorLinearOp(inner_fwdOpSrc->getOp(),
547 multiVecRange_,
548 multiVecDomain_));
549 if (prec)
550 *prec = multiVectorPreconditioner(inner_prec,
551 multiVecRange_,
552 multiVecDomain_);
553 if (fwdOpSrc)
554 *approxFwdOpSrc =
555 defaultLinearOpSource<Scalar>(multiVectorLinearOp(inner_approxFwdOpSrc->getOp(),
556 multiVecRange_,
557 multiVecDomain_));
558}
559
560template<class Scalar>
561bool
564 const EPreconditionerInputType precOpType
565 ) const
566{
567 return lowsf_.getConstObj()->supportsPreconditionerInputType(precOpType);
568}
569
570template<class Scalar>
571void
574 const RCP<const LinearOpSourceBase<Scalar> > &fwdOpSrc,
575 const RCP<const PreconditionerBase<Scalar> > &prec,
576 LinearOpWithSolveBase<Scalar> *Op,
577 const ESupportSolveUse supportSolveUse
578 ) const
579{
580 using Teuchos::dyn_cast;
581 using Teuchos::rcp_dynamic_cast;
582
583#ifdef TEUCHOS_DEBUG
584 TEUCHOS_TEST_FOR_EXCEPT(0==Op);
585#endif
586
587 // Set the verbosity settings for the wrapped LOWSF object!
588 lowsf_.getConstObj()->setOStream(this->getOStream());
589 lowsf_.getConstObj()->setVerbLevel(this->getVerbLevel());
590
591 typedef MultiVectorLinearOp<Scalar> MVLO;
592 typedef MultiVectorPreconditioner<Scalar> MVP;
593 typedef DefaultMultiVectorLinearOpWithSolve<Scalar> MVLOWS;
594 const RCP<const MVLO> mvlo =
595 rcp_dynamic_cast<const MVLO>(fwdOpSrc->getOp().assert_not_null());
596 const RCP<const MVP> mvp = rcp_dynamic_cast<const MVP>(prec);
597 MVLOWS &mvlows = dyn_cast<MVLOWS>(*Op);
598
599 lowsf_.getConstObj()->initializePreconditionedOp(
600 defaultLinearOpSource<Scalar>(mvlo->getLinearOp()),
601 mvp->getPreconditioner(),
602 mvlows.getNonconstLinearOpWithSolve().get(),
603 supportSolveUse);
604}
605
606template<class Scalar>
607void
610 const RCP<const LinearOpSourceBase<Scalar> > &fwdOpSrc,
611 const RCP<const LinearOpSourceBase<Scalar> > &approxFwdOpSrc,
612 LinearOpWithSolveBase<Scalar> *Op,
613 const ESupportSolveUse supportSolveUse
614 ) const
615{
616 using Teuchos::dyn_cast;
617 using Teuchos::rcp_dynamic_cast;
618
619#ifdef TEUCHOS_DEBUG
620 TEUCHOS_TEST_FOR_EXCEPT(0==Op);
621#endif
622
623 // Set the verbosity settings for the wrapped LOWSF object!
624 lowsf_.getConstObj()->setOStream(this->getOStream());
625 lowsf_.getConstObj()->setVerbLevel(this->getVerbLevel());
626
627 typedef MultiVectorLinearOp<Scalar> MVLO;
628 typedef DefaultMultiVectorLinearOpWithSolve<Scalar> MVLOWS;
629 const RCP<const MVLO> mvlo =
630 rcp_dynamic_cast<const MVLO>(fwdOpSrc->getOp().assert_not_null());
631 const RCP<const MVLO> amvlo =
632 rcp_dynamic_cast<const MVLO>(approxFwdOpSrc->getOp().assert_not_null());
633 MVLOWS &mvlows = dyn_cast<MVLOWS>(*Op);
634
635 lowsf_.getConstObj()->initializeApproxPreconditionedOp(
636 defaultLinearOpSource<Scalar>(mvlo->getLinearOp()),
637 defaultLinearOpSource<Scalar>(amvlo->getLinearOp()),
638 mvlows.getNonconstLinearOpWithSolve().get(),
639 supportSolveUse);
640}
641
642// protected
643
644template<class Scalar>
645void
648{
649 lowsf_.getConstObj()->setVerbLevel(this->getVerbLevel());
650 lowsf_.getConstObj()->setOStream(this->getOStream());
651}
652
653} // namespace Thyra
654
655#endif
Create a LinearOpWithSolveFactory for a flattened-out multi-vector.
void informUpdatedVerbosityState() const
Overridden from Teuchos::VerboseObjectBase.
RCP< MultiVectorLinearOpWithSolveFactory< Scalar > > nonconstMultiVectorLinearOpWithSolveFactory(const RCP< LinearOpWithSolveFactoryBase< Scalar > > &lowsf, const int num_blocks)
Nonmember constructor.
RCP< MultiVectorLinearOpWithSolveFactory< Scalar > > multiVectorLinearOpWithSolveFactory(const RCP< const LinearOpWithSolveFactoryBase< Scalar > > &lowsf, const int num_blocks)
Nonmember constructor.
virtual void initializeOp(const RCP< const LinearOpSourceBase< Scalar > > &fwdOpSrc, LinearOpWithSolveBase< Scalar > *Op, const ESupportSolveUse supportSolveUse) const
virtual void unsetPreconditionerFactory(RCP< PreconditionerFactoryBase< Scalar > > *precFactory, std::string *precFactoryName)
Throws exception.
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.
RCP< LinearOpWithSolveFactoryBase< Scalar > > getUnderlyingLOWSF()
RCP< const DefaultMultiVectorProductVectorSpace< Scalar > > multiVecDomain_
virtual void initializeAndReuseOp(const RCP< const LinearOpSourceBase< Scalar > > &fwdOpSrc, LinearOpWithSolveBase< Scalar > *Op) const
virtual bool supportsPreconditionerInputType(const EPreconditionerInputType precOpType) const
RCP< MultiVectorLinearOpWithSolveFactory< Scalar > > nonconstMultiVectorLinearOpWithSolveFactory(const RCP< LinearOpWithSolveFactoryBase< Scalar > > &lowsf, const RCP< const DefaultMultiVectorProductVectorSpace< Scalar > > &multiVecRange, const RCP< const DefaultMultiVectorProductVectorSpace< Scalar > > &multiVecDomain)
Nonmember constructor.
RCP< const DefaultMultiVectorProductVectorSpace< Scalar > > multiVecRange_
Teuchos::ConstNonconstObjectContainer< LinearOpWithSolveFactoryBase< Scalar > > LOWSF_t
virtual RCP< LinearOpWithSolveBase< Scalar > > createOp() const
virtual void initializeApproxPreconditionedOp(const RCP< const LinearOpSourceBase< Scalar > > &fwdOpSrc, const RCP< const LinearOpSourceBase< Scalar > > &approxFwdOpSrc, LinearOpWithSolveBase< Scalar > *Op, const ESupportSolveUse supportSolveUse) const
virtual RCP< PreconditionerFactoryBase< Scalar > > getPreconditionerFactory() const
Returns null .
virtual void uninitializeOp(LinearOpWithSolveBase< Scalar > *Op, RCP< const LinearOpSourceBase< Scalar > > *fwdOpSrc, RCP< const PreconditionerBase< Scalar > > *prec, RCP< const LinearOpSourceBase< Scalar > > *approxFwdOpSrc, ESupportSolveUse *supportSolveUse) const
virtual bool isCompatible(const LinearOpSourceBase< Scalar > &fwdOpSrc) 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.
virtual void initializePreconditionedOp(const RCP< const LinearOpSourceBase< Scalar > > &fwdOpSrc, const RCP< const PreconditionerBase< Scalar > > &prec, LinearOpWithSolveBase< Scalar > *Op, const ESupportSolveUse supportSolveUse) const
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 void setPreconditionerFactory(const RCP< PreconditionerFactoryBase< Scalar > > &precFactory, const std::string &precFactoryName)
Throws exception.