Mercurial > repos > public > sbplib_julia
comparison index.jl @ 103:a274d6384e91 cell_based_test
Apply 2d Laplace one region at a time (removing the need for branching in the innermost loop)
author | Vidar Stiernström <vidar.stiernstrom@it.uu.se> |
---|---|
date | Thu, 07 Feb 2019 17:15:26 +0100 |
parents | 50273f745f05 |
children | ebddd2a3a520 |
comparison
equal
deleted
inserted
replaced
99:6b6d680f2e25 | 103:a274d6384e91 |
---|---|
36 error("Bounds error") # TODO: Make this more standard | 36 error("Bounds error") # TODO: Make this more standard |
37 end | 37 end |
38 end | 38 end |
39 | 39 |
40 IndexTuple(t::Vararg{Tuple{T, DataType}}) where T<:Integer = Index.(t) | 40 IndexTuple(t::Vararg{Tuple{T, DataType}}) where T<:Integer = Index.(t) |
41 | |
42 function regionindices(gridsize::NTuple{Dim,Integer}, closuresize::Integer, region::NTuple{Dim,DataType}) where Dim | |
43 return regionindices(gridsize, ntuple(x->closuresize,Dim), region) | |
44 end | |
45 | |
46 function regionindices(gridsize::NTuple{Dim,Integer}, closuresize::NTuple{Dim,Integer}, region::NTuple{Dim,DataType}) where Dim | |
47 regions = map(getunitrange,gridsize,closuresize,region) | |
48 return CartesianIndices(regions) | |
49 end | |
50 | |
51 function getunitrange(gridsize::Integer, closuresize::Integer, region::R) where R | |
52 if region == Lower | |
53 r = 1:closuresize | |
54 elseif region == Interior | |
55 r = (closuresize+1):(gridsize - closuresize) | |
56 elseif region == Upper | |
57 r = (gridsize - closuresize + 1):gridsize | |
58 else | |
59 error("Unspecified region") | |
60 end | |
61 return r | |
62 end |