mirror of
https://github.com/JuliaFEM/JuliaFEM.jl.git
synced 2026-09-20 10:08:31 +00:00
73ec910589
MAJOR MILESTONE: FEMBase + FEMBasis fully consolidated, JuliaFEM loads! Consolidated files: - src/elements/ (3 files): elements.jl, elements_lagrange.jl, integrate.jl - src/fields/ (1 file): fields.jl (DCTI, DVTI, DCTV, DVTV, etc.) - src/sparse/ (1 file): sparse.jl (SparseMatrixCOO, SparseVectorCOO) - src/assembly/ (2 files): problems.jl, assembly.jl - src/solvers/ (1 file): solvers_base.jl - src/analysis.jl, src/core_types.jl (Node, IP, IntegrationPoint) Changes to JuliaFEM.jl: - Added dependencies: Tensors, Calculus - Removed @reexport using FEMBase (now consolidated) - Added 20+ include statements for consolidated files - Include order: fields → core_types → fembase_compat → sparse → elements Compatibility layer: - Created fembase_compat.jl: Minimal FEMBase submodule for vendor packages - Temporarily disabled vendor-specific Mortar2D functions in solvers_modal.jl Bug fixes: - Changed i == 1 → isequal(i, 1) in integrate.jl (== operator overridden by fields) - Resolved all FEMBasis. namespace references throughout codebase Result: - ✅ JuliaFEM loads successfully on Julia 1.12.1 - ✅ 134 exported symbols (was 171 with separate FEMBase) - ✅ Core types accessible: Seg2, Quad4, Problem, AbstractProblem, etc. - ⚠️ Vendor packages show FEMBase cache warnings (expected, harmless) TODO: - Re-enable Mortar2D functions after vendor consolidation - Field system == operator override needs redesign (Phase 4) - Continue Phase 2: Consolidate remaining vendor packages
38 lines
747 B
Julia
38 lines
747 B
Julia
# This file is a part of JuliaFEM.
|
|
# License is MIT: see https://github.com/JuliaFEM/jl/blob/master/LICENSE
|
|
|
|
""" NURBS segment. """
|
|
mutable struct NSeg <: AbstractBasis{1}
|
|
order :: Int
|
|
knots :: Vector{Float64}
|
|
weights :: Vector{Float64}
|
|
end
|
|
|
|
function NSeg()
|
|
NSeg(1,
|
|
[-1.0, -1.0, 1.0, 1.0],
|
|
ones(4))
|
|
end
|
|
|
|
function length(basis::NSeg)
|
|
nu = length(basis.knots) - basis.order - 1
|
|
return nu
|
|
end
|
|
|
|
function size(basis::NSeg)
|
|
return (1, length(basis))
|
|
end
|
|
|
|
function eval_basis!(basis::NSeg, N::Vector, xi::Vec{1})
|
|
pu = basis.order
|
|
tu = basis.knots
|
|
w = basis.weights
|
|
nu = length(tu)-pu-1
|
|
u = xi[1]
|
|
for j=1:nu
|
|
N[j] = w[j]*NURBS(j,pu,u,tu)
|
|
end
|
|
N ./= sum(N)
|
|
return N
|
|
end
|