annotate test/BoundaryConditions/sat_test.jl @ 1479:b96858a50e35 feature/boundary_conditions

Add tests for SAT
author Vidar Stiernström <vidar.stiernstrom@it.uu.se>
date Sat, 23 Dec 2023 23:01:28 +0100
parents bdcdbd4ea9cd
children 329720b9ba0d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1217
ea2e8254820a Update docstrings and start implementing tests
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
1 using Test
ea2e8254820a Update docstrings and start implementing tests
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
2
ea2e8254820a Update docstrings and start implementing tests
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
3
ea2e8254820a Update docstrings and start implementing tests
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
4 using Sbplib.BoundaryConditions
ea2e8254820a Update docstrings and start implementing tests
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
5 using Sbplib.Grids
ea2e8254820a Update docstrings and start implementing tests
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
6 using Sbplib.LazyTensors
1479
b96858a50e35 Add tests for SAT
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1395
diff changeset
7 using Sbplib.SbpOperators
1217
ea2e8254820a Update docstrings and start implementing tests
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
8
1479
b96858a50e35 Add tests for SAT
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1395
diff changeset
9 stencil_set = read_stencil_set(sbp_operators_path()*"standard_diagonal.toml"; order = 4)
b96858a50e35 Add tests for SAT
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1395
diff changeset
10
1217
ea2e8254820a Update docstrings and start implementing tests
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
11 struct MockOp
ea2e8254820a Update docstrings and start implementing tests
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
12 end
ea2e8254820a Update docstrings and start implementing tests
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
13
1479
b96858a50e35 Add tests for SAT
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1395
diff changeset
14 function BoundaryConditions.sat_tensors(op::MockOp, g::TensorGrid, bc::DirichletCondition)
b96858a50e35 Add tests for SAT
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1395
diff changeset
15 e = boundary_restriction(g, stencil_set, id(bc))
b96858a50e35 Add tests for SAT
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1395
diff changeset
16 L = e
b96858a50e35 Add tests for SAT
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1395
diff changeset
17 sat_op = e'
b96858a50e35 Add tests for SAT
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1395
diff changeset
18 return sat_op, L
b96858a50e35 Add tests for SAT
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1395
diff changeset
19 end
b96858a50e35 Add tests for SAT
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1395
diff changeset
20
b96858a50e35 Add tests for SAT
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1395
diff changeset
21 function BoundaryConditions.sat_tensors(op::MockOp, g::TensorGrid, bc::DirichletCondition, a)
b96858a50e35 Add tests for SAT
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1395
diff changeset
22 e = boundary_restriction(g, stencil_set, id(bc))
b96858a50e35 Add tests for SAT
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1395
diff changeset
23 L = a*e
b96858a50e35 Add tests for SAT
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1395
diff changeset
24 sat_op = e'
b96858a50e35 Add tests for SAT
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1395
diff changeset
25 return sat_op, L
b96858a50e35 Add tests for SAT
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1395
diff changeset
26 end
b96858a50e35 Add tests for SAT
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1395
diff changeset
27
b96858a50e35 Add tests for SAT
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1395
diff changeset
28 function BoundaryConditions.sat_tensors(op::MockOp, g::TensorGrid, bc::NeumannCondition)
b96858a50e35 Add tests for SAT
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1395
diff changeset
29 e = boundary_restriction(g, stencil_set, id(bc))
b96858a50e35 Add tests for SAT
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1395
diff changeset
30 d = normal_derivative(g, stencil_set, id(bc))
b96858a50e35 Add tests for SAT
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1395
diff changeset
31 L = d
b96858a50e35 Add tests for SAT
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1395
diff changeset
32 sat_op = e'
b96858a50e35 Add tests for SAT
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1395
diff changeset
33 return sat_op, L
1217
ea2e8254820a Update docstrings and start implementing tests
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
34 end
ea2e8254820a Update docstrings and start implementing tests
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
35
1479
b96858a50e35 Add tests for SAT
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1395
diff changeset
36 @testset "sat" begin
b96858a50e35 Add tests for SAT
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1395
diff changeset
37 op = MockOp()
b96858a50e35 Add tests for SAT
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1395
diff changeset
38 grid = equidistant_grid((11,13), (0.,0.), (1.,1.))
b96858a50e35 Add tests for SAT
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1395
diff changeset
39 W, E, S, N = boundary_identifiers(grid)
b96858a50e35 Add tests for SAT
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1395
diff changeset
40 u = eval_on(grid, (x,y) -> x+y^2)
1217
ea2e8254820a Update docstrings and start implementing tests
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
41
1479
b96858a50e35 Add tests for SAT
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1395
diff changeset
42
b96858a50e35 Add tests for SAT
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1395
diff changeset
43 dc_W = DirichletCondition(1.0, W)
b96858a50e35 Add tests for SAT
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1395
diff changeset
44 SAT_W = sat(op, grid, dc_W)
b96858a50e35 Add tests for SAT
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1395
diff changeset
45 g_W = discretize_data(grid, dc_W)
b96858a50e35 Add tests for SAT
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1395
diff changeset
46 r_W = zeros(size(grid))
b96858a50e35 Add tests for SAT
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1395
diff changeset
47 r_W[1,:] .= map(y -> (y^2-1.), range(0., 1., length=13))
b96858a50e35 Add tests for SAT
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1395
diff changeset
48 @test SAT_W(u, g_W) ≈ r_W atol = 1e-13
b96858a50e35 Add tests for SAT
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1395
diff changeset
49
b96858a50e35 Add tests for SAT
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1395
diff changeset
50 dc_E = DirichletCondition(2, E)
b96858a50e35 Add tests for SAT
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1395
diff changeset
51 SAT_E = sat(op, grid, dc_E, 2.)
b96858a50e35 Add tests for SAT
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1395
diff changeset
52 g_E = discretize_data(grid, dc_E)
b96858a50e35 Add tests for SAT
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1395
diff changeset
53 r_E = zeros(size(grid))
b96858a50e35 Add tests for SAT
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1395
diff changeset
54 r_E[end,:] .= map(y -> (2*(1. + y^2)-2.), range(0., 1., length=13))
b96858a50e35 Add tests for SAT
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1395
diff changeset
55 @test SAT_E(u, g_E) ≈ r_E atol = 1e-13
b96858a50e35 Add tests for SAT
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1395
diff changeset
56
b96858a50e35 Add tests for SAT
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1395
diff changeset
57 nc_S = NeumannCondition(.0, S)
b96858a50e35 Add tests for SAT
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1395
diff changeset
58 SAT_S = sat(op, grid, nc_S)
b96858a50e35 Add tests for SAT
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1395
diff changeset
59 g_S = discretize_data(grid, nc_S)
b96858a50e35 Add tests for SAT
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1395
diff changeset
60 @test SAT_S(u, g_S) ≈ zeros(size(grid)) atol = 1e-13
b96858a50e35 Add tests for SAT
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1395
diff changeset
61
b96858a50e35 Add tests for SAT
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1395
diff changeset
62 nc_N = NeumannCondition(2.0, N)
b96858a50e35 Add tests for SAT
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1395
diff changeset
63 SAT_S = sat(op, grid, nc_N)
b96858a50e35 Add tests for SAT
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1395
diff changeset
64 g_N = discretize_data(grid, nc_N)
b96858a50e35 Add tests for SAT
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1395
diff changeset
65 @test SAT_S(u, g_N) ≈ zeros(size(grid)) atol = 1e-13
b96858a50e35 Add tests for SAT
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1395
diff changeset
66 end