Thyra
Version of the Day
Toggle main menu visibility
Loading...
Searching...
No Matches
core
src
support
operator_solve
client_support
Thyra_PreconditionerFactoryHelpers.hpp
1
// @HEADER
2
// ***********************************************************************
3
//
4
// Thyra: Interfaces and Support for Abstract Numerical Algorithms
5
// Copyright (2004) Sandia Corporation
6
//
7
// Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
8
// license for use of this work by or on behalf of the U.S. Government.
9
//
10
// Redistribution and use in source and binary forms, with or without
11
// modification, are permitted provided that the following conditions are
12
// met:
13
//
14
// 1. Redistributions of source code must retain the above copyright
15
// notice, this list of conditions and the following disclaimer.
16
//
17
// 2. Redistributions in binary form must reproduce the above copyright
18
// notice, this list of conditions and the following disclaimer in the
19
// documentation and/or other materials provided with the distribution.
20
//
21
// 3. Neither the name of the Corporation nor the names of the
22
// contributors may be used to endorse or promote products derived from
23
// this software without specific prior written permission.
24
//
25
// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
26
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
28
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
29
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
30
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
31
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
32
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
33
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
34
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
35
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
//
37
// Questions? Contact Roscoe A. Bartlett (bartlettra@ornl.gov)
38
//
39
// ***********************************************************************
40
// @HEADER
41
42
#ifndef THYRA_PRECONDITIONER_FACTORY_HELPERS_DECL_HPP
43
#define THYRA_PRECONDITIONER_FACTORY_HELPERS_DECL_HPP
44
45
46
#include "Thyra_PreconditionerFactoryBase.hpp"
47
#include "Thyra_DefaultLinearOpSource.hpp"
48
#include "Thyra_DefaultPreconditioner.hpp"
49
50
51
namespace
Thyra {
52
53
58
template
<
class
Scalar>
59
void
initializePrec
(
60
const
PreconditionerFactoryBase<Scalar>
&precFactory,
61
const
Teuchos::RCP
<
const
LinearOpBase<Scalar>
> &fwdOp,
62
const
Teuchos::Ptr
<
PreconditionerBase<Scalar>
> &
prec
,
63
const
ESupportSolveUse
supportSolveUse =
SUPPORT_SOLVE_UNSPECIFIED
64
)
65
{
66
precFactory.
initializePrec
(
defaultLinearOpSource
(fwdOp),
prec
.get(),
67
supportSolveUse);
68
}
69
70
76
template
<
class
Scalar>
77
void
uninitializePrec
(
78
const
PreconditionerFactoryBase<Scalar>
&precFactory,
79
const
Teuchos::Ptr
<
PreconditionerBase<Scalar>
> &
prec
,
80
const
Teuchos::Ptr
<
Teuchos::RCP
<
const
LinearOpBase<Scalar>
> > &fwdOp = Teuchos::null,
81
const
Teuchos::Ptr<ESupportSolveUse>
&supportSolveUse = Teuchos::null
82
)
83
{
84
Teuchos::RCP<const LinearOpSourceBase<Scalar>
> fwdOpSrc;
85
precFactory.
uninitializePrec
(
prec
, Teuchos::outArg(fwdOpSrc), supportSolveUse);
86
if
(nonnull(fwdOp)) {*fwdOp = fwdOpSrc->getOp();}
87
}
88
89
94
template
<
class
Scalar>
95
Teuchos::RCP<PreconditionerBase<Scalar>
>
96
prec
(
97
const
PreconditionerFactoryBase<Scalar>
&precFactory,
98
const
Teuchos::RCP
<
const
LinearOpBase<Scalar>
> &fwdOp,
99
const
ESupportSolveUse
supportSolveUse =
SUPPORT_SOLVE_UNSPECIFIED
100
)
101
{
102
Teuchos::RCP<PreconditionerBase<Scalar>
>
prec
=
103
precFactory.
createPrec
();
104
precFactory.
initializePrec
(
defaultLinearOpSource
(fwdOp), &*
prec
, supportSolveUse);
105
return
prec
;
106
}
107
108
109
}
// namespace Thyra
110
111
112
#endif
// THYRA_PRECONDITIONER_FACTORY_HELPERS_DECL_HPP
Teuchos::Ptr
Teuchos::RCP
Thyra::DefaultLinearOpSource::defaultLinearOpSource
Teuchos::RCP< const DefaultLinearOpSource< Scalar > > defaultLinearOpSource(const Teuchos::RCP< const LinearOpBase< Scalar > > &op)
Create a DefaultLinearOpSource object out of a LinearOpBase object.
Definition
Thyra_DefaultLinearOpSource_decl.hpp:127
Thyra::LinearOpBase
Base class for all linear operators.
Definition
Thyra_LinearOpBase_decl.hpp:191
Thyra::PreconditionerBase
Simple interface class to access a precreated preconditioner as one or more linear operators objects ...
Definition
Thyra_PreconditionerBase.hpp:90
Thyra::PreconditionerFactoryBase
Factory interface for creating preconditioner objects from LinearOpBase objects.
Definition
Thyra_PreconditionerFactoryBase_decl.hpp:67
Thyra::PreconditionerFactoryBase::uninitializePrec
virtual void uninitializePrec(PreconditionerBase< Scalar > *prec, RCP< const LinearOpSourceBase< Scalar > > *fwdOpSrc=NULL, ESupportSolveUse *supportSolveUse=NULL) const =0
Uninitialize a LinearOpBase preconditioner object and return its remembered forward linear operator.
Thyra::PreconditionerFactoryBase::uninitializePrec
void uninitializePrec(const PreconditionerFactoryBase< Scalar > &precFactory, const Teuchos::Ptr< PreconditionerBase< Scalar > > &prec, const Teuchos::Ptr< Teuchos::RCP< const LinearOpBase< Scalar > > > &fwdOp=Teuchos::null, const Teuchos::Ptr< ESupportSolveUse > &supportSolveUse=Teuchos::null)
Uninitialize a preconditioner and optionally extra what was used to create it.
Definition
Thyra_PreconditionerFactoryHelpers.hpp:77
Thyra::PreconditionerFactoryBase::prec
Teuchos::RCP< PreconditionerBase< Scalar > > prec(const PreconditionerFactoryBase< Scalar > &precFactory, const Teuchos::RCP< const LinearOpBase< Scalar > > &fwdOp, const ESupportSolveUse supportSolveUse=SUPPORT_SOLVE_UNSPECIFIED)
Create and initialize a preconditioner from a forward linear operator.
Definition
Thyra_PreconditionerFactoryHelpers.hpp:96
Thyra::PreconditionerFactoryBase::initializePrec
void initializePrec(const PreconditionerFactoryBase< Scalar > &precFactory, const Teuchos::RCP< const LinearOpBase< Scalar > > &fwdOp, const Teuchos::Ptr< PreconditionerBase< Scalar > > &prec, const ESupportSolveUse supportSolveUse=SUPPORT_SOLVE_UNSPECIFIED)
Initialize a preconditioner from a forward linear operator.
Definition
Thyra_PreconditionerFactoryHelpers.hpp:59
Thyra::PreconditionerFactoryBase::initializePrec
virtual void initializePrec(const RCP< const LinearOpSourceBase< Scalar > > &fwdOpSrc, PreconditionerBase< Scalar > *precOp, const ESupportSolveUse supportSolveUse=SUPPORT_SOLVE_UNSPECIFIED) const =0
Initialize a pre-created LinearOpBase preconditioner object given a "compatible" LinearOpBase object.
Thyra::PreconditionerFactoryBase::createPrec
virtual RCP< PreconditionerBase< Scalar > > createPrec() const =0
Create an (uninitialized) LinearOpBase object to be initialized as the preconditioner later in this->...
Thyra::ESupportSolveUse
ESupportSolveUse
Enum that specifies how a LinearOpWithSolveBase object will be used for solves after it is constructe...
Definition
Thyra_SolveSupportTypes.hpp:489
Thyra::SUPPORT_SOLVE_UNSPECIFIED
@ SUPPORT_SOLVE_UNSPECIFIED
How the output LOWSB object will be useded for solves in unspecified.
Definition
Thyra_SolveSupportTypes.hpp:490
Generated by
1.17.0