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