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