WIP: Helper method to compute the matrix blocklevel
The following is only a prototype to probe whether the general idea is well-received by the dune-istl community. See the end of the text for a few things that need to be improved.
All ISTL vectors and matrices have to export the 'blocklevel' integer. It is used to determine the nesting depth of a given vector or matrix.
As it turns out, the vector blocklevel field is never actually used within dune-istl. The matrix blocklevel is used a few times. However, with C++11 and beyond it is quite easy to compute the vector and matrix nestings depths without requiring the blocklevel field from each and every vector and matrix implementation.
This patch adds a little helper method matrixBlockLevel that computes the nesting depth of a given matrix type. The method is contained in the Imp namespace, to keep it out of the official dune-istl API. That is a decision to be debated, however.
Before merging, the following details should be improved:
- The new method uses
if constexpr
, which is not allowed in the Dune core yet. - It uses MatrixType::block_type. A more general implementation would use the return type of operator[].operator[] here.