annotate StencilIndex.jl @ 94:84b1ad5a3755 stencil_index

Made everything work(?) but also go really slow. And also not type-stable.
author Ylva Rydin <ylva.rydin@telia.com>
date Mon, 04 Feb 2019 16:09:07 +0100
parents 93df72e2b135
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
94
84b1ad5a3755 Made everything work(?) but also go really slow. And also not type-stable.
Ylva Rydin <ylva.rydin@telia.com>
parents: 93
diff changeset
1 abstract type Region end
84b1ad5a3755 Made everything work(?) but also go really slow. And also not type-stable.
Ylva Rydin <ylva.rydin@telia.com>
parents: 93
diff changeset
2 struct Interior <: Region end
84b1ad5a3755 Made everything work(?) but also go really slow. And also not type-stable.
Ylva Rydin <ylva.rydin@telia.com>
parents: 93
diff changeset
3 struct Lower <: Region end
84b1ad5a3755 Made everything work(?) but also go really slow. And also not type-stable.
Ylva Rydin <ylva.rydin@telia.com>
parents: 93
diff changeset
4 struct Upper <: Region end
91
c0f33eccd527 Create types StencilIndex, LowerClosureIndex, UpperClosureIndex and InteriorIndex. First attempt at seperating out interior and closure indices from. Not fully implemented.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
5
94
84b1ad5a3755 Made everything work(?) but also go really slow. And also not type-stable.
Ylva Rydin <ylva.rydin@telia.com>
parents: 93
diff changeset
6 struct StencilIndex{R<:Region, T<:Integer}
84b1ad5a3755 Made everything work(?) but also go really slow. And also not type-stable.
Ylva Rydin <ylva.rydin@telia.com>
parents: 93
diff changeset
7 localindex::CartesianIndex
84b1ad5a3755 Made everything work(?) but also go really slow. And also not type-stable.
Ylva Rydin <ylva.rydin@telia.com>
parents: 93
diff changeset
8 globalindex::T
84b1ad5a3755 Made everything work(?) but also go really slow. And also not type-stable.
Ylva Rydin <ylva.rydin@telia.com>
parents: 93
diff changeset
9
84b1ad5a3755 Made everything work(?) but also go really slow. And also not type-stable.
Ylva Rydin <ylva.rydin@telia.com>
parents: 93
diff changeset
10 StencilIndex{R}(li::CartesianIndex, gi::T) where {R<:Region,T<:Integer} = new{R, T}(li, gi)
84b1ad5a3755 Made everything work(?) but also go really slow. And also not type-stable.
Ylva Rydin <ylva.rydin@telia.com>
parents: 93
diff changeset
11 StencilIndex(li::CartesianIndex, gi::T, ::Type{R}) where {R<:Region,T<:Integer} = StencilIndex{R}(li, gi)
84b1ad5a3755 Made everything work(?) but also go really slow. And also not type-stable.
Ylva Rydin <ylva.rydin@telia.com>
parents: 93
diff changeset
12
84b1ad5a3755 Made everything work(?) but also go really slow. And also not type-stable.
Ylva Rydin <ylva.rydin@telia.com>
parents: 93
diff changeset
13 # Index(t::Tuple{T, Type{R}}) where {R<:Region,T<:Integer} = Index{t[2]}(t[1])
84b1ad5a3755 Made everything work(?) but also go really slow. And also not type-stable.
Ylva Rydin <ylva.rydin@telia.com>
parents: 93
diff changeset
14 # Above doesn't work, below does but is less type strict
84b1ad5a3755 Made everything work(?) but also go really slow. And also not type-stable.
Ylva Rydin <ylva.rydin@telia.com>
parents: 93
diff changeset
15 #Index(t::Tuple{T, DataType}) where {R<:Region,T<:Integer} = Index{t[2]}(t[1])
91
c0f33eccd527 Create types StencilIndex, LowerClosureIndex, UpperClosureIndex and InteriorIndex. First attempt at seperating out interior and closure indices from. Not fully implemented.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
16 end
c0f33eccd527 Create types StencilIndex, LowerClosureIndex, UpperClosureIndex and InteriorIndex. First attempt at seperating out interior and closure indices from. Not fully implemented.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
17
94
84b1ad5a3755 Made everything work(?) but also go really slow. And also not type-stable.
Ylva Rydin <ylva.rydin@telia.com>
parents: 93
diff changeset
18 function Base.getindex(si::StencilIndex, i::Int)
84b1ad5a3755 Made everything work(?) but also go really slow. And also not type-stable.
Ylva Rydin <ylva.rydin@telia.com>
parents: 93
diff changeset
19 return si.localindex[i]
91
c0f33eccd527 Create types StencilIndex, LowerClosureIndex, UpperClosureIndex and InteriorIndex. First attempt at seperating out interior and closure indices from. Not fully implemented.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
20 end
c0f33eccd527 Create types StencilIndex, LowerClosureIndex, UpperClosureIndex and InteriorIndex. First attempt at seperating out interior and closure indices from. Not fully implemented.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
21
94
84b1ad5a3755 Made everything work(?) but also go really slow. And also not type-stable.
Ylva Rydin <ylva.rydin@telia.com>
parents: 93
diff changeset
22 #Index(t::Vararg{Tuple{T, DataType}}) where T = Index.(t)
91
c0f33eccd527 Create types StencilIndex, LowerClosureIndex, UpperClosureIndex and InteriorIndex. First attempt at seperating out interior and closure indices from. Not fully implemented.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
23 # TODO: Where to place this function?
94
84b1ad5a3755 Made everything work(?) but also go really slow. And also not type-stable.
Ylva Rydin <ylva.rydin@telia.com>
parents: 93
diff changeset
24
84b1ad5a3755 Made everything work(?) but also go really slow. And also not type-stable.
Ylva Rydin <ylva.rydin@telia.com>
parents: 93
diff changeset
25 function stencilindices(diffOp)
84b1ad5a3755 Made everything work(?) but also go really slow. And also not type-stable.
Ylva Rydin <ylva.rydin@telia.com>
parents: 93
diff changeset
26 N = diffOp.grid.numberOfPointsPerDim
84b1ad5a3755 Made everything work(?) but also go really slow. And also not type-stable.
Ylva Rydin <ylva.rydin@telia.com>
parents: 93
diff changeset
27
84b1ad5a3755 Made everything work(?) but also go really slow. And also not type-stable.
Ylva Rydin <ylva.rydin@telia.com>
parents: 93
diff changeset
28 lowerclosure = Vector{Vector{StencilIndex{Lower, Int64}}}(undef,0)
84b1ad5a3755 Made everything work(?) but also go really slow. And also not type-stable.
Ylva Rydin <ylva.rydin@telia.com>
parents: 93
diff changeset
29 upperclosure = Vector{Vector{StencilIndex{Upper, Int64}}}(undef,0)
84b1ad5a3755 Made everything work(?) but also go really slow. And also not type-stable.
Ylva Rydin <ylva.rydin@telia.com>
parents: 93
diff changeset
30 interior = Vector{Vector{StencilIndex{Interior, Int64}}}(undef,0)
84b1ad5a3755 Made everything work(?) but also go really slow. And also not type-stable.
Ylva Rydin <ylva.rydin@telia.com>
parents: 93
diff changeset
31 cSize = closureSize(diffOp.op)
84b1ad5a3755 Made everything work(?) but also go really slow. And also not type-stable.
Ylva Rydin <ylva.rydin@telia.com>
parents: 93
diff changeset
32 ci = CartesianIndices(diffOp.grid.numberOfPointsPerDim)
84b1ad5a3755 Made everything work(?) but also go really slow. And also not type-stable.
Ylva Rydin <ylva.rydin@telia.com>
parents: 93
diff changeset
33
84b1ad5a3755 Made everything work(?) but also go really slow. And also not type-stable.
Ylva Rydin <ylva.rydin@telia.com>
parents: 93
diff changeset
34 # TODO: Loop over all points or one loop for each region?
84b1ad5a3755 Made everything work(?) but also go really slow. And also not type-stable.
Ylva Rydin <ylva.rydin@telia.com>
parents: 93
diff changeset
35 for j = 1:Grid.numberOfDimensions(diffOp.grid)
84b1ad5a3755 Made everything work(?) but also go really slow. And also not type-stable.
Ylva Rydin <ylva.rydin@telia.com>
parents: 93
diff changeset
36 templ = Vector{StencilIndex{Lower,Int64}}(undef, 0)
84b1ad5a3755 Made everything work(?) but also go really slow. And also not type-stable.
Ylva Rydin <ylva.rydin@telia.com>
parents: 93
diff changeset
37 tempu = Vector{StencilIndex{Upper,Int64}}(undef, 0)
84b1ad5a3755 Made everything work(?) but also go really slow. And also not type-stable.
Ylva Rydin <ylva.rydin@telia.com>
parents: 93
diff changeset
38 tempi = Vector{StencilIndex{Interior,Int64}}(undef, 0)
84b1ad5a3755 Made everything work(?) but also go really slow. And also not type-stable.
Ylva Rydin <ylva.rydin@telia.com>
parents: 93
diff changeset
39 for i ∈ 1:Grid.numberOfPoints(diffOp.grid)
84b1ad5a3755 Made everything work(?) but also go really slow. And also not type-stable.
Ylva Rydin <ylva.rydin@telia.com>
parents: 93
diff changeset
40 val = ci[i][j]
84b1ad5a3755 Made everything work(?) but also go really slow. And also not type-stable.
Ylva Rydin <ylva.rydin@telia.com>
parents: 93
diff changeset
41 if val ∈ range(1; length=cSize)
84b1ad5a3755 Made everything work(?) but also go really slow. And also not type-stable.
Ylva Rydin <ylva.rydin@telia.com>
parents: 93
diff changeset
42 push!(templ, StencilIndex{Lower}(ci[i],i))
84b1ad5a3755 Made everything work(?) but also go really slow. And also not type-stable.
Ylva Rydin <ylva.rydin@telia.com>
parents: 93
diff changeset
43 elseif val ∈ range(N[j] - cSize+1, length=cSize)
84b1ad5a3755 Made everything work(?) but also go really slow. And also not type-stable.
Ylva Rydin <ylva.rydin@telia.com>
parents: 93
diff changeset
44 push!(tempu, StencilIndex{Upper}(ci[i],i))
84b1ad5a3755 Made everything work(?) but also go really slow. And also not type-stable.
Ylva Rydin <ylva.rydin@telia.com>
parents: 93
diff changeset
45 else
84b1ad5a3755 Made everything work(?) but also go really slow. And also not type-stable.
Ylva Rydin <ylva.rydin@telia.com>
parents: 93
diff changeset
46 push!(tempi, StencilIndex{Interior}(ci[i],i))
84b1ad5a3755 Made everything work(?) but also go really slow. And also not type-stable.
Ylva Rydin <ylva.rydin@telia.com>
parents: 93
diff changeset
47 end
91
c0f33eccd527 Create types StencilIndex, LowerClosureIndex, UpperClosureIndex and InteriorIndex. First attempt at seperating out interior and closure indices from. Not fully implemented.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
48 end
94
84b1ad5a3755 Made everything work(?) but also go really slow. And also not type-stable.
Ylva Rydin <ylva.rydin@telia.com>
parents: 93
diff changeset
49 push!(lowerclosure,templ)
84b1ad5a3755 Made everything work(?) but also go really slow. And also not type-stable.
Ylva Rydin <ylva.rydin@telia.com>
parents: 93
diff changeset
50 push!(upperclosure,tempu)
84b1ad5a3755 Made everything work(?) but also go really slow. And also not type-stable.
Ylva Rydin <ylva.rydin@telia.com>
parents: 93
diff changeset
51 push!(interior,tempi)
91
c0f33eccd527 Create types StencilIndex, LowerClosureIndex, UpperClosureIndex and InteriorIndex. First attempt at seperating out interior and closure indices from. Not fully implemented.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
52 end
c0f33eccd527 Create types StencilIndex, LowerClosureIndex, UpperClosureIndex and InteriorIndex. First attempt at seperating out interior and closure indices from. Not fully implemented.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
53 return lowerclosure, upperclosure, interior
c0f33eccd527 Create types StencilIndex, LowerClosureIndex, UpperClosureIndex and InteriorIndex. First attempt at seperating out interior and closure indices from. Not fully implemented.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
54 end
94
84b1ad5a3755 Made everything work(?) but also go really slow. And also not type-stable.
Ylva Rydin <ylva.rydin@telia.com>
parents: 93
diff changeset
55