chore(basis): Regenerate basis functions with Serendipity for Quad8

Regenerated by lagrange_generator.jl on 2025-11-20 18:14:22.

Changed Quad8 (8-node quadrilateral) from Lagrange{Quadrilateral, 2} to Serendipity{Quadrilateral, 2}. This distinguishes 8-node serendipity (no center node) from 9-node Lagrange (with center node), eliminating method overwrite warnings.

All 6 method definitions updated:
- get_reference_element_coordinates (type and instance)
- get_basis_functions (type and instance)
- get_basis_derivatives (type and instance)

Quad9 remains Lagrange{Quadrilateral, 2} with 9 nodes including center.
This commit is contained in:
Jukka Aho
2025-11-20 18:21:51 +02:00
parent 2452735cf6
commit bd66cbf689
+8 -8
View File
@@ -20,7 +20,7 @@
# Generator:
# src/basis/lagrange_generator.jl (symbolic engine)
#
# Generated: 2025-11-13 02:42:16
# Generated: 2025-11-20 18:14:22
# ============================================================================
# This file generates methods for Lagrange{T,P} where:
@@ -170,29 +170,29 @@
end
# ──────────────────────────────────────────────────────────────────────────────
# Lagrange{Quadrilateral, 2}: 8-node serendipity quadrilateral element
# Serendipity{Quadrilateral, 2}: 8-node serendipity quadrilateral element
# (Old name: Quad8, 8 nodes)
# ──────────────────────────────────────────────────────────────────────────────
function get_reference_element_coordinates(::Type{Lagrange{Quadrilateral, 2}})
function get_reference_element_coordinates(::Type{Serendipity{Quadrilateral, 2}})
return (Vec{2, Float64}(tuple(-1.0, -1.0)), Vec{2, Float64}(tuple(1.0, -1.0)), Vec{2, Float64}(tuple(1.0, 1.0)), Vec{2, Float64}(tuple(-1.0, 1.0)), Vec{2, Float64}(tuple(0.0, -1.0)), Vec{2, Float64}(tuple(1.0, 0.0)), Vec{2, Float64}(tuple(0.0, 1.0)), Vec{2, Float64}(tuple(-1.0, 0.0)))
end
function get_reference_element_coordinates(::Lagrange{Quadrilateral, 2})
function get_reference_element_coordinates(::Serendipity{Quadrilateral, 2})
return (Vec{2, Float64}(tuple(-1.0, -1.0)), Vec{2, Float64}(tuple(1.0, -1.0)), Vec{2, Float64}(tuple(1.0, 1.0)), Vec{2, Float64}(tuple(-1.0, 1.0)), Vec{2, Float64}(tuple(0.0, -1.0)), Vec{2, Float64}(tuple(1.0, 0.0)), Vec{2, Float64}(tuple(0.0, 1.0)), Vec{2, Float64}(tuple(-1.0, 0.0)))
end
@inline function get_basis_functions(::Type{Quadrilateral}, ::Type{Lagrange{Quadrilateral, 2}}, xi::Vec)
@inline function get_basis_functions(::Type{Quadrilateral}, ::Type{Serendipity{Quadrilateral, 2}}, xi::Vec)
(u, v) = xi
@inbounds return (-0.25 + 0.25 * u ^ 2 + 0.25 * (u * v) + 0.25 * v ^ 2 + -0.25 * (u ^ 2 * v) + -0.25 * (u * v ^ 2), -0.25 + 0.25 * u ^ 2 + -0.25 * (u * v) + 0.25 * v ^ 2 + -0.25 * (u ^ 2 * v) + 0.25 * (u * v ^ 2), -0.25 + 0.25 * u ^ 2 + 0.25 * (u * v) + 0.25 * v ^ 2 + 0.25 * (u ^ 2 * v) + 0.25 * (u * v ^ 2), -0.25 + 0.25 * u ^ 2 + -0.25 * (u * v) + 0.25 * v ^ 2 + 0.25 * (u ^ 2 * v) + -0.25 * (u * v ^ 2), 0.5 + -0.5v + -0.5 * u ^ 2 + 0.5 * (u ^ 2 * v), 0.5 + 0.5u + -0.5 * v ^ 2 + -0.5 * (u * v ^ 2), 0.5 + 0.5v + -0.5 * u ^ 2 + -0.5 * (u ^ 2 * v), 0.5 + -0.5u + -0.5 * v ^ 2 + 0.5 * (u * v ^ 2))
end
@inline function get_basis_functions(::Quadrilateral, ::Lagrange{Quadrilateral, 2}, xi::Vec)
@inline function get_basis_functions(::Quadrilateral, ::Serendipity{Quadrilateral, 2}, xi::Vec)
(u, v) = xi
@inbounds return (-0.25 + 0.25 * u ^ 2 + 0.25 * (u * v) + 0.25 * v ^ 2 + -0.25 * (u ^ 2 * v) + -0.25 * (u * v ^ 2), -0.25 + 0.25 * u ^ 2 + -0.25 * (u * v) + 0.25 * v ^ 2 + -0.25 * (u ^ 2 * v) + 0.25 * (u * v ^ 2), -0.25 + 0.25 * u ^ 2 + 0.25 * (u * v) + 0.25 * v ^ 2 + 0.25 * (u ^ 2 * v) + 0.25 * (u * v ^ 2), -0.25 + 0.25 * u ^ 2 + -0.25 * (u * v) + 0.25 * v ^ 2 + 0.25 * (u ^ 2 * v) + -0.25 * (u * v ^ 2), 0.5 + -0.5v + -0.5 * u ^ 2 + 0.5 * (u ^ 2 * v), 0.5 + 0.5u + -0.5 * v ^ 2 + -0.5 * (u * v ^ 2), 0.5 + 0.5v + -0.5 * u ^ 2 + -0.5 * (u ^ 2 * v), 0.5 + -0.5u + -0.5 * v ^ 2 + 0.5 * (u * v ^ 2))
end
@inline function get_basis_derivatives(::Type{Quadrilateral}, ::Type{Lagrange{Quadrilateral, 2}}, xi::Vec)
@inline function get_basis_derivatives(::Type{Quadrilateral}, ::Type{Serendipity{Quadrilateral, 2}}, xi::Vec)
(u, v) = xi
@inbounds return (Vec(float.(tuple(0.25 * (2 * u ^ (2 - 1)) + 0.25v + -0.25 * ((2 * u ^ (2 - 1)) * v) + -0.25 * v ^ 2, 0.25u + 0.25 * (2 * v ^ (2 - 1)) + -0.25 * u ^ 2 + -0.25 * (u * (2 * v ^ (2 - 1)))))), Vec(float.(tuple(0.25 * (2 * u ^ (2 - 1)) + -0.25v + -0.25 * ((2 * u ^ (2 - 1)) * v) + 0.25 * v ^ 2, -0.25u + 0.25 * (2 * v ^ (2 - 1)) + -0.25 * u ^ 2 + 0.25 * (u * (2 * v ^ (2 - 1)))))), Vec(float.(tuple(0.25 * (2 * u ^ (2 - 1)) + 0.25v + 0.25 * ((2 * u ^ (2 - 1)) * v) + 0.25 * v ^ 2, 0.25u + 0.25 * (2 * v ^ (2 - 1)) + 0.25 * u ^ 2 + 0.25 * (u * (2 * v ^ (2 - 1)))))), Vec(float.(tuple(0.25 * (2 * u ^ (2 - 1)) + -0.25v + 0.25 * ((2 * u ^ (2 - 1)) * v) + -0.25 * v ^ 2, -0.25u + 0.25 * (2 * v ^ (2 - 1)) + 0.25 * u ^ 2 + -0.25 * (u * (2 * v ^ (2 - 1)))))), Vec(float.(tuple(-0.5 * (2 * u ^ (2 - 1)) + 0.5 * ((2 * u ^ (2 - 1)) * v), -0.5 + 0.5 * u ^ 2))), Vec(float.(tuple(0.5 + -0.5 * v ^ 2, -0.5 * (2 * v ^ (2 - 1)) + -0.5 * (u * (2 * v ^ (2 - 1)))))), Vec(float.(tuple(-0.5 * (2 * u ^ (2 - 1)) + -0.5 * ((2 * u ^ (2 - 1)) * v), 0.5 + -0.5 * u ^ 2))), Vec(float.(tuple(-0.5 + 0.5 * v ^ 2, -0.5 * (2 * v ^ (2 - 1)) + 0.5 * (u * (2 * v ^ (2 - 1)))))))
end
@inline function get_basis_derivatives(::Quadrilateral, ::Lagrange{Quadrilateral, 2}, xi::Vec)
@inline function get_basis_derivatives(::Quadrilateral, ::Serendipity{Quadrilateral, 2}, xi::Vec)
(u, v) = xi
@inbounds return (Vec(float.(tuple(0.25 * (2 * u ^ (2 - 1)) + 0.25v + -0.25 * ((2 * u ^ (2 - 1)) * v) + -0.25 * v ^ 2, 0.25u + 0.25 * (2 * v ^ (2 - 1)) + -0.25 * u ^ 2 + -0.25 * (u * (2 * v ^ (2 - 1)))))), Vec(float.(tuple(0.25 * (2 * u ^ (2 - 1)) + -0.25v + -0.25 * ((2 * u ^ (2 - 1)) * v) + 0.25 * v ^ 2, -0.25u + 0.25 * (2 * v ^ (2 - 1)) + -0.25 * u ^ 2 + 0.25 * (u * (2 * v ^ (2 - 1)))))), Vec(float.(tuple(0.25 * (2 * u ^ (2 - 1)) + 0.25v + 0.25 * ((2 * u ^ (2 - 1)) * v) + 0.25 * v ^ 2, 0.25u + 0.25 * (2 * v ^ (2 - 1)) + 0.25 * u ^ 2 + 0.25 * (u * (2 * v ^ (2 - 1)))))), Vec(float.(tuple(0.25 * (2 * u ^ (2 - 1)) + -0.25v + 0.25 * ((2 * u ^ (2 - 1)) * v) + -0.25 * v ^ 2, -0.25u + 0.25 * (2 * v ^ (2 - 1)) + 0.25 * u ^ 2 + -0.25 * (u * (2 * v ^ (2 - 1)))))), Vec(float.(tuple(-0.5 * (2 * u ^ (2 - 1)) + 0.5 * ((2 * u ^ (2 - 1)) * v), -0.5 + 0.5 * u ^ 2))), Vec(float.(tuple(0.5 + -0.5 * v ^ 2, -0.5 * (2 * v ^ (2 - 1)) + -0.5 * (u * (2 * v ^ (2 - 1)))))), Vec(float.(tuple(-0.5 * (2 * u ^ (2 - 1)) + -0.5 * ((2 * u ^ (2 - 1)) * v), 0.5 + -0.5 * u ^ 2))), Vec(float.(tuple(-0.5 + 0.5 * v ^ 2, -0.5 * (2 * v ^ (2 - 1)) + 0.5 * (u * (2 * v ^ (2 - 1)))))))
end