comparison test/SbpOperators/boundaryops/normal_derivative_test.jl @ 934:af670581b464 feature/laplace_opset

Add tests for constructing boundary operators from stencil sets
author Vidar Stiernström <vidar.stiernstrom@it.uu.se>
date Fri, 25 Feb 2022 16:35:16 +0100
parents d360fc2d9620
children 7168d28b03e3
comparison
equal deleted inserted replaced
933:d83f685f1031 934:af670581b464
1 using Test 1 using Test
2 2
3 using Sbplib.SbpOperators 3 using Sbplib.SbpOperators
4 using Sbplib.Grids 4 using Sbplib.Grids
5 using Sbplib.LazyTensors 5 using Sbplib.LazyTensors
6 6 using Sbplib.RegionIndices
7 import Sbplib.SbpOperators.BoundaryOperator 7 import Sbplib.SbpOperators.BoundaryOperator
8 8
9 @testset "normal_derivative" begin 9 @testset "normal_derivative" begin
10 g_1D = EquidistantGrid(11, 0.0, 1.0) 10 g_1D = EquidistantGrid(11, 0.0, 1.0)
11 g_2D = EquidistantGrid((11,12), (0.0, 0.0), (1.0,1.0)) 11 g_2D = EquidistantGrid((11,12), (0.0, 0.0), (1.0,1.0))
12 @testset "normal_derivative" begin 12 @testset "normal_derivative" begin
13 stencil_set = read_stencil_set(sbp_operators_path()*"standard_diagonal.toml"; order=4) 13 stencil_set = read_stencil_set(sbp_operators_path()*"standard_diagonal.toml"; order=4)
14 d_closure = parse_stencil(stencil_set["d1"]["closure"]) 14 d_closure = parse_stencil(stencil_set["d1"]["closure"])
15 @testset "1D" begin 15 @testset "1D" begin
16 d_l = normal_derivative(g_1D, d_closure, CartesianBoundary{1,Lower}()) 16 d_l = normal_derivative(g_1D, d_closure, CartesianBoundary{1,Lower}())
17 @test d_l == normal_derivative(g_1D, stencil_set, CartesianBoundary{1,Lower}())
17 @test d_l isa BoundaryOperator{T,Lower} where T 18 @test d_l isa BoundaryOperator{T,Lower} where T
18 @test d_l isa TensorMapping{T,0,1} where T 19 @test d_l isa TensorMapping{T,0,1} where T
19 end 20 end
20 @testset "2D" begin 21 @testset "2D" begin
21 d_w = normal_derivative(g_2D, d_closure, CartesianBoundary{1,Lower}()) 22 d_w = normal_derivative(g_2D, d_closure, CartesianBoundary{1,Lower}())
22 d_n = normal_derivative(g_2D, d_closure, CartesianBoundary{2,Upper}()) 23 d_n = normal_derivative(g_2D, d_closure, CartesianBoundary{2,Upper}())
23 Ix = IdentityMapping{Float64}((size(g_2D)[1],)) 24 Ix = IdentityMapping{Float64}((size(g_2D)[1],))
24 Iy = IdentityMapping{Float64}((size(g_2D)[2],)) 25 Iy = IdentityMapping{Float64}((size(g_2D)[2],))
25 d_l = normal_derivative(restrict(g_2D,1),d_closure,CartesianBoundary{1,Lower}()) 26 d_l = normal_derivative(restrict(g_2D,1),d_closure,CartesianBoundary{1,Lower}())
26 d_r = normal_derivative(restrict(g_2D,2),d_closure,CartesianBoundary{1,Upper}()) 27 d_r = normal_derivative(restrict(g_2D,2),d_closure,CartesianBoundary{1,Upper}())
28 @test d_w == normal_derivative(g_2D, stencil_set, CartesianBoundary{1,Lower}())
27 @test d_w == d_l⊗Iy 29 @test d_w == d_l⊗Iy
28 @test d_n == Ix⊗d_r 30 @test d_n == Ix⊗d_r
29 @test d_w isa TensorMapping{T,1,2} where T 31 @test d_w isa TensorMapping{T,1,2} where T
30 @test d_n isa TensorMapping{T,1,2} where T 32 @test d_n isa TensorMapping{T,1,2} where T
31 end 33 end