This MR redesigns the matrix and vector front-/backend. Therefore, the
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
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.
BiLinearForm are now parametrized with the
BackendTraits type, to allow user-defined traits with own backend implementations to be passed to the facade classes.