diff --git a/src/function.jl b/src/function.jl
index 17cb43be649fa848dae11687b324d4fdb52e7e46..22f25a83618a6f1c0d4b8b375eeb49e45154b5ab 100644
--- a/src/function.jl
+++ b/src/function.jl
@@ -214,9 +214,10 @@ function integrate(mesh::Mesh, expr; params...)
end
function bind!(f::FeFunction, cell)
- gdofs_view = view(f.space.dofmap, :, :, cell)
- gdofs = SArray{Tuple{prod(f.space.size) * ndofs(f.space.element)}}(gdofs_view)
- f.ldata .= f.data[gdofs]
+ @boundscheck cell in axes(f.space.dofmap, 3)
+ gdofs = SArray{Tuple{prod(f.space.size) * ndofs(f.space.element)}}(
+ @inbounds view(f.space.dofmap, :, :, cell))
+ f.ldata .= @inbounds f.data[gdofs]
return f
end
diff --git a/src/mesh.jl b/src/mesh.jl
index 6b0ef3a847514d8b5059d0ad39c381ba5d8e0922..e3331bd15787cb8f34d36d5f4ff686f7cb1dc4b3 100644
--- a/src/mesh.jl
+++ b/src/mesh.jl
@@ -378,7 +378,7 @@ function area(mesh, cell)
return det(A[:, 2:3] .- A[:, 1]) / 2
end
-area(mesh) = mapreduce(cell -> area(mesh, cell), +, cells(mesh))
+area(mesh) = mapfoldl(cell -> area(mesh, cell), +, cells(mesh))
function diam(mesh, cell)
A = SArray{Tuple{ndims_space(mesh), nvertices_cell(mesh)}}(
@@ -392,9 +392,10 @@ end
mesh_size(mesh) = mapreduce(cell -> diam(mesh, cell), max, cells(mesh))
function elmap(mesh, cell)
- # TODO: can be improved
+ @boundscheck cell in axes(mesh.cells, 2)
+ # TODO: can be improved, how?
A = SArray{Tuple{ndims_space(mesh), nvertices_cell(mesh)}}(
- view(mesh.vertices, :, view(mesh.cells, :, cell)))
+ @inbounds view(mesh.vertices, :, view(mesh.cells, :, cell)))
return x -> A * SA[1 - x[1] - x[2], x[1], x[2]]
end