mirror of
https://github.com/JuliaFEM/JuliaFEM.jl.git
synced 2026-09-27 04:10:54 +00:00
feat: Integrate FEMBasis into JuliaFEM module (partial)
- Add Tensors and Calculus to Project.toml dependencies - Add basis includes to src/JuliaFEM.jl (Phase 1 integration) - Fix FEMBasis. namespace references → use JuliaFEM namespace - Update create_basis.jl: AbstractBasis (not FEMBasis.AbstractBasis) Status: Basis files load, but conflict with FEMBase expectations Next: Need to consolidate FEMBase or work around AbstractElement type constraints This is expected during consolidation - we're bridging two systems.
This commit is contained in:
@@ -107,6 +107,8 @@ module JuliaFEM
|
||||
|
||||
using SparseArrays, LinearAlgebra, Statistics
|
||||
using Reexport, ForwardDiff, LightXML, HDF5, Parameters
|
||||
using Tensors # For basis functions (Vec type)
|
||||
import Calculus # For symbolic differentiation in basis generation
|
||||
|
||||
import FEMSparse
|
||||
|
||||
@@ -115,6 +117,24 @@ import FEMBase: get_unknown_field_name, get_unknown_field_dimension,
|
||||
assemble!, update!, initialize!
|
||||
using FEMBase: get_problems
|
||||
|
||||
# Consolidate FEMBasis.jl into src/basis/ (Phase 1)
|
||||
include("basis/abstract.jl")
|
||||
include("basis/subs.jl")
|
||||
include("basis/vandermonde.jl")
|
||||
include("basis/create_basis.jl")
|
||||
include("basis/lagrange_segments.jl")
|
||||
include("basis/lagrange_quadrangles.jl")
|
||||
include("basis/lagrange_triangles.jl")
|
||||
include("basis/lagrange_tetrahedrons.jl")
|
||||
include("basis/lagrange_hexahedrons.jl")
|
||||
include("basis/lagrange_wedges.jl")
|
||||
include("basis/lagrange_pyramids.jl")
|
||||
include("basis/nurbs.jl")
|
||||
include("basis/nurbs_segment.jl")
|
||||
include("basis/nurbs_surface.jl")
|
||||
include("basis/nurbs_solid.jl")
|
||||
include("basis/math.jl")
|
||||
|
||||
using TimerOutputs
|
||||
export @timeit, print_timer
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ import Calculus
|
||||
export Vec
|
||||
|
||||
# Type alias for coordinate inputs (tuples or Vec)
|
||||
const Vecish{N, T} = Union{NTuple{N, T}, Vec{N, T}}
|
||||
const Vecish{N,T} = Union{NTuple{N,T},Vec{N,T}}
|
||||
|
||||
"""
|
||||
AbstractBasis{dim}
|
||||
|
||||
@@ -78,7 +78,7 @@ function create_basis(name, description, X::Vector{<:Vecish{D, T}}, basis, dbasi
|
||||
end
|
||||
|
||||
code = quote
|
||||
struct $name <: FEMBasis.AbstractBasis{$D}
|
||||
struct $name <: AbstractBasis{$D}
|
||||
end
|
||||
|
||||
Base.@pure function Base.size(::Type{$name})
|
||||
@@ -94,18 +94,18 @@ function create_basis(name, description, X::Vector{<:Vecish{D, T}}, basis, dbasi
|
||||
return $N
|
||||
end
|
||||
|
||||
function FEMBasis.get_reference_element_coordinates(::Type{$name})
|
||||
function get_reference_element_coordinates(::Type{$name})
|
||||
return $X
|
||||
end
|
||||
|
||||
@inline function FEMBasis.eval_basis!(::Type{$name}, N::Vector{<:Number}, xi::Vec)
|
||||
@inline function eval_basis!(::Type{$name}, N::Vector{<:Number}, xi::Vec)
|
||||
@assert length(N) == $N
|
||||
$unpack
|
||||
@inbounds $Q
|
||||
return N
|
||||
end
|
||||
|
||||
@inline function FEMBasis.eval_dbasis!(::Type{$name}, dN::Vector{<:Vec{$D}}, xi::Vec)
|
||||
@inline function eval_dbasis!(::Type{$name}, dN::Vector{<:Vec{$D}}, xi::Vec)
|
||||
@assert length(dN) == $N
|
||||
$unpack
|
||||
@inbounds $V
|
||||
|
||||
Reference in New Issue
Block a user