Mercurial > repos > public > sbplib_julia
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) |