Skip to content

Add optional dependencies for elements add add more Ferrite elements - #593

Open
fredrikekre wants to merge 2 commits into
DefElement:mainfrom
fredrikekre:ferrite-interpolations
Open

fredrikekre wants to merge 2 commits into
DefElement:mainfrom
fredrikekre:ferrite-interpolations

Conversation

@fredrikekre

Copy link
Copy Markdown
Contributor

For Ferrite.jl we decided to put most of the more exotic elements in a separate add-on package, FerriteInterpolations.jl.

First commit introduces the new optional DEPENDENCIES parameter that is used to generate the code snippets for installation and element instantiation. The second commit make use of this and adds verification to many more Ferrite elements.

See commit messages for more details.

Created by 🤖 under my guidance and review.

fredrikekre and others added 2 commits October 8, 2026 09:28
Some elements need an additional package on top of the implementation's
own package (e.g. Ferrite.jl elements that live in FerriteInterpolations.jl).
Add a special parameter DEPENDENCIES to the implementation strings in
.def files, e.g.

  ferrite:
    triangle: Bernstein DEGREES=1:4 DEPENDENCIES=FerriteInterpolations

Like DEGREES and DEGREEMAP it is stripped before the implementation sees
the parameters. The dependencies are collected per element
(Element.implementation_dependencies) and passed to the implementation's
install and example_import methods, so that the install instructions and
the import line of the example snippets include them, and a note is
added to the element's implementation notes. install_implementations.py
loads the elements and installs the dependencies of every implementation,
and Ferrite's verification loads them before creating the interpolation.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Add ferrite entries, with DEPENDENCIES=FerriteInterpolations, for the
elements implemented in FerriteInterpolations.jl: Bernstein, BDFM,
bubble, conforming Crouzeix-Raviart, Crouzeix-Falk, dPc and vector dPc,
Gauss-Legendre, Nedelec second kind (Lagrange variant), Radau, Taylor,
TNT curl and div, and trimmed serendipity curl and div. dPc on the
interval coincides with Ferrite's DiscontinuousLagrange. Ferrite's degree
equals DefElement's for all of them. Verification passes for every
example within the supported degrees and cells.

Not included: enriched Galerkin (its basis is linearly dependent on a
single cell, so the verification's full-rank check rejects any
implementation), Fortin-Soulie (FerriteInterpolations implements the
element as in the original paper, as continuous P2 plus a cell bubble,
which the verification cannot compare with symfem's element), and
transition (no example is in the supported range).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant