Allow to restrict gradient and Hessian computations to subblocks

Sander, Oliver requested to merge efficiency-improvements into master

The current local solver alternates between minimization steps in local displacement and damage subspaces. However, only joint gradients and Hesse matrices for (displacement,damage)-pairs could previously be computed. This wasted a lot of computation time: These computations can take a lot of time, for example in the case of the spectrally decomposed brittle-fracture energy.

A clean solution would be to reflect the displacement-damage splitting in the linear algebra data structures, and use the dune-tnnmg restriction mechanism to get individual local displacement or damage subproblems. However, Carsten and I decided that (at least for now) this would make the code too complicated.

As a compromise solution, this patch allows to compute displacement or damage sub-blocks of the gradient and Hesse matrix without a corresponding blocking of the data structures. This approach is less invasive, but it still save up to roughly 30% run-time.

Merge request reports