Does anybody know of an implementation of Nédélec elements that does not come along with a huge bulk of additional software?

Is there a small library written in a language like Python, Matlab, or Octave? The only implementations I know of are part of larger FEM libraries which are too difficult to learn for the sole purpose of comparing with my own implementation. In the literature, there is virtually nothing on how these elements look when implemented, not to speak of example code.

  • $\begingroup$ The link to the paper at springerlink.com is broken. Perhaps you could take a look, whenever possible… $\endgroup$ Jul 22 at 5:13

2 Answers 2


Long Chen has built a very compact library called $i$FEM, it has a complete implementation of the first and second type of Nédélec elements up to quadratic order, including a very readable data structure for geometry and DoFs, the stiffness matrix assembling(the implementation is similar to the idea shown in Carstensen's paper), an adaptive mesh refining and coarsening procedure, also the multigrid solver based on Hiptmair's multigrid for Maxwell paper, together with HX-preconditioning technique.

For even higher order Nédélec elements which are used in $hp$-FEM, I suggest you refer to the book written by Pavel Solin: Higher-Order Finite Element methods, in chapter 2 it has an explicit representation of the higher order vector elements using the edge vector and the face normal vector, not just for $H(\mathbf{curl})$, also for $H(\mathrm{div})$, and the recursively defined shape functions fall into Long Chen's data structure and assembling subroutine quite neatly.


It's not a minimal complete finite element library, but FIAT tabulates Nedelec spaces (and many other spaces) and DOLFIN has simple examples for testing. The new FEniCS Book offers a good explanation of design and implementation. Unfortunately, there is a somewhat opaque "form compiler" so it would take more effort to fully understand every step of the process. On the other hand, the output of the form compiler performs a task that is not difficult to understand.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.