annotate src/Grids/equidistant_grid.jl @ 1355:102ebdaf7c11 feature/variable_derivatives

Merge default
author Jonatan Werpers <jonatan@werpers.com>
date Wed, 08 Feb 2023 21:21:28 +0100
parents src/Grids/EquidistantGrid.jl@c4ea28d904f5 src/Grids/EquidistantGrid.jl@dfbd62c7eb09
children 4684c7f1c4cb
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
1116
c2d7e940639e Rename AbstractGrid to Grid and clean up Grids module
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1115
diff changeset
23
909
b900fea1c057 Clean up the docs a bit
Jonatan Werpers <jonatan@werpers.com>
parents: 908
diff changeset
24 """
b900fea1c057 Clean up the docs a bit
Jonatan Werpers <jonatan@werpers.com>
parents: 908
diff changeset
25 EquidistantGrid(size, limit_lower, limit_upper)
b900fea1c057 Clean up the docs a bit
Jonatan Werpers <jonatan@werpers.com>
parents: 908
diff changeset
26
b900fea1c057 Clean up the docs a bit
Jonatan Werpers <jonatan@werpers.com>
parents: 908
diff changeset
27 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
28 `limit_upper`.
b900fea1c057 Clean up the docs a bit
Jonatan Werpers <jonatan@werpers.com>
parents: 908
diff changeset
29
b900fea1c057 Clean up the docs a bit
Jonatan Werpers <jonatan@werpers.com>
parents: 908
diff changeset
30 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
31 `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
32 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
33
b900fea1c057 Clean up the docs a bit
Jonatan Werpers <jonatan@werpers.com>
parents: 908
diff changeset
34 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
35 by the tuple `size`.
b900fea1c057 Clean up the docs a bit
Jonatan Werpers <jonatan@werpers.com>
parents: 908
diff changeset
36 """
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
37 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
38 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
39 end
909
b900fea1c057 Clean up the docs a bit
Jonatan Werpers <jonatan@werpers.com>
parents: 908
diff changeset
40
1116
c2d7e940639e Rename AbstractGrid to Grid and clean up Grids module
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1115
diff changeset
41
909
b900fea1c057 Clean up the docs a bit
Jonatan Werpers <jonatan@werpers.com>
parents: 908
diff changeset
42 """
b900fea1c057 Clean up the docs a bit
Jonatan Werpers <jonatan@werpers.com>
parents: 908
diff changeset
43 EquidistantGrid{T}()
b900fea1c057 Clean up the docs a bit
Jonatan Werpers <jonatan@werpers.com>
parents: 908
diff changeset
44
b900fea1c057 Clean up the docs a bit
Jonatan Werpers <jonatan@werpers.com>
parents: 908
diff changeset
45 Constructs a 0-dimensional grid.
b900fea1c057 Clean up the docs a bit
Jonatan Werpers <jonatan@werpers.com>
parents: 908
diff changeset
46 """
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
47 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
48
1116
c2d7e940639e Rename AbstractGrid to Grid and clean up Grids module
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1115
diff changeset
49
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
50 """
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 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
52
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 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
54 """
324
047dee8efaef Grids.EquidistantGrid: Add constructor for 1d grid
Jonatan Werpers <jonatan@werpers.com>
parents: 270
diff changeset
55 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
56 return EquidistantGrid((size,),(limit_lower,),(limit_upper,))
047dee8efaef Grids.EquidistantGrid: Add constructor for 1d grid
Jonatan Werpers <jonatan@werpers.com>
parents: 270
diff changeset
57 end
047dee8efaef Grids.EquidistantGrid: Add constructor for 1d grid
Jonatan Werpers <jonatan@werpers.com>
parents: 270
diff changeset
58
688
e9e46a587370 Add eltype function to EquidistantGrids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 686
diff changeset
59 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
60
e9e46a587370 Add eltype function to EquidistantGrids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 686
diff changeset
61 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
62
241
1128ab4f5758 Add size method to EquidistantGrid
Jonatan Werpers <jonatan@werpers.com>
parents: 221
diff changeset
63 Base.size(g::EquidistantGrid) = g.size
1128ab4f5758 Add size method to EquidistantGrid
Jonatan Werpers <jonatan@werpers.com>
parents: 221
diff changeset
64
1092
c4ea28d904f5 Fix grid indexing with CartesianIndex
Jonatan Werpers <jonatan@werpers.com>
parents: 1090
diff changeset
65 function Base.getindex(g::EquidistantGrid, I::Vararg{Int})
1090
9b40aeac4269 Add getindex for grid
Jonatan Werpers <jonatan@werpers.com>
parents: 909
diff changeset
66 h = spacing(g)
9b40aeac4269 Add getindex for grid
Jonatan Werpers <jonatan@werpers.com>
parents: 909
diff changeset
67 return g.limit_lower .+ (I.-1).*h
9b40aeac4269 Add getindex for grid
Jonatan Werpers <jonatan@werpers.com>
parents: 909
diff changeset
68 end
1128
dfbd62c7eb09 Rename dim to ndims in Grids.jl
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1126
diff changeset
69
1092
c4ea28d904f5 Fix grid indexing with CartesianIndex
Jonatan Werpers <jonatan@werpers.com>
parents: 1090
diff changeset
70 Base.getindex(g::EquidistantGrid, I::CartesianIndex) = g[Tuple(I)...]
c4ea28d904f5 Fix grid indexing with CartesianIndex
Jonatan Werpers <jonatan@werpers.com>
parents: 1090
diff changeset
71 # 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
72
1355
102ebdaf7c11 Merge default
Jonatan Werpers <jonatan@werpers.com>
parents: 1092 1128
diff changeset
73 Base.ndims(::EquidistantGrid{Dim}) where Dim = Dim
1116
c2d7e940639e Rename AbstractGrid to Grid and clean up Grids module
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1115
diff changeset
74
381
dacbcba33d7d Refactor EquidistantGrid to not store spacing or inverse spacing
Jonatan Werpers <jonatan@werpers.com>
parents: 358
diff changeset
75 """
dacbcba33d7d Refactor EquidistantGrid to not store spacing or inverse spacing
Jonatan Werpers <jonatan@werpers.com>
parents: 358
diff changeset
76 spacing(grid::EquidistantGrid)
261
01017d2b46b0 Store grid spacing as property in EquidistantGrid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 256
diff changeset
77
909
b900fea1c057 Clean up the docs a bit
Jonatan Werpers <jonatan@werpers.com>
parents: 908
diff changeset
78 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
79 """
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
80 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
81
1116
c2d7e940639e Rename AbstractGrid to Grid and clean up Grids module
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1115
diff changeset
82
381
dacbcba33d7d Refactor EquidistantGrid to not store spacing or inverse spacing
Jonatan Werpers <jonatan@werpers.com>
parents: 358
diff changeset
83 """
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
84 inverse_spacing(grid::EquidistantGrid)
381
dacbcba33d7d Refactor EquidistantGrid to not store spacing or inverse spacing
Jonatan Werpers <jonatan@werpers.com>
parents: 358
diff changeset
85
909
b900fea1c057 Clean up the docs a bit
Jonatan Werpers <jonatan@werpers.com>
parents: 908
diff changeset
86 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
87 """
dacbcba33d7d Refactor EquidistantGrid to not store spacing or inverse spacing
Jonatan Werpers <jonatan@werpers.com>
parents: 358
diff changeset
88 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
89
1116
c2d7e940639e Rename AbstractGrid to Grid and clean up Grids module
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1115
diff changeset
90
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
91 """
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
92 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
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 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
95 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
96 (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
97 ⋮ ⋮ ⋮
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 (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
99 """
51
614b56a017b9 Split grid.jl into AbstractGrid.jl and EquidistantGrid.jl
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
100 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
101 indices = Tuple.(CartesianIndices(grid.size))
130
155bbecf18bb Fix bug in points(::EquidistantGrid)
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 129
diff changeset
102 h = spacing(grid)
155bbecf18bb Fix bug in points(::EquidistantGrid)
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 129
diff changeset
103 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
104 end
614b56a017b9 Split grid.jl into AbstractGrid.jl and EquidistantGrid.jl
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
105
1116
c2d7e940639e Rename AbstractGrid to Grid and clean up Grids module
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1115
diff changeset
106
353
8257cc75ea6b Add doc string and allow picking several dimensions
Jonatan Werpers <jonatan@werpers.com>
parents: 352
diff changeset
107 """
358
64ad8ec0eae0 Change name from subgrid to restrict
Jonatan Werpers <jonatan@werpers.com>
parents: 353
diff changeset
108 restrict(::EquidistantGrid, dim)
353
8257cc75ea6b Add doc string and allow picking several dimensions
Jonatan Werpers <jonatan@werpers.com>
parents: 352
diff changeset
109
909
b900fea1c057 Clean up the docs a bit
Jonatan Werpers <jonatan@werpers.com>
parents: 908
diff changeset
110 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
111 """
358
64ad8ec0eae0 Change name from subgrid to restrict
Jonatan Werpers <jonatan@werpers.com>
parents: 353
diff changeset
112 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
113 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
114 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
115 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
116
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 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
118 end
658
26b0eb83aea4 Add function for getting boundary identifiers from equidistant grid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 406
diff changeset
119
1116
c2d7e940639e Rename AbstractGrid to Grid and clean up Grids module
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1115
diff changeset
120
1113
4e4c5011140d Add functions orthogonal_dims and boundary_size
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1111
diff changeset
121 """
4e4c5011140d Add functions orthogonal_dims and boundary_size
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1111
diff changeset
122 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
123
4e4c5011140d Add functions orthogonal_dims and boundary_size
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1111
diff changeset
124 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
125 """
4e4c5011140d Add functions orthogonal_dims and boundary_size
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1111
diff changeset
126 function orthogonal_dims(grid::EquidistantGrid, dim)
1114
fc57804c9bf4 Add function dims
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1113
diff changeset
127 orth_dims = filter(i -> i != dim, dims(grid))
fc57804c9bf4 Add function dims
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1113
diff changeset
128 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
129 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
130 end
4e4c5011140d Add functions orthogonal_dims and boundary_size
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1111
diff changeset
131 return orth_dims
4e4c5011140d Add functions orthogonal_dims and boundary_size
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1111
diff changeset
132 end
4e4c5011140d Add functions orthogonal_dims and boundary_size
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1111
diff changeset
133
1111
5b3d4a8ec3ab Change to using filter for picking out orthogonal dimensions
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 909
diff changeset
134
658
26b0eb83aea4 Add function for getting boundary identifiers from equidistant grid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 406
diff changeset
135 """
26b0eb83aea4 Add function for getting boundary identifiers from equidistant grid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 406
diff changeset
136 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
137
26b0eb83aea4 Add function for getting boundary identifiers from equidistant grid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 406
diff changeset
138 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
139 (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
140 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
141 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
142 ...)
26b0eb83aea4 Add function for getting boundary identifiers from equidistant grid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 406
diff changeset
143 """
1128
dfbd62c7eb09 Rename dim to ndims in Grids.jl
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1126
diff changeset
144 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
145
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 """
1111
5b3d4a8ec3ab Change to using filter for picking out orthogonal dimensions
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 909
diff changeset
148 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
149
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 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
151 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
152 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
153 """
1111
5b3d4a8ec3ab Change to using filter for picking out orthogonal dimensions
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 909
diff changeset
154 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
155 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
156 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
157 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
158 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
159
1116
c2d7e940639e Rename AbstractGrid to Grid and clean up Grids module
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1115
diff changeset
160
1113
4e4c5011140d Add functions orthogonal_dims and boundary_size
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1111
diff changeset
161 """
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
162 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
163
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 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
165 intervals which is 1 less than the size of the grid.
908
bc71dd5b8311 More docs
Jonatan Werpers <jonatan@werpers.com>
parents: 907
diff changeset
166
bc71dd5b8311 More docs
Jonatan Werpers <jonatan@werpers.com>
parents: 907
diff changeset
167 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
168 """
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 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
170 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
171 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
172 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
173 end
907
e81b89ae17c4 Add coarsen()
Jonatan Werpers <jonatan@werpers.com>
parents: 877
diff changeset
174
1116
c2d7e940639e Rename AbstractGrid to Grid and clean up Grids module
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1115
diff changeset
175
908
bc71dd5b8311 More docs
Jonatan Werpers <jonatan@werpers.com>
parents: 907
diff changeset
176 """
bc71dd5b8311 More docs
Jonatan Werpers <jonatan@werpers.com>
parents: 907
diff changeset
177 coarsen(grid::EquidistantGrid, r::Int)
bc71dd5b8311 More docs
Jonatan Werpers <jonatan@werpers.com>
parents: 907
diff changeset
178
bc71dd5b8311 More docs
Jonatan Werpers <jonatan@werpers.com>
parents: 907
diff changeset
179 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
180 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
181 intervals are not divisible by `r` an error is raised.
bc71dd5b8311 More docs
Jonatan Werpers <jonatan@werpers.com>
parents: 907
diff changeset
182
bc71dd5b8311 More docs
Jonatan Werpers <jonatan@werpers.com>
parents: 907
diff changeset
183 See also: [`refine`](@ref)
bc71dd5b8311 More docs
Jonatan Werpers <jonatan@werpers.com>
parents: 907
diff changeset
184 """
907
e81b89ae17c4 Add coarsen()
Jonatan Werpers <jonatan@werpers.com>
parents: 877
diff changeset
185 function coarsen(grid::EquidistantGrid, r::Int)
e81b89ae17c4 Add coarsen()
Jonatan Werpers <jonatan@werpers.com>
parents: 877
diff changeset
186 sz = size(grid)
e81b89ae17c4 Add coarsen()
Jonatan Werpers <jonatan@werpers.com>
parents: 877
diff changeset
187
e81b89ae17c4 Add coarsen()
Jonatan Werpers <jonatan@werpers.com>
parents: 877
diff changeset
188 if !all(n -> (n % r == 0), sz.-1)
e81b89ae17c4 Add coarsen()
Jonatan Werpers <jonatan@werpers.com>
parents: 877
diff changeset
189 throw(DomainError(r, "Size minus 1 must be divisible by the ratio."))
e81b89ae17c4 Add coarsen()
Jonatan Werpers <jonatan@werpers.com>
parents: 877
diff changeset
190 end
e81b89ae17c4 Add coarsen()
Jonatan Werpers <jonatan@werpers.com>
parents: 877
diff changeset
191
e81b89ae17c4 Add coarsen()
Jonatan Werpers <jonatan@werpers.com>
parents: 877
diff changeset
192 new_sz = (sz .- 1).÷r .+ 1
e81b89ae17c4 Add coarsen()
Jonatan Werpers <jonatan@werpers.com>
parents: 877
diff changeset
193
1128
dfbd62c7eb09 Rename dim to ndims in Grids.jl
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1126
diff changeset
194 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
195 end