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))