Skip to content

Higher-order Hermite on 1D manifolds - #240

Merged
pbrubeck merged 2 commits into
mainfrom
pbrubeck/hermite-manifold
Sep 17, 2026
Merged

pbrubeck merged 2 commits into
mainfrom
pbrubeck/hermite-manifold

Conversation

@pbrubeck

@pbrubeck pbrubeck commented Mar 26, 2026

Copy link
Copy Markdown

Description

Before this PR, Hermite on an interval was cubic only, and its basis transformation read the top-left block of the Jacobian. On an interval embedded in 2D or 3D, such as a 1D Submesh of a surface, that block is one component of the edge vector. The transformation is then wrong for any edge that is not parallel to the first axis, and singular for an edge perpendicular to it.

After this PR:

  • Hermite on intervals accepts any degree of at least three. The extra degrees of freedom are point evaluations inside the edge, placed by the new variant argument (default "gll"). On triangles and tetrahedra, any degree other than three raises a ValueError.
  • FIAT.CubicHermite and CubicHermiteDualSet are renamed to FIAT.Hermite and HermiteDualSet, since the element is no longer only cubic.
  • On intervals, the vertex derivative maps by the signed Jacobian determinant. On a manifold the preserved quantity is the flux grad(u).n, so the cell tangent flips with the cell orientation, and the signed determinant carries that orientation. The element therefore works on intervals embedded in higher dimensions, given cell orientations on the mesh.
  • The FInAT zany mapping tests check intervals of degree 3 to 5 and the tetrahedron.

The companion Firedrake change lets init_cell_orientations orient intervals embedded in 3D by a tangent direction, and tests the embedded Hermite element on an axis-aligned line and on a line perpendicular to the x axis.

🤖 Generated with Claude Code

https://claude.ai/code/session_01NkPVBzACjxYBGb55Adz6Mu

@pbrubeck
pbrubeck force-pushed the pbrubeck/hermite-manifold branch 2 times, most recently from 2b68bac to 69073c8 Compare March 26, 2026 14:29
@pbrubeck pbrubeck changed the title Hermite on 1D manifolds Higher-order Hermite on 1D manifolds Mar 26, 2026
Hermite on intervals now takes any degree of at least three, adding
point evaluations inside the edge, and accepts a variant for the
points. On triangles and tetrahedra the degree must be three.

On a manifold, the vertex derivative along the cell tangent flips with
the cell orientation. The transformation for intervals uses the signed
Jacobian determinant, which carries that orientation, so the element
works on intervals embedded in higher dimensions.

CubicHermite and CubicHermiteDualSet are renamed to Hermite and
HermiteDualSet, since the element is no longer only cubic.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NkPVBzACjxYBGb55Adz6Mu
@pbrubeck
pbrubeck force-pushed the pbrubeck/hermite-manifold branch from 92c2f9c to 3901003 Compare September 14, 2026 14:39
@pbrubeck
pbrubeck changed the base branch from pbrubeck/zany-manifold to main September 14, 2026 14:40
@pbrubeck
pbrubeck marked this pull request as ready for review September 14, 2026 14:42
@pbrubeck
pbrubeck requested a review from rckirby September 14, 2026 16:05

@rckirby rckirby left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks fine to me? Just a comment on the comments.

Comment thread FIAT/hermite.py Outdated
@rckirby
rckirby self-requested a review September 15, 2026 20:17

@rckirby rckirby left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok for now. Since we like knobs and completeness, it would be nice to have the full Ciarlet/Raviart Hermite family the simplex. Use cases there are limited, but it would be easy to add if needed.

@pbrubeck
pbrubeck merged commit 391391f into main Sep 17, 2026
9 checks passed
@pbrubeck
pbrubeck deleted the pbrubeck/hermite-manifold branch September 17, 2026 09:22
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.

2 participants