comparison 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
comparison
equal deleted inserted replaced
877:dd2ab001a7b6 907:e81b89ae17c4
3 export inverse_spacing 3 export inverse_spacing
4 export restrict 4 export restrict
5 export boundary_identifiers 5 export boundary_identifiers
6 export boundary_grid 6 export boundary_grid
7 export refine 7 export refine
8 export coarsen
8 9
9 """ 10 """
10 EquidistantGrid(size::NTuple{Dim, Int}, limit_lower::NTuple{Dim, T}, limit_upper::NTuple{Dim, T}) 11 EquidistantGrid(size::NTuple{Dim, Int}, limit_lower::NTuple{Dim, T}, limit_upper::NTuple{Dim, T})
11 EquidistantGrid{T}() 12 EquidistantGrid{T}()
12 13
149 function refine(grid::EquidistantGrid, r::Int) 150 function refine(grid::EquidistantGrid, r::Int)
150 sz = size(grid) 151 sz = size(grid)
151 new_sz = (sz .- 1).*r .+ 1 152 new_sz = (sz .- 1).*r .+ 1
152 return EquidistantGrid{dimension(grid), eltype(grid)}(new_sz, grid.limit_lower, grid.limit_upper) 153 return EquidistantGrid{dimension(grid), eltype(grid)}(new_sz, grid.limit_lower, grid.limit_upper)
153 end 154 end
155
156 function coarsen(grid::EquidistantGrid, r::Int)
157 sz = size(grid)
158
159 if !all(n -> (n % r == 0), sz.-1)
160 throw(DomainError(r, "Size minus 1 must be divisible by the ratio."))
161 end
162
163 new_sz = (sz .- 1).÷r .+ 1
164
165 return EquidistantGrid{dimension(grid), eltype(grid)}(new_sz, grid.limit_lower, grid.limit_upper)
166 end