comparison test/BoundaryConditions/sat_test.jl @ 1597:330c39505a94 feature/boundary_conditions

Fix boundary condition tests
author Vidar Stiernström <vidar.stiernstrom@gmail.com>
date Sun, 26 May 2024 18:18:17 -0700
parents 329720b9ba0d
children 3e7438e2a033
comparison
equal deleted inserted replaced
1596:84dc3b9b449b 1597:330c39505a94
15 L = e 15 L = e
16 sat_op = e' 16 sat_op = e'
17 return sat_op, L 17 return sat_op, L
18 end 18 end
19 19
20 function BoundaryConditions.sat_tensors(op::MockOp, g::Grid, bc::DirichletCondition, a)
21 e = boundary_restriction(g, stencil_set, id(bc))
22 L = a*e
23 sat_op = e'
24 return sat_op, L
25 end
26
27 function BoundaryConditions.sat_tensors(op::MockOp, g::Grid, bc::NeumannCondition) 20 function BoundaryConditions.sat_tensors(op::MockOp, g::Grid, bc::NeumannCondition)
28 e = boundary_restriction(g, stencil_set, id(bc)) 21 e = boundary_restriction(g, stencil_set, id(bc))
29 d = normal_derivative(g, stencil_set, id(bc)) 22 d = normal_derivative(g, stencil_set, id(bc))
30 L = d 23 L = d
31 sat_op = e' 24 sat_op = e'
33 end 26 end
34 27
35 @testset "sat" begin 28 @testset "sat" begin
36 op = MockOp() 29 op = MockOp()
37 @testset "1D" begin 30 @testset "1D" begin
38 grid = equidistant_grid(11, 0., 1.) 31 grid = equidistant_grid(0., 1., 11)
39 l, r = boundary_identifiers(grid) 32 l, r = boundary_identifiers(grid)
40 u = eval_on(grid, x-> 1. + 2x^2) 33 u = eval_on(grid, x-> 1. + 2x^2)
41 dc = DirichletCondition(1.0, l) 34 dc = DirichletCondition(1.0, l)
42 g_l = discretize_data(grid, dc) 35 g_l = discretize_data(grid, dc)
43 SAT_l = sat(op, grid, dc) 36 SAT_l = sat(op, grid, dc)
47 g_r = discretize_data(grid, nc) 40 g_r = discretize_data(grid, nc)
48 SAT_r = sat(op, grid, nc) 41 SAT_r = sat(op, grid, nc)
49 @test SAT_r(u, g_r) ≈ zeros((size(grid))) atol = 1e-13 42 @test SAT_r(u, g_r) ≈ zeros((size(grid))) atol = 1e-13
50 end 43 end
51 @testset "2D" begin 44 @testset "2D" begin
52 grid = equidistant_grid((11,13), (0.,0.), (1.,1.)) 45 grid = equidistant_grid((0.,0.), (1.,1.), 11, 13)
53 W, E, S, N = boundary_identifiers(grid) 46 W, E, S, N = boundary_identifiers(grid)
54 u = eval_on(grid, (x,y) -> x+y^2) 47 u = eval_on(grid, (x,y) -> x+y^2)
55 48
56 dc_W = DirichletCondition(1.0, W) 49 dc_W = DirichletCondition(1.0, W)
57 SAT_W = sat(op, grid, dc_W) 50 SAT_W = sat(op, grid, dc_W)
59 r_W = zeros(size(grid)) 52 r_W = zeros(size(grid))
60 r_W[1,:] .= map(y -> (y^2-1.), range(0., 1., length=13)) 53 r_W[1,:] .= map(y -> (y^2-1.), range(0., 1., length=13))
61 @test SAT_W(u, g_W) ≈ r_W atol = 1e-13 54 @test SAT_W(u, g_W) ≈ r_W atol = 1e-13
62 55
63 dc_E = DirichletCondition(2, E) 56 dc_E = DirichletCondition(2, E)
64 SAT_E = sat(op, grid, dc_E, 2.) 57 SAT_E = sat(op, grid, dc_E)
65 g_E = discretize_data(grid, dc_E) 58 g_E = discretize_data(grid, dc_E)
66 r_E = zeros(size(grid)) 59 r_E = zeros(size(grid))
67 r_E[end,:] .= map(y -> (2*(1. + y^2)-2.), range(0., 1., length=13)) 60 r_E[end,:] .= map(y -> ((1. + y^2)-2.), range(0., 1., length=13))
68 @test SAT_E(u, g_E) ≈ r_E atol = 1e-13 61 @test SAT_E(u, g_E) ≈ r_E atol = 1e-13
69 62
70 nc_S = NeumannCondition(.0, S) 63 nc_S = NeumannCondition(.0, S)
71 SAT_S = sat(op, grid, nc_S) 64 SAT_S = sat(op, grid, nc_S)
72 g_S = discretize_data(grid, nc_S) 65 g_S = discretize_data(grid, nc_S)