Mercurial > repos > public > sbplib_julia
changeset 1671:791d0f3f289a
Merge feature/grids/min_spacing
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Sat, 29 Jun 2024 17:06:27 +0200 |
parents | bcc2be934326 (current diff) 1212ba23ee32 (diff) |
children | 3714a391545a 61422abd17a4 51f0c5f895fb |
files | |
diffstat | 6 files changed, 31 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/Grids/Grids.jl Sat Jun 29 17:05:37 2024 +0200 +++ b/src/Grids/Grids.jl Sat Jun 29 17:06:27 2024 +0200 @@ -13,6 +13,7 @@ export boundary_indices export boundary_identifiers export boundary_grid +export min_spacing export coarsen export refine export eval_on
--- a/src/Grids/equidistant_grid.jl Sat Jun 29 17:05:37 2024 +0200 +++ b/src/Grids/equidistant_grid.jl Sat Jun 29 17:06:27 2024 +0200 @@ -47,6 +47,8 @@ """ inverse_spacing(g::EquidistantGrid) = 1/step(g.points) +min_spacing(g::EquidistantGrid) = spacing(g) + boundary_identifiers(::EquidistantGrid) = (Lower(), Upper()) boundary_grid(g::EquidistantGrid, id::Lower) = ZeroDimGrid(g[begin])
--- a/src/Grids/grid.jl Sat Jun 29 17:05:37 2024 +0200 +++ b/src/Grids/grid.jl Sat Jun 29 17:06:27 2024 +0200 @@ -82,6 +82,14 @@ # TODO: Implement `setindex!`? # TODO: Implement a more general ComponentView that can handle non-AbstractArrays. + +""" + min_spacing(g::Grid) + +The smallest distance between any pair of grid points in `g`. +""" +function min_spacing end + """ refine(g::Grid, r)
--- a/src/Grids/tensor_grid.jl Sat Jun 29 17:05:37 2024 +0200 +++ b/src/Grids/tensor_grid.jl Sat Jun 29 17:06:27 2024 +0200 @@ -48,6 +48,12 @@ Base.size(g::TensorGrid, d) = size(g)[d] +function min_spacing(g::TensorGrid) + relevant_grids = filter(g->!isa(g,ZeroDimGrid),g.grids) + d = min_spacing.(relevant_grids) + return minimum(d) +end + refine(g::TensorGrid, r::Int) = mapreduce(g->refine(g,r), TensorGrid, g.grids) coarsen(g::TensorGrid, r::Int) = mapreduce(g->coarsen(g,r), TensorGrid, g.grids)
--- a/test/Grids/equidistant_grid_test.jl Sat Jun 29 17:05:37 2024 +0200 +++ b/test/Grids/equidistant_grid_test.jl Sat Jun 29 17:06:27 2024 +0200 @@ -56,6 +56,11 @@ @test inverse_spacing(EquidistantGrid(0:0.1:10)) == 10 end + @testset "min_spacing" begin + @test min_spacing(EquidistantGrid(0:10)) == 1 + @test min_spacing(EquidistantGrid(0:0.1:10)) == 0.1 + end + @testset "boundary_identifiers" begin g = EquidistantGrid(0:0.1:10) @test boundary_identifiers(g) == (Lower(), Upper())
--- a/test/Grids/tensor_grid_test.jl Sat Jun 29 17:05:37 2024 +0200 +++ b/test/Grids/tensor_grid_test.jl Sat Jun 29 17:06:27 2024 +0200 @@ -138,6 +138,15 @@ @test axes(g) == (1:11,1:6) end + @testset "min_spacing" begin + g₁ = EquidistantGrid(range(0,1,length=11)) + g₂ = EquidistantGrid(range(2,3,length=6)) + g₃ = ZeroDimGrid(@SVector[1,2]) + + @test min_spacing(TensorGrid(g₁, g₂)) == 1/10 + @test min_spacing(TensorGrid(g₂, g₃)) == 1/5 + end + @testset "refine" begin g1(n) = EquidistantGrid(range(0,1,length=n)) g2(n) = EquidistantGrid(range(2,3,length=n))