Skip to content

Commit

Permalink
Add support for Colon (:) in grid indexing (#673)
Browse files Browse the repository at this point in the history
* Add support for 'Colon' in grid indexing

* Rename argument
  • Loading branch information
eliascarv authored Dec 26, 2023
1 parent 3e3a95a commit 684adaf
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 2 deletions.
11 changes: 9 additions & 2 deletions src/mesh.jl
Original file line number Diff line number Diff line change
Expand Up @@ -195,8 +195,15 @@ Base.eltype(g::Grid) = typeof(first(g))

Base.getindex(g::Grid{Dim}, ijk::Vararg{Int,Dim}) where {Dim} = element(g, LinearIndices(size(g))[ijk...])

Base.getindex(g::Grid{Dim}, ijk::Vararg{Union{UnitRange{Int},Int},Dim}) where {Dim} =
getindex(g, CartesianIndex(first.(ijk)):CartesianIndex(last.(ijk)))
function Base.getindex(g::Grid{Dim}, ijk::Vararg{Union{UnitRange{Int},Colon,Int},Dim}) where {Dim}
dims = size(g)
ranges = ntuple(i -> _asrange(dims[i], ijk[i]), Dim)
getindex(g, CartesianIndices(ranges))
end

_asrange(::Int, r::UnitRange{Int}) = r
_asrange(d::Int, ::Colon) = 1:d
_asrange(::Int, i::Int) = i:i

# ----------------
# IMPLEMENTATIONS
Expand Down
21 changes: 21 additions & 0 deletions test/mesh.jl
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,11 @@
@test spacing(sub) == spacing(grid)
@test minimum(sub) == P2(2, 3)
@test maximum(sub) == P2(3, 8)
sub = grid[:, 3:7]
@test size(sub) == (10, 5)
@test spacing(sub) == spacing(grid)
@test minimum(sub) == P2(1, 3)
@test maximum(sub) == P2(11, 8)

# subgrid with comparable vertices of grid
grid = CartesianGrid((10, 10), P2(0.0, 0.0), T.((1.2, 1.2)))
Expand Down Expand Up @@ -246,6 +251,10 @@
@test size(sub) == (1, 3)
@test minimum(sub) == P2(0.2, 0.3)
@test maximum(sub) == P2(0.4, 1.0)
sub = grid[:, 3:5]
@test size(sub) == (5, 3)
@test minimum(sub) == P2(0.0, 0.3)
@test maximum(sub) == P2(1.0, 1.0)
@test Meshes.xyz(grid) == (x, y)
@test Meshes.XYZ(grid) == (repeat(x, 1, 6), repeat(y', 6, 1))

Expand Down Expand Up @@ -293,6 +302,10 @@
@test minimum(sub) == P2(0.2, 0.3)
@test maximum(sub) == P2(0.4, 1.0)
@test Meshes.XYZ(grid) == (X, Y)
sub = grid[:, 3:5]
@test size(sub) == (5, 3)
@test minimum(sub) == P2(0.0, 0.3)
@test maximum(sub) == P2(1.0, 1.0)

# conversion
cg = CartesianGrid{T}(10, 10)
Expand Down Expand Up @@ -440,6 +453,10 @@
@test size(sub) == (1, 5)
@test minimum(sub) == P2(1, 2)
@test maximum(sub) == P2(2, 7)
sub = mesh[:, 3:7]
@test size(sub) == (10, 5)
@test minimum(sub) == P2(0, 2)
@test maximum(sub) == P2(10, 7)

# test for https://github.com/JuliaGeometry/Meshes.jl/issues/261
points = rand(P2, 5)
Expand Down Expand Up @@ -529,5 +546,9 @@
@test size(sub) == (1, 5)
@test minimum(sub) == P2(1, 2)
@test maximum(sub) == P2(2, 7)
sub = tgrid[:, 3:7]
@test size(sub) == (10, 5)
@test minimum(sub) == P2(0, 2)
@test maximum(sub) == P2(10, 7)
end
end

0 comments on commit 684adaf

Please sign in to comment.