78 TEUCHOS_TEST_FOR_EXCEPTION(TpetraHelpers::isTpetraLinearOp(lo),std::runtime_error,
"BlkDiag not implemented for Tpetra operators");
81 Teuchos::RCP<const Epetra_Operator> eo=Thyra::get_Epetra_Operator(*lo);
82 TEUCHOS_ASSERT(eo!=Teuchos::null);
83 Teuchos::RCP<const Epetra_CrsMatrix> MAT = Teuchos::rcp_dynamic_cast<const Epetra_CrsMatrix>(eo);
84 TEUCHOS_ASSERT(MAT!=Teuchos::null);
87 Teuchos::RCP<EpetraExt_PointToBlockDiagPermute> BDP;
88 if(MyState.BDP_==Teuchos::null) {
89 BDP = Teuchos::rcp(
new EpetraExt_PointToBlockDiagPermute(*MAT));
90 BDP->SetParameters(
List_);
95 RCP<Epetra_FECrsMatrix> Hcrs=rcp(MyState.BDP_->CreateFECrsMatrix());
96 return Thyra::epetraLinearOp(Hcrs);
102 return getInvDiagonalOp(lo,diagonalType_);