Files
JuliaFEM.jl/src/basis/subs.jl
T
Jukka Aho 7b6fcfdaf5 feat: Copy FEMBasis.jl files to src/basis/ (Phase 1 start)
- 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
2025-11-08 09:02:40 +02:00

55 lines
1.0 KiB
Julia

# This file is a part of JuliaFEM.
# License is MIT: see https://github.com/JuliaFEM/FEMBasis.jl/blob/master/LICENSE
function subs(p::Number, ::Any)
return p
end
function subs(p::Symbol, data::Pair{Symbol, T}) where T
k, v = data
if p == k
return v
end
return p
end
function subs(p::Symbol, data::NTuple{N,Pair{Symbol, T}}) where {N, T}
for (k, v) in data
if p == k
return v
end
end
return p
end
function subs(p::Expr, d::Pair)
v = copy(p)
for j in 2:length(p.args)
v.args[j] = subs(v.args[j], d)
end
return v
end
"""
subs(expression, data)
Given expression and pair(s) of `symbol => value` data, substitute to expression.
# Examples
Let us have polynomial `1 + u + v + u*v^2`, and substitute u=1 and v=2:
```julia
expression = :(1 + u + v + u*v^2)
data = (:u => 1.0, :v => 2.0)
subs(expression, data)
8.0
```
"""
function subs(p::Expr, data::NTuple{N,Pair{Symbol, T}}) where {N, T}
for di in data
p = subs(p, di)
end
return Calculus.simplify(p)
end