annotate src/Grids/equidistant_grid.jl @ 1143:9275d95e2d90 refactor/grids

Merge with default
author Jonatan Werpers <jonatan@werpers.com>
date Wed, 19 Oct 2022 22:36:02 +0200
parents src/Grids/EquidistantGrid.jl@c4ea28d904f5 src/Grids/EquidistantGrid.jl@dfbd62c7eb09
children 31041ef8092a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
877
dd2ab001a7b6 Implement refine function, move exports to the top of the file, change location of constuctors.
Jonatan Werpers <jonatan@werpers.com>
parents: 688
diff changeset
1
406
c377fc37c04b Clean up EquidistantGrid and tests after deciding that side lengths must be positive.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 405
diff changeset
2 """
1116
c2d7e940639e Rename AbstractGrid to Grid and clean up Grids module
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1115
diff changeset
3 EquidistantGrid{Dim,T<:Real} <: Grid
75
93c833019857 Make EquidistantGrid more concrete
Jonatan Werpers <jonatan@werpers.com>
parents: 74
diff changeset
4
909
b900fea1c057 Clean up the docs a bit
Jonatan Werpers <jonatan@werpers.com>
parents: 908
diff changeset
5 `Dim`-dimensional equidistant grid with coordinates of type `T`.
406
c377fc37c04b Clean up EquidistantGrid and tests after deciding that side lengths must be positive.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 405
diff changeset
6 """
1116
c2d7e940639e Rename AbstractGrid to Grid and clean up Grids module
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1115
diff changeset
7 struct EquidistantGrid{Dim,T<:Real} <: Grid
381
dacbcba33d7d Refactor EquidistantGrid to not store spacing or inverse spacing
Jonatan Werpers <jonatan@werpers.com>
parents: 358
diff changeset
8 size::NTuple{Dim, Int}
75
93c833019857 Make EquidistantGrid more concrete
Jonatan Werpers <jonatan@werpers.com>
parents: 74
diff changeset
9 limit_lower::NTuple{Dim, T}
93c833019857 Make EquidistantGrid more concrete
Jonatan Werpers <jonatan@werpers.com>
parents: 74
diff changeset
10 limit_upper::NTuple{Dim, T}
51
614b56a017b9 Split grid.jl into AbstractGrid.jl and EquidistantGrid.jl
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
11
877
dd2ab001a7b6 Implement refine function, move exports to the top of the file, change location of constuctors.
Jonatan Werpers <jonatan@werpers.com>
parents: 688
diff changeset
12 function EquidistantGrid{Dim,T}(size::NTuple{Dim, Int}, limit_lower::NTuple{Dim, T}, limit_upper::NTuple{Dim, T}) where {Dim,T}
406
c377fc37c04b Clean up EquidistantGrid and tests after deciding that side lengths must be positive.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 405
diff changeset
13 if any(size .<= 0)
c377fc37c04b Clean up EquidistantGrid and tests after deciding that side lengths must be positive.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 405
diff changeset
14 throw(DomainError("all components of size must be postive"))
c377fc37c04b Clean up EquidistantGrid and tests after deciding that side lengths must be positive.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 405
diff changeset
15 end
c377fc37c04b Clean up EquidistantGrid and tests after deciding that side lengths must be positive.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 405
diff changeset
16 if any(limit_upper.-limit_lower .<= 0)
c377fc37c04b Clean up EquidistantGrid and tests after deciding that side lengths must be positive.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 405
diff changeset
17 throw(DomainError("all side lengths must be postive"))
c377fc37c04b Clean up EquidistantGrid and tests after deciding that side lengths must be positive.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 405
diff changeset
18 end
381
dacbcba33d7d Refactor EquidistantGrid to not store spacing or inverse spacing
Jonatan Werpers <jonatan@werpers.com>
parents: 358
diff changeset
19 return new{Dim,T}(size, limit_lower, limit_upper)
51
614b56a017b9 Split grid.jl into AbstractGrid.jl and EquidistantGrid.jl
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
20 end
877
dd2ab001a7b6 Implement refine function, move exports to the top of the file, change location of constuctors.
Jonatan Werpers <jonatan@werpers.com>
parents: 688
diff changeset
21 end
680
1d3e29ffc6c6 Add support for 0-dimensional grid, and add method boundary_grid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 661
diff changeset
22
909
b900fea1c057 Clean up the docs a bit
Jonatan Werpers <jonatan@werpers.com>
parents: 908
diff changeset
23 """
b900fea1c057 Clean up the docs a bit
Jonatan Werpers <jonatan@werpers.com>
parents: 908
diff changeset
24 EquidistantGrid(size, limit_lower, limit_upper)
b900fea1c057 Clean up the docs a bit
Jonatan Werpers <jonatan@werpers.com>
parents: 908
diff changeset
25
b900fea1c057 Clean up the docs a bit
Jonatan Werpers <jonatan@werpers.com>
parents: 908
diff changeset
26 Construct an equidistant grid with corners at the coordinates `limit_lower` and
b900fea1c057 Clean up the docs a bit
Jonatan Werpers <jonatan@werpers.com>
parents: 908
diff changeset
27 `limit_upper`.
b900fea1c057 Clean up the docs a bit
Jonatan Werpers <jonatan@werpers.com>
parents: 908
diff changeset
28
b900fea1c057 Clean up the docs a bit
Jonatan Werpers <jonatan@werpers.com>
parents: 908
diff changeset
29 The length of the domain sides are given by the components of
b900fea1c057 Clean up the docs a bit
Jonatan Werpers <jonatan@werpers.com>
parents: 908
diff changeset
30 `limit_upper-limit_lower`. E.g for a 2D grid with `limit_lower=(-1,0)` and `limit_upper=(1,2)` the domain is defined
b900fea1c057 Clean up the docs a bit
Jonatan Werpers <jonatan@werpers.com>
parents: 908
diff changeset
31 as `(-1,1)x(0,2)`. The side lengths of the grid are not allowed to be negative.
b900fea1c057 Clean up the docs a bit
Jonatan Werpers <jonatan@werpers.com>
parents: 908
diff changeset
32
b900fea1c057 Clean up the docs a bit
Jonatan Werpers <jonatan@werpers.com>
parents: 908
diff changeset
33 The number of equidistantly spaced points in each coordinate direction are given
b900fea1c057 Clean up the docs a bit
Jonatan Werpers <jonatan@werpers.com>
parents: 908
diff changeset
34 by the tuple `size`.
b900fea1c057 Clean up the docs a bit
Jonatan Werpers <jonatan@werpers.com>
parents: 908
diff changeset
35 """
877
dd2ab001a7b6 Implement refine function, move exports to the top of the file, change location of constuctors.
Jonatan Werpers <jonatan@werpers.com>
parents: 688
diff changeset
36 function EquidistantGrid(size, limit_lower, limit_upper)
dd2ab001a7b6 Implement refine function, move exports to the top of the file, change location of constuctors.
Jonatan Werpers <jonatan@werpers.com>
parents: 688
diff changeset
37 return EquidistantGrid{length(size), eltype(limit_lower)}(size, limit_lower, limit_upper)
51
614b56a017b9 Split grid.jl into AbstractGrid.jl and EquidistantGrid.jl
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
38 end
1092
c4ea28d904f5 Fix grid indexing with CartesianIndex
Jonatan Werpers <jonatan@werpers.com>
parents: 1090
diff changeset
39 # TBD: Should it be an AbstractArray?
1116
c2d7e940639e Rename AbstractGrid to Grid and clean up Grids module
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1115
diff changeset
40
909
b900fea1c057 Clean up the docs a bit
Jonatan Werpers <jonatan@werpers.com>
parents: 908
diff changeset
41 """
b900fea1c057 Clean up the docs a bit
Jonatan Werpers <jonatan@werpers.com>
parents: 908
diff changeset
42 EquidistantGrid{T}()
b900fea1c057 Clean up the docs a bit
Jonatan Werpers <jonatan@werpers.com>
parents: 908
diff changeset
43
b900fea1c057 Clean up the docs a bit
Jonatan Werpers <jonatan@werpers.com>
parents: 908
diff changeset
44 Constructs a 0-dimensional grid.
b900fea1c057 Clean up the docs a bit
Jonatan Werpers <jonatan@werpers.com>
parents: 908
diff changeset
45 """
877
dd2ab001a7b6 Implement refine function, move exports to the top of the file, change location of constuctors.
Jonatan Werpers <jonatan@werpers.com>
parents: 688
diff changeset
46 EquidistantGrid{T}() where T = EquidistantGrid{0,T}((),(),()) # Convenience constructor for 0-dim grid
406
c377fc37c04b Clean up EquidistantGrid and tests after deciding that side lengths must be positive.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 405
diff changeset
47
1116
c2d7e940639e Rename AbstractGrid to Grid and clean up Grids module
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1115
diff changeset
48
406
c377fc37c04b Clean up EquidistantGrid and tests after deciding that side lengths must be positive.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 405
diff changeset
49 """
c377fc37c04b Clean up EquidistantGrid and tests after deciding that side lengths must be positive.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 405
diff changeset
50 EquidistantGrid(size::Int, limit_lower::T, limit_upper::T)
c377fc37c04b Clean up EquidistantGrid and tests after deciding that side lengths must be positive.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 405
diff changeset
51
c377fc37c04b Clean up EquidistantGrid and tests after deciding that side lengths must be positive.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 405
diff changeset
52 Convenience constructor for 1D grids.
c377fc37c04b Clean up EquidistantGrid and tests after deciding that side lengths must be positive.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 405
diff changeset
53 """
324
047dee8efaef Grids.EquidistantGrid: Add constructor for 1d grid
Jonatan Werpers <jonatan@werpers.com>
parents: 270
diff changeset
54 function EquidistantGrid(size::Int, limit_lower::T, limit_upper::T) where T
047dee8efaef Grids.EquidistantGrid: Add constructor for 1d grid
Jonatan Werpers <jonatan@werpers.com>
parents: 270
diff changeset
55 return EquidistantGrid((size,),(limit_lower,),(limit_upper,))
047dee8efaef Grids.EquidistantGrid: Add constructor for 1d grid
Jonatan Werpers <jonatan@werpers.com>
parents: 270
diff changeset
56 end
047dee8efaef Grids.EquidistantGrid: Add constructor for 1d grid
Jonatan Werpers <jonatan@werpers.com>
parents: 270
diff changeset
57
688
e9e46a587370 Add eltype function to EquidistantGrids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 686
diff changeset
58 Base.eltype(grid::EquidistantGrid{Dim,T}) where {Dim,T} = T
e9e46a587370 Add eltype function to EquidistantGrids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 686
diff changeset
59
e9e46a587370 Add eltype function to EquidistantGrids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 686
diff changeset
60 Base.eachindex(grid::EquidistantGrid) = CartesianIndices(grid.size)
129
1aaeb46ba5f4 Improve efficiency of apply by the following:
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 124
diff changeset
61
241
1128ab4f5758 Add size method to EquidistantGrid
Jonatan Werpers <jonatan@werpers.com>
parents: 221
diff changeset
62 Base.size(g::EquidistantGrid) = g.size
1128ab4f5758 Add size method to EquidistantGrid
Jonatan Werpers <jonatan@werpers.com>
parents: 221
diff changeset
63
1128
dfbd62c7eb09 Rename dim to ndims in Grids.jl
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1126
diff changeset
64 Base.ndims(::EquidistantGrid{Dim}) where Dim = Dim
406
c377fc37c04b Clean up EquidistantGrid and tests after deciding that side lengths must be positive.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 405
diff changeset
65
1092
c4ea28d904f5 Fix grid indexing with CartesianIndex
Jonatan Werpers <jonatan@werpers.com>
parents: 1090
diff changeset
66 function Base.getindex(g::EquidistantGrid, I::Vararg{Int})
1090
9b40aeac4269 Add getindex for grid
Jonatan Werpers <jonatan@werpers.com>
parents: 909
diff changeset
67 h = spacing(g)
9b40aeac4269 Add getindex for grid
Jonatan Werpers <jonatan@werpers.com>
parents: 909
diff changeset
68 return g.limit_lower .+ (I.-1).*h
9b40aeac4269 Add getindex for grid
Jonatan Werpers <jonatan@werpers.com>
parents: 909
diff changeset
69 end
9b40aeac4269 Add getindex for grid
Jonatan Werpers <jonatan@werpers.com>
parents: 909
diff changeset
70
1092
c4ea28d904f5 Fix grid indexing with CartesianIndex
Jonatan Werpers <jonatan@werpers.com>
parents: 1090
diff changeset
71 Base.getindex(g::EquidistantGrid, I::CartesianIndex) = g[Tuple(I)...]
c4ea28d904f5 Fix grid indexing with CartesianIndex
Jonatan Werpers <jonatan@werpers.com>
parents: 1090
diff changeset
72 # TBD: Can this method be removed if `EquidistantGrid` is an AbstractArray?
1128
dfbd62c7eb09 Rename dim to ndims in Grids.jl
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1126
diff changeset
73
dfbd62c7eb09 Rename dim to ndims in Grids.jl
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1126
diff changeset
74
381
dacbcba33d7d Refactor EquidistantGrid to not store spacing or inverse spacing
Jonatan Werpers <jonatan@werpers.com>
parents: 358
diff changeset
75
1116
c2d7e940639e Rename AbstractGrid to Grid and clean up Grids module
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1115
diff changeset
76
381
dacbcba33d7d Refactor EquidistantGrid to not store spacing or inverse spacing
Jonatan Werpers <jonatan@werpers.com>
parents: 358
diff changeset
77 """
dacbcba33d7d Refactor EquidistantGrid to not store spacing or inverse spacing
Jonatan Werpers <jonatan@werpers.com>
parents: 358
diff changeset
78 spacing(grid::EquidistantGrid)
261
01017d2b46b0 Store grid spacing as property in EquidistantGrid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 256
diff changeset
79
909
b900fea1c057 Clean up the docs a bit
Jonatan Werpers <jonatan@werpers.com>
parents: 908
diff changeset
80 The spacing between grid points.
381
dacbcba33d7d Refactor EquidistantGrid to not store spacing or inverse spacing
Jonatan Werpers <jonatan@werpers.com>
parents: 358
diff changeset
81 """
406
c377fc37c04b Clean up EquidistantGrid and tests after deciding that side lengths must be positive.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 405
diff changeset
82 spacing(grid::EquidistantGrid) = (grid.limit_upper.-grid.limit_lower)./(grid.size.-1)
95
9d53ecca34f7 Switch to using cartesian indicies
Jonatan Werpers <jonatan@werpers.com>
parents: 85
diff changeset
83
1116
c2d7e940639e Rename AbstractGrid to Grid and clean up Grids module
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1115
diff changeset
84
381
dacbcba33d7d Refactor EquidistantGrid to not store spacing or inverse spacing
Jonatan Werpers <jonatan@werpers.com>
parents: 358
diff changeset
85 """
406
c377fc37c04b Clean up EquidistantGrid and tests after deciding that side lengths must be positive.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 405
diff changeset
86 inverse_spacing(grid::EquidistantGrid)
381
dacbcba33d7d Refactor EquidistantGrid to not store spacing or inverse spacing
Jonatan Werpers <jonatan@werpers.com>
parents: 358
diff changeset
87
909
b900fea1c057 Clean up the docs a bit
Jonatan Werpers <jonatan@werpers.com>
parents: 908
diff changeset
88 The reciprocal of the spacing between grid points.
381
dacbcba33d7d Refactor EquidistantGrid to not store spacing or inverse spacing
Jonatan Werpers <jonatan@werpers.com>
parents: 358
diff changeset
89 """
dacbcba33d7d Refactor EquidistantGrid to not store spacing or inverse spacing
Jonatan Werpers <jonatan@werpers.com>
parents: 358
diff changeset
90 inverse_spacing(grid::EquidistantGrid) = 1 ./ spacing(grid)
dacbcba33d7d Refactor EquidistantGrid to not store spacing or inverse spacing
Jonatan Werpers <jonatan@werpers.com>
parents: 358
diff changeset
91
1116
c2d7e940639e Rename AbstractGrid to Grid and clean up Grids module
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1115
diff changeset
92
406
c377fc37c04b Clean up EquidistantGrid and tests after deciding that side lengths must be positive.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 405
diff changeset
93 """
c377fc37c04b Clean up EquidistantGrid and tests after deciding that side lengths must be positive.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 405
diff changeset
94 points(grid::EquidistantGrid)
c377fc37c04b Clean up EquidistantGrid and tests after deciding that side lengths must be positive.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 405
diff changeset
95
c377fc37c04b Clean up EquidistantGrid and tests after deciding that side lengths must be positive.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 405
diff changeset
96 The point of the grid as an array of tuples with the same dimension as the grid.
c377fc37c04b Clean up EquidistantGrid and tests after deciding that side lengths must be positive.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 405
diff changeset
97 The points are stored as [(x1,y1), (x1,y2), … (x1,yn);
c377fc37c04b Clean up EquidistantGrid and tests after deciding that side lengths must be positive.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 405
diff changeset
98 (x2,y1), (x2,y2), … (x2,yn);
c377fc37c04b Clean up EquidistantGrid and tests after deciding that side lengths must be positive.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 405
diff changeset
99 ⋮ ⋮ ⋮
c377fc37c04b Clean up EquidistantGrid and tests after deciding that side lengths must be positive.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 405
diff changeset
100 (xm,y1), (xm,y2), … (xm,yn)]
c377fc37c04b Clean up EquidistantGrid and tests after deciding that side lengths must be positive.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 405
diff changeset
101 """
51
614b56a017b9 Split grid.jl into AbstractGrid.jl and EquidistantGrid.jl
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
102 function points(grid::EquidistantGrid)
124
631eb9b35d72 Make grid spacing a property of EquidistantGrid. Create plotting module for sbplib.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 95
diff changeset
103 indices = Tuple.(CartesianIndices(grid.size))
130
155bbecf18bb Fix bug in points(::EquidistantGrid)
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 129
diff changeset
104 h = spacing(grid)
155bbecf18bb Fix bug in points(::EquidistantGrid)
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 129
diff changeset
105 return broadcast(I -> grid.limit_lower .+ (I.-1).*h, indices)
51
614b56a017b9 Split grid.jl into AbstractGrid.jl and EquidistantGrid.jl
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
106 end
614b56a017b9 Split grid.jl into AbstractGrid.jl and EquidistantGrid.jl
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
107
353
8257cc75ea6b Add doc string and allow picking several dimensions
Jonatan Werpers <jonatan@werpers.com>
parents: 352
diff changeset
108 """
358
64ad8ec0eae0 Change name from subgrid to restrict
Jonatan Werpers <jonatan@werpers.com>
parents: 353
diff changeset
109 restrict(::EquidistantGrid, dim)
353
8257cc75ea6b Add doc string and allow picking several dimensions
Jonatan Werpers <jonatan@werpers.com>
parents: 352
diff changeset
110
909
b900fea1c057 Clean up the docs a bit
Jonatan Werpers <jonatan@werpers.com>
parents: 908
diff changeset
111 Pick out given dimensions from the grid and return a grid for them.
353
8257cc75ea6b Add doc string and allow picking several dimensions
Jonatan Werpers <jonatan@werpers.com>
parents: 352
diff changeset
112 """
358
64ad8ec0eae0 Change name from subgrid to restrict
Jonatan Werpers <jonatan@werpers.com>
parents: 353
diff changeset
113 function restrict(grid::EquidistantGrid, dim)
352
a18bd337a280 Add function for getting a one dimensional grid for a given dimension from a equidistant grid
Jonatan Werpers <jonatan@werpers.com>
parents: 333
diff changeset
114 size = grid.size[dim]
a18bd337a280 Add function for getting a one dimensional grid for a given dimension from a equidistant grid
Jonatan Werpers <jonatan@werpers.com>
parents: 333
diff changeset
115 limit_lower = grid.limit_lower[dim]
a18bd337a280 Add function for getting a one dimensional grid for a given dimension from a equidistant grid
Jonatan Werpers <jonatan@werpers.com>
parents: 333
diff changeset
116 limit_upper = grid.limit_upper[dim]
a18bd337a280 Add function for getting a one dimensional grid for a given dimension from a equidistant grid
Jonatan Werpers <jonatan@werpers.com>
parents: 333
diff changeset
117
a18bd337a280 Add function for getting a one dimensional grid for a given dimension from a equidistant grid
Jonatan Werpers <jonatan@werpers.com>
parents: 333
diff changeset
118 return EquidistantGrid(size, limit_lower, limit_upper)
a18bd337a280 Add function for getting a one dimensional grid for a given dimension from a equidistant grid
Jonatan Werpers <jonatan@werpers.com>
parents: 333
diff changeset
119 end
658
26b0eb83aea4 Add function for getting boundary identifiers from equidistant grid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 406
diff changeset
120
1116
c2d7e940639e Rename AbstractGrid to Grid and clean up Grids module
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1115
diff changeset
121
1113
4e4c5011140d Add functions orthogonal_dims and boundary_size
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1111
diff changeset
122 """
4e4c5011140d Add functions orthogonal_dims and boundary_size
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1111
diff changeset
123 orthogonal_dims(grid::EquidistantGrid,dim)
4e4c5011140d Add functions orthogonal_dims and boundary_size
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1111
diff changeset
124
4e4c5011140d Add functions orthogonal_dims and boundary_size
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1111
diff changeset
125 Returns the dimensions of grid orthogonal to that of dim.
4e4c5011140d Add functions orthogonal_dims and boundary_size
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1111
diff changeset
126 """
4e4c5011140d Add functions orthogonal_dims and boundary_size
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1111
diff changeset
127 function orthogonal_dims(grid::EquidistantGrid, dim)
1114
fc57804c9bf4 Add function dims
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1113
diff changeset
128 orth_dims = filter(i -> i != dim, dims(grid))
fc57804c9bf4 Add function dims
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1113
diff changeset
129 if orth_dims == dims(grid)
1113
4e4c5011140d Add functions orthogonal_dims and boundary_size
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1111
diff changeset
130 throw(DomainError(string("dimension ",string(dim)," not matching grid")))
4e4c5011140d Add functions orthogonal_dims and boundary_size
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1111
diff changeset
131 end
4e4c5011140d Add functions orthogonal_dims and boundary_size
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1111
diff changeset
132 return orth_dims
4e4c5011140d Add functions orthogonal_dims and boundary_size
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1111
diff changeset
133 end
4e4c5011140d Add functions orthogonal_dims and boundary_size
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1111
diff changeset
134
1111
5b3d4a8ec3ab Change to using filter for picking out orthogonal dimensions
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 909
diff changeset
135
658
26b0eb83aea4 Add function for getting boundary identifiers from equidistant grid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 406
diff changeset
136 """
26b0eb83aea4 Add function for getting boundary identifiers from equidistant grid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 406
diff changeset
137 boundary_identifiers(::EquidistantGrid)
26b0eb83aea4 Add function for getting boundary identifiers from equidistant grid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 406
diff changeset
138
26b0eb83aea4 Add function for getting boundary identifiers from equidistant grid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 406
diff changeset
139 Returns a tuple containing the boundary identifiers for the grid, stored as
26b0eb83aea4 Add function for getting boundary identifiers from equidistant grid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 406
diff changeset
140 (CartesianBoundary(1,Lower),
26b0eb83aea4 Add function for getting boundary identifiers from equidistant grid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 406
diff changeset
141 CartesianBoundary(1,Upper),
26b0eb83aea4 Add function for getting boundary identifiers from equidistant grid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 406
diff changeset
142 CartesianBoundary(2,Lower),
26b0eb83aea4 Add function for getting boundary identifiers from equidistant grid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 406
diff changeset
143 ...)
26b0eb83aea4 Add function for getting boundary identifiers from equidistant grid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 406
diff changeset
144 """
1128
dfbd62c7eb09 Rename dim to ndims in Grids.jl
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1126
diff changeset
145 boundary_identifiers(g::EquidistantGrid) = (((ntuple(i->(CartesianBoundary{i,Lower}(),CartesianBoundary{i,Upper}()),ndims(g)))...)...,)
680
1d3e29ffc6c6 Add support for 0-dimensional grid, and add method boundary_grid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 661
diff changeset
146
1d3e29ffc6c6 Add support for 0-dimensional grid, and add method boundary_grid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 661
diff changeset
147
1d3e29ffc6c6 Add support for 0-dimensional grid, and add method boundary_grid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 661
diff changeset
148 """
1111
5b3d4a8ec3ab Change to using filter for picking out orthogonal dimensions
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 909
diff changeset
149 boundary_grid(grid::EquidistantGrid, id::CartesianBoundary)
680
1d3e29ffc6c6 Add support for 0-dimensional grid, and add method boundary_grid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 661
diff changeset
150
1d3e29ffc6c6 Add support for 0-dimensional grid, and add method boundary_grid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 661
diff changeset
151 Creates the lower-dimensional restriciton of `grid` spanned by the dimensions
1d3e29ffc6c6 Add support for 0-dimensional grid, and add method boundary_grid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 661
diff changeset
152 orthogonal to the boundary specified by `id`. The boundary grid of a 1-dimensional
1d3e29ffc6c6 Add support for 0-dimensional grid, and add method boundary_grid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 661
diff changeset
153 grid is a zero-dimensional grid.
1d3e29ffc6c6 Add support for 0-dimensional grid, and add method boundary_grid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 661
diff changeset
154 """
1111
5b3d4a8ec3ab Change to using filter for picking out orthogonal dimensions
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 909
diff changeset
155 function boundary_grid(grid::EquidistantGrid, id::CartesianBoundary)
1113
4e4c5011140d Add functions orthogonal_dims and boundary_size
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1111
diff changeset
156 orth_dims = orthogonal_dims(grid, dim(id))
4e4c5011140d Add functions orthogonal_dims and boundary_size
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1111
diff changeset
157 return restrict(grid, orth_dims)
680
1d3e29ffc6c6 Add support for 0-dimensional grid, and add method boundary_grid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 661
diff changeset
158 end
686
27dcac8fb350 Fix type parameter for a 0-dimensional grid and update docs
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 684
diff changeset
159 boundary_grid(::EquidistantGrid{1,T},::CartesianBoundary{1}) where T = EquidistantGrid{T}()
877
dd2ab001a7b6 Implement refine function, move exports to the top of the file, change location of constuctors.
Jonatan Werpers <jonatan@werpers.com>
parents: 688
diff changeset
160
1116
c2d7e940639e Rename AbstractGrid to Grid and clean up Grids module
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1115
diff changeset
161
1113
4e4c5011140d Add functions orthogonal_dims and boundary_size
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1111
diff changeset
162 """
877
dd2ab001a7b6 Implement refine function, move exports to the top of the file, change location of constuctors.
Jonatan Werpers <jonatan@werpers.com>
parents: 688
diff changeset
163 refine(grid::EquidistantGrid, r::Int)
dd2ab001a7b6 Implement refine function, move exports to the top of the file, change location of constuctors.
Jonatan Werpers <jonatan@werpers.com>
parents: 688
diff changeset
164
dd2ab001a7b6 Implement refine function, move exports to the top of the file, change location of constuctors.
Jonatan Werpers <jonatan@werpers.com>
parents: 688
diff changeset
165 Refines `grid` by a factor `r`. The factor is applied to the number of
dd2ab001a7b6 Implement refine function, move exports to the top of the file, change location of constuctors.
Jonatan Werpers <jonatan@werpers.com>
parents: 688
diff changeset
166 intervals which is 1 less than the size of the grid.
908
bc71dd5b8311 More docs
Jonatan Werpers <jonatan@werpers.com>
parents: 907
diff changeset
167
bc71dd5b8311 More docs
Jonatan Werpers <jonatan@werpers.com>
parents: 907
diff changeset
168 See also: [`coarsen`](@ref)
877
dd2ab001a7b6 Implement refine function, move exports to the top of the file, change location of constuctors.
Jonatan Werpers <jonatan@werpers.com>
parents: 688
diff changeset
169 """
dd2ab001a7b6 Implement refine function, move exports to the top of the file, change location of constuctors.
Jonatan Werpers <jonatan@werpers.com>
parents: 688
diff changeset
170 function refine(grid::EquidistantGrid, r::Int)
dd2ab001a7b6 Implement refine function, move exports to the top of the file, change location of constuctors.
Jonatan Werpers <jonatan@werpers.com>
parents: 688
diff changeset
171 sz = size(grid)
dd2ab001a7b6 Implement refine function, move exports to the top of the file, change location of constuctors.
Jonatan Werpers <jonatan@werpers.com>
parents: 688
diff changeset
172 new_sz = (sz .- 1).*r .+ 1
1128
dfbd62c7eb09 Rename dim to ndims in Grids.jl
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1126
diff changeset
173 return EquidistantGrid{ndims(grid), eltype(grid)}(new_sz, grid.limit_lower, grid.limit_upper)
877
dd2ab001a7b6 Implement refine function, move exports to the top of the file, change location of constuctors.
Jonatan Werpers <jonatan@werpers.com>
parents: 688
diff changeset
174 end
907
e81b89ae17c4 Add coarsen()
Jonatan Werpers <jonatan@werpers.com>
parents: 877
diff changeset
175
1116
c2d7e940639e Rename AbstractGrid to Grid and clean up Grids module
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1115
diff changeset
176
908
bc71dd5b8311 More docs
Jonatan Werpers <jonatan@werpers.com>
parents: 907
diff changeset
177 """
bc71dd5b8311 More docs
Jonatan Werpers <jonatan@werpers.com>
parents: 907
diff changeset
178 coarsen(grid::EquidistantGrid, r::Int)
bc71dd5b8311 More docs
Jonatan Werpers <jonatan@werpers.com>
parents: 907
diff changeset
179
bc71dd5b8311 More docs
Jonatan Werpers <jonatan@werpers.com>
parents: 907
diff changeset
180 Coarsens `grid` by a factor `r`. The factor is applied to the number of
bc71dd5b8311 More docs
Jonatan Werpers <jonatan@werpers.com>
parents: 907
diff changeset
181 intervals which is 1 less than the size of the grid. If the number of
bc71dd5b8311 More docs
Jonatan Werpers <jonatan@werpers.com>
parents: 907
diff changeset
182 intervals are not divisible by `r` an error is raised.
bc71dd5b8311 More docs
Jonatan Werpers <jonatan@werpers.com>
parents: 907
diff changeset
183
bc71dd5b8311 More docs
Jonatan Werpers <jonatan@werpers.com>
parents: 907
diff changeset
184 See also: [`refine`](@ref)
bc71dd5b8311 More docs
Jonatan Werpers <jonatan@werpers.com>
parents: 907
diff changeset
185 """
907
e81b89ae17c4 Add coarsen()
Jonatan Werpers <jonatan@werpers.com>
parents: 877
diff changeset
186 function coarsen(grid::EquidistantGrid, r::Int)
e81b89ae17c4 Add coarsen()
Jonatan Werpers <jonatan@werpers.com>
parents: 877
diff changeset
187 sz = size(grid)
e81b89ae17c4 Add coarsen()
Jonatan Werpers <jonatan@werpers.com>
parents: 877
diff changeset
188
e81b89ae17c4 Add coarsen()
Jonatan Werpers <jonatan@werpers.com>
parents: 877
diff changeset
189 if !all(n -> (n % r == 0), sz.-1)
e81b89ae17c4 Add coarsen()
Jonatan Werpers <jonatan@werpers.com>
parents: 877
diff changeset
190 throw(DomainError(r, "Size minus 1 must be divisible by the ratio."))
e81b89ae17c4 Add coarsen()
Jonatan Werpers <jonatan@werpers.com>
parents: 877
diff changeset
191 end
e81b89ae17c4 Add coarsen()
Jonatan Werpers <jonatan@werpers.com>
parents: 877
diff changeset
192
e81b89ae17c4 Add coarsen()
Jonatan Werpers <jonatan@werpers.com>
parents: 877
diff changeset
193 new_sz = (sz .- 1).÷r .+ 1
e81b89ae17c4 Add coarsen()
Jonatan Werpers <jonatan@werpers.com>
parents: 877
diff changeset
194
1128
dfbd62c7eb09 Rename dim to ndims in Grids.jl
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1126
diff changeset
195 return EquidistantGrid{ndims(grid), eltype(grid)}(new_sz, grid.limit_lower, grid.limit_upper)
907
e81b89ae17c4 Add coarsen()
Jonatan Werpers <jonatan@werpers.com>
parents: 877
diff changeset
196 end