From 9c8abcadadfff8a7250d838de82707d9fd3d00cb Mon Sep 17 00:00:00 2001 From: Guido Kanschat Date: Tue, 20 Sep 2005 17:09:27 +0000 Subject: [PATCH] fix constructor of InverseMatrixRichardson\ catch exceptions in its vmult functions git-svn-id: https://svn.dealii.org/trunk@11485 0785d39b-7218-0410-832d-ea1e28bc413d --- deal.II/lac/include/lac/matrix_lib.h | 10 +++++-- .../lac/include/lac/matrix_lib.templates.h | 30 ++++++++++++++++--- 2 files changed, 34 insertions(+), 6 deletions(-) diff --git a/deal.II/lac/include/lac/matrix_lib.h b/deal.II/lac/include/lac/matrix_lib.h index 2a65cff897..4d99d5f642 100644 --- a/deal.II/lac/include/lac/matrix_lib.h +++ b/deal.II/lac/include/lac/matrix_lib.h @@ -311,6 +311,8 @@ class MeanValueFilter : public Subscriptor */ template class InverseMatrixRichardson + : + public Subscriptor { public: /** @@ -502,8 +504,12 @@ template inline void InverseMatrixRichardson::initialize (const MATRIX& m, const PRECONDITION& p) { - matrix = &m; - precondition = &p; + if (matrix != 0) + delete matrix; + matrix = new PointerMatrix(&m); + if (precondition != 0) + delete precondition; + precondition = new PointerMatrix(&p);; } diff --git a/deal.II/lac/include/lac/matrix_lib.templates.h b/deal.II/lac/include/lac/matrix_lib.templates.h index e3498494fa..9f4a1f3eaa 100644 --- a/deal.II/lac/include/lac/matrix_lib.templates.h +++ b/deal.II/lac/include/lac/matrix_lib.templates.h @@ -140,7 +140,13 @@ InverseMatrixRichardson::vmult(VECTOR& dst, const VECTOR& src) const { Assert (matrix != 0, ExcNotInitialized()); Assert (precondition != 0, ExcNotInitialized()); - solver.solve(*matrix, dst, src, *precondition); + dst = 0.; + try + { + solver.solve(*matrix, dst, src, *precondition); + } + catch(...) + {} } @@ -153,7 +159,12 @@ InverseMatrixRichardson::vmult_add(VECTOR& dst, const VECTOR& src) const Assert (precondition != 0, ExcNotInitialized()); VECTOR* aux = mem.alloc(); aux->reinit(dst); - solver.solve(*matrix, *aux, src, *precondition); + try + { + solver.solve(*matrix, *aux, src, *precondition); + } + catch(...) + {} dst += *aux; mem.free(aux); } @@ -166,7 +177,13 @@ InverseMatrixRichardson::Tvmult(VECTOR& dst, const VECTOR& src) const { Assert (matrix != 0, ExcNotInitialized()); Assert (precondition != 0, ExcNotInitialized()); - solver.Tsolve(*matrix, dst, src, *precondition); + dst = 0.; + try + { + solver.Tsolve(*matrix, dst, src, *precondition); + } + catch(...) + {} } @@ -179,7 +196,12 @@ InverseMatrixRichardson::Tvmult_add(VECTOR& dst, const VECTOR& src) cons Assert (precondition != 0, ExcNotInitialized()); VECTOR* aux = mem.alloc(); aux->reinit(dst); - solver.Tsolve(*matrix, *aux, src, *precondition); + try + { + solver.Tsolve(*matrix, *aux, src, *precondition); + } + catch(...) + {} dst += *aux; mem.free(aux); } -- 2.39.5