Skip to content
Snippets Groups Projects
Commit 217f4e96 authored by Stephan Hilb's avatar Stephan Hilb
Browse files

improve performance

parent d0d9dd57
No related branches found
No related tags found
No related merge requests found
...@@ -115,8 +115,7 @@ myvec(x::Number) = x ...@@ -115,8 +115,7 @@ myvec(x::Number) = x
function interpolate!(dst::FeFunction, ::P1, expr::Function; params...) function interpolate!(dst::FeFunction, ::P1, expr::Function; params...)
params = NamedTuple(params) params = NamedTuple(params)
space = dst.space mesh = dst.space.mesh
mesh = space.mesh
for cell in cells(mesh) for cell in cells(mesh)
for f in params for f in params
bind!(f, cell) bind!(f, cell)
...@@ -130,8 +129,9 @@ function interpolate!(dst::FeFunction, ::P1, expr::Function; params...) ...@@ -130,8 +129,9 @@ function interpolate!(dst::FeFunction, ::P1, expr::Function; params...)
opvalues = map(f -> evaluate(f, xloc), params) opvalues = map(f -> evaluate(f, xloc), params)
gdofs = space.dofmap[:, eldof, cell] res = myvec(expr(x; opvalues...))
dst.data[gdofs] .= myvec(expr(x; opvalues...)) gdofs = dst.space.dofmap[:, eldof, cell]
@inbounds dst.data[gdofs] .= res
end end
end end
end end
......
...@@ -166,9 +166,13 @@ function project_l2_lagrange!(u::FeFunction, img::AbstractArray) ...@@ -166,9 +166,13 @@ function project_l2_lagrange!(u::FeFunction, img::AbstractArray)
a(xloc, u, du, v, dv; f) = dot(u, v) a(xloc, u, du, v, dv; f) = dot(u, v)
l(xloc, v, dv; f) = dot(f, v) l(xloc, v, dv; f) = dot(f, v)
I = Float64[] I = Int[]
J = Float64[] J = Int[]
V = Float64[] V = Float64[]
n = length(img) * nrdims * nldofs * nrdims * nldofs
sizehint!(I, n)
sizehint!(J, n)
sizehint!(V, n)
b = zeros(ndofs(space)) b = zeros(ndofs(space))
# mesh cells # mesh cells
......
...@@ -68,9 +68,9 @@ function assemble(space::FeSpace, a, l; params...) ...@@ -68,9 +68,9 @@ function assemble(space::FeSpace, a, l; params...)
n = ncells(mesh) * size(qx, 2) * n = ncells(mesh) * size(qx, 2) *
nrdims * nldofs * nrdims * nldofs nrdims * nldofs * nrdims * nldofs
I = zeros(n) I = Vector{Int}(undef, n)
J = zeros(n) J = Vector{Int}(undef, n)
V = zeros(n) V = Vector{Float64}(undef, n)
spidx = 0 spidx = 0
b = zeros(ndofs(space)) b = zeros(ndofs(space))
gdof = LinearIndices((nrdims, ndofs(space))) gdof = LinearIndices((nrdims, ndofs(space)))
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment