From afb2d5fa4e13839ab926cae97b7c8d71d4011eff Mon Sep 17 00:00:00 2001 From: kronbichler Date: Fri, 21 Nov 2008 13:02:31 +0000 Subject: [PATCH] Accelerated the addition into vectors a bit by directly calling the relevant functions. git-svn-id: https://svn.dealii.org/trunk@17675 0785d39b-7218-0410-832d-ea1e28bc413d --- .../lac/include/lac/trilinos_vector_base.h | 8 +-- deal.II/lac/source/trilinos_vector_base.cc | 56 ++++++++++--------- 2 files changed, 32 insertions(+), 32 deletions(-) diff --git a/deal.II/lac/include/lac/trilinos_vector_base.h b/deal.II/lac/include/lac/trilinos_vector_base.h index 9b0e5f4b39..5a22e76ef1 100644 --- a/deal.II/lac/include/lac/trilinos_vector_base.h +++ b/deal.II/lac/include/lac/trilinos_vector_base.h @@ -328,13 +328,7 @@ namespace TrilinosWrappers * vector, i.e., whether * compress() has already been * called after an operation - * requiring data exchange. Does - * only return non-true values - * when used in debug - * mode, since it is quite - * expensive to keep track of all - * operations that lead to a - * need for compress(). + * requiring data exchange. */ bool is_compressed () const; diff --git a/deal.II/lac/source/trilinos_vector_base.cc b/deal.II/lac/source/trilinos_vector_base.cc index d4e62154bb..7b8c832739 100644 --- a/deal.II/lac/source/trilinos_vector_base.cc +++ b/deal.II/lac/source/trilinos_vector_base.cc @@ -353,20 +353,23 @@ namespace TrilinosWrappers if (last_action != Insert) last_action = Insert; -#ifdef DEBUG + int ierr; for (unsigned int i=0; iReplaceGlobalValues (n_elements, - (int*)(const_cast(indices)), - const_cast(values)); - - AssertThrow (ierr == 0, ExcTrilinosError(ierr)); + { + const unsigned int row = indices[i]; + const int local_row = vector->Map().LID(indices[i]); + if (local_row == -1) + { + ierr = vector->ReplaceGlobalValues (1, + (const int*)(&row), + &values[i]); + compressed = false; + } + else + ierr = vector->ReplaceMyValue (local_row, 0, values[i]); + + AssertThrow (ierr == 0, ExcTrilinosError(ierr)); + } } @@ -406,20 +409,23 @@ namespace TrilinosWrappers if (last_action != Add) last_action = Add; -#ifdef DEBUG + int ierr; for (unsigned int i=0; iSumIntoGlobalValues (n_elements, - (int*)(const_cast(indices)), - const_cast(values)); + { + const unsigned int row = indices[i]; + const int local_row = vector->Map().LID(indices[i]); + if (local_row == -1) + { + ierr = vector->SumIntoGlobalValues (1, + (const int*)(&row), + &values[i]); + compressed = false; + } + else + ierr = vector->SumIntoMyValue (local_row, 0, values[i]); - AssertThrow (ierr == 0, ExcTrilinosError(ierr)); + AssertThrow (ierr == 0, ExcTrilinosError(ierr)); + } } -- 2.39.5