Stratimikos Version of the Day
Loading...
Searching...
No Matches
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 SOLVER_TYPE_TPETRA_GMRES,
69 SOLVER_TYPE_TPETRA_GMRES_PIPELINE,
70 SOLVER_TYPE_TPETRA_GMRES_SINGLE_REDUCE,
71 SOLVER_TYPE_TPETRA_GMRES_SSTEP
72 };
73
74 inline std::istream& operator>>(
75 std::istream& is, EBelosSolverType& sType)
76 {
77 int intval;
78 is >> intval;
79 sType = (EBelosSolverType)intval;
80 return is;
81 }
82
83
91template<class Scalar>
92class BelosLinearOpWithSolveFactory : public LinearOpWithSolveFactoryBase<Scalar> {
93public:
94
99 typedef typename Teuchos::ScalarTraits<Scalar>::magnitudeType MagnitudeType;
100
102
105
107 static const std::string SolverType_name;
109 static const std::string SolverType_default;
111 static const std::string SolverTypes_name;
113 static const std::string BlockGMRES_name;
115 static const std::string PseudoBlockGMRES_name;
117 static const std::string BlockCG_name;
119 static const std::string PseudoBlockCG_name;
121 static const std::string PseudoBlockStochasticCG_name;
123 static const std::string GCRODR_name;
125 static const std::string RCG_name;
127 static const std::string MINRES_name;
129 static const std::string TFQMR_name;
131 static const std::string BiCGStab_name;
133 static const std::string FixedPoint_name;
135 static const std::string TpetraGmres_name;
137 static const std::string TpetraGmresPipeline_name;
139 static const std::string TpetraGmresSingleReduce_name;
141 static const std::string TpetraGmresSstep_name;
143 static const std::string ConvergenceTestFrequency_name;
144
146
149
152
155 const Teuchos::RCP<PreconditionerFactoryBase<Scalar> > &precFactory
156 );
157
159
163 bool acceptsPreconditionerFactory() const;
166 const Teuchos::RCP<PreconditionerFactoryBase<Scalar> > &precFactory
167 ,const std::string &precFactoryName
168 );
170 Teuchos::RCP<PreconditionerFactoryBase<Scalar> > getPreconditionerFactory() const;
173 Teuchos::RCP<PreconditionerFactoryBase<Scalar> > *precFactory
174 ,std::string *precFactoryName
175 );
177 bool isCompatible( const LinearOpSourceBase<Scalar> &fwdOpSrc ) const;
179 Teuchos::RCP<LinearOpWithSolveBase<Scalar> > createOp() const;
181 void initializeOp(
182 const Teuchos::RCP<const LinearOpSourceBase<Scalar> > &fwdOpSrc
183 ,LinearOpWithSolveBase<Scalar> *Op
184 ,const ESupportSolveUse supportSolveUse
185 ) const;
188 const Teuchos::RCP<const LinearOpSourceBase<Scalar> > &fwdOpSrc
189 ,LinearOpWithSolveBase<Scalar> *Op
190 ) const;
192 void uninitializeOp(
193 LinearOpWithSolveBase<Scalar> *Op
194 ,Teuchos::RCP<const LinearOpSourceBase<Scalar> > *fwdOpSrc
195 ,Teuchos::RCP<const PreconditionerBase<Scalar> > *prec
196 ,Teuchos::RCP<const LinearOpSourceBase<Scalar> > *approxFwdOpSrc
197 ,ESupportSolveUse *supportSolveUse
198 ) const;
200 bool supportsPreconditionerInputType(const EPreconditionerInputType precOpType) const;
203 const Teuchos::RCP<const LinearOpSourceBase<Scalar> > &fwdOpSrc
204 ,const Teuchos::RCP<const PreconditionerBase<Scalar> > &prec
205 ,LinearOpWithSolveBase<Scalar> *Op
206 ,const ESupportSolveUse supportSolveUse
207 ) const;
210 const Teuchos::RCP<const LinearOpSourceBase<Scalar> > &fwdOpSrc
211 ,const Teuchos::RCP<const LinearOpSourceBase<Scalar> > &approxFwdOpSrc
212 ,LinearOpWithSolveBase<Scalar> *Op
213 ,const ESupportSolveUse supportSolveUse
214 ) const;
216
219
221 void setParameterList(Teuchos::RCP<Teuchos::ParameterList> const& paramList);
223 Teuchos::RCP<Teuchos::ParameterList> getNonconstParameterList();
225 Teuchos::RCP<Teuchos::ParameterList> unsetParameterList();
227 Teuchos::RCP<const Teuchos::ParameterList> getParameterList() const;
229 Teuchos::RCP<const Teuchos::ParameterList> getValidParameters() const;
230
232
235
237 std::string description() const;
238
240
241private:
242
243 // /////////////////////////
244 // Private types
245
246
247 // /////////////////////////
248 // Private data members
249
250 Teuchos::RCP<PreconditionerFactoryBase<Scalar> > precFactory_;
251 std::string precFactoryName_;
252 Teuchos::RCP<Teuchos::ParameterList> thisValidParamList_;
253 Teuchos::RCP<Teuchos::ParameterList> paramList_;
254 EBelosSolverType solverType_;
255 int convergenceTestFrequency_;
256
257 // /////////////////////////
258 // Private member functions
259
260 static Teuchos::RCP<const Teuchos::ParameterList> generateAndGetValidParameters();
261
262 void updateThisValidParamList();
263
264 void initializeOpImpl(
265 const Teuchos::RCP<const LinearOpSourceBase<Scalar> > &fwdOpSrc
266 ,const Teuchos::RCP<const LinearOpSourceBase<Scalar> > &approxFwdOpSrc
267 ,const Teuchos::RCP<const PreconditionerBase<Scalar> > &prec
268 ,const bool reusePrec
269 ,LinearOpWithSolveBase<Scalar> *Op
270 ,const ESupportSolveUse supportSolveUse
271 ) const;
272
273};
274
276
277} // namespace Thyra
278
279#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 for Stratimikos by doxygen 1.9.6