Greetings,
I’ve started the task of implementing the Biquadratic pyramid in VTK (vtkBiQuadraticPyramid with 14 nodes), and noticed that both vtkQuadraticPyramid and vtkPyramid have issues when computing the Jacobian inverse at the apex.
This is due to how the derivatives are implemented: define Nk as the interpolation functions over the reference pyramid, and T as the Bedrosian transform.
The functions over a unit cube can be found by taking Nk o T
(coordinate transform), which is what you’ve done. For the derivatives however, you’ve taken them over the space of the unit cube itself (say xq
, yq
, zq
), leading to your issues with the Jacobian inverse. I propose instead to apply dNq = grad(Nq,xk)
, that is, take gradients of the cube shape functions on the space of the pyramid (xk
, yk
, zk
), which is accomplished by first computing dNk = grad(Nk,xk)
and then dNq = dNk o T
(apply Bedrosian transform over the derivatives in the reference pyramid).
The implication of this method is that now integrals have to be computed according to the paper of M. Bergot: an integral of fk on the pyramidal space is the same as an integral of 4*fq*((1-zq)^2)
on the unit cube, and this integral over the unit cube itself can easily be passed to the more common Gaussian space (-1,1)
, or isoparametric cube Qr (xr,yr,zr).
The advantage is that now it is possible to properly compute the Jacobian and it’s inverse at the apex without any special “tricks”. I have computed N
and dN
for both PYR05 and PYR14, and can provide the symbolic results needed.
Regarding references, I’ve used the paper “Higher-order finite elements for hybrid meshes using new nodal pyramidal elements” by M. Bergot, G. Cohen and M. Durufle. specifically, the quadrature rule can be found on chapter 3, equation 12. I have tested this with both exact and approximate quadratures for a Laplacian operator over a reference pyramid for both PYR05 and PYR14, as well as for the creation of the consistent mass matrix for a deformed affine PYR05 element. In both cases, the 3 quadrature forms i propose give the exact same result while still allowing an exact Jacobian inversion at the apex.
Please, let me know what are your thoughts on this, and if you have any more questions about this proposal.
In any case, thank you for your attention