Mercurial > repos > public > sbplib_julia
view StencilIndex.jl @ 91:c0f33eccd527 cell_based_test
Create types StencilIndex, LowerClosureIndex, UpperClosureIndex and InteriorIndex. First attempt at seperating out interior and closure indices from. Not fully implemented.
author | Vidar Stiernström <vidar.stiernstrom@it.uu.se> |
---|---|
date | Tue, 29 Jan 2019 14:32:28 +0100 |
parents | |
children | 93df72e2b135 |
line wrap: on
line source
abstract type StencilIndex end function Base.getindex(si::StencilIndex, i::Int) return si.index[i] end struct LowerClosureIndex <: StencilIndex index::CartesianIndex end struct UpperClosureIndex <: StencilIndex index::CartesianIndex end struct InteriorIndex <: StencilIndex index::CartesianIndex end # TODO: This should take a Stencil or DiffOp so that we can extract all the # indices in the closures. # TODO: Where to place this function? function stencilindices(grid::Grid.EquidistantGrid) lowerclosure = Vector{LowerClosureIndex}(undef, 0) upperclosure = Vector{UpperClosureIndex}(undef, 0) interior = Vector{InteriorIndex}(undef, 0) # TODO: Fix such that the indices of the entire closure width is included. islower = x -> (x == 1) isupper = x -> (x in grid.numberOfPointsPerDim) ci = CartesianIndices(grid.numberOfPointsPerDim) for i ∈ ci I = Tuple(i) if any(islower, I) push!(lowerclosure, LowerClosureIndex(i)) # TODO: Corner points should be in both Lower and Upper? # Should they have a separate type? elseif any(isupper, I) push!(upperclosure, UpperClosureIndex(i)) else push!(interior, InteriorIndex(i)) end end return lowerclosure, upperclosure, interior end