42 TEUCHOS_TEST_FOR_EXCEPTION(TpetraHelpers::isTpetraLinearOp(lo), std::runtime_error,
43 "BlkDiag not implemented for Tpetra operators");
44#ifdef TEKO_HAVE_EPETRA
49 Teuchos::RCP<const Epetra_Operator> eo = Thyra::get_Epetra_Operator(*lo);
50 TEUCHOS_ASSERT(eo != Teuchos::null);
51 Teuchos::RCP<const Epetra_CrsMatrix> MAT =
52 Teuchos::rcp_dynamic_cast<const Epetra_CrsMatrix>(eo);
53 TEUCHOS_ASSERT(MAT != Teuchos::null);
56 Teuchos::RCP<EpetraExt_PointToBlockDiagPermute> BDP;
57 if (MyState.BDP_ == Teuchos::null) {
58 BDP = Teuchos::rcp(
new EpetraExt_PointToBlockDiagPermute(*MAT));
59 BDP->SetParameters(
List_);
64 RCP<Epetra_FECrsMatrix> Hcrs = rcp(MyState.BDP_->CreateFECrsMatrix());
65 return Thyra::epetraLinearOp(Hcrs);
73 return getInvDiagonalOp(lo, diagonalType_);