mirror of
https://github.com/JuliaFEM/JuliaFEM.jl.git
synced 2026-09-17 09:12:09 +00:00
refactor(src): update api.jl
src/basis/api.jl | 43 ++++++++----------------------------------- 1 file changed, 8 insertions(+), 35 deletions(-)
This commit is contained in:
+8
-35
@@ -4,8 +4,7 @@
|
||||
using Tensors
|
||||
using LinearAlgebra
|
||||
|
||||
# Re-export Vec for convenience (from Tensors.jl)
|
||||
export Vec
|
||||
# Vec is re-exported by `src/exports.jl` for convenience.
|
||||
|
||||
"""
|
||||
AbstractBasisDescription
|
||||
@@ -125,7 +124,7 @@ end
|
||||
|
||||
Return the number of basis functions for the given basis on the given topology.
|
||||
|
||||
**Zero-cost:** This function compiles to a constant integer for concrete types.
|
||||
Zero-cost: This function compiles to a constant integer for concrete types.
|
||||
The return value is compile-time known, enabling type-stable allocations and
|
||||
constant propagation throughout assembly code.
|
||||
|
||||
@@ -143,9 +142,6 @@ nbasis(Triangle{3}(), Lagrange{1}()) # 3 (linear triangle)
|
||||
nbasis(Triangle{6}(), Lagrange{2}()) # 6 (quadratic triangle)
|
||||
nbasis(Tetrahedron{10}(), Lagrange{2}()) # 10 (quadratic tetrahedron)
|
||||
|
||||
# Exotic elements (nodes ≠ basis functions)
|
||||
nbasis(Triangle{3}(), DKT()) # 9 (3 nodes but 9 DOFs!)
|
||||
|
||||
# Serendipity families
|
||||
nbasis(Quadrilateral{8}(), Serendipity{2}()) # 8 (reduced quadratic quad)
|
||||
```
|
||||
@@ -157,10 +153,9 @@ generated by `basis_generator.jl` alongside the basis function implementations.
|
||||
This ensures consistency: the generator knows exactly how many basis functions
|
||||
it produced, so `nbasis` always returns the correct value.
|
||||
|
||||
For custom/special bases (DKT, hierarchical, etc.), implement manually:
|
||||
```julia
|
||||
@inline nbasis(::Triangle{3}, ::DKT) = 9
|
||||
```
|
||||
For specialised bases that fall outside the Vandermonde catalogue (e.g.
|
||||
hierarchical refinement, plate-bending shape functions), implement
|
||||
`nbasis` manually next to the basis definition.
|
||||
|
||||
For truly dynamic bases (adaptive refinement), use instance-based dispatch:
|
||||
```julia
|
||||
@@ -189,31 +184,9 @@ function validate_dof_consistency(dof, K, P)
|
||||
end
|
||||
```
|
||||
|
||||
See also: [`get_basis_functions`](@ref), [`validate_dof_consistency`](@ref)
|
||||
See also: [`get_basis_functions`](@ref). The `validate_dof_consistency` sketch
|
||||
above is illustrative; it is not a separate exported API entry point.
|
||||
"""
|
||||
function nbasis end
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Deprecated bridge (old API names)
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
"""
|
||||
eval_basis!(basis_type, xi) (DEPRECATED)
|
||||
|
||||
Use `get_basis_functions(topology, basis, xi)` instead.
|
||||
Provided temporarily for migration.
|
||||
"""
|
||||
function eval_basis! end
|
||||
|
||||
"""
|
||||
eval_dbasis!(basis_type, xi) (DEPRECATED)
|
||||
|
||||
Use `get_basis_derivatives(topology, basis, xi)` instead.
|
||||
Provided temporarily for migration.
|
||||
"""
|
||||
function eval_dbasis! end
|
||||
|
||||
export AbstractBasis, Lagrange, Serendipity
|
||||
export get_basis_functions, get_basis_derivatives, get_basis_function, get_basis_derivative
|
||||
export nbasis
|
||||
export eval_basis!, eval_dbasis!
|
||||
# Exports for these types live in `src/exports.jl`.
|
||||
|
||||
Reference in New Issue
Block a user