Feature request: physical shape-function gradients for RAVIART_THOMAS (H(div)) elements
#33545
Unanswered
joe61vette
asked this question in
Q&A General
Replies: 1 comment 12 replies
|
@lindsayad @roystgnr what are your thoughts on this? who implemented it for NEDELEC? @joe61vette have you tried having claude give it a go? it has a clear test for checking the implementation, this "harness" is in my experience what makes it reliably successful |
12 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Check these boxes if you have followed the posting rules.
Question
Summary
Please implement
HDivFETransformation::map_dphiin libMesh so that the physicalshape-function gradients (
dphi) ofRAVIART_THOMASelements are computed via thecontravariant-Piola gradient mapping. Today the method is a no-op, so
dphiis identically zerofor H(div) elements in both volume and face reinit.
Why it's needed
For my task, the gap is the viscous operator. A consistent primal Symmetric
Interior Penalty (SIP) discretization of
∇·(μ∇u)requires the physical gradient of the RTtest/trial functions (
∇w,∇u). Becausemap_dphiis a no-op, any kernel that contracts an RTgradient contributes exactly zero — the SIP operator is inert.
At present, I have a working approximation (an orthogonal two-point flux on the reconstructed
velocity, the DG-vector analog of
FVOrthogonalDiffusion, but it captures only the face-normalgradient and is not optimal-order convergent on the simplex meshes RT requires. A real
map_dphiwould replace it with a consistent, convergent SIP operator.What is required
HDivFETransformation::map_dphi(currently only issues alibmesh_warningand returns).The reference-space derivatives (
shape_deriv) already exist; what is missing is the mappingto physical space, including the Jacobian and its spatial derivatives.
dphi(and the component arrays) consistently in both volume and face reinit,matching how
map_phialready maps the values.dphireproduces theanalytic gradient of a known RT field (e.g. a patch test / MMS), rather than zero.
References
HDivFETransformation::map_dphi(the no-op) andHDivFETransformation::map_phi(the working value mapping) —
fe_transformation_base/hdiv_fe_transformation.NEDELEC_ONE(H(curl)) implements its owntransformations; H(div) has the value map but not the gradient map.
Thanks,
Joe (& Claude-Code)
All reactions