On 10/27/25 04:44, Lukas Dreyer wrote:
I have found two existing implementations for Nédélec elements on hypercubes: FE_Nedelec and FE_NedelecSZ. From my understanding, FE_Nedelec requires globally oriented meshes, where each local edge orientation matches the global orientation. In contrast, FE_NedelecSZ incorporates the global orientation into the finite element itself and resolves sign conflicts by multiplying incorrectly oriented DoFs by -1.

I am currently deciding which base class would be most suitable for my implementation.
Is there a better option than deriving directly from FiniteElement?

You can't guarantee orientations of triangles and tetrahedra (and hexahedra) in the same way as you can for quadrilaterals, and so you have to deal with edge orientations in both 2d and 3d if you want these elements for simplex meshes. As a consequence, the only real choice you have is to go the route of the FE_NedelecSZ element.


Both FE_PolyTensor and FE_Simplex_Poly seem like reasonable starting points.
However, from my initial review, FE_Simplex_Poly only takes unit_support_points in its constructor, and I am unsure how it supports generalized support points.

For the FE_PolyTensor approach, I could refer to FE_Nedelec, but I am not certain whether this approach is compatible with a local reorientation strategy.

I would greatly appreciate any insights or recommendations on how to implement the simplicial linear nedelec element with minimal code duplication.

As you discovered, there is quite a wild west out there with these intermediate classes. I have to admit that I've long lost an overview of what they all do, and I suspect that others feel the same. If you think that one intermediate class *almost* does what you need, you can always extend it to do what you need.

I'm afraid I don't have much more advice to give. If I had to take on this project, I would start by trying to understand what the various intermediate classes do and how they differ (and in the process probably augment the documentation in many places writing down what I find). One of the options you always have is to derive from an intermediate class, but override some of the virtual functions in your derived class. The overriding function can of course call the function in the base class, and then if necessary fix up some of the base class's output -- say, adjusting signs that were not set correctly by the base class.

It's possible that some of the others on this forum have more advice, and I hope that they would speak up in that case!

Best
 Wolfgang


--
------------------------------------------------------------------------
Wolfgang Bangerth          email:                 [email protected]
                           www: http://www.math.colostate.edu/~bangerth/

--
The deal.II project is located at http://www.dealii.org/
For mailing list/forum options, see 
https://groups.google.com/d/forum/dealii?hl=en
--- You received this message because you are subscribed to the Google Groups "deal.II User Group" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion visit 
https://groups.google.com/d/msgid/dealii/518394dd-f100-4bc7-b1b2-6bb338fae828%40colostate.edu.

Reply via email to