Draft: Scalable operators and other prerequisites for further merge requests
Contents:
- made constant and elementwise operators scalable by a constant
- added fenics form compatability functions to some form headers (required for constant operator scaling)
- added some new forms
- elementwise operators can now also return lumped diagonal values and lumped inverse diagonal values
- some minor changes to P2ToP1 and P1ToP2 Elementwise Operators to allow for the usage of variable forms
- added DoFValueFunction interface to VertexDofFunction and EdgeDofFunction as a prerequisite for DoFValueOperators
- made the geometryMap in Form.hpp mutable (this is required for DoFValueOperators, due to issues with const correctness, I know this looks wrong)
First of all: I'm sorry. In my opinion this is the smallest package that makes sense for this.
Some notes:
- Nils and I have already spoken about applying operators in a scaled fashion of the form A.apply(s, d,
\alpha
.\beta
) effectively evaluating to\alpha \cdot d + \beta \cdot A s
. For now however I need a solution like this to make creating new operators and especially time stepping schemes tolerable. Another solution would be to have a very general class for an operator linear combination (preferably that is not inefficient and uses lots of temporary functions!). - I plan to at least offer the old DoFValueOperators as a comparison tool and for some legacy tests in a future merge request. They will go into their own submodule perhaps, where they don't annoy other users.