bool DefaultSerialDenseLinearOpWithSolveFactory<Scalar>::isCompatible( const LinearOpSourceBase<Scalar> &fwdOpSrc ) const { return !is_null( Teuchos::rcp_dynamic_cast<const MultiVectorBase<Scalar> >(fwdOpSrc.getOp())); }
bool MueLuPreconditionerFactory<Scalar,LocalOrdinal,GlobalOrdinal,Node>::isCompatible(const LinearOpSourceBase<Scalar>& fwdOpSrc) const { const RCP<const LinearOpBase<Scalar> > fwdOp = fwdOpSrc.getOp(); #ifdef HAVE_MUELU_TPETRA if (Xpetra::ThyraUtils<Scalar,LocalOrdinal,GlobalOrdinal,Node>::isTpetra(fwdOp)) return true; #endif if (Xpetra::ThyraUtils<Scalar,LocalOrdinal,GlobalOrdinal,Node>::isBlockedOperator(fwdOp)) return true; return false; }
bool MueLuTpetraPreconditionerFactory<Scalar,LocalOrdinal,GlobalOrdinal,Node>::isCompatible( const LinearOpSourceBase<Scalar> &fwdOpSrc ) const { const RCP<const LinearOpBase<Scalar> > fwdOp = fwdOpSrc.getOp(); typedef Thyra::TpetraLinearOp<Scalar, LocalOrdinal, GlobalOrdinal, Node> ThyraTpetraLinOp; const RCP<const ThyraTpetraLinOp> thyraTpetraFwdOp = Teuchos::rcp_dynamic_cast<const ThyraTpetraLinOp>(fwdOp); typedef Tpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal, Node> TpetraLinOp; const RCP<const TpetraLinOp> tpetraFwdOp = Teuchos::nonnull(thyraTpetraFwdOp) ? thyraTpetraFwdOp->getConstTpetraOperator() : Teuchos::null; typedef Tpetra::CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> TpetraCrsMat; const RCP<const TpetraCrsMat> tpetraFwdCrsMat = Teuchos::rcp_dynamic_cast<const TpetraCrsMat>(tpetraFwdOp); return Teuchos::nonnull(tpetraFwdCrsMat); }
bool AmesosLinearOpWithSolveFactory::isCompatible( const LinearOpSourceBase<double> &fwdOpSrc ) const { Teuchos::RCP<const LinearOpBase<double> > fwdOp = fwdOpSrc.getOp(); Teuchos::RCP<const Epetra_Operator> epetraFwdOp; ETransp epetraFwdOpTransp; EApplyEpetraOpAs epetraFwdOpApplyAs; EAdjointEpetraOp epetraFwdOpAdjointSupport; double epetraFwdOpScalar; epetraFwdOpViewExtractor_->getEpetraOpView( fwdOp ,&epetraFwdOp,&epetraFwdOpTransp,&epetraFwdOpApplyAs,&epetraFwdOpAdjointSupport,&epetraFwdOpScalar ); if( !dynamic_cast<const Epetra_RowMatrix*>(&*epetraFwdOp) ) return false; return true; }
bool IfpackPreconditionerFactory::isCompatible( const LinearOpSourceBase<double> &fwdOpSrc ) const { using Teuchos::outArg; Teuchos::RCP<const Epetra_Operator> epetraFwdOp; EOpTransp epetraFwdOpTransp; EApplyEpetraOpAs epetraFwdOpApplyAs; EAdjointEpetraOp epetraFwdOpAdjointSupport; double epetraFwdOpScalar; epetraFwdOpViewExtractor_->getEpetraOpView( fwdOpSrc.getOp(), outArg(epetraFwdOp), outArg(epetraFwdOpTransp), outArg(epetraFwdOpApplyAs), outArg(epetraFwdOpAdjointSupport), outArg(epetraFwdOpScalar) ); if( !dynamic_cast<const Epetra_RowMatrix*>(&*epetraFwdOp) ) return false; return true; }
bool Ifpack2PreconditionerFactory<MatrixType>::isCompatible( const LinearOpSourceBase<scalar_type> &fwdOpSrc ) const { const Teuchos::RCP<const LinearOpBase<scalar_type> > fwdOp = fwdOpSrc.getOp(); typedef typename MatrixType::local_ordinal_type local_ordinal_type; typedef typename MatrixType::global_ordinal_type global_ordinal_type; typedef typename MatrixType::node_type node_type; typedef Thyra::TpetraLinearOp<scalar_type, local_ordinal_type, global_ordinal_type, node_type> ThyraTpetraLinOp; const Teuchos::RCP<const ThyraTpetraLinOp> thyraTpetraFwdOp = Teuchos::rcp_dynamic_cast<const ThyraTpetraLinOp>(fwdOp); typedef Tpetra::Operator<scalar_type, local_ordinal_type, global_ordinal_type, node_type> TpetraLinOp; const Teuchos::RCP<const TpetraLinOp> tpetraFwdOp = Teuchos::nonnull(thyraTpetraFwdOp) ? thyraTpetraFwdOp->getConstTpetraOperator() : Teuchos::null; const Teuchos::RCP<const MatrixType> tpetraFwdMatrix = Teuchos::rcp_dynamic_cast<const MatrixType>(tpetraFwdOp); return Teuchos::nonnull(tpetraFwdMatrix); }
bool DiagonalEpetraLinearOpWithSolveFactory::isCompatible( const LinearOpSourceBase<double> &fwdOpSrc ) const { using Teuchos::outArg; RCP<const LinearOpBase<double> > fwdOp = fwdOpSrc.getOp(); const EpetraLinearOpBase *eFwdOp = NULL; if( ! (eFwdOp = dynamic_cast<const EpetraLinearOpBase*>(&*fwdOp)) ) return false; RCP<const Epetra_Operator> epetraFwdOp; EOpTransp epetraFwdOpTransp; EApplyEpetraOpAs epetraFwdOpApplyAs; EAdjointEpetraOp epetraFwdOpAdjointSupport; eFwdOp->getEpetraOpView(outArg(epetraFwdOp), outArg(epetraFwdOpTransp), outArg(epetraFwdOpApplyAs), outArg(epetraFwdOpAdjointSupport) ); if( !dynamic_cast<const Epetra_RowMatrix*>(&*epetraFwdOp) ) return false; return true; }