Mercurial > repos > public > sbplib_julia
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 |
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 |