# General interface for (numerical) form integration

We need to define a proper interface for a "Form" class.

This allows us to separate form integration (stencil assembly) from the actual application (or relaxation, ...) kernels. For instance we would only need an ElementwiseOperator instead of an Elementwise- plus a Blen{}dingOperator.

Our current idea for the integration interface is as follows (or similar):

```
class SomeForm
{
// 2D P1
void integrate( const Vec3< Vec2 > in, Vec3 & out );
// 3D P1
void integrate( const Vec4< Vec3 > in, Vec4 & out );
};
```

Unclear:

- What other parameters shall the integrate form have?
~~Currently we think that the PrimitiveID as another parameter should be sufficient (the storage can be given during construction).~~-> it is unclear which PrimitiveIDs are required here? For each point of the micro-element? Maybe we should keep it as simple as possible. - How do we define the integrate functions for different stiffness matrix sizes (e.g. for the "mixedoperators")?
- How do we define the evaluation point (i.e. the row that we want to compute from the stiffness matrix)?
- Better to pass constant sized arrays than custom vector data structures to be more compatible to code generators.