Stratimikos Version of the Day
Thyra_BelosLinearOpWithSolveFactory_decl.hpp
1/*
2// @HEADER
3// ***********************************************************************
4//
5// Stratimikos: Thyra-based strategies for linear solvers
6// Copyright (2006) Sandia Corporation
7//
8// Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
9// license for use of this work by or on behalf of the U.S. Government.
10//
11// Redistribution and use in source and binary forms, with or without
12// modification, are permitted provided that the following conditions are
13// met:
14//
15// 1. Redistributions of source code must retain the above copyright
16// notice, this list of conditions and the following disclaimer.
17//
18// 2. Redistributions in binary form must reproduce the above copyright
19// notice, this list of conditions and the following disclaimer in the
20// documentation and/or other materials provided with the distribution.
21//
22// 3. Neither the name of the Corporation nor the names of the
23// contributors may be used to endorse or promote products derived from
24// this software without specific prior written permission.
25//
26// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
27// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
29// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
30// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
31// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
32// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
33// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
34// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
35// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
36// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37//
38// Questions? Contact Roscoe A. Bartlett (rabartl@sandia.gov)
39//
40// ***********************************************************************
41// @HEADER
42*/
43
44
45#ifndef THYRA_BELOS_LINEAR_OP_WITH_SOLVE_FACTORY_DECL_HPP
46#define THYRA_BELOS_LINEAR_OP_WITH_SOLVE_FACTORY_DECL_HPP
47
48#include "Thyra_LinearOpWithSolveFactoryBase.hpp"
49#include "Teuchos_StandardMemberCompositionMacros.hpp"
50#include "Teuchos_StandardCompositionMacros.hpp"
51
52namespace Teuchos { class ParameterList; }
53
54namespace Thyra {
55
56 enum EBelosSolverType {
57 SOLVER_TYPE_BLOCK_GMRES,
58 SOLVER_TYPE_PSEUDO_BLOCK_GMRES,
59 SOLVER_TYPE_BLOCK_CG,
60 SOLVER_TYPE_PSEUDO_BLOCK_CG,
61 SOLVER_TYPE_PSEUDO_BLOCK_STOCHASTIC_CG,
62 SOLVER_TYPE_GCRODR,
63 SOLVER_TYPE_RCG,
64 SOLVER_TYPE_MINRES,
65 SOLVER_TYPE_TFQMR,
66 SOLVER_TYPE_BICGSTAB,
67 SOLVER_TYPE_FIXEDPOINT
68 };
69
70 inline std::istream& operator>>(
71 std::istream& is, EBelosSolverType& sType)
72 {
73 int intval;
74 is >> intval;
75 sType = (EBelosSolverType)intval;
76 return is;
77 }
78
79
87template<class Scalar>
88class BelosLinearOpWithSolveFactory : public LinearOpWithSolveFactoryBase<Scalar> {
89public:
90
95 typedef typename Teuchos::ScalarTraits<Scalar>::magnitudeType MagnitudeType;
96
98
101
103 static const std::string SolverType_name;
105 static const std::string SolverType_default;
107 static const std::string SolverTypes_name;
109 static const std::string BlockGMRES_name;
111 static const std::string PseudoBlockGMRES_name;
113 static const std::string BlockCG_name;
115 static const std::string PseudoBlockCG_name;
117 static const std::string PseudoBlockStochasticCG_name;
119 static const std::string GCRODR_name;
121 static const std::string RCG_name;
123 static const std::string MINRES_name;
125 static const std::string TFQMR_name;
127 static const std::string BiCGStab_name;
129 static const std::string FixedPoint_name;
131 static const std::string ConvergenceTestFrequency_name;
132
134
137
140
143 const Teuchos::RCP<PreconditionerFactoryBase<Scalar> > &precFactory
144 );
145
147
151 bool acceptsPreconditionerFactory() const;
154 const Teuchos::RCP<PreconditionerFactoryBase<Scalar> > &precFactory
155 ,const std::string &precFactoryName
156 );
158 Teuchos::RCP<PreconditionerFactoryBase<Scalar> > getPreconditionerFactory() const;
161 Teuchos::RCP<PreconditionerFactoryBase<Scalar> > *precFactory
162 ,std::string *precFactoryName
163 );
165 bool isCompatible( const LinearOpSourceBase<Scalar> &fwdOpSrc ) const;
167 Teuchos::RCP<LinearOpWithSolveBase<Scalar> > createOp() const;
169 void initializeOp(
170 const Teuchos::RCP<const LinearOpSourceBase<Scalar> > &fwdOpSrc
171 ,LinearOpWithSolveBase<Scalar> *Op
172 ,const ESupportSolveUse supportSolveUse
173 ) const;
176 const Teuchos::RCP<const LinearOpSourceBase<Scalar> > &fwdOpSrc
177 ,LinearOpWithSolveBase<Scalar> *Op
178 ) const;
180 void uninitializeOp(
181 LinearOpWithSolveBase<Scalar> *Op
182 ,Teuchos::RCP<const LinearOpSourceBase<Scalar> > *fwdOpSrc
183 ,Teuchos::RCP<const PreconditionerBase<Scalar> > *prec
184 ,Teuchos::RCP<const LinearOpSourceBase<Scalar> > *approxFwdOpSrc
185 ,ESupportSolveUse *supportSolveUse
186 ) const;
188 bool supportsPreconditionerInputType(const EPreconditionerInputType precOpType) const;
191 const Teuchos::RCP<const LinearOpSourceBase<Scalar> > &fwdOpSrc
192 ,const Teuchos::RCP<const PreconditionerBase<Scalar> > &prec
193 ,LinearOpWithSolveBase<Scalar> *Op
194 ,const ESupportSolveUse supportSolveUse
195 ) const;
198 const Teuchos::RCP<const LinearOpSourceBase<Scalar> > &fwdOpSrc
199 ,const Teuchos::RCP<const LinearOpSourceBase<Scalar> > &approxFwdOpSrc
200 ,LinearOpWithSolveBase<Scalar> *Op
201 ,const ESupportSolveUse supportSolveUse
202 ) const;
204
207
209 void setParameterList(Teuchos::RCP<Teuchos::ParameterList> const& paramList);
211 Teuchos::RCP<Teuchos::ParameterList> getNonconstParameterList();
213 Teuchos::RCP<Teuchos::ParameterList> unsetParameterList();
215 Teuchos::RCP<const Teuchos::ParameterList> getParameterList() const;
217 Teuchos::RCP<const Teuchos::ParameterList> getValidParameters() const;
218
220
223
225 std::string description() const;
226
228
229private:
230
231 // /////////////////////////
232 // Private types
233
234
235 // /////////////////////////
236 // Private data members
237
238 Teuchos::RCP<PreconditionerFactoryBase<Scalar> > precFactory_;
239 std::string precFactoryName_;
240 Teuchos::RCP<Teuchos::ParameterList> thisValidParamList_;
241 Teuchos::RCP<Teuchos::ParameterList> paramList_;
242 EBelosSolverType solverType_;
243 int convergenceTestFrequency_;
244
245 // /////////////////////////
246 // Private member functions
247
248 static Teuchos::RCP<const Teuchos::ParameterList> generateAndGetValidParameters();
249
250 void updateThisValidParamList();
251
252 void initializeOpImpl(
253 const Teuchos::RCP<const LinearOpSourceBase<Scalar> > &fwdOpSrc
254 ,const Teuchos::RCP<const LinearOpSourceBase<Scalar> > &approxFwdOpSrc
255 ,const Teuchos::RCP<const PreconditionerBase<Scalar> > &prec
256 ,const bool reusePrec
257 ,LinearOpWithSolveBase<Scalar> *Op
258 ,const ESupportSolveUse supportSolveUse
259 ) const;
260
261};
262
264
265} // namespace Thyra
266
267#endif // THYRA_BELOS_LINEAR_OP_WITH_SOLVE_FACTORY_DECL_HPP
LinearOpWithSolveFactoryBase subclass implemented in terms of Belos.
void unsetPreconditionerFactory(Teuchos::RCP< PreconditionerFactoryBase< Scalar > > *precFactory, std::string *precFactoryName)
bool supportsPreconditionerInputType(const EPreconditionerInputType precOpType) const
bool isCompatible(const LinearOpSourceBase< Scalar > &fwdOpSrc) const
void setParameterList(Teuchos::RCP< Teuchos::ParameterList > const &paramList)
Teuchos::ScalarTraits< Scalar >::magnitudeType MagnitudeType
void initializePreconditionedOp(const Teuchos::RCP< const LinearOpSourceBase< Scalar > > &fwdOpSrc, const Teuchos::RCP< const PreconditionerBase< Scalar > > &prec, LinearOpWithSolveBase< Scalar > *Op, const ESupportSolveUse supportSolveUse) const
void setPreconditionerFactory(const Teuchos::RCP< PreconditionerFactoryBase< Scalar > > &precFactory, const std::string &precFactoryName)
void initializeAndReuseOp(const Teuchos::RCP< const LinearOpSourceBase< Scalar > > &fwdOpSrc, LinearOpWithSolveBase< Scalar > *Op) const
Teuchos::RCP< const Teuchos::ParameterList > getParameterList() const
BelosLinearOpWithSolveFactory(const Teuchos::RCP< PreconditionerFactoryBase< Scalar > > &precFactory)
Calls this->setPreconditionerFactory(precFactory)</tt. .
void initializeOp(const Teuchos::RCP< const LinearOpSourceBase< Scalar > > &fwdOpSrc, LinearOpWithSolveBase< Scalar > *Op, const ESupportSolveUse supportSolveUse) const
Teuchos::RCP< Teuchos::ParameterList > getNonconstParameterList()
void uninitializeOp(LinearOpWithSolveBase< Scalar > *Op, Teuchos::RCP< const LinearOpSourceBase< Scalar > > *fwdOpSrc, Teuchos::RCP< const PreconditionerBase< Scalar > > *prec, Teuchos::RCP< const LinearOpSourceBase< Scalar > > *approxFwdOpSrc, ESupportSolveUse *supportSolveUse) const
Teuchos::RCP< const Teuchos::ParameterList > getValidParameters() const
BelosLinearOpWithSolveFactory()
Construct without preconditioner factory.
void initializeApproxPreconditionedOp(const Teuchos::RCP< const LinearOpSourceBase< Scalar > > &fwdOpSrc, const Teuchos::RCP< const LinearOpSourceBase< Scalar > > &approxFwdOpSrc, LinearOpWithSolveBase< Scalar > *Op, const ESupportSolveUse supportSolveUse) const
Teuchos::RCP< LinearOpWithSolveBase< Scalar > > createOp() const
Teuchos::RCP< Teuchos::ParameterList > unsetParameterList()
Teuchos::RCP< PreconditionerFactoryBase< Scalar > > getPreconditionerFactory() const

Generated on Fri Mar 10 2023 07:13:22 for Stratimikos by doxygen 1.9.4