From b2dbd3db591aef02ffe4aee4d00fc84979ca5d47 Mon Sep 17 00:00:00 2001 From: Wolfgang Bangerth Date: Thu, 4 May 2000 11:14:37 +0000 Subject: [PATCH] Fix bug. git-svn-id: https://svn.dealii.org/trunk@2792 0785d39b-7218-0410-832d-ea1e28bc413d --- deal.II/lac/source/sparsity_pattern.cc | 31 ++++++++++++++++++++------ 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/deal.II/lac/source/sparsity_pattern.cc b/deal.II/lac/source/sparsity_pattern.cc index e010645ef5..7118b92a63 100644 --- a/deal.II/lac/source/sparsity_pattern.cc +++ b/deal.II/lac/source/sparsity_pattern.cc @@ -135,15 +135,32 @@ SparsityPattern::SparsityPattern (const SparsityPattern &original, const unsigned int * const original_row_end = &original.colnums[original.rowstart[row+1]]; + // find pointers before and + // after extra + // off-diagonals. if at top or + // bottom of matrix, then set + // these pointers such that no + // copying is necessary (see + // the #copy# commands) const unsigned int * const - original_last_before_side_diagonals = lower_bound (original_row_start, - original_row_end, - row-extra_off_diagonals); + original_last_before_side_diagonals + = (row > extra_off_diagonals ? + lower_bound (original_row_start, + original_row_end, + row-extra_off_diagonals) : + original_row_start); + const unsigned int * const - original_first_after_side_diagonals = upper_bound (original_row_start, - original_row_end, - row+extra_off_diagonals); - + original_first_after_side_diagonals + = (row < rows-extra_off_diagonals-1 ? + upper_bound (original_row_start, + original_row_end, + row+extra_off_diagonals) : + original_row_end); + + // find first free slot. the + // first slot in each row is + // the diagonal element unsigned int * next_free_slot = &colnums[rowstart[row]] + 1; // copy elements before side-diagonals -- 2.39.5