Skip to content

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.

Merge request reports