Mercurial > repos > public > sbplib_julia
annotate DiffOps/src/DiffOps.jl @ 232:a20bb4fac23d boundary_conditions
Improve tests for LazyTensors
| author | Jonatan Werpers <jonatan@werpers.com> |
|---|---|
| date | Wed, 26 Jun 2019 17:41:44 +0200 |
| parents | cd60382f392b |
| children | a5fdc00d5070 |
| rev | line source |
|---|---|
|
215
3a93d8a799ce
Add missing module in DiffOps
Jonatan Werpers <jonatan@werpers.com>
parents:
211
diff
changeset
|
1 module DiffOps |
|
3a93d8a799ce
Add missing module in DiffOps
Jonatan Werpers <jonatan@werpers.com>
parents:
211
diff
changeset
|
2 |
|
3a93d8a799ce
Add missing module in DiffOps
Jonatan Werpers <jonatan@werpers.com>
parents:
211
diff
changeset
|
3 using RegionIndices |
|
221
235f0a771c8f
Make all packages load properly
Jonatan Werpers <jonatan@werpers.com>
parents:
215
diff
changeset
|
4 using SbpOperators |
|
235f0a771c8f
Make all packages load properly
Jonatan Werpers <jonatan@werpers.com>
parents:
215
diff
changeset
|
5 using Grids |
|
215
3a93d8a799ce
Add missing module in DiffOps
Jonatan Werpers <jonatan@werpers.com>
parents:
211
diff
changeset
|
6 |
|
227
eb8525066f9b
Express the DiffOp interface in a better way
Jonatan Werpers <jonatan@werpers.com>
parents:
223
diff
changeset
|
7 """ |
|
eb8525066f9b
Express the DiffOp interface in a better way
Jonatan Werpers <jonatan@werpers.com>
parents:
223
diff
changeset
|
8 DiffOp |
|
eb8525066f9b
Express the DiffOp interface in a better way
Jonatan Werpers <jonatan@werpers.com>
parents:
223
diff
changeset
|
9 |
|
eb8525066f9b
Express the DiffOp interface in a better way
Jonatan Werpers <jonatan@werpers.com>
parents:
223
diff
changeset
|
10 Supertype of differential operator discretisations. |
|
eb8525066f9b
Express the DiffOp interface in a better way
Jonatan Werpers <jonatan@werpers.com>
parents:
223
diff
changeset
|
11 The action of the DiffOp is defined in the method |
|
eb8525066f9b
Express the DiffOp interface in a better way
Jonatan Werpers <jonatan@werpers.com>
parents:
223
diff
changeset
|
12 apply(D::DiffOp, v::AbstractVector, I...) |
|
eb8525066f9b
Express the DiffOp interface in a better way
Jonatan Werpers <jonatan@werpers.com>
parents:
223
diff
changeset
|
13 """ |
|
2
43be32298ae2
Add function to get closure size
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
14 abstract type DiffOp end |
|
43be32298ae2
Add function to get closure size
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
15 |
|
227
eb8525066f9b
Express the DiffOp interface in a better way
Jonatan Werpers <jonatan@werpers.com>
parents:
223
diff
changeset
|
16 function apply end |
|
2
43be32298ae2
Add function to get closure size
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
17 |
|
43be32298ae2
Add function to get closure size
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
18 function matrixRepresentation(D::DiffOp) |
|
43be32298ae2
Add function to get closure size
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
19 error("not implemented") |
|
43be32298ae2
Add function to get closure size
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
20 end |
|
43be32298ae2
Add function to get closure size
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
21 |
|
95
9d53ecca34f7
Switch to using cartesian indicies
Jonatan Werpers <jonatan@werpers.com>
parents:
85
diff
changeset
|
22 abstract type DiffOpCartesian{Dim} <: DiffOp end |
|
9d53ecca34f7
Switch to using cartesian indicies
Jonatan Werpers <jonatan@werpers.com>
parents:
85
diff
changeset
|
23 |
|
9d53ecca34f7
Switch to using cartesian indicies
Jonatan Werpers <jonatan@werpers.com>
parents:
85
diff
changeset
|
24 # DiffOp must have a grid of dimension Dim!!! |
|
9d53ecca34f7
Switch to using cartesian indicies
Jonatan Werpers <jonatan@werpers.com>
parents:
85
diff
changeset
|
25 function apply!(D::DiffOpCartesian{Dim}, u::AbstractArray{T,Dim}, v::AbstractArray{T,Dim}) where {T,Dim} |
|
9d53ecca34f7
Switch to using cartesian indicies
Jonatan Werpers <jonatan@werpers.com>
parents:
85
diff
changeset
|
26 for I ∈ eachindex(D.grid) |
|
9d53ecca34f7
Switch to using cartesian indicies
Jonatan Werpers <jonatan@werpers.com>
parents:
85
diff
changeset
|
27 u[I] = apply(D, v, I) |
|
56
27a8d3021a1c
Convert apply functions to cell-based
Ylva Rydin <ylva.rydin@telia.com>
parents:
55
diff
changeset
|
28 end |
|
27a8d3021a1c
Convert apply functions to cell-based
Ylva Rydin <ylva.rydin@telia.com>
parents:
55
diff
changeset
|
29 |
|
27a8d3021a1c
Convert apply functions to cell-based
Ylva Rydin <ylva.rydin@telia.com>
parents:
55
diff
changeset
|
30 return nothing |
|
27a8d3021a1c
Convert apply functions to cell-based
Ylva Rydin <ylva.rydin@telia.com>
parents:
55
diff
changeset
|
31 end |
|
223
b3506cfbb9d8
Add some missing exports
Jonatan Werpers <jonatan@werpers.com>
parents:
221
diff
changeset
|
32 export apply! |
|
56
27a8d3021a1c
Convert apply functions to cell-based
Ylva Rydin <ylva.rydin@telia.com>
parents:
55
diff
changeset
|
33 |
|
112
98c788cba9bf
Rename the apply! that applies in regions to apply_region!
Jonatan Werpers <jonatan@werpers.com>
parents:
111
diff
changeset
|
34 function apply_region!(D::DiffOpCartesian{2}, u::AbstractArray{T,2}, v::AbstractArray{T,2}) where T |
|
98c788cba9bf
Rename the apply! that applies in regions to apply_region!
Jonatan Werpers <jonatan@werpers.com>
parents:
111
diff
changeset
|
35 apply_region!(D, u, v, Lower, Lower) |
|
98c788cba9bf
Rename the apply! that applies in regions to apply_region!
Jonatan Werpers <jonatan@werpers.com>
parents:
111
diff
changeset
|
36 apply_region!(D, u, v, Lower, Interior) |
|
98c788cba9bf
Rename the apply! that applies in regions to apply_region!
Jonatan Werpers <jonatan@werpers.com>
parents:
111
diff
changeset
|
37 apply_region!(D, u, v, Lower, Upper) |
|
98c788cba9bf
Rename the apply! that applies in regions to apply_region!
Jonatan Werpers <jonatan@werpers.com>
parents:
111
diff
changeset
|
38 apply_region!(D, u, v, Interior, Lower) |
|
98c788cba9bf
Rename the apply! that applies in regions to apply_region!
Jonatan Werpers <jonatan@werpers.com>
parents:
111
diff
changeset
|
39 apply_region!(D, u, v, Interior, Interior) |
|
98c788cba9bf
Rename the apply! that applies in regions to apply_region!
Jonatan Werpers <jonatan@werpers.com>
parents:
111
diff
changeset
|
40 apply_region!(D, u, v, Interior, Upper) |
|
98c788cba9bf
Rename the apply! that applies in regions to apply_region!
Jonatan Werpers <jonatan@werpers.com>
parents:
111
diff
changeset
|
41 apply_region!(D, u, v, Upper, Lower) |
|
98c788cba9bf
Rename the apply! that applies in regions to apply_region!
Jonatan Werpers <jonatan@werpers.com>
parents:
111
diff
changeset
|
42 apply_region!(D, u, v, Upper, Interior) |
|
98c788cba9bf
Rename the apply! that applies in regions to apply_region!
Jonatan Werpers <jonatan@werpers.com>
parents:
111
diff
changeset
|
43 apply_region!(D, u, v, Upper, Upper) |
|
108
d0a28888528a
Change input type of apply(::Laplace) to ::DiffOpCartesian
Jonatan Werpers <jonatan@werpers.com>
parents:
107
diff
changeset
|
44 return nothing |
|
d0a28888528a
Change input type of apply(::Laplace) to ::DiffOpCartesian
Jonatan Werpers <jonatan@werpers.com>
parents:
107
diff
changeset
|
45 end |
|
d0a28888528a
Change input type of apply(::Laplace) to ::DiffOpCartesian
Jonatan Werpers <jonatan@werpers.com>
parents:
107
diff
changeset
|
46 |
|
114
d24497780ebd
Add comment about maybe splitting apply_region!
Jonatan Werpers <jonatan@werpers.com>
parents:
113
diff
changeset
|
47 # Maybe this should be split according to b3fbef345810 after all?! Seems like it makes performance more predictable |
|
112
98c788cba9bf
Rename the apply! that applies in regions to apply_region!
Jonatan Werpers <jonatan@werpers.com>
parents:
111
diff
changeset
|
48 function apply_region!(D::DiffOpCartesian{2}, u::AbstractArray{T,2}, v::AbstractArray{T,2}, r1::Type{<:Region}, r2::Type{<:Region}) where T |
|
124
631eb9b35d72
Make grid spacing a property of EquidistantGrid. Create plotting module for sbplib.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
118
diff
changeset
|
49 for I ∈ regionindices(D.grid.size, closureSize(D.op), (r1,r2)) |
|
110
ee071b8ed58c
Use deafult constructor for Index in apply!
Jonatan Werpers <jonatan@werpers.com>
parents:
109
diff
changeset
|
50 @inbounds indextuple = (Index{r1}(I[1]), Index{r2}(I[2])) |
|
108
d0a28888528a
Change input type of apply(::Laplace) to ::DiffOpCartesian
Jonatan Werpers <jonatan@werpers.com>
parents:
107
diff
changeset
|
51 @inbounds u[I] = apply(D, v, indextuple) |
|
d0a28888528a
Change input type of apply(::Laplace) to ::DiffOpCartesian
Jonatan Werpers <jonatan@werpers.com>
parents:
107
diff
changeset
|
52 end |
|
d0a28888528a
Change input type of apply(::Laplace) to ::DiffOpCartesian
Jonatan Werpers <jonatan@werpers.com>
parents:
107
diff
changeset
|
53 return nothing |
|
d0a28888528a
Change input type of apply(::Laplace) to ::DiffOpCartesian
Jonatan Werpers <jonatan@werpers.com>
parents:
107
diff
changeset
|
54 end |
|
223
b3506cfbb9d8
Add some missing exports
Jonatan Werpers <jonatan@werpers.com>
parents:
221
diff
changeset
|
55 export apply_region! |
|
108
d0a28888528a
Change input type of apply(::Laplace) to ::DiffOpCartesian
Jonatan Werpers <jonatan@werpers.com>
parents:
107
diff
changeset
|
56 |
|
113
3b89aa6dc7f2
Add apply_tiled! that tiles the iteration to optimize cache usage. Doesn't improve runtime at all at the moment
Jonatan Werpers <jonatan@werpers.com>
parents:
112
diff
changeset
|
57 function apply_tiled!(D::DiffOpCartesian{2}, u::AbstractArray{T,2}, v::AbstractArray{T,2}) where T |
|
3b89aa6dc7f2
Add apply_tiled! that tiles the iteration to optimize cache usage. Doesn't improve runtime at all at the moment
Jonatan Werpers <jonatan@werpers.com>
parents:
112
diff
changeset
|
58 apply_region_tiled!(D, u, v, Lower, Lower) |
|
3b89aa6dc7f2
Add apply_tiled! that tiles the iteration to optimize cache usage. Doesn't improve runtime at all at the moment
Jonatan Werpers <jonatan@werpers.com>
parents:
112
diff
changeset
|
59 apply_region_tiled!(D, u, v, Lower, Interior) |
|
3b89aa6dc7f2
Add apply_tiled! that tiles the iteration to optimize cache usage. Doesn't improve runtime at all at the moment
Jonatan Werpers <jonatan@werpers.com>
parents:
112
diff
changeset
|
60 apply_region_tiled!(D, u, v, Lower, Upper) |
|
3b89aa6dc7f2
Add apply_tiled! that tiles the iteration to optimize cache usage. Doesn't improve runtime at all at the moment
Jonatan Werpers <jonatan@werpers.com>
parents:
112
diff
changeset
|
61 apply_region_tiled!(D, u, v, Interior, Lower) |
|
3b89aa6dc7f2
Add apply_tiled! that tiles the iteration to optimize cache usage. Doesn't improve runtime at all at the moment
Jonatan Werpers <jonatan@werpers.com>
parents:
112
diff
changeset
|
62 apply_region_tiled!(D, u, v, Interior, Interior) |
|
3b89aa6dc7f2
Add apply_tiled! that tiles the iteration to optimize cache usage. Doesn't improve runtime at all at the moment
Jonatan Werpers <jonatan@werpers.com>
parents:
112
diff
changeset
|
63 apply_region_tiled!(D, u, v, Interior, Upper) |
|
3b89aa6dc7f2
Add apply_tiled! that tiles the iteration to optimize cache usage. Doesn't improve runtime at all at the moment
Jonatan Werpers <jonatan@werpers.com>
parents:
112
diff
changeset
|
64 apply_region_tiled!(D, u, v, Upper, Lower) |
|
3b89aa6dc7f2
Add apply_tiled! that tiles the iteration to optimize cache usage. Doesn't improve runtime at all at the moment
Jonatan Werpers <jonatan@werpers.com>
parents:
112
diff
changeset
|
65 apply_region_tiled!(D, u, v, Upper, Interior) |
|
3b89aa6dc7f2
Add apply_tiled! that tiles the iteration to optimize cache usage. Doesn't improve runtime at all at the moment
Jonatan Werpers <jonatan@werpers.com>
parents:
112
diff
changeset
|
66 apply_region_tiled!(D, u, v, Upper, Upper) |
|
3b89aa6dc7f2
Add apply_tiled! that tiles the iteration to optimize cache usage. Doesn't improve runtime at all at the moment
Jonatan Werpers <jonatan@werpers.com>
parents:
112
diff
changeset
|
67 return nothing |
|
3b89aa6dc7f2
Add apply_tiled! that tiles the iteration to optimize cache usage. Doesn't improve runtime at all at the moment
Jonatan Werpers <jonatan@werpers.com>
parents:
112
diff
changeset
|
68 end |
|
3b89aa6dc7f2
Add apply_tiled! that tiles the iteration to optimize cache usage. Doesn't improve runtime at all at the moment
Jonatan Werpers <jonatan@werpers.com>
parents:
112
diff
changeset
|
69 |
|
3b89aa6dc7f2
Add apply_tiled! that tiles the iteration to optimize cache usage. Doesn't improve runtime at all at the moment
Jonatan Werpers <jonatan@werpers.com>
parents:
112
diff
changeset
|
70 using TiledIteration |
|
3b89aa6dc7f2
Add apply_tiled! that tiles the iteration to optimize cache usage. Doesn't improve runtime at all at the moment
Jonatan Werpers <jonatan@werpers.com>
parents:
112
diff
changeset
|
71 function apply_region_tiled!(D::DiffOpCartesian{2}, u::AbstractArray{T,2}, v::AbstractArray{T,2}, r1::Type{<:Region}, r2::Type{<:Region}) where T |
|
124
631eb9b35d72
Make grid spacing a property of EquidistantGrid. Create plotting module for sbplib.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
118
diff
changeset
|
72 ri = regionindices(D.grid.size, closureSize(D.op), (r1,r2)) |
|
136
c6aaf061c0a9
Fix incorrect indexing of solution vector in apply_region_tiled
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
129
diff
changeset
|
73 # TODO: Pass Tilesize to function |
|
c6aaf061c0a9
Fix incorrect indexing of solution vector in apply_region_tiled
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
129
diff
changeset
|
74 for tileaxs ∈ TileIterator(axes(ri), padded_tilesize(T, (5,5), 2)) |
|
117
ff7f377433b4
Change loop order to follow memory layout
Jonatan Werpers <jonatan@werpers.com>
parents:
114
diff
changeset
|
75 for j ∈ tileaxs[2], i ∈ tileaxs[1] |
|
113
3b89aa6dc7f2
Add apply_tiled! that tiles the iteration to optimize cache usage. Doesn't improve runtime at all at the moment
Jonatan Werpers <jonatan@werpers.com>
parents:
112
diff
changeset
|
76 I = ri[i,j] |
|
136
c6aaf061c0a9
Fix incorrect indexing of solution vector in apply_region_tiled
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
129
diff
changeset
|
77 u[I] = apply(D, v, (Index{r1}(I[1]), Index{r2}(I[2]))) |
|
113
3b89aa6dc7f2
Add apply_tiled! that tiles the iteration to optimize cache usage. Doesn't improve runtime at all at the moment
Jonatan Werpers <jonatan@werpers.com>
parents:
112
diff
changeset
|
78 end |
|
3b89aa6dc7f2
Add apply_tiled! that tiles the iteration to optimize cache usage. Doesn't improve runtime at all at the moment
Jonatan Werpers <jonatan@werpers.com>
parents:
112
diff
changeset
|
79 end |
|
3b89aa6dc7f2
Add apply_tiled! that tiles the iteration to optimize cache usage. Doesn't improve runtime at all at the moment
Jonatan Werpers <jonatan@werpers.com>
parents:
112
diff
changeset
|
80 return nothing |
|
3b89aa6dc7f2
Add apply_tiled! that tiles the iteration to optimize cache usage. Doesn't improve runtime at all at the moment
Jonatan Werpers <jonatan@werpers.com>
parents:
112
diff
changeset
|
81 end |
|
223
b3506cfbb9d8
Add some missing exports
Jonatan Werpers <jonatan@werpers.com>
parents:
221
diff
changeset
|
82 export apply_region_tiled! |
|
113
3b89aa6dc7f2
Add apply_tiled! that tiles the iteration to optimize cache usage. Doesn't improve runtime at all at the moment
Jonatan Werpers <jonatan@werpers.com>
parents:
112
diff
changeset
|
83 |
|
56
27a8d3021a1c
Convert apply functions to cell-based
Ylva Rydin <ylva.rydin@telia.com>
parents:
55
diff
changeset
|
84 function apply(D::DiffOp, v::AbstractVector)::AbstractVector |
|
27a8d3021a1c
Convert apply functions to cell-based
Ylva Rydin <ylva.rydin@telia.com>
parents:
55
diff
changeset
|
85 u = zeros(eltype(v), size(v)) |
|
27a8d3021a1c
Convert apply functions to cell-based
Ylva Rydin <ylva.rydin@telia.com>
parents:
55
diff
changeset
|
86 apply!(D,v,u) |
|
27a8d3021a1c
Convert apply functions to cell-based
Ylva Rydin <ylva.rydin@telia.com>
parents:
55
diff
changeset
|
87 return u |
|
27a8d3021a1c
Convert apply functions to cell-based
Ylva Rydin <ylva.rydin@telia.com>
parents:
55
diff
changeset
|
88 end |
|
27a8d3021a1c
Convert apply functions to cell-based
Ylva Rydin <ylva.rydin@telia.com>
parents:
55
diff
changeset
|
89 |
|
223
b3506cfbb9d8
Add some missing exports
Jonatan Werpers <jonatan@werpers.com>
parents:
221
diff
changeset
|
90 export apply |
|
b3506cfbb9d8
Add some missing exports
Jonatan Werpers <jonatan@werpers.com>
parents:
221
diff
changeset
|
91 |
|
135
bb1cc9c7877c
Add outline of idea for implemenation of sats
Jonatan Werpers <jonatan@werpers.com>
parents:
129
diff
changeset
|
92 """ |
|
bb1cc9c7877c
Add outline of idea for implemenation of sats
Jonatan Werpers <jonatan@werpers.com>
parents:
129
diff
changeset
|
93 A BoundaryCondition should implement the method |
|
bb1cc9c7877c
Add outline of idea for implemenation of sats
Jonatan Werpers <jonatan@werpers.com>
parents:
129
diff
changeset
|
94 sat(::DiffOp, v::AbstractArray, data::AbstractArray, ...) |
|
bb1cc9c7877c
Add outline of idea for implemenation of sats
Jonatan Werpers <jonatan@werpers.com>
parents:
129
diff
changeset
|
95 """ |
|
bb1cc9c7877c
Add outline of idea for implemenation of sats
Jonatan Werpers <jonatan@werpers.com>
parents:
129
diff
changeset
|
96 abstract type BoundaryCondition end |
|
bb1cc9c7877c
Add outline of idea for implemenation of sats
Jonatan Werpers <jonatan@werpers.com>
parents:
129
diff
changeset
|
97 |
|
bb1cc9c7877c
Add outline of idea for implemenation of sats
Jonatan Werpers <jonatan@werpers.com>
parents:
129
diff
changeset
|
98 |
|
228
5acef2d5db2e
Move Laplace operator and related structs/functions to separate file.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
223
diff
changeset
|
99 include("laplace.jl") |
|
5acef2d5db2e
Move Laplace operator and related structs/functions to separate file.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
223
diff
changeset
|
100 export Laplace |
|
135
bb1cc9c7877c
Add outline of idea for implemenation of sats
Jonatan Werpers <jonatan@werpers.com>
parents:
129
diff
changeset
|
101 |
|
215
3a93d8a799ce
Add missing module in DiffOps
Jonatan Werpers <jonatan@werpers.com>
parents:
211
diff
changeset
|
102 |
|
228
5acef2d5db2e
Move Laplace operator and related structs/functions to separate file.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
223
diff
changeset
|
103 end # module |
