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