Stratimikos Version of the Day
Loading...
Searching...
No Matches
Thyra_BelosLinearOpWithSolve_decl.hpp
1// @HEADER
2// *****************************************************************************
3// Stratimikos: Thyra-based strategies for linear solvers
4//
5// Copyright 2006 NTESS and the Stratimikos contributors.
6// SPDX-License-Identifier: BSD-3-Clause
7// *****************************************************************************
8// @HEADER
9
10#ifndef THYRA_BELOS_LINEAR_OP_WITH_SOLVE_DECL_HPP
11#define THYRA_BELOS_LINEAR_OP_WITH_SOLVE_DECL_HPP
12
13#include "Thyra_LinearOpWithSolveBase.hpp"
14#include "Thyra_LinearOpSourceBase.hpp"
16#include "BelosThyraAdapter.hpp"
17#include "Teuchos_StandardMemberCompositionMacros.hpp"
18
19
20namespace Thyra {
21
22
30template<class Scalar>
31class BelosLinearOpWithSolve : virtual public LinearOpWithSolveBase<Scalar>
32{
33public:
34
37
39 typedef MultiVectorBase<Scalar> MV_t;
41 typedef LinearOpBase<Scalar> LO_t;
42
44
47
50
90 void initialize(
92 const RCP<Teuchos::ParameterList> &solverPL,
93 const RCP<Belos::SolverManager<Scalar,MV_t,LO_t> > &iterativeSolver,
94 const RCP<const LinearOpSourceBase<Scalar> > &fwdOpSrc,
95 const RCP<const PreconditionerBase<Scalar> > &prec,
96 const bool isExternalPrec,
97 const RCP<const LinearOpSourceBase<Scalar> > &approxFwdOpSrc,
98 const ESupportSolveUse &supportSolveUse,
99 const int convergenceTestFrequency
100 );
101
103 RCP<const LinearOpSourceBase<Scalar> > extract_fwdOpSrc();
104
106 RCP<const PreconditionerBase<Scalar> > extract_prec();
107
109 bool isExternalPrec() const;
110
112 RCP<const LinearOpSourceBase<Scalar> > extract_approxFwdOpSrc();
113
115 ESupportSolveUse supportSolveUse() const;
116
121 void uninitialize(
123 RCP<Teuchos::ParameterList> *solverPL = NULL,
124 RCP<Belos::SolverManager<Scalar,MV_t,LO_t> > *iterativeSolver = NULL,
125 RCP<const LinearOpSourceBase<Scalar> > *fwdOpSrc = NULL,
126 RCP<const PreconditionerBase<Scalar> > *prec = NULL,
127 bool *isExternalPrec = NULL,
128 RCP<const LinearOpSourceBase<Scalar> > *approxFwdOpSrc = NULL,
129 ESupportSolveUse *supportSolveUse = NULL
130 );
131
133
137 RCP< const VectorSpaceBase<Scalar> > range() const;
139 RCP< const VectorSpaceBase<Scalar> > domain() const;
141 RCP<const LinearOpBase<Scalar> > clone() const;
143
147 std::string description() const;
149 void describe(
150 Teuchos::FancyOStream &out,
151 const Teuchos::EVerbosityLevel verbLevel
152 ) const;
154
157
159 void setParameterList(RCP<Teuchos::ParameterList> const& paramList);
161 RCP<Teuchos::ParameterList> getNonconstParameterList();
163 RCP<Teuchos::ParameterList> unsetParameterList();
165 RCP<const Teuchos::ParameterList> getParameterList() const;
167 RCP<const Teuchos::ParameterList> getValidParameters() const;
168
170
171protected:
172
176 virtual bool opSupportedImpl(EOpTransp M_trans) const;
178 virtual void applyImpl(
179 const EOpTransp M_trans,
180 const MultiVectorBase<Scalar> &X,
181 const Ptr<MultiVectorBase<Scalar> > &Y,
182 const Scalar alpha,
183 const Scalar beta
184 ) const;
186
190 virtual bool solveSupportsImpl(EOpTransp M_trans) const;
192 virtual bool solveSupportsNewImpl(EOpTransp transp,
193 const Ptr<const SolveCriteria<Scalar> > solveCriteria) const;
196 EOpTransp M_trans, const SolveMeasureType& solveMeasureType
197 ) const;
199 virtual SolveStatus<Scalar> solveImpl(
200 const EOpTransp transp,
201 const MultiVectorBase<Scalar> &B,
202 const Ptr<MultiVectorBase<Scalar> > &X,
203 const Ptr<const SolveCriteria<Scalar> > solveCriteria
204 ) const;
206
207private:
208
209 // ///////////////////////////////
210 // Private data members
211
212
213 RCP<Belos::LinearProblem<Scalar,MV_t,LO_t> > lp_;
214 RCP<Teuchos::ParameterList> solverPL_;
215 RCP<Belos::SolverManager<Scalar,MV_t,LO_t> > iterativeSolver_;
216 int convergenceTestFrequency_;
217
218 RCP<const LinearOpSourceBase<Scalar> > fwdOpSrc_;
219 RCP<const PreconditionerBase<Scalar> > prec_;
220 bool isExternalPrec_;
221 RCP<const LinearOpSourceBase<Scalar> > approxFwdOpSrc_;
222 ESupportSolveUse supportSolveUse_;
223
224 typename Teuchos::ScalarTraits<Scalar>::magnitudeType defaultTol_;
225
226 void assertInitialized() const;
227
228 std::string label_, filenameLHS_, filenameRHS_;
229 mutable int counter_;
230
231};
232
233
234} // namespace Thyra
235
236
237#endif // THYRA_BELOS_LINEAR_OP_WITH_SOLVE_DECL_HPP
Thyra specializations of MultiVecTraits and OperatorTraits.
Concrete LinearOpWithSolveBase subclass in terms of Belos.
void uninitialize(RCP< Belos::LinearProblem< Scalar, MV_t, LO_t > > *lp=NULL, RCP< Teuchos::ParameterList > *solverPL=NULL, RCP< Belos::SolverManager< Scalar, MV_t, LO_t > > *iterativeSolver=NULL, RCP< const LinearOpSourceBase< Scalar > > *fwdOpSrc=NULL, RCP< const PreconditionerBase< Scalar > > *prec=NULL, bool *isExternalPrec=NULL, RCP< const LinearOpSourceBase< Scalar > > *approxFwdOpSrc=NULL, ESupportSolveUse *supportSolveUse=NULL)
Uninitializes and returns stored quantities.
RCP< const LinearOpBase< Scalar > > clone() const
RCP< Teuchos::ParameterList > unsetParameterList()
virtual bool opSupportedImpl(EOpTransp M_trans) const
RCP< const VectorSpaceBase< Scalar > > domain() const
virtual bool solveSupportsNewImpl(EOpTransp transp, const Ptr< const SolveCriteria< Scalar > > solveCriteria) const
RCP< const VectorSpaceBase< Scalar > > range() const
void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const
void setParameterList(RCP< Teuchos::ParameterList > const &paramList)
virtual SolveStatus< Scalar > solveImpl(const EOpTransp transp, const MultiVectorBase< Scalar > &B, const Ptr< MultiVectorBase< Scalar > > &X, const Ptr< const SolveCriteria< Scalar > > solveCriteria) const
RCP< const Teuchos::ParameterList > getParameterList() const
virtual bool solveSupportsSolveMeasureTypeImpl(EOpTransp M_trans, const SolveMeasureType &solveMeasureType) const
RCP< Teuchos::ParameterList > getNonconstParameterList()
RCP< const LinearOpSourceBase< Scalar > > extract_approxFwdOpSrc()
RCP< const Teuchos::ParameterList > getValidParameters() const
RCP< const PreconditionerBase< Scalar > > extract_prec()
virtual bool solveSupportsImpl(EOpTransp M_trans) const
RCP< const LinearOpSourceBase< Scalar > > extract_fwdOpSrc()
virtual void applyImpl(const EOpTransp M_trans, const MultiVectorBase< Scalar > &X, const Ptr< MultiVectorBase< Scalar > > &Y, const Scalar alpha, const Scalar beta) const
void initialize(const RCP< Belos::LinearProblem< Scalar, MV_t, LO_t > > &lp, const RCP< Teuchos::ParameterList > &solverPL, const RCP< Belos::SolverManager< Scalar, MV_t, LO_t > > &iterativeSolver, const RCP< const LinearOpSourceBase< Scalar > > &fwdOpSrc, const RCP< const PreconditionerBase< Scalar > > &prec, const bool isExternalPrec, const RCP< const LinearOpSourceBase< Scalar > > &approxFwdOpSrc, const ESupportSolveUse &supportSolveUse, const int convergenceTestFrequency)
Initializes given precreated solver objects.

Generated for Stratimikos by doxygen 1.9.8