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