From: wolf Date: Thu, 4 May 2000 11:14:37 +0000 (+0000) Subject: Fix bug. X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=47c6d3bf16b3900e18c9fa0ddc9a93ca715f6151;p=dealii-svn.git Fix bug. git-svn-id: https://svn.dealii.org/trunk@2792 0785d39b-7218-0410-832d-ea1e28bc413d --- 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