Fix: Cope with omitted diagonal blocks in outer GS loop.
The former implementation had two shortcomings:
- It assumed the diagonal block to exist. This is not necessarily the case, e.g., in the case of a
BCRSMatrix
where a non-retrievable block within the dimensions of the matrix is equivalent to it being zero. Nevertheless we should be able to cope with this case, in particular because semi-definite matrices should be covered by this approach due to the inherent regularization. - Access to the diagonal element was performed via the random access operator which is relatively costly.
The new implementation tackles both problems. In case the diagonal block does not exist, a temporary block is constructed and passed to the local solver instead.
On a side note: A more generic approach to creating and initializing the temporary block might be needed for more complex nested matrix schemes.