44#ifndef THYRA_AMESOS2_LINEAR_OP_WITH_SOLVE_DECL_HPP
45#define THYRA_AMESOS2_LINEAR_OP_WITH_SOLVE_DECL_HPP
47#include "Thyra_LinearOpWithSolveBase.hpp"
48#include "Thyra_LinearOpSourceBase.hpp"
49#include <Tpetra_Map.hpp>
50#include <Tpetra_MultiVector.hpp>
51#include <Tpetra_CrsMatrix.hpp>
53#include "Thyra_TpetraLinearOp.hpp"
54#include "Thyra_TpetraThyraWrappers.hpp"
55#include "Thyra_DefaultDiagonalLinearOp.hpp"
56#include "Thyra_LinearOpTester.hpp"
59#include "Amesos2_Version.hpp"
60#include "Amesos2_Solver.hpp"
71template<
typename Scalar>
75 using MAT = Tpetra::CrsMatrix<Scalar>;
76 using Op = Tpetra::Operator<Scalar>;
77 using MV = Tpetra::MultiVector<Scalar>;
78 using Solver = ::Amesos2::Solver<MAT, MV>;
79 using ConverterT = TpetraOperatorVectorExtraction<Scalar>;
89 const Teuchos::RCP<
const LinearOpBase<Scalar> > &fwdOp,
90 const Teuchos::RCP<
const LinearOpSourceBase<Scalar> > &fwdOpSrc,
91 const Teuchos::RCP< Solver > &amesos2Solver,
92 const EOpTransp amesos2SolverTransp,
93 const Scalar amesos2SolverScalar
98 const Teuchos::RCP<
const LinearOpBase<Scalar> > &fwdOp,
99 const Teuchos::RCP<
const LinearOpSourceBase<Scalar> > &fwdOpSrc,
100 const Teuchos::RCP< Solver > &amesos2Solver
114 Teuchos::RCP<const LinearOpBase<Scalar> >
get_fwdOp()
const;
120 Teuchos::RCP<const LinearOpSourceBase<Scalar> >
get_fwdOpSrc()
const;
125 Teuchos::RCP< const VectorSpaceBase<Scalar> >
range()
const;
127 Teuchos::RCP< const VectorSpaceBase<Scalar> >
domain()
const;
129 Teuchos::RCP<const LinearOpBase<Scalar> >
clone()
const;
138 Teuchos::FancyOStream &out,
139 const Teuchos::EVerbosityLevel verbLevel
151 const EOpTransp M_trans,
152 const MultiVectorBase<Scalar> &X,
153 const Ptr<MultiVectorBase<Scalar> > &Y,
165 EOpTransp M_trans,
const SolveMeasureType& solveMeasureType
169 const EOpTransp M_trans,
170 const MultiVectorBase<Scalar> &B,
171 const Ptr<MultiVectorBase<Scalar> > &X,
172 const Ptr<
const SolveCriteria<Scalar> > solveCriteria
178 Teuchos::RCP<const LinearOpBase<Scalar> >
fwdOp_;
179 Teuchos::RCP<const LinearOpSourceBase<Scalar> >
fwdOpSrc_;
189template<
typename Scalar>
191Teuchos::RCP<const LinearOpBase<Scalar> >
197template<
typename Scalar>
199Teuchos::RCP<typename Amesos2LinearOpWithSolve<Scalar>::Solver>
202 return amesos2Solver_;
205template<
typename Scalar>
207Teuchos::RCP<const LinearOpSourceBase<Scalar> >
Concrete LinearOpWithSolveBase subclass in terms of Amesos2.
Amesos2LinearOpWithSolve()
Construct to uninitialized.
Teuchos::RCP< const LinearOpBase< Scalar > > fwdOp_
Teuchos::RCP< const LinearOpSourceBase< Scalar > > get_fwdOpSrc() const
::Amesos2::Solver< MAT, MV > Solver
Teuchos::RCP< const LinearOpSourceBase< Scalar > > fwdOpSrc_
virtual void applyImpl(const EOpTransp M_trans, const MultiVectorBase< Scalar > &X, const Ptr< MultiVectorBase< Scalar > > &Y, const Scalar alpha, const Scalar beta) const
virtual bool solveSupportsImpl(EOpTransp M_trans) const
SolveStatus< Scalar > solveImpl(const EOpTransp M_trans, const MultiVectorBase< Scalar > &B, const Ptr< MultiVectorBase< Scalar > > &X, const Ptr< const SolveCriteria< Scalar > > solveCriteria) const
void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const
Tpetra::CrsMatrix< Scalar > MAT
Tpetra::MultiVector< Scalar > MV
Teuchos::RCP< const LinearOpSourceBase< Scalar > > extract_fwdOpSrc()
Extract the forward LinearOpSourceBase<double> object so that it can be modified and remove it from t...
virtual bool opSupportedImpl(EOpTransp M_trans) const
std::string description() const
Teuchos::RCP< const VectorSpaceBase< Scalar > > range() const
Tpetra::Operator< Scalar > Op
void assertInitialized() const
Teuchos::RCP< const LinearOpBase< Scalar > > clone() const
TpetraOperatorVectorExtraction< Scalar > ConverterT
Teuchos::RCP< Solver > amesos2Solver_
virtual bool solveSupportsSolveMeasureTypeImpl(EOpTransp M_trans, const SolveMeasureType &solveMeasureType) const
Teuchos::RCP< Solver > get_amesos2Solver()
Teuchos::RCP< const LinearOpBase< Scalar > > get_fwdOp() const
void initialize(const Teuchos::RCP< const LinearOpBase< Scalar > > &fwdOp, const Teuchos::RCP< const LinearOpSourceBase< Scalar > > &fwdOpSrc, const Teuchos::RCP< Solver > &amesos2Solver)
Initialize after construction.
Teuchos::RCP< const VectorSpaceBase< Scalar > > domain() const