In [134]:
using Jacobi
using PyPlot
include("../src/HPFEM.jl");
In [135]:
M= 10
Q=M
nel = 1
nnodes = nel + 1
a=-1
b= 1
nodes = collect(linspace(a, b, nnodes));
idir = [1,nnodes]
lagr = HPFEM.Lagrange1d(M);
quad = HPFEM.QuadType(Q);
base = HPFEM.Basis1d(lagr, quad);
lmap = HPFEM.locmap(base)
dof = HPFEM.DofMap1d(lmap, nnodes, idir);
In [136]:
fun(x) = (1 + 4*pi^2)*sin(2*pi*x)
resp(x) = sin(2*pi*x)
Out[136]:
In [137]:
elemento = [HPFEM.Element1d(e, nodes[e], nodes[e+1], base) for e = 1:nel]
#solver = HPFEM.CholeskySC(dof, HPFEM.BBMatrix);
solver = HPFEM.CholeskySC(dof, HPFEM.BBSymTri);
In [138]:
for e = 1:nel
x = elemento[e].x
Ae = HPFEM.mass_matrix(base, elemento[e])
Se = HPFEM.stiff_matrix(base,elemento[e])
Ae = Ae + Se
HPFEM.add_local_matrix(solver, e, Ae)
end
In [139]:
bnd = HPFEM.bndry_idx(lmap)
Out[139]:
In [140]:
Fe = zeros(HPFEM.nmodes(lmap), nel)
for e = 1:nel
fe = fun(elemento[e].x)
HPFEM.add_rhs!(base, elemento[e], fe, sub(Fe, :, e))
end
Fe[bnd[1],1] = resp(a)
Fe[bnd[2],nel]= resp(b)
Out[140]:
In [141]:
HPFEM.solve!(solver, Fe)
Out[141]:
In [142]:
nξ = 101
ξ = collect(linspace(-1,1,nξ));
ϕ = zeros(nξ, M)
for i = 1:M
ϕ[:,i] = base(ξ, i)
end
Ue = ϕ * Fe
Out[142]:
In [144]:
using PyPlot
x = [(1-ξ)*el.a/2 + (1+ξ)*el.b/2 for el in elemento]
maxerr = -1000000
for e = 1:nel
uu = resp(x[e])
err = maxabs(uu-Ue[:,e])
if err > maxerr maxerr = err end
plot(x[e], Ue[:,e], "r")
plot(x[e], uu, "ob")
end
maxerr
Out[144]:
In [ ]: