45 #include "Thyra_MultiVectorStdOps.hpp"
56 template<
typename Scalar>
61 template<
typename Scalar>
64 const Teuchos::RCP<
const LinearOpSourceBase<Scalar> > &fwdOpSrc,
66 const EOpTransp amesos2SolverTransp,
67 const Scalar amesos2SolverScalar
70 this->initialize(fwdOp,fwdOpSrc,amesos2Solver);
74 template<
typename Scalar>
77 const Teuchos::RCP<
const LinearOpSourceBase<Scalar> > &fwdOpSrc,
83 amesos2Solver_ = amesos2Solver;
84 const std::string fwdOpLabel = fwdOp_->getObjectLabel();
85 if(fwdOpLabel.length())
86 this->setObjectLabel(
"lows("+fwdOpLabel+
")" );
90 template<
typename Scalar>
95 _fwdOpSrc = fwdOpSrc_;
96 fwdOpSrc_ = Teuchos::null;
104 template<
typename Scalar>
108 return ( fwdOp_.get() ? fwdOp_->range() : Teuchos::null );
112 template<
typename Scalar>
116 return ( fwdOp_.get() ? fwdOp_->domain() : Teuchos::null );
120 template<
typename Scalar>
124 return Teuchos::null;
131 template<
typename Scalar>
134 std::ostringstream oss;
138 <<
"{fwdOp="<<fwdOp_->description()
139 <<
",amesos2Solver="<<
typeName(*amesos2Solver_)<<
"}";
145 template<
typename Scalar>
153 using Teuchos::describe;
157 out << this->description() << std::endl;
165 <<
"rangeDim=" << this->range()->dim()
166 <<
",domainDim="<< this->domain()->dim() <<
"}\n";
169 out <<
"fwdOp = " << describe(*fwdOp_,verbLevel);
172 out <<
"amesos2Solver=" <<
typeName(*amesos2Solver_) <<
"\n";
188 template<
typename Scalar>
191 return ::Thyra::opSupported(*fwdOp_,M_trans);
195 template<
typename Scalar>
197 const EOpTransp M_trans,
198 const MultiVectorBase<Scalar> &X,
199 const Ptr<MultiVectorBase<Scalar> > &Y,
204 Thyra::apply( *fwdOp_, M_trans, X, Y, alpha, beta );
210 template<
typename Scalar>
213 if (Thyra::real_trans(M_trans) == Thyra::NOTRANS) {
222 template<
typename Scalar>
224 EOpTransp M_trans,
const SolveMeasureType& solveMeasureType
231 template<
typename Scalar>
234 const EOpTransp M_trans,
235 const MultiVectorBase<Scalar> &
B,
236 const Ptr<MultiVectorBase<Scalar> > &X,
237 const Ptr<
const SolveCriteria<Scalar> > solveCriteria
240 auto Btpetra = ConverterT::getConstTpetraMultiVector(Teuchos::rcpFromRef(
B));
242 auto Xtpetra = ConverterT::getTpetraMultiVector(Teuchos::rcpFromPtr(X));
248 *out <<
"\nSolving system using Amesos2 solver "
249 <<
typeName(*amesos2Solver_) <<
" ...\n\n";
251 amesos2Solver_->solve(Xtpetra.ptr(), Btpetra.ptr());
253 SolveStatus<Scalar> solveStatus;
254 solveStatus.solveStatus = SOLVE_STATUS_CONVERGED;