Skip to content

Commit 51dee83

Browse files
authored
Merge pull request trilinos#3198 from trilinos/Teko-getInvDiag-for-Thyra-diag-op
Teko: getInvDiagonalOp for Thyra::DiagonalLinearOpBase
2 parents e9d989f + 1c7599b commit 51dee83

File tree

1 file changed

+9
-0
lines changed

1 file changed

+9
-0
lines changed

packages/teko/src/Teko_Utilities.cpp

+9
Original file line numberDiff line numberDiff line change
@@ -991,6 +991,15 @@ const MultiVector getDiagonal(const Teko::LinearOp & A,const DiagonalType & dt)
991991
*/
992992
const ModifiableLinearOp getInvDiagonalOp(const LinearOp & op)
993993
{
994+
// if this is a diagonal linear op already, just take the reciprocal
995+
auto diagonal_op = rcp_dynamic_cast<const Thyra::DiagonalLinearOpBase<double>>(op);
996+
if(diagonal_op != Teuchos::null){
997+
auto diag = diagonal_op->getDiag();
998+
auto inv_diag = diag->clone_v();
999+
Thyra::reciprocal(*diag,inv_diag.ptr());
1000+
return rcp(new Thyra::DefaultDiagonalLinearOp<double>(inv_diag));
1001+
}
1002+
9941003
// if this is a blocked operator, extract diagonals block by block
9951004
RCP<const Thyra::PhysicallyBlockedLinearOpBase<double> > blocked_op = rcp_dynamic_cast<const Thyra::PhysicallyBlockedLinearOpBase<double> >(op);
9961005
if(blocked_op != Teuchos::null){

0 commit comments

Comments
 (0)