mirror of
https://github.com/JuliaFEM/JuliaFEM.jl.git
synced 2026-09-25 03:24:28 +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
48 lines
1.0 KiB
Julia
48 lines
1.0 KiB
Julia
# This file is a part of JuliaFEM.
|
|
# License is MIT: see https://github.com/JuliaFEM/jl/blob/master/LICENSE
|
|
|
|
mutable struct NSurf <: AbstractBasis{2}
|
|
order_u :: Int
|
|
order_v :: Int
|
|
knots_u :: Vector{Float64}
|
|
knots_v :: Vector{Float64}
|
|
weights :: Matrix{Float64}
|
|
end
|
|
|
|
function NSurf()
|
|
NSurf(1, 1,
|
|
[-1.0, -1.0, 1.0, 1.0],
|
|
[-1.0, -1.0, 1.0, 1.0],
|
|
ones(2, 2))
|
|
end
|
|
|
|
function length(basis::NSurf)
|
|
nu = length(basis.knots_u) - basis.order_u - 1
|
|
nv = length(basis.knots_v) - basis.order_v - 1
|
|
return nu*nv
|
|
end
|
|
|
|
function size(basis::NSurf)
|
|
return (2, length(basis))
|
|
end
|
|
|
|
function eval_basis!(basis::NSurf, N::Vector, xi::Vec{2})
|
|
pu = basis.order_u
|
|
pv = basis.order_v
|
|
tu = basis.knots_u
|
|
tv = basis.knots_v
|
|
w = basis.weights
|
|
nu = length(tu)-pu-1
|
|
nv = length(tv)-pv-1
|
|
u, v = xi
|
|
n = 1
|
|
for i=1:nu
|
|
for j=1:nv
|
|
N[n] = w[i,j]*NURBS(i,pu,u,tu)*NURBS(j,pv,v,tv)
|
|
n += 1
|
|
end
|
|
end
|
|
N ./= sum(N)
|
|
return N
|
|
end
|