From 6de42a599a8d47b5c2cffc3e8ea6648c2dd94dca Mon Sep 17 00:00:00 2001 From: Jukka Aho Date: Sat, 9 May 2026 18:35:23 +0300 Subject: [PATCH] feat(legacy): add Poi1/Lagrange element constructors Provide legacy `Element` factories with Dict-backed geometry fields. - Implement `elements_lagrange.jl` hooks expected by Abaqus glue and Problems. --- src/legacy/elements_lagrange.jl | 58 +++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 src/legacy/elements_lagrange.jl diff --git a/src/legacy/elements_lagrange.jl b/src/legacy/elements_lagrange.jl new file mode 100644 index 0000000..6ee3563 --- /dev/null +++ b/src/legacy/elements_lagrange.jl @@ -0,0 +1,58 @@ +# This file is a part of JuliaFEM. +# License is MIT: see https://github.com/JuliaFEM/FEMBase.jl/blob/master/LICENSE + +# Poi1: 0D point element (single node, no parametric coordinates) +struct Poi1 <: AbstractBasis end + +# nnodes for Poi1 +nnodes(::Type{Poi1}) = 1 +nnodes(::Poi1) = 1 + +function get_basis(::E, ::Any, ::Any) where E<:AbstractElement{M,Poi1} where M + return [1] +end + +function get_dbasis(::E, ::Any, ::Any) where E<:AbstractElement{M,Poi1} where M + return [0] +end + +function (::Element{M,Poi1})(::Any, ::Float64, ::Type{Val{:detJ}}) where M + return 1.0 +end + +function get_integration_order(::Poi1) + return 1 +end + +function get_integration_points(::Poi1, ::Int) + return [(1.0, (0.0,))] +end + +function size(::Type{Poi1}) + return (0, 1) +end + +function length(::Type{Poi1}) + return 1 +end + +function get_reference_element_coordinates(::Type{Poi1}) + Vector{Float64}[[0.0]] +end + +function inside(::Union{Type{Seg2},Type{Seg3},Type{Quad4}, + Type{Quad8},Type{Quad9},Type{Pyr5}, + Type{Hex8},Type{Hex20}, + Type{Hex27}}, xi) + return all(-1.0 .<= xi .<= 1.0) +end + +function inside(::Union{Type{Tri3},Type{Tri6},Type{Tri7}, + Type{Tet4},Type{Tet10}}, xi) + return all(xi .>= 0.0) && (sum(xi) <= 1.0) +end + +function get_reference_coordinates(::E) where E<:AbstractElement{M,B} where {M,B} + return get_reference_element_coordinates(B) +end +