@@ -22,26 +22,43 @@ RegularCoarsening(factors::Vararg{Int,N}) where {N} = RegularCoarsening(factors)
2222
2323function coarsen (grid:: OrthoRegularGrid , method:: RegularCoarsening )
2424 factors = fitdims (method. factors, paramdim (grid))
25- RegularGrid (minimum (grid), maximum (grid), dims= size (grid) .÷ factors)
25+ dims = _coarsesize (grid, factors)
26+ RegularGrid (minimum (grid), maximum (grid), dims= dims)
2627end
2728
2829function coarsen (grid:: RectilinearGrid , method:: RegularCoarsening )
2930 factors = fitdims (method. factors, paramdim (grid))
30- dims = vsize (grid)
31- rngs = ntuple (i -> 1 : factors[i]: dims[i], paramdim (grid))
31+ inds = _coarseinds (grid, factors)
3232 xyzₛ = xyz (grid)
33- xyzₜ = ntuple (i -> xyzₛ[i][rngs [i]], paramdim (grid))
33+ xyzₜ = ntuple (i -> xyzₛ[i][inds [i]], paramdim (grid))
3434 RectilinearGrid {manifold(grid),crs(grid)} (xyzₜ)
3535end
3636
3737function coarsen (grid:: StructuredGrid , method:: RegularCoarsening )
3838 factors = fitdims (method. factors, paramdim (grid))
39- dims = vsize (grid)
40- rngs = ntuple (i -> 1 : factors[i]: dims[i], paramdim (grid))
39+ inds = _coarseinds (grid, factors)
4140 XYZₛ = XYZ (grid)
42- XYZₜ = ntuple (i -> XYZₛ[i][rngs ... ], paramdim (grid))
41+ XYZₜ = ntuple (i -> XYZₛ[i][inds ... ], paramdim (grid))
4342 StructuredGrid {manifold(grid),crs(grid)} (XYZₜ)
4443end
4544
4645coarsen (grid:: TransformedGrid , method:: RegularCoarsening ) =
4746 TransformedGrid (coarsen (parent (grid), method), transform (grid))
47+
48+ # -----------------
49+ # HELPER FUNCTIONS
50+ # -----------------
51+
52+ function _coarsesize (grid, factors)
53+ dims = size (grid)
54+ axes = ntuple (i -> 1 : dims[i], paramdim (grid))
55+ size (TileIterator (axes, factors))
56+ end
57+
58+ _coarsevsize (grid, factors) = _coarsesize (grid, factors) .+ .! isperiodic (grid)
59+
60+ function _coarseinds (grid, factors)
61+ dims = vsize (grid)
62+ tdims = _coarsevsize (grid, factors)
63+ ntuple (i -> floor .(Int, range (start= 1 , stop= dims[i], length= tdims[i])), paramdim (grid))
64+ end
0 commit comments