comparison test/SbpOperators/volumeops/volume_operator_test.jl @ 1099:05a25a5063bb refactor/sbpoperators/inflation

Try to remove volume_operator and boundary_operator methods
author Jonatan Werpers <jonatan@werpers.com>
date Mon, 21 Mar 2022 12:51:39 +0100
parents 1ba8a398af9c
children 0ba4609605d4
comparison
equal deleted inserted replaced
1024:5be17f647018 1099:05a25a5063bb
5 using Sbplib.RegionIndices 5 using Sbplib.RegionIndices
6 using Sbplib.LazyTensors 6 using Sbplib.LazyTensors
7 7
8 import Sbplib.SbpOperators.Stencil 8 import Sbplib.SbpOperators.Stencil
9 import Sbplib.SbpOperators.VolumeOperator 9 import Sbplib.SbpOperators.VolumeOperator
10 import Sbplib.SbpOperators.volume_operator
11 import Sbplib.SbpOperators.odd 10 import Sbplib.SbpOperators.odd
12 import Sbplib.SbpOperators.even 11 import Sbplib.SbpOperators.even
13 12
14 @testset "VolumeOperator" begin 13 @testset "VolumeOperator" begin
15 inner_stencil = CenteredStencil(1/4, 2/4, 1/4) 14 inner_stencil = CenteredStencil(1/4, 2/4, 1/4)
16 closure_stencils = (Stencil(1/2, 1/2; center=1), Stencil(0.,1.; center=2)) 15 closure_stencils = (Stencil(1/2, 1/2; center=1), Stencil(0.,1.; center=2))
17 g_1D = EquidistantGrid(11,0.,1.) 16 g_1D = EquidistantGrid(11,0.,1.)
18 g_2D = EquidistantGrid((11,12),(0.,0.),(1.,1.))
19 g_3D = EquidistantGrid((11,12,10),(0.,0.,0.),(1.,1.,1.))
20 @testset "Constructors" begin 17 @testset "Constructors" begin
21 @testset "1D" begin 18 op = VolumeOperator(inner_stencil,closure_stencils,(11,),even)
22 op = VolumeOperator(inner_stencil,closure_stencils,(11,),even) 19 @test op == VolumeOperator(g_1D,inner_stencil,closure_stencils,even)
23 @test op == VolumeOperator(g_1D,inner_stencil,closure_stencils,even) 20 @test op isa LazyTensor{T,1,1} where T
24 @test op == volume_operator(g_1D,inner_stencil,closure_stencils,even,1)
25 @test op isa LazyTensor{T,1,1} where T
26 end
27 @testset "2D" begin
28 op_x = volume_operator(g_2D,inner_stencil,closure_stencils,even,1)
29 op_y = volume_operator(g_2D,inner_stencil,closure_stencils,even,2)
30 Ix = IdentityTensor{Float64}((11,))
31 Iy = IdentityTensor{Float64}((12,))
32 @test op_x == VolumeOperator(inner_stencil,closure_stencils,(11,),even)⊗Iy
33 @test op_y == Ix⊗VolumeOperator(inner_stencil,closure_stencils,(12,),even)
34 @test op_x isa LazyTensor{T,2,2} where T
35 @test op_y isa LazyTensor{T,2,2} where T
36 end
37 @testset "3D" begin
38 op_x = volume_operator(g_3D,inner_stencil,closure_stencils,even,1)
39 op_y = volume_operator(g_3D,inner_stencil,closure_stencils,even,2)
40 op_z = volume_operator(g_3D,inner_stencil,closure_stencils,even,3)
41 Ix = IdentityTensor{Float64}((11,))
42 Iy = IdentityTensor{Float64}((12,))
43 Iz = IdentityTensor{Float64}((10,))
44 @test op_x == VolumeOperator(inner_stencil,closure_stencils,(11,),even)⊗Iy⊗Iz
45 @test op_y == Ix⊗VolumeOperator(inner_stencil,closure_stencils,(12,),even)⊗Iz
46 @test op_z == Ix⊗Iy⊗VolumeOperator(inner_stencil,closure_stencils,(10,),even)
47 @test op_x isa LazyTensor{T,3,3} where T
48 @test op_y isa LazyTensor{T,3,3} where T
49 @test op_z isa LazyTensor{T,3,3} where T
50 end
51 end 21 end
52 22
53 @testset "Sizes" begin 23 @testset "Sizes" begin
54 @testset "1D" begin 24 @testset "1D" begin
55 op = volume_operator(g_1D,inner_stencil,closure_stencils,even,1) 25 op = VolumeOperator(g_1D,inner_stencil,closure_stencils,even)
56 @test range_size(op) == domain_size(op) == size(g_1D) 26 @test range_size(op) == domain_size(op) == size(g_1D)
57 end
58
59 @testset "2D" begin
60 op_x = volume_operator(g_2D,inner_stencil,closure_stencils,even,1)
61 op_y = volume_operator(g_2D,inner_stencil,closure_stencils,even,2)
62 @test range_size(op_y) == domain_size(op_y) ==
63 range_size(op_x) == domain_size(op_x) == size(g_2D)
64 end
65 @testset "3D" begin
66 op_x = volume_operator(g_3D,inner_stencil,closure_stencils,even,1)
67 op_y = volume_operator(g_3D,inner_stencil,closure_stencils,even,2)
68 op_z = volume_operator(g_3D,inner_stencil,closure_stencils,even,3)
69 @test range_size(op_z) == domain_size(op_z) ==
70 range_size(op_y) == domain_size(op_y) ==
71 range_size(op_x) == domain_size(op_x) == size(g_3D)
72 end 27 end
73 end 28 end
74 29
75 op_x = volume_operator(g_2D,inner_stencil,closure_stencils,even,1) 30 # op_x = volume_operator(g_2D,inner_stencil,closure_stencils,even,1)
76 op_y = volume_operator(g_2D,inner_stencil,closure_stencils,odd,2) 31 # op_y = volume_operator(g_2D,inner_stencil,closure_stencils,odd,2)
77 v = zeros(size(g_2D)) 32 # v = zeros(size(g_2D))
78 Nx = size(g_2D)[1] 33 # Nx = size(g_2D)[1]
79 Ny = size(g_2D)[2] 34 # Ny = size(g_2D)[2]
80 for i = 1:Nx 35 # for i = 1:Nx
81 v[i,:] .= i 36 # v[i,:] .= i
82 end 37 # end
83 rx = copy(v) 38 # rx = copy(v)
84 rx[1,:] .= 1.5 39 # rx[1,:] .= 1.5
85 rx[Nx,:] .= (2*Nx-1)/2 40 # rx[Nx,:] .= (2*Nx-1)/2
86 ry = copy(v) 41 # ry = copy(v)
87 ry[:,Ny-1:Ny] = -v[:,Ny-1:Ny] 42 # ry[:,Ny-1:Ny] = -v[:,Ny-1:Ny]
88 43
89 @testset "Application" begin 44 # @testset "Application" begin
90 @test op_x*v ≈ rx rtol = 1e-14 45 # @test op_x*v ≈ rx rtol = 1e-14
91 @test op_y*v ≈ ry rtol = 1e-14 46 # @test op_y*v ≈ ry rtol = 1e-14
92 47
93 @test (op_x*rand(ComplexF64,size(g_2D)))[2,2] isa ComplexF64 48 # @test (op_x*rand(ComplexF64,size(g_2D)))[2,2] isa ComplexF64
94 end 49 # end
95 50
96 @testset "Regions" begin 51 # @testset "Regions" begin
97 @test (op_x*v)[Index(1,Lower),Index(3,Interior)] ≈ rx[1,3] rtol = 1e-14 52 # @test (op_x*v)[Index(1,Lower),Index(3,Interior)] ≈ rx[1,3] rtol = 1e-14
98 @test (op_x*v)[Index(2,Lower),Index(3,Interior)] ≈ rx[2,3] rtol = 1e-14 53 # @test (op_x*v)[Index(2,Lower),Index(3,Interior)] ≈ rx[2,3] rtol = 1e-14
99 @test (op_x*v)[Index(6,Interior),Index(3,Interior)] ≈ rx[6,3] rtol = 1e-14 54 # @test (op_x*v)[Index(6,Interior),Index(3,Interior)] ≈ rx[6,3] rtol = 1e-14
100 @test (op_x*v)[Index(10,Upper),Index(3,Interior)] ≈ rx[10,3] rtol = 1e-14 55 # @test (op_x*v)[Index(10,Upper),Index(3,Interior)] ≈ rx[10,3] rtol = 1e-14
101 @test (op_x*v)[Index(11,Upper),Index(3,Interior)] ≈ rx[11,3] rtol = 1e-14 56 # @test (op_x*v)[Index(11,Upper),Index(3,Interior)] ≈ rx[11,3] rtol = 1e-14
102 57
103 @test_throws BoundsError (op_x*v)[Index(3,Lower),Index(3,Interior)] 58 # @test_throws BoundsError (op_x*v)[Index(3,Lower),Index(3,Interior)]
104 @test_throws BoundsError (op_x*v)[Index(9,Upper),Index(3,Interior)] 59 # @test_throws BoundsError (op_x*v)[Index(9,Upper),Index(3,Interior)]
105 60
106 @test (op_y*v)[Index(3,Interior),Index(1,Lower)] ≈ ry[3,1] rtol = 1e-14 61 # @test (op_y*v)[Index(3,Interior),Index(1,Lower)] ≈ ry[3,1] rtol = 1e-14
107 @test (op_y*v)[Index(3,Interior),Index(2,Lower)] ≈ ry[3,2] rtol = 1e-14 62 # @test (op_y*v)[Index(3,Interior),Index(2,Lower)] ≈ ry[3,2] rtol = 1e-14
108 @test (op_y*v)[Index(3,Interior),Index(6,Interior)] ≈ ry[3,6] rtol = 1e-14 63 # @test (op_y*v)[Index(3,Interior),Index(6,Interior)] ≈ ry[3,6] rtol = 1e-14
109 @test (op_y*v)[Index(3,Interior),Index(11,Upper)] ≈ ry[3,11] rtol = 1e-14 64 # @test (op_y*v)[Index(3,Interior),Index(11,Upper)] ≈ ry[3,11] rtol = 1e-14
110 @test (op_y*v)[Index(3,Interior),Index(12,Upper)] ≈ ry[3,12] rtol = 1e-14 65 # @test (op_y*v)[Index(3,Interior),Index(12,Upper)] ≈ ry[3,12] rtol = 1e-14
111 66
112 @test_throws BoundsError (op_y*v)[Index(3,Interior),Index(10,Upper)] 67 # @test_throws BoundsError (op_y*v)[Index(3,Interior),Index(10,Upper)]
113 @test_throws BoundsError (op_y*v)[Index(3,Interior),Index(3,Lower)] 68 # @test_throws BoundsError (op_y*v)[Index(3,Interior),Index(3,Lower)]
114 end 69 # end
115 70
116 @testset "Inferred" begin 71 # @testset "Inferred" begin
117 @test_skip @inferred apply(op_x, v,1,1) 72 # @test_skip @inferred apply(op_x, v,1,1)
118 @inferred apply(op_x, v, Index(1,Lower),Index(1,Lower)) 73 # @inferred apply(op_x, v, Index(1,Lower),Index(1,Lower))
119 @inferred apply(op_x, v, Index(6,Interior),Index(1,Lower)) 74 # @inferred apply(op_x, v, Index(6,Interior),Index(1,Lower))
120 @inferred apply(op_x, v, Index(11,Upper),Index(1,Lower)) 75 # @inferred apply(op_x, v, Index(11,Upper),Index(1,Lower))
121 @test_skip @inferred apply(op_y, v,1,1) 76 # @test_skip @inferred apply(op_y, v,1,1)
122 @inferred apply(op_y, v, Index(1,Lower),Index(1,Lower)) 77 # @inferred apply(op_y, v, Index(1,Lower),Index(1,Lower))
123 @inferred apply(op_y, v, Index(1,Lower),Index(6,Interior)) 78 # @inferred apply(op_y, v, Index(1,Lower),Index(6,Interior))
124 @inferred apply(op_y, v, Index(1,Lower),Index(11,Upper)) 79 # @inferred apply(op_y, v, Index(1,Lower),Index(11,Upper))
125 end 80 # end
126 end 81 end