Matrix-Vector facade class
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.