We need to implement a basis function library, similar on how the Reference element class is implemented.
Why do we need this?
Basis functions for different types of elements are needed for two things: First, you need to evaluate them at the gauss points when integrating the weak form (system matrix assembly). Second, you might need them after solving the system, to do postprocessing stuff.
This second usage is increased if we want to have Nedelec Edge Elements (as Dani suggests). The reason is that Lagrangian basis functions (the standard ones) are interpolative at the nodes, so the solution of the problem can already be used without postprocessing. However Nedelec DOFs are non-interpolative and therefore the solution needs to be interpolated at the nodes as a post-process. This requires evaluating the basis functions.
So this is a feature we MUST have if we ever want to use Nedelec elements. It is also a more elegant way of doing things and a nice quality-of-life feauture even for Lagrangian elements.
How to do it
We can do one of the two things:
Implement it as a different class, similar to the reference element class.
Extend the reference element class with new templeted functions for basis function evaluation.
I lean towards the second option. We could also use this opportunity to revise how the reference elemnt class is implemented and enhance it we feel it is necessary.
To do:
[x] Revise the Reference Element class implementation. Decide if we want to change something (how to call the functions, how the templetates shoudl be used, etc...). Modify the code accordingly until the 1D and 2D laplace work again.
[x] Once the style has been set, extend the Reference element class to include basis function evaluation. The new functions should allow us to easily obtain: A) The basis functions at any point of the reference element. B) As many derivatives as the think necessary (normally 1st and second derivatives are enough, but will depend on the equations we want to implement. It can be extended later).
Once this has been done, we will be able to start implementing Nedelec elements.
We need to implement a basis function library, similar on how the Reference element class is implemented.
Why do we need this?
Basis functions for different types of elements are needed for two things: First, you need to evaluate them at the gauss points when integrating the weak form (system matrix assembly). Second, you might need them after solving the system, to do postprocessing stuff. This second usage is increased if we want to have Nedelec Edge Elements (as Dani suggests). The reason is that Lagrangian basis functions (the standard ones) are interpolative at the nodes, so the solution of the problem can already be used without postprocessing. However Nedelec DOFs are non-interpolative and therefore the solution needs to be interpolated at the nodes as a post-process. This requires evaluating the basis functions.
So this is a feature we MUST have if we ever want to use Nedelec elements. It is also a more elegant way of doing things and a nice quality-of-life feauture even for Lagrangian elements.
How to do it
We can do one of the two things:
I lean towards the second option. We could also use this opportunity to revise how the reference elemnt class is implemented and enhance it we feel it is necessary.
To do:
Once this has been done, we will be able to start implementing Nedelec elements.