In [92]:
include("../src/HPFEM.jl")
Out[92]:
In [93]:
nel = 2
nnodes = nel + 1
idir = [1,nnodes]
M = 15
Q = M+2
bas = HPFEM.Basis1d(M,Q)
lmap = HPFEM.locmap(bas)
dof = HPFEM.DofMap1d(lmap, nnodes, idir);
In [94]:
fun(x) = (1 + 4*pi^2)*sin(2*pi*x)
resp(x) = sin(2*pi*x)
Out[94]:
In [95]:
a = -1
b = 1
nodes = collect(linspace(a, b, nnodes))
Out[95]:
In [96]:
elems = [HPFEM.Element1d(e, nodes[e], nodes[e+1], bas) for e = 1:nel];
In [97]:
solver = HPFEM.CholeskySC(dof, HPFEM.BBMatrix);
In [98]:
for e = 1:nel
Ae = HPFEM.mass_matrix(bas, elems[e])
Se = HPFEM.stiff_matrix(bas,elems[e])
Ae = Ae + Se
HPFEM.add_local_matrix(solver, e, Ae)
end
In [99]:
Fe = zeros(HPFEM.nmodes(lmap), nel)
for e = 1:nel
fe = fun(elems[e].x)
HPFEM.add_rhs!(bas, elems[e], fe, sub(Fe, :, e))
end
# Apply Dirichilet BCs:
Fe[1,1] = resp(a)
Fe[2,nel]= resp(b)
Fe = Fe
Out[99]:
In [100]:
HPFEM.solve!(solver, Fe)
Out[100]:
In [101]:
nξ = 101
ξ = collect(linspace(-1,1,nξ));
ϕ = zeros(nξ, M)
for i = 1:M
ϕ[:,i] = bas(ξ, i)
end
Ue = ϕ * Fe;
In [102]:
using PyPlot
x = [(1-ξ)*el.a/2 + (1+ξ)*el.b/2 for el in elems]
maxerr = 0.0
for e = 1:nel
uu = resp(x[e])
err = maxabs(uu-Ue[:,e])
if err > maxerr maxerr = err end
plot(x[e], Ue[:,e],"o")
plot(x[e], uu, "b")
end
maxerr
Out[102]:
In [ ]: