annotate DiffOps/src/DiffOps.jl @ 229:cd60382f392b boundary_conditions

Merge
author Jonatan Werpers <jonatan@werpers.com>
date Wed, 26 Jun 2019 14:45:24 +0200
parents eb8525066f9b 5acef2d5db2e
children a5fdc00d5070
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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