@@ -136,71 +136,50 @@ function prefiltering_system{T,TC,BC<:Union{Flat,Reflect}}(::Type{T}, ::Type{TC}
136136 d[1 ] = d[end ] = - 1
137137 du[1 ] = dl[end ] = 0
138138
139- rowspec = spzeros (T,n,2 )
140- # first row last row
141- rowspec[1 ,1 ] = rowspec[n,2 ] = 1
142- colspec = spzeros (T,2 ,n)
143- # third col third-to-last col
144- colspec[1 ,3 ] = colspec[2 ,n- 2 ] = 1
145- valspec = zeros (T,2 ,2 )
146- # [1,3] [n,n-2]
147- valspec[1 ,1 ] = valspec[2 ,2 ] = 1
139+ specs = _build_woodbury_specs (T, n,
140+ (1 , 3 , one (T)),
141+ (n, n- 2 , one (T))
142+ )
148143
149- Woodbury (lufact! (Tridiagonal (dl, d, du), Val{false }), rowspec, valspec, colspec ), zeros (TC, n)
144+ Woodbury (lufact! (Tridiagonal (dl, d, du), Val{false }), specs ... ), zeros (TC, n)
150145end
151146
152147function prefiltering_system {T,TC,GT<:GridType} (:: Type{T} , :: Type{TC} , n:: Int , :: Type{Quadratic{Line}} , :: Type{GT} )
153148 dl,d,du = inner_system_diags (T,n,Quadratic{Line})
154149 d[1 ] = d[end ] = 1
155150 du[1 ] = dl[end ] = - 2
156151
157- rowspec = spzeros (T,n,2 )
158- # first row last row
159- rowspec[1 ,1 ] = rowspec[n,2 ] = 1
160- colspec = spzeros (T,2 ,n)
161- # third col third-to-last col
162- colspec[1 ,3 ] = colspec[2 ,n- 2 ] = 1
163- valspec = zeros (T,2 ,2 )
164- # [1,3] [n,n-2]
165- valspec[1 ,1 ] = valspec[2 ,2 ] = 1
152+ specs = _build_woodbury_specs (T, n,
153+ (1 , 3 , one (T)),
154+ (n, n- 2 , one (T)),
155+ )
166156
167- Woodbury (lufact! (Tridiagonal (dl, d, du), Val{false }), rowspec, valspec, colspec ), zeros (TC, n)
157+ Woodbury (lufact! (Tridiagonal (dl, d, du), Val{false }), specs ... ), zeros (TC, n)
168158end
169159
170160function prefiltering_system {T,TC,GT<:GridType} (:: Type{T} , :: Type{TC} , n:: Int , :: Type{Quadratic{Free}} , :: Type{GT} )
171161 dl,d,du = inner_system_diags (T,n,Quadratic{Free})
172162 d[1 ] = d[end ] = 1
173163 du[1 ] = dl[end ] = - 3
174164
175- rowspec = spzeros (T,n,4 )
176- # first row first row last row last row
177- rowspec[1 ,1 ] = rowspec[1 ,2 ] = rowspec[n,3 ] = rowspec[n,4 ] = 1
178- colspec = spzeros (T,4 ,n)
179- # third col fourth col third-to-last col fourth-to-last col
180- colspec[1 ,3 ] = colspec[2 ,4 ] = colspec[3 ,n- 2 ] = colspec[4 ,n- 3 ] = 1
181- valspec = zeros (T,4 ,4 )
182- # [1,3] [n,n-2]
183- valspec[1 ,1 ] = valspec[3 ,3 ] = 3
184- # [1,4] [n,n-3]
185- valspec[2 ,2 ] = valspec[4 ,4 ] = - 1
165+ specs = _build_woodbury_specs (T, n,
166+ (1 , 3 , 3 ),
167+ (1 , 4 , - 1 ),
168+ (n, n- 2 , 3 ),
169+ (n, n- 3 , - 1 ))
186170
187- Woodbury (lufact! (Tridiagonal (dl, d, du), Val{false }), rowspec, valspec, colspec ), zeros (TC, n)
171+ Woodbury (lufact! (Tridiagonal (dl, d, du), Val{false }), specs ... ), zeros (TC, n)
188172end
189173
190174function prefiltering_system {T,TC,GT<:GridType} (:: Type{T} , :: Type{TC} , n:: Int , :: Type{Quadratic{Periodic}} , :: Type{GT} )
191175 dl,d,du = inner_system_diags (T,n,Quadratic{Periodic})
192176
193- rowspec = spzeros (T,n,2 )
194- # first row last row
195- rowspec[1 ,1 ] = rowspec[n,2 ] = 1
196- colspec = spzeros (T,2 ,n)
197- # last col first col
198- colspec[1 ,n] = colspec[2 ,1 ] = 1
199- valspec = zeros (T,2 ,2 )
200- # [1,n] [n,1]
201- valspec[1 ,1 ] = valspec[2 ,2 ] = SimpleRatio (1 ,8 )
177+ specs = _build_woodbury_specs (T, n,
178+ (1 , n, du[1 ]),
179+ (n, 1 , dl[end ])
180+ )
202181
203- Woodbury (lufact! (Tridiagonal (dl, d, du), Val{false }), rowspec, valspec, colspec ), zeros (TC, n)
182+ Woodbury (lufact! (Tridiagonal (dl, d, du), Val{false }), specs ... ), zeros (TC, n)
204183end
205184
206185
0 commit comments