Mercurial > repos > public > sbplib_julia
changeset 1482:329720b9ba0d feature/boundary_conditions
Add test for 1D grid
author | Vidar Stiernström <vidar.stiernstrom@it.uu.se> |
---|---|
date | Mon, 25 Dec 2023 19:23:49 +0100 |
parents | ee242c3fe4af |
children | abc5cc0aec94 |
files | test/BoundaryConditions/sat_test.jl |
diffstat | 1 files changed, 44 insertions(+), 30 deletions(-) [+] |
line wrap: on
line diff
--- a/test/BoundaryConditions/sat_test.jl Mon Dec 25 19:23:09 2023 +0100 +++ b/test/BoundaryConditions/sat_test.jl Mon Dec 25 19:23:49 2023 +0100 @@ -8,24 +8,23 @@ stencil_set = read_stencil_set(sbp_operators_path()*"standard_diagonal.toml"; order = 4) -struct MockOp -end +struct MockOp end -function BoundaryConditions.sat_tensors(op::MockOp, g::TensorGrid, bc::DirichletCondition) +function BoundaryConditions.sat_tensors(op::MockOp, g::Grid, bc::DirichletCondition) e = boundary_restriction(g, stencil_set, id(bc)) L = e sat_op = e' return sat_op, L end -function BoundaryConditions.sat_tensors(op::MockOp, g::TensorGrid, bc::DirichletCondition, a) +function BoundaryConditions.sat_tensors(op::MockOp, g::Grid, bc::DirichletCondition, a) e = boundary_restriction(g, stencil_set, id(bc)) L = a*e sat_op = e' return sat_op, L end -function BoundaryConditions.sat_tensors(op::MockOp, g::TensorGrid, bc::NeumannCondition) +function BoundaryConditions.sat_tensors(op::MockOp, g::Grid, bc::NeumannCondition) e = boundary_restriction(g, stencil_set, id(bc)) d = normal_derivative(g, stencil_set, id(bc)) L = d @@ -35,32 +34,47 @@ @testset "sat" begin op = MockOp() - grid = equidistant_grid((11,13), (0.,0.), (1.,1.)) - W, E, S, N = boundary_identifiers(grid) - u = eval_on(grid, (x,y) -> x+y^2) - - - dc_W = DirichletCondition(1.0, W) - SAT_W = sat(op, grid, dc_W) - g_W = discretize_data(grid, dc_W) - r_W = zeros(size(grid)) - r_W[1,:] .= map(y -> (y^2-1.), range(0., 1., length=13)) - @test SAT_W(u, g_W) ≈ r_W atol = 1e-13 + @testset "1D" begin + grid = equidistant_grid(11, 0., 1.) + l, r = boundary_identifiers(grid) + u = eval_on(grid, x-> 1. + 2x^2) + dc = DirichletCondition(1.0, l) + g_l = discretize_data(grid, dc) + SAT_l = sat(op, grid, dc) + @test SAT_l(u, g_l) ≈ zeros((size(grid))) atol = 1e-13 + + nc = NeumannCondition(4.0, r) + g_r = discretize_data(grid, nc) + SAT_r = sat(op, grid, nc) + @test SAT_r(u, g_r) ≈ zeros((size(grid))) atol = 1e-13 + end + @testset "2D" begin + grid = equidistant_grid((11,13), (0.,0.), (1.,1.)) + W, E, S, N = boundary_identifiers(grid) + u = eval_on(grid, (x,y) -> x+y^2) - dc_E = DirichletCondition(2, E) - SAT_E = sat(op, grid, dc_E, 2.) - g_E = discretize_data(grid, dc_E) - r_E = zeros(size(grid)) - r_E[end,:] .= map(y -> (2*(1. + y^2)-2.), range(0., 1., length=13)) - @test SAT_E(u, g_E) ≈ r_E atol = 1e-13 + dc_W = DirichletCondition(1.0, W) + SAT_W = sat(op, grid, dc_W) + g_W = discretize_data(grid, dc_W) + r_W = zeros(size(grid)) + r_W[1,:] .= map(y -> (y^2-1.), range(0., 1., length=13)) + @test SAT_W(u, g_W) ≈ r_W atol = 1e-13 - nc_S = NeumannCondition(.0, S) - SAT_S = sat(op, grid, nc_S) - g_S = discretize_data(grid, nc_S) - @test SAT_S(u, g_S) ≈ zeros(size(grid)) atol = 1e-13 + dc_E = DirichletCondition(2, E) + SAT_E = sat(op, grid, dc_E, 2.) + g_E = discretize_data(grid, dc_E) + r_E = zeros(size(grid)) + r_E[end,:] .= map(y -> (2*(1. + y^2)-2.), range(0., 1., length=13)) + @test SAT_E(u, g_E) ≈ r_E atol = 1e-13 - nc_N = NeumannCondition(2.0, N) - SAT_S = sat(op, grid, nc_N) - g_N = discretize_data(grid, nc_N) - @test SAT_S(u, g_N) ≈ zeros(size(grid)) atol = 1e-13 + nc_S = NeumannCondition(.0, S) + SAT_S = sat(op, grid, nc_S) + g_S = discretize_data(grid, nc_S) + @test SAT_S(u, g_S) ≈ zeros(size(grid)) atol = 1e-13 + + nc_N = NeumannCondition(2.0, N) + SAT_N = sat(op, grid, nc_N) + g_N = discretize_data(grid, nc_N) + @test SAT_N(u, g_N) ≈ zeros(size(grid)) atol = 1e-13 + end end