Matrix-Vector facade class

Praetorius, Simon requested to merge issue/matvec_facade into master

This MR redesigns the matrix and vector front-/backend. Therefore, the MatrixBase and VectorBase classes are renamed to xxxFacade classes, where the actual backend is passed by template-template parameter, instantiated with just the value-type of the coefficients to store in the matrix/vector. This reduces the length of the template parameter list and releases the backend from basis dependency. Also, the facade classes do not directly depend on the basis type, but get the basis as constructor argument that allows to, e.g. construct the matrix pattern, or to store a type-erased sizeInfo of the basis. This type-erasure is used in several places by just using std::functions

Also, we have added a sparsity pattern argument to the matrix init() method, where the actual pattern is initialized in the facade class to allow block patterns to be initialized at a central location.

The facade class performs several (concept) checks on the input and just forwards the necessary data and ranges to the backend implementation.

The DOFVector, LinearForm and BiLinearForm are now parametrized with the BackendTraits type, to allow user-defined traits with own backend implementations to be passed to the facade classes.

Edited by Praetorius, Simon

Merge request reports