*/
DeclException0 (ExcDiagonalsNotStored);
- protected:
/**
* Access to the inverse diagonal
* blocks.
*/
const FullMatrix<inverse_type>& diagonal (unsigned int i) const;
+ protected:
/**
* Size of the blocks. Each
* diagonal block is assumed to
*/
unsigned int a_block;
- /**
- * Current block for extracting data.
- *
- * This is either
- * @p{a_block} or zero,
- * depending on
- * @p{same_diagonal}.
- */
- unsigned int u_block;
-
/**
* Iterator inside block.
*/
* Make function public.
*/
PreconditionBlock<MATRIX, inverse_type>::n_blocks;
+ /**
+ * Make function accessible to iterator.
+ */
+ PreconditionBlock<MATRIX, inverse_type>::inverse;
/**
* Execute block Jacobi
void do_vmult (Vector<number2>&,
const Vector<number2>&,
bool adding) const;
+
+ friend class Accessor;
+ friend class const_iterator;
};
const unsigned int r = row % bs;
- u_block = (matrix->same_diagonal()) ? 0 : a_block;
-
- b_iterator = matrix->inverse(u_block).begin(r);
- b_end = matrix->inverse(u_block).end();
+ b_iterator = matrix->inverse(a_block).begin(r);
+ b_end = matrix->inverse(a_block).end();
Assert (a_block < matrix->n_blocks(),
ExcIndexRange(a_block, 0, matrix->n_blocks()));
if (accessor.b_iterator == accessor.b_end)
{
++accessor.a_block;
- if (!accessor.matrix->same_diagonal())
- ++accessor.u_block;
if (accessor.a_block < accessor.matrix->n_blocks())
{