annotate test/SbpOperators/volumeops/derivatives/second_derivative_test.jl @ 877:dd2ab001a7b6 feature/equidistant_grid/refine

Implement refine function, move exports to the top of the file, change location of constuctors. The constructors were changed have only one inner constructor and simpler outer constructors.
author Jonatan Werpers <jonatan@werpers.com>
date Mon, 14 Feb 2022 09:39:58 +0100
parents d2f4ac2be47f
children 2ae62dbaf839
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
728
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
1 using Test
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
2
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
3 using Sbplib.SbpOperators
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
4 using Sbplib.Grids
732
6114274447f5 Add missing using and imports in test files
Jonatan Werpers <jonatan@werpers.com>
parents: 728
diff changeset
5 using Sbplib.LazyTensors
728
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
6
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
7 import Sbplib.SbpOperators.VolumeOperator
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
8
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
9 @testset "SecondDerivative" begin
781
d2f4ac2be47f Fix derivatives tests
Jonatan Werpers <jonatan@werpers.com>
parents: 776
diff changeset
10 stencil_set = read_stencil_set(sbp_operators_path()*"standard_diagonal.toml"; order=4)
d2f4ac2be47f Fix derivatives tests
Jonatan Werpers <jonatan@werpers.com>
parents: 776
diff changeset
11 inner_stencil = parse_stencil(stencil_set["D2"]["inner_stencil"])
d2f4ac2be47f Fix derivatives tests
Jonatan Werpers <jonatan@werpers.com>
parents: 776
diff changeset
12 closure_stencils = parse_stencil.(stencil_set["D2"]["closure_stencils"])
728
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
13 Lx = 3.5
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
14 Ly = 3.
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
15 g_1D = EquidistantGrid(121, 0.0, Lx)
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
16 g_2D = EquidistantGrid((121,123), (0.0, 0.0), (Lx, Ly))
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
17
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
18 @testset "Constructors" begin
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
19 @testset "1D" begin
781
d2f4ac2be47f Fix derivatives tests
Jonatan Werpers <jonatan@werpers.com>
parents: 776
diff changeset
20 Dₓₓ = second_derivative(g_1D,inner_stencil,closure_stencils)
d2f4ac2be47f Fix derivatives tests
Jonatan Werpers <jonatan@werpers.com>
parents: 776
diff changeset
21 @test Dₓₓ == second_derivative(g_1D,inner_stencil,closure_stencils,1)
728
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
22 @test Dₓₓ isa VolumeOperator
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
23 end
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
24 @testset "2D" begin
781
d2f4ac2be47f Fix derivatives tests
Jonatan Werpers <jonatan@werpers.com>
parents: 776
diff changeset
25 Dₓₓ = second_derivative(g_2D,inner_stencil,closure_stencils,1)
d2f4ac2be47f Fix derivatives tests
Jonatan Werpers <jonatan@werpers.com>
parents: 776
diff changeset
26 D2 = second_derivative(g_1D,inner_stencil,closure_stencils)
728
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
27 I = IdentityMapping{Float64}(size(g_2D)[2])
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
28 @test Dₓₓ == D2⊗I
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
29 @test Dₓₓ isa TensorMapping{T,2,2} where T
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
30 end
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
31 end
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
32
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
33 # Exact differentiation is measured point-wise. In other cases
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
34 # the error is measured in the l2-norm.
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
35 @testset "Accuracy" begin
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
36 @testset "1D" begin
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
37 l2(v) = sqrt(spacing(g_1D)[1]*sum(v.^2));
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
38 monomials = ()
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
39 maxOrder = 4;
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
40 for i = 0:maxOrder-1
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
41 f_i(x) = 1/factorial(i)*x^i
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
42 monomials = (monomials...,evalOn(g_1D,f_i))
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
43 end
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
44 v = evalOn(g_1D,x -> sin(x))
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
45 vₓₓ = evalOn(g_1D,x -> -sin(x))
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
46
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
47 # 2nd order interior stencil, 1nd order boundary stencil,
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
48 # implies that L*v should be exact for monomials up to order 2.
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
49 @testset "2nd order" begin
781
d2f4ac2be47f Fix derivatives tests
Jonatan Werpers <jonatan@werpers.com>
parents: 776
diff changeset
50 stencil_set = read_stencil_set(sbp_operators_path()*"standard_diagonal.toml"; order=2)
d2f4ac2be47f Fix derivatives tests
Jonatan Werpers <jonatan@werpers.com>
parents: 776
diff changeset
51 inner_stencil = parse_stencil(stencil_set["D2"]["inner_stencil"])
d2f4ac2be47f Fix derivatives tests
Jonatan Werpers <jonatan@werpers.com>
parents: 776
diff changeset
52 closure_stencils = parse_stencil.(stencil_set["D2"]["closure_stencils"])
d2f4ac2be47f Fix derivatives tests
Jonatan Werpers <jonatan@werpers.com>
parents: 776
diff changeset
53 Dₓₓ = second_derivative(g_1D,inner_stencil,closure_stencils)
728
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
54 @test Dₓₓ*monomials[1] ≈ zeros(Float64,size(g_1D)...) atol = 5e-10
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
55 @test Dₓₓ*monomials[2] ≈ zeros(Float64,size(g_1D)...) atol = 5e-10
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
56 @test Dₓₓ*monomials[3] ≈ monomials[1] atol = 5e-10
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
57 @test Dₓₓ*v ≈ vₓₓ rtol = 5e-2 norm = l2
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
58 end
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
59
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
60 # 4th order interior stencil, 2nd order boundary stencil,
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
61 # implies that L*v should be exact for monomials up to order 3.
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
62 @testset "4th order" begin
781
d2f4ac2be47f Fix derivatives tests
Jonatan Werpers <jonatan@werpers.com>
parents: 776
diff changeset
63 stencil_set = read_stencil_set(sbp_operators_path()*"standard_diagonal.toml"; order=4)
d2f4ac2be47f Fix derivatives tests
Jonatan Werpers <jonatan@werpers.com>
parents: 776
diff changeset
64 inner_stencil = parse_stencil(stencil_set["D2"]["inner_stencil"])
d2f4ac2be47f Fix derivatives tests
Jonatan Werpers <jonatan@werpers.com>
parents: 776
diff changeset
65 closure_stencils = parse_stencil.(stencil_set["D2"]["closure_stencils"])
d2f4ac2be47f Fix derivatives tests
Jonatan Werpers <jonatan@werpers.com>
parents: 776
diff changeset
66 Dₓₓ = second_derivative(g_1D,inner_stencil,closure_stencils)
728
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
67 # NOTE: high tolerances for checking the "exact" differentiation
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
68 # due to accumulation of round-off errors/cancellation errors?
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
69 @test Dₓₓ*monomials[1] ≈ zeros(Float64,size(g_1D)...) atol = 5e-10
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
70 @test Dₓₓ*monomials[2] ≈ zeros(Float64,size(g_1D)...) atol = 5e-10
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
71 @test Dₓₓ*monomials[3] ≈ monomials[1] atol = 5e-10
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
72 @test Dₓₓ*monomials[4] ≈ monomials[2] atol = 5e-10
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
73 @test Dₓₓ*v ≈ vₓₓ rtol = 5e-4 norm = l2
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
74 end
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
75 end
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
76
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
77 @testset "2D" begin
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
78 l2(v) = sqrt(prod(spacing(g_2D))*sum(v.^2));
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
79 binomials = ()
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
80 maxOrder = 4;
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
81 for i = 0:maxOrder-1
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
82 f_i(x,y) = 1/factorial(i)*y^i + x^i
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
83 binomials = (binomials...,evalOn(g_2D,f_i))
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
84 end
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
85 v = evalOn(g_2D, (x,y) -> sin(x)+cos(y))
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
86 v_yy = evalOn(g_2D,(x,y) -> -cos(y))
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
87
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
88 # 2nd order interior stencil, 1st order boundary stencil,
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
89 # implies that L*v should be exact for binomials up to order 2.
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
90 @testset "2nd order" begin
781
d2f4ac2be47f Fix derivatives tests
Jonatan Werpers <jonatan@werpers.com>
parents: 776
diff changeset
91 stencil_set = read_stencil_set(sbp_operators_path()*"standard_diagonal.toml"; order=2)
d2f4ac2be47f Fix derivatives tests
Jonatan Werpers <jonatan@werpers.com>
parents: 776
diff changeset
92 inner_stencil = parse_stencil(stencil_set["D2"]["inner_stencil"])
d2f4ac2be47f Fix derivatives tests
Jonatan Werpers <jonatan@werpers.com>
parents: 776
diff changeset
93 closure_stencils = parse_stencil.(stencil_set["D2"]["closure_stencils"])
d2f4ac2be47f Fix derivatives tests
Jonatan Werpers <jonatan@werpers.com>
parents: 776
diff changeset
94 Dyy = second_derivative(g_2D,inner_stencil,closure_stencils,2)
728
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
95 @test Dyy*binomials[1] ≈ zeros(Float64,size(g_2D)...) atol = 5e-9
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
96 @test Dyy*binomials[2] ≈ zeros(Float64,size(g_2D)...) atol = 5e-9
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
97 @test Dyy*binomials[3] ≈ evalOn(g_2D,(x,y)->1.) atol = 5e-9
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
98 @test Dyy*v ≈ v_yy rtol = 5e-2 norm = l2
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
99 end
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
100
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
101 # 4th order interior stencil, 2nd order boundary stencil,
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
102 # implies that L*v should be exact for binomials up to order 3.
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
103 @testset "4th order" begin
781
d2f4ac2be47f Fix derivatives tests
Jonatan Werpers <jonatan@werpers.com>
parents: 776
diff changeset
104 stencil_set = read_stencil_set(sbp_operators_path()*"standard_diagonal.toml"; order=4)
d2f4ac2be47f Fix derivatives tests
Jonatan Werpers <jonatan@werpers.com>
parents: 776
diff changeset
105 inner_stencil = parse_stencil(stencil_set["D2"]["inner_stencil"])
d2f4ac2be47f Fix derivatives tests
Jonatan Werpers <jonatan@werpers.com>
parents: 776
diff changeset
106 closure_stencils = parse_stencil.(stencil_set["D2"]["closure_stencils"])
d2f4ac2be47f Fix derivatives tests
Jonatan Werpers <jonatan@werpers.com>
parents: 776
diff changeset
107 Dyy = second_derivative(g_2D,inner_stencil,closure_stencils,2)
728
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
108 # NOTE: high tolerances for checking the "exact" differentiation
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
109 # due to accumulation of round-off errors/cancellation errors?
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
110 @test Dyy*binomials[1] ≈ zeros(Float64,size(g_2D)...) atol = 5e-9
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
111 @test Dyy*binomials[2] ≈ zeros(Float64,size(g_2D)...) atol = 5e-9
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
112 @test Dyy*binomials[3] ≈ evalOn(g_2D,(x,y)->1.) atol = 5e-9
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
113 @test Dyy*binomials[4] ≈ evalOn(g_2D,(x,y)->y) atol = 5e-9
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
114 @test Dyy*v ≈ v_yy rtol = 5e-4 norm = l2
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
115 end
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
116 end
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
117 end
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
118 end