mirror of
https://github.com/JuliaFEM/JuliaFEM.jl.git
synced 2026-09-20 10:08:31 +00:00
7b6fcfdaf5
- Create src/basis/ directory structure - Copy all FEMBasis.jl source files verbatim: - abstract.jl: AbstractBasis type definition and interface - create_basis.jl: Metaprogramming for basis generation - lagrange_*.jl: All Lagrange element bases (Seg, Quad, Tri, Tet, Hex, Wedge, Pyr) - nurbs*.jl: NURBS basis functions - math.jl: jacobian, grad, interpolate functions - subs.jl, vandermonde.jl: Symbolic/mathematical utilities Strategy: Copy first, integrate later (safest approach) Next: Integrate into src/JuliaFEM.jl module
38 lines
756 B
Julia
38 lines
756 B
Julia
# This file is a part of JuliaFEM.
|
|
# License is MIT: see https://github.com/JuliaFEM/FEMBasis.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
|