mirror of
https://github.com/JuliaFEM/JuliaFEM.jl.git
synced 2026-08-06 04:21:33 +00:00
feat(quadrature): integrate basis degree into quadrature selection
Add `basis_quadrature_order` and an `integration_points(topology, basis)` overload
so assembly can match Gauss rules to `Lagrange{P}` / `Serendipity{P}` instead of
inferring order only from topology node counts.
- Delegate rule choice to `default_quadrature(T, ord)` with `ord` from the basis.
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
# This file is a part of JuliaFEM.
|
||||
# License is MIT: see https://github.com/JuliaFEM/JuliaFEM.jl/blob/master/LICENSE.md
|
||||
|
||||
"""
|
||||
basis_quadrature_order(basis::AbstractBasis) -> Int
|
||||
|
||||
Polynomial order passed to [`default_quadrature(::Type{<:AbstractTopology}, ::Int)`](@ref)
|
||||
when building [`integration_points(topology, basis)`](@ref).
|
||||
|
||||
Extensible: add methods for new [`AbstractBasis`](@ref) subtypes used in assembly caches.
|
||||
Patch/tensor-product bases used in IGA (B-spline/NURBS on a parameter cell) should
|
||||
implement this hook so quadrature matches the quadrature rule degree of the weak form,
|
||||
analogous to [`Lagrange`](@ref) / [`Serendipity`](@ref).
|
||||
"""
|
||||
basis_quadrature_order(::Lagrange{P}) where {P} = P
|
||||
basis_quadrature_order(::Serendipity{P}) where {P} = P
|
||||
|
||||
"""
|
||||
integration_points(topology::AbstractTopology, basis::AbstractBasis)
|
||||
|
||||
Like [`integration_points(topology)`](@ref), but selects [`default_quadrature`](@ref)
|
||||
from **`basis`** via [`basis_quadrature_order`](@ref) instead of inferring order only
|
||||
from [`nnodes`](@ref). Use this when the mesh topology node count does not reflect
|
||||
the polynomial degree of the active basis (or to force a consistent rule with
|
||||
[`create_element_cache`](@ref)).
|
||||
"""
|
||||
function integration_points(topology::T, basis::AbstractBasis) where {T<:AbstractTopology}
|
||||
ord = basis_quadrature_order(basis)
|
||||
rule = default_quadrature(T, ord)
|
||||
quad_topo = _quadrature_topology_type(T)
|
||||
quad_points = get_quadrature_points(quad_topo, rule)
|
||||
return Tuple(quad_points)
|
||||
end
|
||||
Reference in New Issue
Block a user