Mercurial > repos > public > sbplib_julia
comparison test/testSbpOperators.jl @ 568:34d9e10f0001 feature/boundary_ops
Make grid larger in test to make sure there all kinds of regions are represented
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Tue, 01 Dec 2020 15:15:06 +0100 |
parents | d14d8de27546 |
children | a8fe91861116 |
comparison
equal
deleted
inserted
replaced
567:d14d8de27546 | 568:34d9e10f0001 |
---|---|
173 @test Qinv*v == Qinv'*v | 173 @test Qinv*v == Qinv'*v |
174 end | 174 end |
175 | 175 |
176 @testset "BoundaryRestrictrion" begin | 176 @testset "BoundaryRestrictrion" begin |
177 op = readOperator(sbp_operators_path()*"d2_4th.txt",sbp_operators_path()*"h_4th.txt") | 177 op = readOperator(sbp_operators_path()*"d2_4th.txt",sbp_operators_path()*"h_4th.txt") |
178 g_1D = EquidistantGrid(4, 0.0, 1.0) | 178 g_1D = EquidistantGrid(11, 0.0, 1.0) |
179 g_2D = EquidistantGrid((4,5), (0.0, 0.0), (1.0,1.0)) | 179 g_2D = EquidistantGrid((11,15), (0.0, 0.0), (1.0,1.0)) |
180 | 180 |
181 @testset "Constructors" begin | 181 @testset "Constructors" begin |
182 # 1D | 182 # 1D |
183 e_l = BoundaryRestriction{Float64,4,Lower}(op.eClosure,size(g_1D)) | 183 e_l = BoundaryRestriction{Float64,4,Lower}(op.eClosure,size(g_1D)) |
184 @test e_l == BoundaryRestriction(g_1D,op.eClosure,Lower()) | 184 @test e_l == BoundaryRestriction(g_1D,op.eClosure,Lower()) |
204 e_s = boundary_restriction(g_2D, op.eClosure, CartesianBoundary{2,Lower}()) | 204 e_s = boundary_restriction(g_2D, op.eClosure, CartesianBoundary{2,Lower}()) |
205 e_n = boundary_restriction(g_2D, op.eClosure, CartesianBoundary{2,Upper}()) | 205 e_n = boundary_restriction(g_2D, op.eClosure, CartesianBoundary{2,Upper}()) |
206 | 206 |
207 @testset "Sizes" begin | 207 @testset "Sizes" begin |
208 # 1D | 208 # 1D |
209 @test domain_size(e_l) == (4,) | 209 @test domain_size(e_l) == (11,) |
210 @test domain_size(e_r) == (4,) | 210 @test domain_size(e_r) == (11,) |
211 | 211 |
212 @test range_size(e_l) == () | 212 @test range_size(e_l) == () |
213 @test range_size(e_r) == () | 213 @test range_size(e_r) == () |
214 | 214 |
215 # 2D | 215 # 2D |
216 @test domain_size(e_w) == (4,5) | 216 @test domain_size(e_w) == (11,15) |
217 @test domain_size(e_e) == (4,5) | 217 @test domain_size(e_e) == (11,15) |
218 @test domain_size(e_s) == (4,5) | 218 @test domain_size(e_s) == (11,15) |
219 @test domain_size(e_n) == (4,5) | 219 @test domain_size(e_n) == (11,15) |
220 | 220 |
221 @test range_size(e_w) == (5,) | 221 @test range_size(e_w) == (15,) |
222 @test range_size(e_e) == (5,) | 222 @test range_size(e_e) == (15,) |
223 @test range_size(e_s) == (4,) | 223 @test range_size(e_s) == (11,) |
224 @test range_size(e_n) == (4,) | 224 @test range_size(e_n) == (11,) |
225 end | 225 end |
226 | 226 |
227 | 227 |
228 @testset "Application" begin | 228 @testset "Application" begin |
229 # 1D | 229 # 1D |
230 v = evalOn(g_1D,x->1+x^2) | 230 v = evalOn(g_1D,x->1+x^2) |
231 u = fill(3.124) | 231 u = fill(3.124) |
232 @test (e_l*v)[] == v[1] | 232 @test (e_l*v)[] == v[1] |
233 @test (e_r*v)[] == v[end] | 233 @test (e_r*v)[] == v[end] |
234 @test (e_r*v)[1] == v[end] | 234 @test (e_r*v)[1] == v[end] |
235 @test e_l'*u == [u[], 0, 0, 0] | 235 @test e_l'*u == [u[]; zeros(10)] |
236 @test e_r'*u == [0, 0, 0, u[]] | 236 @test e_r'*u == [zeros(10); u[]] |
237 @test_throws BoundsError (e_l*v)[2] | 237 @test_throws BoundsError (e_l*v)[2] |
238 @test_throws BoundsError (e_l'*u)[5] | 238 @test_throws BoundsError (e_l'*u)[20] |
239 | 239 |
240 # 2D | 240 # 2D |
241 v = zeros(Float64, 4, 5) | 241 v = rand(11, 15) |
242 v[:,5] = [1, 2, 3, 4] | |
243 v[:,4] = [1, 2, 3, 4] | |
244 v[:,3] = [4, 5, 6, 7] | |
245 v[:,2] = [7, 8, 9, 10] | |
246 v[:,1] = [10, 11, 12, 13] | |
247 | 242 |
248 @test e_w*v == v[1,:] | 243 @test e_w*v == v[1,:] |
249 @test e_e*v == v[end,:] | 244 @test e_e*v == v[end,:] |
250 @test e_s*v == v[:,1] | 245 @test e_s*v == v[:,1] |
251 @test e_n*v == v[:,end] | 246 @test e_n*v == v[:,end] |
252 | 247 |
253 | 248 |
254 g_x = [1., 2., 3., 4.] | 249 g_x = rand(11) |
255 g_y = [5., 4., 3., 2., 1.] | 250 g_y = rand(15) |
256 | 251 |
257 G_w = zeros(Float64, (4,5)) | 252 G_w = zeros(Float64, (11,15)) |
258 G_w[1,:] = g_y | 253 G_w[1,:] = g_y |
259 | 254 |
260 G_e = zeros(Float64, (4,5)) | 255 G_e = zeros(Float64, (11,15)) |
261 G_e[4,:] = g_y | 256 G_e[end,:] = g_y |
262 | 257 |
263 G_s = zeros(Float64, (4,5)) | 258 G_s = zeros(Float64, (11,15)) |
264 G_s[:,1] = g_x | 259 G_s[:,1] = g_x |
265 | 260 |
266 G_n = zeros(Float64, (4,5)) | 261 G_n = zeros(Float64, (11,15)) |
267 G_n[:,5] = g_x | 262 G_n[:,end] = g_x |
268 | 263 |
269 @test e_w'*g_y == G_w | 264 @test e_w'*g_y == G_w |
270 @test e_e'*g_y == G_e | 265 @test e_e'*g_y == G_e |
271 @test e_s'*g_x == G_s | 266 @test e_s'*g_x == G_s |
272 @test e_n'*g_x == G_n | 267 @test e_n'*g_x == G_n |
273 end | 268 end |
274 | 269 |
275 @testset "Inferred" begin | 270 @testset "Inferred" begin |
276 # 1D | 271 # # 1D |
277 v = ones(Float64, 4) | 272 v = ones(Float64, 11) |
278 u = fill(1.) | 273 u = fill(1.) |
279 @inferred (e_l*v)[] == 1 | 274 @inferred (e_l*v)[] == 1 |
280 @inferred (e_r*v)[] == 1 | 275 @inferred (e_r*v)[] == 1 |
281 @inferred e_l'*u == [1., 0., 0., 0.] | 276 @inferred e_l'*u == [1.; zeros(10)] |
282 @inferred e_r'*u == [0., 0., 0., 1.] | 277 @inferred e_r'*u == [zeros(10); 1.] |
283 | 278 |
284 # 2D | 279 # # 2D |
285 v = ones(Float64, 4, 5) | 280 v = ones(Float64, 11, 15) |
286 @inferred e_w*v == ones(Float64, 5) | 281 @inferred e_w*v == ones(Float64, 15) |
287 @inferred e_e*v == ones(Float64, 5) | 282 @inferred e_e*v == ones(Float64, 15) |
288 @inferred e_s*v == ones(Float64, 4) | 283 @inferred e_s*v == ones(Float64, 11) |
289 @inferred e_n*v == ones(Float64, 4) | 284 @inferred e_n*v == ones(Float64, 11) |
290 | 285 |
291 g_x = ones(Float64,4) | 286 g_x = ones(Float64,11) |
292 g_y = ones(Float64,5) | 287 g_y = ones(Float64,15) |
293 | 288 |
294 G_w = zeros(Float64, (4,5)) | 289 G_w = zeros(Float64, (11,15)) |
295 G_w[1,:] = g_y | 290 G_w[1,:] = g_y |
296 | 291 |
297 G_e = zeros(Float64, (4,5)) | 292 G_e = zeros(Float64, (11,15)) |
298 G_e[4,:] = g_y | 293 G_e[4,:] = g_y |
299 | 294 |
300 G_s = zeros(Float64, (4,5)) | 295 G_s = zeros(Float64, (11,15)) |
301 G_s[:,1] = g_x | 296 G_s[:,1] = g_x |
302 | 297 |
303 G_n = zeros(Float64, (4,5)) | 298 G_n = zeros(Float64, (11,15)) |
304 G_n[:,5] = g_x | 299 G_n[:,5] = g_x |
305 | 300 |
306 @inferred e_w'*g_y == G_w | 301 @inferred e_w'*g_y == G_w |
307 @inferred e_e'*g_y == G_e | 302 @inferred e_e'*g_y == G_e |
308 @inferred e_s'*g_x == G_s | 303 @inferred e_s'*g_x == G_s |