diff src/Grids/EquidistantGrid.jl @ 907:e81b89ae17c4 feature/equidistant_grid/refine

Add coarsen()
author Jonatan Werpers <jonatan@werpers.com>
date Tue, 15 Feb 2022 11:36:12 +0100
parents dd2ab001a7b6
children bc71dd5b8311
line wrap: on
line diff
--- a/src/Grids/EquidistantGrid.jl	Mon Feb 14 09:39:58 2022 +0100
+++ b/src/Grids/EquidistantGrid.jl	Tue Feb 15 11:36:12 2022 +0100
@@ -5,6 +5,7 @@
 export boundary_identifiers
 export boundary_grid
 export refine
+export coarsen
 
 """
     EquidistantGrid(size::NTuple{Dim, Int}, limit_lower::NTuple{Dim, T}, limit_upper::NTuple{Dim, T})
@@ -151,3 +152,15 @@
     new_sz = (sz .- 1).*r .+ 1
     return EquidistantGrid{dimension(grid), eltype(grid)}(new_sz, grid.limit_lower, grid.limit_upper)
 end
+
+function coarsen(grid::EquidistantGrid, r::Int)
+    sz = size(grid)
+
+    if !all(n -> (n % r == 0), sz.-1)
+        throw(DomainError(r, "Size minus 1 must be divisible by the ratio."))
+    end
+
+    new_sz = (sz .- 1).÷r .+ 1
+
+    return EquidistantGrid{dimension(grid), eltype(grid)}(new_sz, grid.limit_lower, grid.limit_upper)
+end