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