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 
52 namespace Teuchos { class ParameterList; }
53 
54 namespace 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 
87 template<class Scalar>
88 class BelosLinearOpWithSolveFactory : public LinearOpWithSolveFactoryBase<Scalar> {
89 public:
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 
229 private:
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 Wed Mar 9 2022 04:36:09 for Stratimikos by doxygen 1.9.1