changeset 827:beae513ef8b3 operator_storage_array_of_table

Fix bug in boundary_restriction when grids and stencil does not have matching type
author Jonatan Werpers <jonatan@werpers.com>
date Wed, 12 Jan 2022 07:45:38 +0100
parents 4433be383840
children ca182cbb8f49
files src/SbpOperators/boundaryops/boundary_restriction.jl test/SbpOperators/boundaryops/boundary_restriction_test.jl
diffstat 2 files changed, 6 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/SbpOperators/boundaryops/boundary_restriction.jl	Tue Dec 21 16:30:16 2021 +0100
+++ b/src/SbpOperators/boundaryops/boundary_restriction.jl	Wed Jan 12 07:45:38 2022 +0100
@@ -9,7 +9,10 @@
 On a one-dimensional `grid`, `e` is a `BoundaryOperator`. On a multi-dimensional `grid`, `e` is the inflation of
 a `BoundaryOperator`. Also see the documentation of `SbpOperators.boundary_operator(...)` for more details.
 """
-boundary_restriction(grid::EquidistantGrid, closure_stencil, boundary::CartesianBoundary) = SbpOperators.boundary_operator(grid, closure_stencil, boundary)
+function boundary_restriction(grid::EquidistantGrid, closure_stencil, boundary::CartesianBoundary)
+    converted_stencil = convert(Stencil{eltype(grid)}, closure_stencil)
+    return SbpOperators.boundary_operator(grid, converted_stencil, boundary)
+end
 boundary_restriction(grid::EquidistantGrid{1}, closure_stencil, region::Region) = boundary_restriction(grid, closure_stencil, CartesianBoundary{1,typeof(region)}())
 
 export boundary_restriction
--- a/test/SbpOperators/boundaryops/boundary_restriction_test.jl	Tue Dec 21 16:30:16 2021 +0100
+++ b/test/SbpOperators/boundaryops/boundary_restriction_test.jl	Wed Jan 12 07:45:38 2022 +0100
@@ -17,13 +17,13 @@
         @testset "1D" begin
             e_l = boundary_restriction(g_1D,e_closure,Lower())
             @test e_l == boundary_restriction(g_1D,e_closure,CartesianBoundary{1,Lower}())
-            @test e_l == BoundaryOperator(g_1D,e_closure,Lower())
+            @test e_l == BoundaryOperator(g_1D,Stencil{Float64}(e_closure),Lower())
             @test e_l isa BoundaryOperator{T,Lower} where T
             @test e_l isa TensorMapping{T,0,1} where T
 
             e_r = boundary_restriction(g_1D,e_closure,Upper())
             @test e_r == boundary_restriction(g_1D,e_closure,CartesianBoundary{1,Upper}())
-            @test e_r == BoundaryOperator(g_1D,e_closure,Upper())
+            @test e_r == BoundaryOperator(g_1D,Stencil{Float64}(e_closure),Upper())
             @test e_r isa BoundaryOperator{T,Upper} where T
             @test e_r isa TensorMapping{T,0,1} where T
         end