annotate test/SbpOperators/volumeops/laplace/laplace_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 24df68453890
children 1784b1c0af3e
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 @testset "Laplace" begin
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
8 g_1D = EquidistantGrid(101, 0.0, 1.)
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
9 g_3D = EquidistantGrid((51,101,52), (0.0, -1.0, 0.0), (1., 1., 1.))
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
10 @testset "Constructors" begin
799
24df68453890 Fix laplace tests
Jonatan Werpers <jonatan@werpers.com>
parents: 732
diff changeset
11 stencil_set = read_stencil_set(sbp_operators_path()*"standard_diagonal.toml"; order=4)
24df68453890 Fix laplace tests
Jonatan Werpers <jonatan@werpers.com>
parents: 732
diff changeset
12 inner_stencil = parse_stencil(stencil_set["D2"]["inner_stencil"])
24df68453890 Fix laplace tests
Jonatan Werpers <jonatan@werpers.com>
parents: 732
diff changeset
13 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
14 @testset "1D" begin
799
24df68453890 Fix laplace tests
Jonatan Werpers <jonatan@werpers.com>
parents: 732
diff changeset
15 L = laplace(g_1D, inner_stencil, closure_stencils)
24df68453890 Fix laplace tests
Jonatan Werpers <jonatan@werpers.com>
parents: 732
diff changeset
16 @test L == 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
17 @test L isa TensorMapping{T,1,1} where T
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
18 end
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
19 @testset "3D" begin
799
24df68453890 Fix laplace tests
Jonatan Werpers <jonatan@werpers.com>
parents: 732
diff changeset
20 L = laplace(g_3D, inner_stencil, closure_stencils)
728
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
21 @test L isa TensorMapping{T,3,3} where T
799
24df68453890 Fix laplace tests
Jonatan Werpers <jonatan@werpers.com>
parents: 732
diff changeset
22 Dxx = second_derivative(g_3D, inner_stencil, closure_stencils, 1)
24df68453890 Fix laplace tests
Jonatan Werpers <jonatan@werpers.com>
parents: 732
diff changeset
23 Dyy = second_derivative(g_3D, inner_stencil, closure_stencils, 2)
24df68453890 Fix laplace tests
Jonatan Werpers <jonatan@werpers.com>
parents: 732
diff changeset
24 Dzz = second_derivative(g_3D, inner_stencil, closure_stencils, 3)
728
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
25 @test L == Dxx + Dyy + Dzz
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
26 end
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
27 end
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
28
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
29 # 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
30 # the error is measured in the l2-norm.
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
31 @testset "Accuracy" begin
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
32 l2(v) = sqrt(prod(spacing(g_3D))*sum(v.^2));
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
33 polynomials = ()
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
34 maxOrder = 4;
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
35 for i = 0:maxOrder-1
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
36 f_i(x,y,z) = 1/factorial(i)*(y^i + x^i + z^i)
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
37 polynomials = (polynomials...,evalOn(g_3D,f_i))
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
38 end
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
39 v = evalOn(g_3D, (x,y,z) -> sin(x) + cos(y) + exp(z))
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
40 Δv = evalOn(g_3D,(x,y,z) -> -sin(x) - cos(y) + exp(z))
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
41
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
42 # 2nd order interior stencil, 1st order boundary stencil,
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
43 # 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
44 @testset "2nd order" begin
799
24df68453890 Fix laplace tests
Jonatan Werpers <jonatan@werpers.com>
parents: 732
diff changeset
45 stencil_set = read_stencil_set(sbp_operators_path()*"standard_diagonal.toml"; order=2)
24df68453890 Fix laplace tests
Jonatan Werpers <jonatan@werpers.com>
parents: 732
diff changeset
46 inner_stencil = parse_stencil(stencil_set["D2"]["inner_stencil"])
24df68453890 Fix laplace tests
Jonatan Werpers <jonatan@werpers.com>
parents: 732
diff changeset
47 closure_stencils = parse_stencil.(stencil_set["D2"]["closure_stencils"])
24df68453890 Fix laplace tests
Jonatan Werpers <jonatan@werpers.com>
parents: 732
diff changeset
48 L = laplace(g_3D, inner_stencil, closure_stencils)
728
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
49 @test L*polynomials[1] ≈ zeros(Float64, size(g_3D)...) atol = 5e-9
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
50 @test L*polynomials[2] ≈ zeros(Float64, size(g_3D)...) atol = 5e-9
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
51 @test L*polynomials[3] ≈ polynomials[1] atol = 5e-9
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
52 @test L*v ≈ Δv rtol = 5e-2 norm = l2
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
53 end
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
54
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
55 # 4th order interior stencil, 2nd order boundary stencil,
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
56 # 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
57 @testset "4th order" begin
799
24df68453890 Fix laplace tests
Jonatan Werpers <jonatan@werpers.com>
parents: 732
diff changeset
58 stencil_set = read_stencil_set(sbp_operators_path()*"standard_diagonal.toml"; order=4)
24df68453890 Fix laplace tests
Jonatan Werpers <jonatan@werpers.com>
parents: 732
diff changeset
59 inner_stencil = parse_stencil(stencil_set["D2"]["inner_stencil"])
24df68453890 Fix laplace tests
Jonatan Werpers <jonatan@werpers.com>
parents: 732
diff changeset
60 closure_stencils = parse_stencil.(stencil_set["D2"]["closure_stencils"])
24df68453890 Fix laplace tests
Jonatan Werpers <jonatan@werpers.com>
parents: 732
diff changeset
61 L = laplace(g_3D, inner_stencil, closure_stencils)
728
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
62 # NOTE: high tolerances for checking the "exact" differentiation
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
63 # 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
64 @test L*polynomials[1] ≈ zeros(Float64, size(g_3D)...) atol = 5e-9
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
65 @test L*polynomials[2] ≈ zeros(Float64, size(g_3D)...) atol = 5e-9
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
66 @test L*polynomials[3] ≈ polynomials[1] atol = 5e-9
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
67 @test L*polynomials[4] ≈ polynomials[2] atol = 5e-9
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
68 @test L*v ≈ Δv rtol = 5e-4 norm = l2
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
69 end
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
70 end
45966c77cb20 Split tests for SbpOperators over several files
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
71 end