mirror of
https://github.com/JuliaFEM/JuliaFEM.jl.git
synced 2026-09-20 01:59:59 +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
55 lines
1.0 KiB
Julia
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
|