Dear deal.II community,
I am currently exploring the implementation of a Nédélec finite element for triangles and tetrahedra.
My focus is on linear elements, where all DoFs are located on the edges of the element. For triangles, the basis functions are defined as:
p_1 = (1 - y, x), p_2 = ( -y , x), p_3 = ( y , 1 - x)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?
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.
Best regards,
Lukas Dreyer
![]() | |
Both FE_PolyTensor and FE_Simplex_Polyseem 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.
--
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 dealii+un...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/dealii/daed4470-8e65-49d8-8f3a-284f80a038c6n%40googlegroups.com.
Dear Thomas,
I would like to congratulate you with your new just accepted article. The results with your new extended FE_NedelecSZ finite elements look magnificent!
In my humble opinion, the results for the classical FE_Nedelec finite elements in the first column of Fig. 11 look somewhat bleak. This could be due to the fact that the FE_Nedelec finite elements were not fully implemented in deal.II 9.5.2, see the attached screen short. That is, all the code needed for compensation of the sign-conflict was in place, but the permutation and sing-flip tables were initialized to zeros (meaning do nothing). The versions of deal.II released after 29.01.2025 contain correct initialization of the tables for the finite elements of the order <5. I have tested the FE_Nedelec finite elements with the new tables on globally refined meshes. The results look good. Now I am busy verifying them on locally refined meshes.
I was wondering, will you be willing to generate the images in the first column of Fig. 11 with the last version of deal.II as a test of the new compensation tables?
Thanks in advance!
Kind regards,
Siarhei
Dear Siarhei Uzunbajakau,
concerning your exchange last week with Thomas Wick, I can add as follows:
The first preprint of the paper mentioned above was already published on arXiv in 2023. At that time, the FE_Nedelec class could not be applied to non-orientable grids (as demonstrated in Fig. 11). Therefore, I reran all the tests using the latest version of DEALII, and I am happy to report that the FE_Nedelec class now handles non-orientable grids and hanging nodes correctly. I implemented a convergence test, which is part of the DEALII test suite, that also confirms your implementation handles non-uniform grids correctly.
However, I noticed that the FE_Nedelec class still yields incorrect results for "balls" (e.g., a geometry generated by GridGenerator::hyper_ball_balanced).
As the person who implemented the hanging-edge and hanging-face support for Nédélec elements, it's commendable work! I know how hard it is.
However, precisely because I know how cumbersome it is to deal with the orientation problem for the Nédélec elements, my question arises: is there a specific reason you chose to reimplement it, instead of using the existing implementation?
As additional background information for our paper, I would like to explain why I chose the FE_NedelecSZ class. The FE_NedelecSZ class (implemented in 2017/18 by R.M. Kynch and P.D. Ledger, as described in the corresponding paper) already provided support for non-orientable grids and arbitrary polynomial degrees. Moreover, the FE_NedelecSZ leads to a better sparsity pattern. Additionally, discussions on the DEALII GitHub page (see https://github.com/dealii/dealii/pull/2240#issuecomment-388184286) indicate that the FE_Nedelec class should be removed in the future. Therefore, I decided to continue the work on the FE_NedelecSZ class. As my implementation is based on the work of Kynch and Ledger, it also works for arbitrary polynomial degrees.
Best,
Sebastian