comparison test/testSbpOperators.jl @ 551:8ac1d0fcba41 feature/quadrature_as_outer_product

Add more tests for DiagonalQuadrature
author Vidar Stiernström <vidar.stiernstrom@it.uu.se>
date Sat, 28 Nov 2020 18:12:11 +0100
parents 26485066394a
children 9bfecd6b6aac
comparison
equal deleted inserted replaced
546:09ae5b519b4c 551:8ac1d0fcba41
110 @test L*v5 ≈ v5ₓₓ atol=5e-4 norm=l2 110 @test L*v5 ≈ v5ₓₓ atol=5e-4 norm=l2
111 end 111 end
112 112
113 @testset "DiagonalQuadrature" begin 113 @testset "DiagonalQuadrature" begin
114 op = readOperator(sbp_operators_path()*"d2_4th.txt",sbp_operators_path()*"h_4th.txt") 114 op = readOperator(sbp_operators_path()*"d2_4th.txt",sbp_operators_path()*"h_4th.txt")
115 Lx = 2.3 115 Lx = π/2.
116 g = EquidistantGrid(77, 0.0, Lx) 116 Ly = Float64(π)
117 H = DiagonalQuadrature(g,op.quadratureClosure) 117 g_1D = EquidistantGrid(77, 0.0, Lx)
118 v = ones(Float64, size(g)) 118 g_2D = EquidistantGrid((77,66), (0.0, 0.0), (Lx,Ly))
119 119 @testset "Constructors" begin
120 @test H isa TensorMapping{T,1,1} where T 120 # 1D
121 @test H' isa TensorMapping{T,1,1} where T 121 H_x = DiagonalQuadrature(spacing(g_1D)[1],op.quadratureClosure,size(g_1D));
122 @test H == diagonal_quadrature(g,op.quadratureClosure) 122 @test H_x == DiagonalQuadrature(g_1D,op.quadratureClosure)
123 @test sum(H*v) ≈ Lx 123 @test H_x == diagonal_quadrature(g_1D,op.quadratureClosure)
124 @test H*v == H'*v 124 @test H_x isa TensorMapping{T,1,1} where T
125 @inferred H*v 125 @test H_x' isa TensorMapping{T,1,1} where T
126 126
127 # Test multiple dimension 127 # 2D
128 Ly = 5.2 128 H_xy = diagonal_quadrature(g_2D,op.quadratureClosure)
129 g = EquidistantGrid((77,66), (0.0, 0.0), (Lx,Ly)) 129 @test H_xy isa TensorMappingComposition
130 130 @test H_xy isa TensorMapping{T,2,2} where T
131 H = diagonal_quadrature(g, op.quadratureClosure) 131 @test H_xy' isa TensorMapping{T,2,2} where T
132 132 end
133 @test H isa TensorMapping{T,2,2} where T 133
134 @test H' isa TensorMapping{T,2,2} where T 134 H_x = diagonal_quadrature(g_1D,op.quadratureClosure)
135 135 H_xy = diagonal_quadrature(g_2D,op.quadratureClosure)
136 v = ones(Float64, size(g)) 136 @testset "Sizes" begin
137 @test sum(H*v) ≈ Lx*Ly 137 # 1D
138 138
139 v = 2*ones(Float64, size(g)) 139 # 2D
140 @test sum(H*v) ≈ 2*Lx*Ly 140
141 141 end
142 @test_broken H*v == H'*v # apply_transpose not implemented for InflatedTensorMapping! 142 a = 3.2
143 143 b = 2.1
144 @inferred H*v 144 v_1D = a*ones(Float64, size(g_1D))
145 v_2D = b*ones(Float64, size(g_2D))
146 u_1D = evalOn(g_1D,x->sin(x))
147 u_2D = evalOn(g_2D,(x,y)->sin(x)+cos(y))
148 integral(H,v) = sum(H*v)
149 @testset "Application" begin
150 # 1D
151 @test integral(H_x,v_1D) ≈ a*Lx rtol = 1e-13
152 @test integral(H_x,u_1D) ≈ 1. rtol = 1e-8
153 @test H_x*v_1D == H_x'*v_1D
154 # 2D
155 @test integral(H_xy,v_2D) ≈ b*Lx*Ly rtol = 1e-13
156 @test integral(H_xy,u_2D) ≈ π rtol = 1e-8
157 @test H_xy*v_2D ≈ H_xy'*v_2D rtol = 1e-16 #Failed for exact equality. Must differ in operation order for some reason?
158 end
159
160 @testset "Inferred" begin
161 @inferred H_x*v_1D
162 @inferred H_x'*v_1D
163 @inferred H_xy*v_2D
164 @inferred H_xy'*v_2D
165 end
145 end 166 end
146 167
147 @testset "InverseDiagonalQuadrature" begin 168 @testset "InverseDiagonalQuadrature" begin
148 op = readOperator(sbp_operators_path()*"d2_4th.txt",sbp_operators_path()*"h_4th.txt") 169 op = readOperator(sbp_operators_path()*"d2_4th.txt",sbp_operators_path()*"h_4th.txt")
149 Lx = 2.3 170 Lx = 2.3