From 8b9b49971924e7e589043a5ba0fb98c10f0b9ee9 Mon Sep 17 00:00:00 2001 From: Lei Qiao Date: Sat, 12 Sep 2015 20:47:11 -0500 Subject: [PATCH] Enable using wrapped trilinos preconditioner with unwrapped solver --- include/deal.II/lac/trilinos_precondition.h | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/include/deal.II/lac/trilinos_precondition.h b/include/deal.II/lac/trilinos_precondition.h index 67b63c1071..d1d6025756 100644 --- a/include/deal.II/lac/trilinos_precondition.h +++ b/include/deal.II/lac/trilinos_precondition.h @@ -152,6 +152,14 @@ namespace TrilinosWrappers virtual void Tvmult (dealii::parallel::distributed::Vector &dst, const dealii::parallel::distributed::Vector &src) const; + /** + * Return a reference to the underlaying Trilinos Epetra_Operator. + * So you can use the preconditioner with unwrapped Trilinos solver. + * + * Calling this function from an uninitialized object will cause an exception. + */ + Epetra_Operator &trilinos_operator() const; + /** * Exception. */ @@ -1953,6 +1961,14 @@ namespace TrilinosWrappers preconditioner->SetUseTranspose(false); } + inline + Epetra_Operator & + PreconditionBase::trilinos_operator () const + { + AssertThrow (preconditioner, ExcMessage("Trying to dereference a null pointer.")); + return (*preconditioner); + } + #endif } -- 2.39.5