63 const Teuchos::RCP<
const LinearOpBase<Scalar> > &fwdOp,
64 const Teuchos::RCP<
const LinearOpSourceBase<Scalar> > &fwdOpSrc,
65 const Teuchos::RCP< Solver > &amesos2Solver,
70 this->initialize(fwdOp,fwdOpSrc,amesos2Solver);
76 const Teuchos::RCP<
const LinearOpBase<Scalar> > &fwdOp,
77 const Teuchos::RCP<
const LinearOpSourceBase<Scalar> > &fwdOpSrc,
78 const Teuchos::RCP< Solver > &amesos2Solver
83 amesos2Solver_ = amesos2Solver;
84 const std::string fwdOpLabel = fwdOp_->getObjectLabel();
85 if(fwdOpLabel.length())
86 this->setObjectLabel(
"lows("+fwdOpLabel+
")" );
147 Teuchos::FancyOStream &out,
148 const Teuchos::EVerbosityLevel verbLevel
151 using Teuchos::OSTab;
152 using Teuchos::typeName;
153 using Teuchos::describe;
155 case Teuchos::VERB_DEFAULT:
156 case Teuchos::VERB_LOW:
157 out << this->description() << std::endl;
159 case Teuchos::VERB_MEDIUM:
160 case Teuchos::VERB_HIGH:
161 case Teuchos::VERB_EXTREME:
164 << Teuchos::Describable::description() <<
"{"
165 <<
"rangeDim=" << this->range()->dim()
166 <<
",domainDim="<< this->domain()->dim() <<
"}\n";
168 if(!is_null(fwdOp_)) {
169 out <<
"fwdOp = " << describe(*fwdOp_,verbLevel);
171 if(!is_null(amesos2Solver_)) {
172 out <<
"amesos2Solver=" << typeName(*amesos2Solver_) <<
"\n";
177 TEUCHOS_TEST_FOR_EXCEPT(
true);
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 );
235 const MultiVectorBase<Scalar> &B,
236 const Ptr<MultiVectorBase<Scalar> > &X,
237 const Ptr<
const SolveCriteria<Scalar> >
240 auto Btpetra = ConverterT::getConstTpetraMultiVector(Teuchos::rcpFromRef(B));
242 auto Xtpetra = ConverterT::getTpetraMultiVector(Teuchos::rcpFromPtr(X));
244 Teuchos::RCP<Teuchos::FancyOStream> out = this->getOStream();
245 Teuchos::EVerbosityLevel verbLevel = this->getVerbLevel();
247 if(out.get() &&
static_cast<int>(verbLevel) >
static_cast<int>(Teuchos::VERB_NONE))
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;