Mercurial > repos > public > sbplib_julia
annotate src/SbpOperators/stencil.jl @ 1053:cb0a5f41be02 feature/nested_stencils
Add some tests and fix some bugs
(grafted from e37ee63bf9ace6cfb3bdd1c24c3e4a99e6650652)
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Thu, 20 Jan 2022 10:23:15 +0100 |
parents | ca718fd4e816 |
children | 011d3ff65e9f |
rev | line source |
---|---|
671
e14627e79a54
Add stencil constructor for centered stencils and change from tuple to vararg in stencil constructor taking cneter
Jonatan Werpers <jonatan@werpers.com>
parents:
595
diff
changeset
|
1 export CenteredStencil |
1052
ca718fd4e816
Start implementing nested stencils
Jonatan Werpers <jonatan@werpers.com>
parents:
826
diff
changeset
|
2 export CenteredNestedStencil |
671
e14627e79a54
Add stencil constructor for centered stencils and change from tuple to vararg in stencil constructor taking cneter
Jonatan Werpers <jonatan@werpers.com>
parents:
595
diff
changeset
|
3 |
806
9fc6d38da03f
Remove type requirement for stencil weights
Jonatan Werpers <jonatan@werpers.com>
parents:
672
diff
changeset
|
4 struct Stencil{T,N} |
84
48079bd39969
Change to using tuples in stencils and ops
Jonatan Werpers <jonatan@werpers.com>
parents:
69
diff
changeset
|
5 range::Tuple{Int,Int} |
48079bd39969
Change to using tuples in stencils and ops
Jonatan Werpers <jonatan@werpers.com>
parents:
69
diff
changeset
|
6 weights::NTuple{N,T} |
126
66c239678a21
Add Assertion in stencil constructor
Ylva Rydin <ylva.rydin@telia.com>
parents:
85
diff
changeset
|
7 |
806
9fc6d38da03f
Remove type requirement for stencil weights
Jonatan Werpers <jonatan@werpers.com>
parents:
672
diff
changeset
|
8 function Stencil(range::Tuple{Int,Int},weights::NTuple{N,T}) where {T, N} |
126
66c239678a21
Add Assertion in stencil constructor
Ylva Rydin <ylva.rydin@telia.com>
parents:
85
diff
changeset
|
9 @assert range[2]-range[1]+1 == N |
66c239678a21
Add Assertion in stencil constructor
Ylva Rydin <ylva.rydin@telia.com>
parents:
85
diff
changeset
|
10 new{T,N}(range,weights) |
66c239678a21
Add Assertion in stencil constructor
Ylva Rydin <ylva.rydin@telia.com>
parents:
85
diff
changeset
|
11 end |
8
433008d3b7d3
Move stencil to its own file
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
12 end |
433008d3b7d3
Move stencil to its own file
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
13 |
584
4aa7fe13a984
Add scale() and eltype() methods for stencils
Jonatan Werpers <jonatan@werpers.com>
parents:
333
diff
changeset
|
14 """ |
595
03ef4d4740ab
Add a constructor for Stencil where you can specify the center of the stencil
Jonatan Werpers <jonatan@werpers.com>
parents:
584
diff
changeset
|
15 Stencil(weights::NTuple; center::Int) |
03ef4d4740ab
Add a constructor for Stencil where you can specify the center of the stencil
Jonatan Werpers <jonatan@werpers.com>
parents:
584
diff
changeset
|
16 |
03ef4d4740ab
Add a constructor for Stencil where you can specify the center of the stencil
Jonatan Werpers <jonatan@werpers.com>
parents:
584
diff
changeset
|
17 Create a stencil with the given weights with element `center` as the center of the stencil. |
03ef4d4740ab
Add a constructor for Stencil where you can specify the center of the stencil
Jonatan Werpers <jonatan@werpers.com>
parents:
584
diff
changeset
|
18 """ |
807
1fc6c4daec44
Add type parameter to Vararg to make better error messages when Stencil is called with incompatible weights
Jonatan Werpers <jonatan@werpers.com>
parents:
806
diff
changeset
|
19 function Stencil(weights::Vararg{T}; center::Int) where T # Type parameter T makes sure the weights are valid for the Stencil constuctors and throws an earlier, more readable, error |
595
03ef4d4740ab
Add a constructor for Stencil where you can specify the center of the stencil
Jonatan Werpers <jonatan@werpers.com>
parents:
584
diff
changeset
|
20 N = length(weights) |
03ef4d4740ab
Add a constructor for Stencil where you can specify the center of the stencil
Jonatan Werpers <jonatan@werpers.com>
parents:
584
diff
changeset
|
21 range = (1, N) .- center |
03ef4d4740ab
Add a constructor for Stencil where you can specify the center of the stencil
Jonatan Werpers <jonatan@werpers.com>
parents:
584
diff
changeset
|
22 |
03ef4d4740ab
Add a constructor for Stencil where you can specify the center of the stencil
Jonatan Werpers <jonatan@werpers.com>
parents:
584
diff
changeset
|
23 return Stencil(range, weights) |
03ef4d4740ab
Add a constructor for Stencil where you can specify the center of the stencil
Jonatan Werpers <jonatan@werpers.com>
parents:
584
diff
changeset
|
24 end |
03ef4d4740ab
Add a constructor for Stencil where you can specify the center of the stencil
Jonatan Werpers <jonatan@werpers.com>
parents:
584
diff
changeset
|
25 |
826
4433be383840
Add stencil constructor to change the type of the weights along with a convert method
Jonatan Werpers <jonatan@werpers.com>
parents:
807
diff
changeset
|
26 function Stencil{T}(s::Stencil) where T |
4433be383840
Add stencil constructor to change the type of the weights along with a convert method
Jonatan Werpers <jonatan@werpers.com>
parents:
807
diff
changeset
|
27 return Stencil(s.range, T.(s.weights)) |
4433be383840
Add stencil constructor to change the type of the weights along with a convert method
Jonatan Werpers <jonatan@werpers.com>
parents:
807
diff
changeset
|
28 end |
4433be383840
Add stencil constructor to change the type of the weights along with a convert method
Jonatan Werpers <jonatan@werpers.com>
parents:
807
diff
changeset
|
29 |
4433be383840
Add stencil constructor to change the type of the weights along with a convert method
Jonatan Werpers <jonatan@werpers.com>
parents:
807
diff
changeset
|
30 Base.convert(::Type{Stencil{T}}, stencil) where T = Stencil{T}(stencil) |
4433be383840
Add stencil constructor to change the type of the weights along with a convert method
Jonatan Werpers <jonatan@werpers.com>
parents:
807
diff
changeset
|
31 |
671
e14627e79a54
Add stencil constructor for centered stencils and change from tuple to vararg in stencil constructor taking cneter
Jonatan Werpers <jonatan@werpers.com>
parents:
595
diff
changeset
|
32 function CenteredStencil(weights::Vararg) |
e14627e79a54
Add stencil constructor for centered stencils and change from tuple to vararg in stencil constructor taking cneter
Jonatan Werpers <jonatan@werpers.com>
parents:
595
diff
changeset
|
33 if iseven(length(weights)) |
e14627e79a54
Add stencil constructor for centered stencils and change from tuple to vararg in stencil constructor taking cneter
Jonatan Werpers <jonatan@werpers.com>
parents:
595
diff
changeset
|
34 throw(ArgumentError("a centered stencil must have an odd number of weights.")) |
e14627e79a54
Add stencil constructor for centered stencils and change from tuple to vararg in stencil constructor taking cneter
Jonatan Werpers <jonatan@werpers.com>
parents:
595
diff
changeset
|
35 end |
e14627e79a54
Add stencil constructor for centered stencils and change from tuple to vararg in stencil constructor taking cneter
Jonatan Werpers <jonatan@werpers.com>
parents:
595
diff
changeset
|
36 |
e14627e79a54
Add stencil constructor for centered stencils and change from tuple to vararg in stencil constructor taking cneter
Jonatan Werpers <jonatan@werpers.com>
parents:
595
diff
changeset
|
37 r = length(weights) ÷ 2 |
e14627e79a54
Add stencil constructor for centered stencils and change from tuple to vararg in stencil constructor taking cneter
Jonatan Werpers <jonatan@werpers.com>
parents:
595
diff
changeset
|
38 |
e14627e79a54
Add stencil constructor for centered stencils and change from tuple to vararg in stencil constructor taking cneter
Jonatan Werpers <jonatan@werpers.com>
parents:
595
diff
changeset
|
39 return Stencil((-r, r), weights) |
e14627e79a54
Add stencil constructor for centered stencils and change from tuple to vararg in stencil constructor taking cneter
Jonatan Werpers <jonatan@werpers.com>
parents:
595
diff
changeset
|
40 end |
e14627e79a54
Add stencil constructor for centered stencils and change from tuple to vararg in stencil constructor taking cneter
Jonatan Werpers <jonatan@werpers.com>
parents:
595
diff
changeset
|
41 |
672 | 42 |
595
03ef4d4740ab
Add a constructor for Stencil where you can specify the center of the stencil
Jonatan Werpers <jonatan@werpers.com>
parents:
584
diff
changeset
|
43 """ |
584
4aa7fe13a984
Add scale() and eltype() methods for stencils
Jonatan Werpers <jonatan@werpers.com>
parents:
333
diff
changeset
|
44 scale(s::Stencil, a) |
4aa7fe13a984
Add scale() and eltype() methods for stencils
Jonatan Werpers <jonatan@werpers.com>
parents:
333
diff
changeset
|
45 |
4aa7fe13a984
Add scale() and eltype() methods for stencils
Jonatan Werpers <jonatan@werpers.com>
parents:
333
diff
changeset
|
46 Scale the weights of the stencil `s` with `a` and return a new stencil. |
4aa7fe13a984
Add scale() and eltype() methods for stencils
Jonatan Werpers <jonatan@werpers.com>
parents:
333
diff
changeset
|
47 """ |
4aa7fe13a984
Add scale() and eltype() methods for stencils
Jonatan Werpers <jonatan@werpers.com>
parents:
333
diff
changeset
|
48 function scale(s::Stencil, a) |
4aa7fe13a984
Add scale() and eltype() methods for stencils
Jonatan Werpers <jonatan@werpers.com>
parents:
333
diff
changeset
|
49 return Stencil(s.range, a.*s.weights) |
4aa7fe13a984
Add scale() and eltype() methods for stencils
Jonatan Werpers <jonatan@werpers.com>
parents:
333
diff
changeset
|
50 end |
4aa7fe13a984
Add scale() and eltype() methods for stencils
Jonatan Werpers <jonatan@werpers.com>
parents:
333
diff
changeset
|
51 |
4aa7fe13a984
Add scale() and eltype() methods for stencils
Jonatan Werpers <jonatan@werpers.com>
parents:
333
diff
changeset
|
52 Base.eltype(::Stencil{T}) where T = T |
4aa7fe13a984
Add scale() and eltype() methods for stencils
Jonatan Werpers <jonatan@werpers.com>
parents:
333
diff
changeset
|
53 |
8
433008d3b7d3
Move stencil to its own file
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
54 function flip(s::Stencil) |
433008d3b7d3
Move stencil to its own file
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
55 range = (-s.range[2], -s.range[1]) |
84
48079bd39969
Change to using tuples in stencils and ops
Jonatan Werpers <jonatan@werpers.com>
parents:
69
diff
changeset
|
56 return Stencil(range, reverse(s.weights)) |
8
433008d3b7d3
Move stencil to its own file
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
57 end |
433008d3b7d3
Move stencil to its own file
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
58 |
433008d3b7d3
Move stencil to its own file
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
59 # Provides index into the Stencil based on offset for the root element |
128
7c0b9bb7ab4d
Improve stencil application code to make it more friendly to compiler optimizations
Jonatan Werpers <jonatan@werpers.com>
parents:
122
diff
changeset
|
60 @inline function Base.getindex(s::Stencil, i::Int) |
71
18d0d794d3bb
Make stencils respond to @ inbounds
Jonatan Werpers <jonatan@werpers.com>
parents:
67
diff
changeset
|
61 @boundscheck if i < s.range[1] || s.range[2] < i |
584
4aa7fe13a984
Add scale() and eltype() methods for stencils
Jonatan Werpers <jonatan@werpers.com>
parents:
333
diff
changeset
|
62 return zero(eltype(s)) |
8
433008d3b7d3
Move stencil to its own file
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
63 end |
71
18d0d794d3bb
Make stencils respond to @ inbounds
Jonatan Werpers <jonatan@werpers.com>
parents:
67
diff
changeset
|
64 return s.weights[1 + i - s.range[1]] |
8
433008d3b7d3
Move stencil to its own file
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
65 end |
433008d3b7d3
Move stencil to its own file
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
66 |
269
ccef055233a2
Move general methods for D2 to ConstantStencilOperator and increase verbosity of method names for clarity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
219
diff
changeset
|
67 Base.@propagate_inbounds @inline function apply_stencil(s::Stencil{T,N}, v::AbstractVector, i::Int) where {T,N} |
131
8569c637d923
Enable compiler loop-unrolling in apply_backwards
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
129
diff
changeset
|
68 w = s.weights[1]*v[i + s.range[1]] |
129
1aaeb46ba5f4
Improve efficiency of apply by the following:
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
128
diff
changeset
|
69 @simd for k ∈ 2:N |
131
8569c637d923
Enable compiler loop-unrolling in apply_backwards
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
129
diff
changeset
|
70 w += s.weights[k]*v[i + s.range[1] + k-1] |
8
433008d3b7d3
Move stencil to its own file
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
71 end |
433008d3b7d3
Move stencil to its own file
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
72 return w |
433008d3b7d3
Move stencil to its own file
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
73 end |
122
6c6979ff17f4
Introduce and use apply_backwards for stencils
Jonatan Werpers <jonatan@werpers.com>
parents:
85
diff
changeset
|
74 |
269
ccef055233a2
Move general methods for D2 to ConstantStencilOperator and increase verbosity of method names for clarity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
219
diff
changeset
|
75 Base.@propagate_inbounds @inline function apply_stencil_backwards(s::Stencil{T,N}, v::AbstractVector, i::Int) where {T,N} |
131
8569c637d923
Enable compiler loop-unrolling in apply_backwards
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
129
diff
changeset
|
76 w = s.weights[N]*v[i - s.range[2]] |
8569c637d923
Enable compiler loop-unrolling in apply_backwards
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
129
diff
changeset
|
77 @simd for k ∈ N-1:-1:1 |
8569c637d923
Enable compiler loop-unrolling in apply_backwards
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
129
diff
changeset
|
78 w += s.weights[k]*v[i - s.range[1] - k + 1] |
122
6c6979ff17f4
Introduce and use apply_backwards for stencils
Jonatan Werpers <jonatan@werpers.com>
parents:
85
diff
changeset
|
79 end |
6c6979ff17f4
Introduce and use apply_backwards for stencils
Jonatan Werpers <jonatan@werpers.com>
parents:
85
diff
changeset
|
80 return w |
6c6979ff17f4
Introduce and use apply_backwards for stencils
Jonatan Werpers <jonatan@werpers.com>
parents:
85
diff
changeset
|
81 end |
1052
ca718fd4e816
Start implementing nested stencils
Jonatan Werpers <jonatan@werpers.com>
parents:
826
diff
changeset
|
82 |
ca718fd4e816
Start implementing nested stencils
Jonatan Werpers <jonatan@werpers.com>
parents:
826
diff
changeset
|
83 |
ca718fd4e816
Start implementing nested stencils
Jonatan Werpers <jonatan@werpers.com>
parents:
826
diff
changeset
|
84 struct NestedStencil{T,N} |
ca718fd4e816
Start implementing nested stencils
Jonatan Werpers <jonatan@werpers.com>
parents:
826
diff
changeset
|
85 s::Stencil{Stencil{T,N},N} |
ca718fd4e816
Start implementing nested stencils
Jonatan Werpers <jonatan@werpers.com>
parents:
826
diff
changeset
|
86 end |
ca718fd4e816
Start implementing nested stencils
Jonatan Werpers <jonatan@werpers.com>
parents:
826
diff
changeset
|
87 |
ca718fd4e816
Start implementing nested stencils
Jonatan Werpers <jonatan@werpers.com>
parents:
826
diff
changeset
|
88 NestedStencil(s::Vararg{Stencil}; center) = NestedStencil(Stencil(s... ; center)) |
ca718fd4e816
Start implementing nested stencils
Jonatan Werpers <jonatan@werpers.com>
parents:
826
diff
changeset
|
89 |
ca718fd4e816
Start implementing nested stencils
Jonatan Werpers <jonatan@werpers.com>
parents:
826
diff
changeset
|
90 function NestedStencil(weights::Vararg{Tuple}; center) |
1053
cb0a5f41be02
Add some tests and fix some bugs
Jonatan Werpers <jonatan@werpers.com>
parents:
1052
diff
changeset
|
91 inner_stencils = map(w -> Stencil(w...; center), weights) |
1052
ca718fd4e816
Start implementing nested stencils
Jonatan Werpers <jonatan@werpers.com>
parents:
826
diff
changeset
|
92 return NestedStencil(Stencil(inner_stencils... ; center)) |
ca718fd4e816
Start implementing nested stencils
Jonatan Werpers <jonatan@werpers.com>
parents:
826
diff
changeset
|
93 end |
ca718fd4e816
Start implementing nested stencils
Jonatan Werpers <jonatan@werpers.com>
parents:
826
diff
changeset
|
94 |
ca718fd4e816
Start implementing nested stencils
Jonatan Werpers <jonatan@werpers.com>
parents:
826
diff
changeset
|
95 CenteredNestedStencil(s...) = NestedStencil(CenteredStencil(s...)) |
ca718fd4e816
Start implementing nested stencils
Jonatan Werpers <jonatan@werpers.com>
parents:
826
diff
changeset
|
96 |
ca718fd4e816
Start implementing nested stencils
Jonatan Werpers <jonatan@werpers.com>
parents:
826
diff
changeset
|
97 Base.eltype(::NestedStencil{T}) where T = T |
ca718fd4e816
Start implementing nested stencils
Jonatan Werpers <jonatan@werpers.com>
parents:
826
diff
changeset
|
98 |
ca718fd4e816
Start implementing nested stencils
Jonatan Werpers <jonatan@werpers.com>
parents:
826
diff
changeset
|
99 function flip(ns::NestedStencil) |
ca718fd4e816
Start implementing nested stencils
Jonatan Werpers <jonatan@werpers.com>
parents:
826
diff
changeset
|
100 s_flip = flip(ns.s) |
ca718fd4e816
Start implementing nested stencils
Jonatan Werpers <jonatan@werpers.com>
parents:
826
diff
changeset
|
101 return NestedStencil(Stencil(s_flip.range, flip.(s_flip.weights))) |
ca718fd4e816
Start implementing nested stencils
Jonatan Werpers <jonatan@werpers.com>
parents:
826
diff
changeset
|
102 end |
ca718fd4e816
Start implementing nested stencils
Jonatan Werpers <jonatan@werpers.com>
parents:
826
diff
changeset
|
103 |
ca718fd4e816
Start implementing nested stencils
Jonatan Werpers <jonatan@werpers.com>
parents:
826
diff
changeset
|
104 Base.getindex(ns::NestedStencil, i::Int) = ns.s[i] |
ca718fd4e816
Start implementing nested stencils
Jonatan Werpers <jonatan@werpers.com>
parents:
826
diff
changeset
|
105 |
ca718fd4e816
Start implementing nested stencils
Jonatan Werpers <jonatan@werpers.com>
parents:
826
diff
changeset
|
106 "Apply inner stencils to `c` and get a concrete stencil" |
1053
cb0a5f41be02
Add some tests and fix some bugs
Jonatan Werpers <jonatan@werpers.com>
parents:
1052
diff
changeset
|
107 Base.@propagate_inbounds function apply_inner_stencils(ns::NestedStencil, c::AbstractVector, i::Int) |
1052
ca718fd4e816
Start implementing nested stencils
Jonatan Werpers <jonatan@werpers.com>
parents:
826
diff
changeset
|
108 weights = apply_stencil.(ns.s.weights, Ref(c), i) |
ca718fd4e816
Start implementing nested stencils
Jonatan Werpers <jonatan@werpers.com>
parents:
826
diff
changeset
|
109 return Stencil(ns.s.range, weights) |
ca718fd4e816
Start implementing nested stencils
Jonatan Werpers <jonatan@werpers.com>
parents:
826
diff
changeset
|
110 end |
ca718fd4e816
Start implementing nested stencils
Jonatan Werpers <jonatan@werpers.com>
parents:
826
diff
changeset
|
111 |
ca718fd4e816
Start implementing nested stencils
Jonatan Werpers <jonatan@werpers.com>
parents:
826
diff
changeset
|
112 "Apply the whole nested stencil" |
ca718fd4e816
Start implementing nested stencils
Jonatan Werpers <jonatan@werpers.com>
parents:
826
diff
changeset
|
113 Base.@propagate_inbounds function apply_stencil(ns::NestedStencil, c::AbstractVector, v::AbstractVector, i::Int) |
1053
cb0a5f41be02
Add some tests and fix some bugs
Jonatan Werpers <jonatan@werpers.com>
parents:
1052
diff
changeset
|
114 s = apply_inner_stencils(ns,c,i) |
1052
ca718fd4e816
Start implementing nested stencils
Jonatan Werpers <jonatan@werpers.com>
parents:
826
diff
changeset
|
115 return apply_stencil(s, v, i) |
ca718fd4e816
Start implementing nested stencils
Jonatan Werpers <jonatan@werpers.com>
parents:
826
diff
changeset
|
116 end |
ca718fd4e816
Start implementing nested stencils
Jonatan Werpers <jonatan@werpers.com>
parents:
826
diff
changeset
|
117 |
ca718fd4e816
Start implementing nested stencils
Jonatan Werpers <jonatan@werpers.com>
parents:
826
diff
changeset
|
118 "Apply inner stencils backwards to `c` and get a concrete stencil" |
1053
cb0a5f41be02
Add some tests and fix some bugs
Jonatan Werpers <jonatan@werpers.com>
parents:
1052
diff
changeset
|
119 Base.@propagate_inbounds @inline function apply_inner_stencils_backwards(ns::NestedStencil, c::AbstractVector, i::Int) |
1052
ca718fd4e816
Start implementing nested stencils
Jonatan Werpers <jonatan@werpers.com>
parents:
826
diff
changeset
|
120 weights = apply_stencil_backwards.(ns.s.weights, Ref(c), i) |
ca718fd4e816
Start implementing nested stencils
Jonatan Werpers <jonatan@werpers.com>
parents:
826
diff
changeset
|
121 return Stencil(ns.s.range, weights) |
ca718fd4e816
Start implementing nested stencils
Jonatan Werpers <jonatan@werpers.com>
parents:
826
diff
changeset
|
122 end |
ca718fd4e816
Start implementing nested stencils
Jonatan Werpers <jonatan@werpers.com>
parents:
826
diff
changeset
|
123 |
ca718fd4e816
Start implementing nested stencils
Jonatan Werpers <jonatan@werpers.com>
parents:
826
diff
changeset
|
124 "Apply the whole nested stencil backwards" |
ca718fd4e816
Start implementing nested stencils
Jonatan Werpers <jonatan@werpers.com>
parents:
826
diff
changeset
|
125 Base.@propagate_inbounds @inline function apply_stencil_backwards(ns::NestedStencil, c::AbstractVector, v::AbstractVector, i::Int) |
1053
cb0a5f41be02
Add some tests and fix some bugs
Jonatan Werpers <jonatan@werpers.com>
parents:
1052
diff
changeset
|
126 s = apply_inner_stencils_backwards(ns,c,i) |
1052
ca718fd4e816
Start implementing nested stencils
Jonatan Werpers <jonatan@werpers.com>
parents:
826
diff
changeset
|
127 return apply_stencil_backwards(s, v, i) |
ca718fd4e816
Start implementing nested stencils
Jonatan Werpers <jonatan@werpers.com>
parents:
826
diff
changeset
|
128 end |