[draft] An attempt to the arnold winther element

Hi, @oliver.sander asked me to turn my attempt of an (not-working) implementation of the Arnold-Winther element into an actual merge request, so here is it. My original implementation can be found here. It has several flaws and since I wrote it, we made some progress on the structure of how to transform non-affine FEs in Dune, as done for the Hermite and Morley triangle. This MR now contains a sketch of this implementation for the AW element, based on the fenics approach, written up here. AW is more challenging than say Argyris / Nedelec /HHJ because it contains all their flaws:

  • like HHJ, it is matrix valued
  • like Nedelec it is non affine transfromed but by a Piola transformation, in this case the double-contravariant Piola transformation
  • like Argyris, it still not affine equivalent, not even "piola-equivalent" like Nedelec & Co.

My understanding is therefore, that we need to take the "ReferenceLocalBasis", transform it by the double Piola, then transform it by a Basis transformation (in the paper above). This is implemented here, and I think it should work for the basis evaluation.

The evaluation of derivatives is trickier. I thought a lot, and decided to not implement the evaluation of the jacobians, but only the divergences. This is what the element is thought for, and this way we avoid 3-tensor types, which plagued my prior implementation. Currently, this is achieved by having the evaluteJacobian(...) method calculate the divergence via partials(...) and Traits::JacobianType is also set to the type of divergence, i.e. a vector. If anyone understands the transformation theory here well enough to tell me how to implement the "dune workflow" (take ref. jacobian, transfrom with Jinv, then take trace) for a divergence, let me know. Note also, that the way the 'evaluateJacobian' method now is implemented return the global divergence. There is no need to afterwards correct via Jinv.

There are many issues to resolve here, some I have already tagged with \TODO in the code.

Have fun!

PS: @simon.praetorius I love a MR for your HHJ element too, and also your opinion on how dune-tensor could help here. PPS: A and of course many test would need to be adapted to test this FE.

Edited by Maik Porrmann

Merge request reports

Loading