Mercurial > repos > public > sbplib_julia
comparison index.jl @ 165:9fc9167e9a4c boundary_conditions
Factor out function for geting the region of an index
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Tue, 21 May 2019 11:40:21 +0200 |
parents | ce56727e4232 |
children |
comparison
equal
deleted
inserted
replaced
164:6b633624703a | 165:9fc9167e9a4c |
---|---|
24 Base.convert(::Type{CartesianIndex}, I::NTuple{N,Index} where N) = CartesianIndex(convert.(Int, I)) | 24 Base.convert(::Type{CartesianIndex}, I::NTuple{N,Index} where N) = CartesianIndex(convert.(Int, I)) |
25 | 25 |
26 Base.Int(I::Index) = I.i | 26 Base.Int(I::Index) = I.i |
27 | 27 |
28 function Index(i::Integer, boundary_width::Integer, dim_size::Integer) | 28 function Index(i::Integer, boundary_width::Integer, dim_size::Integer) |
29 if 0 < i <= boundary_width | 29 return Index{getregion(i,boundary_width,dim_size)}(i) |
30 return Index{Lower}(i) | |
31 elseif boundary_width < i <= dim_size-boundary_width | |
32 return Index{Interior}(i) | |
33 elseif dim_size-boundary_width < i <= dim_size | |
34 return Index{Upper}(i) | |
35 else | |
36 error("Bounds error") # TODO: Make this more standard | |
37 end | |
38 end | 30 end |
39 | 31 |
40 IndexTuple(t::Vararg{Tuple{T, DataType}}) where T<:Integer = Index.(t) | 32 IndexTuple(t::Vararg{Tuple{T, DataType}}) where T<:Integer = Index.(t) |
41 | 33 |
42 # TODO: Use the values of the region structs, e.g. Lower(), for the region parameter instead of the types. | 34 # TODO: Use the values of the region structs, e.g. Lower(), for the region parameter instead of the types. |
50 function regionindices(gridsize::NTuple{Dim,Integer}, closuresize::NTuple{Dim,Integer}, region::NTuple{Dim,DataType}) where Dim | 42 function regionindices(gridsize::NTuple{Dim,Integer}, closuresize::NTuple{Dim,Integer}, region::NTuple{Dim,DataType}) where Dim |
51 regions = map(getrange,gridsize,closuresize,region) | 43 regions = map(getrange,gridsize,closuresize,region) |
52 return CartesianIndices(regions) | 44 return CartesianIndices(regions) |
53 end | 45 end |
54 | 46 |
47 function getregion(i::Integer, boundary_width::Integer, dim_size::Integer) | |
48 if 0 < i <= boundary_width | |
49 return Lower | |
50 elseif boundary_width < i <= dim_size-boundary_width | |
51 return Interior | |
52 elseif dim_size-boundary_width < i <= dim_size | |
53 return Upper | |
54 else | |
55 error("Bounds error") # TODO: Make this more standard | |
56 end | |
57 end | |
58 | |
55 function getrange(gridsize::Integer, closuresize::Integer, region::DataType) | 59 function getrange(gridsize::Integer, closuresize::Integer, region::DataType) |
56 if region == Lower | 60 if region == Lower |
57 r = 1:closuresize | 61 r = 1:closuresize |
58 elseif region == Interior | 62 elseif region == Interior |
59 r = (closuresize+1):(gridsize - closuresize) | 63 r = (closuresize+1):(gridsize - closuresize) |