Mercurial > repos > public > sbplib_julia
changeset 2091:e21c295fb2da refactor/sbp_operators/direction_check
Restructure methods for equidistant grids with a dim argument
| author | Jonatan Werpers <jonatan@werpers.com> |
|---|---|
| date | Mon, 02 Mar 2026 15:41:14 +0100 |
| parents | 67d8fbbb9e58 |
| children | b1085efb78bf |
| files | src/SbpOperators/volumeops/derivatives/first_derivative.jl src/SbpOperators/volumeops/derivatives/second_derivative.jl src/SbpOperators/volumeops/derivatives/second_derivative_variable.jl test/SbpOperators/volumeops/derivatives/first_derivative_test.jl test/SbpOperators/volumeops/derivatives/second_derivative_test.jl test/SbpOperators/volumeops/derivatives/second_derivative_variable_test.jl |
| diffstat | 6 files changed, 35 insertions(+), 18 deletions(-) [+] |
line wrap: on
line diff
--- a/src/SbpOperators/volumeops/derivatives/first_derivative.jl Mon Mar 02 14:21:58 2026 +0100 +++ b/src/SbpOperators/volumeops/derivatives/first_derivative.jl Mon Mar 02 15:41:14 2026 +0100 @@ -21,9 +21,6 @@ return LazyTensors.inflate(D₁, size(g), dim) end -function first_derivative(g::EquidistantGrid, stencil_set, dim) - return first_derivative(TensorGrid(g), stencil_set, dim) -end """ first_derivative(g::EquidistantGrid, stencil_set::StencilSet) @@ -37,6 +34,13 @@ return first_derivative(g, inner_stencil, closure_stencils); end +function first_derivative(g::EquidistantGrid, stencil_set, dim) + if dim != 1 + throw(DomainError(dim, "Derivative direction must be 1.")) + end + return first_derivative(g, stencil_set) +end + """ first_derivative(g::EquidistantGrid, inner_stencil::Stencil, closure_stencils)
--- a/src/SbpOperators/volumeops/derivatives/second_derivative.jl Mon Mar 02 14:21:58 2026 +0100 +++ b/src/SbpOperators/volumeops/derivatives/second_derivative.jl Mon Mar 02 15:41:14 2026 +0100 @@ -1,6 +1,5 @@ """ -second_derivative(g::TensorGrid, stencil_set, dim) -second_derivative(g::EquidistantGrid, stencil_set, dim) + second_derivative(g::TensorGrid, stencil_set, dim) Creates the second derivative operator `D2` as a `LazyTensor` @@ -17,10 +16,6 @@ return LazyTensors.inflate(D₂, size(g), dim) end -function second_derivative(g::EquidistantGrid, stencil_set::StencilSet, dim) - return second_derivative(TensorGrid(g), stencil_set, dim) -end - """ second_derivative(g::EquidistantGrid, stencil_set::::StencilSet) @@ -33,6 +28,13 @@ return second_derivative(g, inner_stencil, closure_stencils) end +function second_derivative(g::EquidistantGrid, stencil_set::StencilSet, dim) + if dim != 1 + throw(DomainError(dim, "Derivative direction must be 1.")) + end + return second_derivative(g, stencil_set) +end + """ second_derivative(g::EquidistantGrid, inner_stencil::Stencil, closure_stencils)
--- a/src/SbpOperators/volumeops/derivatives/second_derivative_variable.jl Mon Mar 02 14:21:58 2026 +0100 +++ b/src/SbpOperators/volumeops/derivatives/second_derivative_variable.jl Mon Mar 02 15:41:14 2026 +0100 @@ -1,5 +1,5 @@ """ - second_derivative_variable(g, coeff ..., [dim]) + second_derivative_variable(g, coeff, ..., [dim]) The variable second derivative operator as a `LazyTensor` on the given grid. `coeff` is a grid function of the variable coefficient. @@ -19,12 +19,15 @@ return second_derivative_variable(g, coeff, inner_stencil, closure_stencils, dim) end -function second_derivative_variable(g::EquidistantGrid, coeff, stencil_set, dim) - return second_derivative_variable(TensorGrid(g), coeff, stencil_set, dim) +function second_derivative_variable(g::EquidistantGrid, coeff, stencil_set) + return second_derivative_variable(TensorGrid(g), coeff, stencil_set, 1) end -function second_derivative_variable(g::EquidistantGrid, coeff, stencil_set) - return second_derivative_variable(g::EquidistantGrid, coeff, stencil_set, 1) +function second_derivative_variable(g::EquidistantGrid, coeff, stencil_set, dim) + if dim != 1 + throw(DomainError(dim, "Derivative direction must be 1.")) + end + return second_derivative_variable(g, coeff, stencil_set) end function second_derivative_variable(g::TensorGrid, coeff, inner_stencil::NestedStencil, closure_stencils, dim)
--- a/test/SbpOperators/volumeops/derivatives/first_derivative_test.jl Mon Mar 02 14:21:58 2026 +0100 +++ b/test/SbpOperators/volumeops/derivatives/first_derivative_test.jl Mon Mar 02 15:41:14 2026 +0100 @@ -18,7 +18,8 @@ @test first_derivative(g₂, stencil_set, 2) isa LazyTensor{Float64,2,2} @test first_derivative(g₁, stencil_set) == first_derivative(g₁, stencil_set, 1) - @test_throws DomainError(3, "Derivative direction must be in 1:1.") first_derivative(g₁, stencil_set, 3) + @test_throws DomainError(3, "Derivative direction must be 1.") first_derivative(g₁, stencil_set, 3) + @test_throws DomainError(3, "Derivative direction must be in 1:2.") first_derivative(g₂, stencil_set, 3) interior_stencil = CenteredStencil(-1,0,1) closure_stencils = [Stencil(-1,1, center=1)]
--- a/test/SbpOperators/volumeops/derivatives/second_derivative_test.jl Mon Mar 02 14:21:58 2026 +0100 +++ b/test/SbpOperators/volumeops/derivatives/second_derivative_test.jl Mon Mar 02 15:41:14 2026 +0100 @@ -25,11 +25,14 @@ @test Dₓₓ == second_derivative(g_1D, inner_stencil, closure_stencils) @test Dₓₓ isa LazyTensor{Float64,1,1} - @test_throws DomainError(3, "Derivative direction must be in 1:1.") second_derivative(g_1D, stencil_set, 3) + @test_throws DomainError(3, "Derivative direction must be 1.") second_derivative(g_1D, stencil_set, 3) end @testset "2D" begin Dₓₓ = second_derivative(g_2D,stencil_set,1) @test Dₓₓ isa LazyTensor{Float64,2,2} + + + @test_throws DomainError(3, "Derivative direction must be in 1:2.") second_derivative(g_2D, stencil_set, 3) end end
--- a/test/SbpOperators/volumeops/derivatives/second_derivative_variable_test.jl Mon Mar 02 14:21:58 2026 +0100 +++ b/test/SbpOperators/volumeops/derivatives/second_derivative_variable_test.jl Mon Mar 02 15:41:14 2026 +0100 @@ -44,8 +44,8 @@ @testset "checking direction" begin c = rand(size(g)...) - second_derivative_variable(g, c, stencil_set, 1) == second_derivative_variable(g, c, stencil_set) - @test_throws DomainError(2, "Derivative direction must be in 1:1.") second_derivative_variable(g, c, stencil_set, 2) + @test second_derivative_variable(g, c, stencil_set, 1) == second_derivative_variable(g, c, stencil_set) + @test_throws DomainError(2, "Derivative direction must be 1.") second_derivative_variable(g, c, stencil_set, 2) end end @@ -53,6 +53,10 @@ g = equidistant_grid((0.,0.), (10.,8.), 11, 9) # h = 1 c = eval_on(g, (x,y)->x+y) + @testset "checking direction" begin + @test_throws DomainError(3, "Derivative direction must be in 1:2.") second_derivative_variable(g, c, stencil_set, 3) + end + @testset "application" begin function apply_to_functions(dir; v, c) g = equidistant_grid((0.,0.), (10.,8.), 11, 9) # h = 1
