annotate src/Grids/EquidistantGrid.jl @ 406:c377fc37c04b test/equidistantgrid

Clean up EquidistantGrid and tests after deciding that side lengths must be positive.
author Vidar Stiernström <vidar.stiernstrom@it.uu.se>
date Tue, 13 Oct 2020 17:16:28 +0200
parents 16dc5b19843d
children 26b0eb83aea4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
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
1 """
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 EquidistantGrid(size::NTuple{Dim, Int}, limit_lower::NTuple{Dim, T}, limit_upper::NTuple{Dim, T}
75
93c833019857 Make EquidistantGrid more concrete
Jonatan Werpers <jonatan@werpers.com>
parents: 74
diff changeset
3
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
4 EquidistantGrid is a grid with equidistant grid spacing per coordinat direction.
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
5 The domain is defined through the two points P1 = x̄₁, P2 = x̄₂ by the exterior
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 product of the vectors obtained by projecting (x̄₂-x̄₁) onto the coordinate
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
7 directions. E.g for a 2D grid with x̄₁=(-1,0) and x̄₂=(1,2) the domain is defined
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
8 as (-1,1)x(0,2). The side lengths of the grid are not allowed to be negative
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
9 """
75
93c833019857 Make EquidistantGrid more concrete
Jonatan Werpers <jonatan@werpers.com>
parents: 74
diff changeset
10 struct EquidistantGrid{Dim,T<:Real} <: AbstractGrid
381
dacbcba33d7d Refactor EquidistantGrid to not store spacing or inverse spacing
Jonatan Werpers <jonatan@werpers.com>
parents: 358
diff changeset
11 size::NTuple{Dim, Int}
75
93c833019857 Make EquidistantGrid more concrete
Jonatan Werpers <jonatan@werpers.com>
parents: 74
diff changeset
12 limit_lower::NTuple{Dim, T}
93c833019857 Make EquidistantGrid more concrete
Jonatan Werpers <jonatan@werpers.com>
parents: 74
diff changeset
13 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
14
614b56a017b9 Split grid.jl into AbstractGrid.jl and EquidistantGrid.jl
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
15 # General constructor
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
16 function EquidistantGrid(size::NTuple{Dim, Int}, limit_lower::NTuple{Dim, T}, limit_upper::NTuple{Dim, T}) where Dim where 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
17 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
18 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
19 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
20 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
21 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
22 end
381
dacbcba33d7d Refactor EquidistantGrid to not store spacing or inverse spacing
Jonatan Werpers <jonatan@werpers.com>
parents: 358
diff changeset
23 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
24 end
614b56a017b9 Split grid.jl into AbstractGrid.jl and EquidistantGrid.jl
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
25 end
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
26 export EquidistantGrid
51
614b56a017b9 Split grid.jl into AbstractGrid.jl and EquidistantGrid.jl
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
27
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
28
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
29 """
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
30 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
31
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
32 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
33 """
324
047dee8efaef Grids.EquidistantGrid: Add constructor for 1d grid
Jonatan Werpers <jonatan@werpers.com>
parents: 270
diff changeset
34 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
35 return EquidistantGrid((size,),(limit_lower,),(limit_upper,))
047dee8efaef Grids.EquidistantGrid: Add constructor for 1d grid
Jonatan Werpers <jonatan@werpers.com>
parents: 270
diff changeset
36 end
047dee8efaef Grids.EquidistantGrid: Add constructor for 1d grid
Jonatan Werpers <jonatan@werpers.com>
parents: 270
diff changeset
37
129
1aaeb46ba5f4 Improve efficiency of apply by the following:
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 124
diff changeset
38 function Base.eachindex(grid::EquidistantGrid)
1aaeb46ba5f4 Improve efficiency of apply by the following:
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 124
diff changeset
39 CartesianIndices(grid.size)
1aaeb46ba5f4 Improve efficiency of apply by the following:
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 124
diff changeset
40 end
1aaeb46ba5f4 Improve efficiency of apply by the following:
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 124
diff changeset
41
241
1128ab4f5758 Add size method to EquidistantGrid
Jonatan Werpers <jonatan@werpers.com>
parents: 221
diff changeset
42 Base.size(g::EquidistantGrid) = g.size
1128ab4f5758 Add size method to EquidistantGrid
Jonatan Werpers <jonatan@werpers.com>
parents: 221
diff changeset
43
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
44 """
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
45 dimension(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
46
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 The dimension of 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
48 """
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
49 function dimension(grid::EquidistantGrid)
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
50 return length(grid.size)
51
614b56a017b9 Split grid.jl into AbstractGrid.jl and EquidistantGrid.jl
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
51 end
614b56a017b9 Split grid.jl into AbstractGrid.jl and EquidistantGrid.jl
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
52
381
dacbcba33d7d Refactor EquidistantGrid to not store spacing or inverse spacing
Jonatan Werpers <jonatan@werpers.com>
parents: 358
diff changeset
53
dacbcba33d7d Refactor EquidistantGrid to not store spacing or inverse spacing
Jonatan Werpers <jonatan@werpers.com>
parents: 358
diff changeset
54 """
dacbcba33d7d Refactor EquidistantGrid to not store spacing or inverse spacing
Jonatan Werpers <jonatan@werpers.com>
parents: 358
diff changeset
55 spacing(grid::EquidistantGrid)
261
01017d2b46b0 Store grid spacing as property in EquidistantGrid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 256
diff changeset
56
381
dacbcba33d7d Refactor EquidistantGrid to not store spacing or inverse spacing
Jonatan Werpers <jonatan@werpers.com>
parents: 358
diff changeset
57 The spacing between the grid points of the grid.
dacbcba33d7d Refactor EquidistantGrid to not store spacing or inverse spacing
Jonatan Werpers <jonatan@werpers.com>
parents: 358
diff changeset
58 """
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
59 spacing(grid::EquidistantGrid) = (grid.limit_upper.-grid.limit_lower)./(grid.size.-1)
256
d8f42733f392 Export spacing() for Equidistant grids
Jonatan Werpers <jonatan@werpers.com>
parents: 241
diff changeset
60 export spacing
95
9d53ecca34f7 Switch to using cartesian indicies
Jonatan Werpers <jonatan@werpers.com>
parents: 85
diff changeset
61
381
dacbcba33d7d Refactor EquidistantGrid to not store spacing or inverse spacing
Jonatan Werpers <jonatan@werpers.com>
parents: 358
diff changeset
62 """
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
63 inverse_spacing(grid::EquidistantGrid)
381
dacbcba33d7d Refactor EquidistantGrid to not store spacing or inverse spacing
Jonatan Werpers <jonatan@werpers.com>
parents: 358
diff changeset
64
dacbcba33d7d Refactor EquidistantGrid to not store spacing or inverse spacing
Jonatan Werpers <jonatan@werpers.com>
parents: 358
diff changeset
65 The reciprocal of the spacing between the grid points of the grid.
dacbcba33d7d Refactor EquidistantGrid to not store spacing or inverse spacing
Jonatan Werpers <jonatan@werpers.com>
parents: 358
diff changeset
66 """
dacbcba33d7d Refactor EquidistantGrid to not store spacing or inverse spacing
Jonatan Werpers <jonatan@werpers.com>
parents: 358
diff changeset
67 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
68 export inverse_spacing
dacbcba33d7d Refactor EquidistantGrid to not store spacing or inverse spacing
Jonatan Werpers <jonatan@werpers.com>
parents: 358
diff changeset
69
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
70 """
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
71 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
72
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
73 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
74 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
75 (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
76 ⋮ ⋮ ⋮
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
77 (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
78 """
51
614b56a017b9 Split grid.jl into AbstractGrid.jl and EquidistantGrid.jl
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
79 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
80 indices = Tuple.(CartesianIndices(grid.size))
130
155bbecf18bb Fix bug in points(::EquidistantGrid)
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 129
diff changeset
81 h = spacing(grid)
155bbecf18bb Fix bug in points(::EquidistantGrid)
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 129
diff changeset
82 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
83 end
614b56a017b9 Split grid.jl into AbstractGrid.jl and EquidistantGrid.jl
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
84
353
8257cc75ea6b Add doc string and allow picking several dimensions
Jonatan Werpers <jonatan@werpers.com>
parents: 352
diff changeset
85 """
358
64ad8ec0eae0 Change name from subgrid to restrict
Jonatan Werpers <jonatan@werpers.com>
parents: 353
diff changeset
86 restrict(::EquidistantGrid, dim)
353
8257cc75ea6b Add doc string and allow picking several dimensions
Jonatan Werpers <jonatan@werpers.com>
parents: 352
diff changeset
87
8257cc75ea6b Add doc string and allow picking several dimensions
Jonatan Werpers <jonatan@werpers.com>
parents: 352
diff changeset
88 Pick out given dimensions from the grid and return a grid for them
8257cc75ea6b Add doc string and allow picking several dimensions
Jonatan Werpers <jonatan@werpers.com>
parents: 352
diff changeset
89 """
358
64ad8ec0eae0 Change name from subgrid to restrict
Jonatan Werpers <jonatan@werpers.com>
parents: 353
diff changeset
90 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
91 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
92 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
93 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
94
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
95 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
96 end
358
64ad8ec0eae0 Change name from subgrid to restrict
Jonatan Werpers <jonatan@werpers.com>
parents: 353
diff changeset
97 export restrict