Mercurial > repos > public > sbplib_julia
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 |