annotate grid.jl @ 22:f2dc3e09fffc

Add comments
author Vidar Stiernström <vidar.stiernstrom@it.uu.se>
date Tue, 18 Dec 2018 14:51:41 +0100
parents 2dbdd00eaea0
children 9031fe054f2c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
14
b11b67c02d1a Started implementing grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 0
diff changeset
1 module grid
b11b67c02d1a Started implementing grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 0
diff changeset
2
b11b67c02d1a Started implementing grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 0
diff changeset
3 abstract type Grid end
b11b67c02d1a Started implementing grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 0
diff changeset
4
b11b67c02d1a Started implementing grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 0
diff changeset
5 function numberOfDimensions(grid::Grid)
16
c61af27cb67a Fix compile errors
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 15
diff changeset
6 error("Not yet implemented")
14
b11b67c02d1a Started implementing grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 0
diff changeset
7 end
b11b67c02d1a Started implementing grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 0
diff changeset
8
b11b67c02d1a Started implementing grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 0
diff changeset
9 function numberOfPoints(grid::Grid)
16
c61af27cb67a Fix compile errors
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 15
diff changeset
10 error("Not yet implemented")
14
b11b67c02d1a Started implementing grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 0
diff changeset
11 end
b11b67c02d1a Started implementing grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 0
diff changeset
12
b11b67c02d1a Started implementing grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 0
diff changeset
13 function points(grid::Grid)
16
c61af27cb67a Fix compile errors
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 15
diff changeset
14 error("Not yet implemented")
14
b11b67c02d1a Started implementing grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 0
diff changeset
15 end
b11b67c02d1a Started implementing grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 0
diff changeset
16
22
f2dc3e09fffc Add comments
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 21
diff changeset
17 # TODO: Should this be here?
14
b11b67c02d1a Started implementing grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 0
diff changeset
18 abstract type BoundaryId end
b11b67c02d1a Started implementing grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 0
diff changeset
19
21
2dbdd00eaea0 Implement function returing the points of a EquidistantGrid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 19
diff changeset
20 # TODO: Move to seperate file.
2dbdd00eaea0 Implement function returing the points of a EquidistantGrid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 19
diff changeset
21 # Prefer to use UInt here, but printing UInt returns hex.
14
b11b67c02d1a Started implementing grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 0
diff changeset
22 struct EquidistantGrid <: Grid
21
2dbdd00eaea0 Implement function returing the points of a EquidistantGrid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 19
diff changeset
23 numberOfPointsPerDim::Tuple
2dbdd00eaea0 Implement function returing the points of a EquidistantGrid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 19
diff changeset
24 limits::NTuple{2,Tuple} # Stores the points at the lower and upper corner of the domain.
2dbdd00eaea0 Implement function returing the points of a EquidistantGrid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 19
diff changeset
25 # e.g (-1,0) and (1,2) for a domain of size (-1,1)x(0,2)
2dbdd00eaea0 Implement function returing the points of a EquidistantGrid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 19
diff changeset
26
2dbdd00eaea0 Implement function returing the points of a EquidistantGrid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 19
diff changeset
27 # General constructor
2dbdd00eaea0 Implement function returing the points of a EquidistantGrid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 19
diff changeset
28 function EquidistantGrid(nPointsPerDim::Tuple, lims::NTuple{2,Tuple})
2dbdd00eaea0 Implement function returing the points of a EquidistantGrid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 19
diff changeset
29 @assert length(nPointsPerDim) > 0
2dbdd00eaea0 Implement function returing the points of a EquidistantGrid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 19
diff changeset
30 @assert count(x -> x > 0, nPointsPerDim) == length(nPointsPerDim)
2dbdd00eaea0 Implement function returing the points of a EquidistantGrid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 19
diff changeset
31 @assert length(lims[1]) == length(nPointsPerDim)
2dbdd00eaea0 Implement function returing the points of a EquidistantGrid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 19
diff changeset
32 @assert length(lims[2]) == length(nPointsPerDim)
2dbdd00eaea0 Implement function returing the points of a EquidistantGrid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 19
diff changeset
33 # TODO: Assert that the same values are not passed in both lims[1] and lims[2]
2dbdd00eaea0 Implement function returing the points of a EquidistantGrid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 19
diff changeset
34 # i.e the domain length is positive for all dimensions
19
af8469bc1cb3 Implement function returning points of grid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 16
diff changeset
35 return new(nPointsPerDim, lims)
14
b11b67c02d1a Started implementing grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 0
diff changeset
36 end
21
2dbdd00eaea0 Implement function returing the points of a EquidistantGrid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 19
diff changeset
37 # 1D constructor which can be called as EquidistantGrid(m, (x_l,x_r))
2dbdd00eaea0 Implement function returing the points of a EquidistantGrid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 19
diff changeset
38 function EquidistantGrid(nPointsPerDim::Int, lims::NTuple{2,Int})
2dbdd00eaea0 Implement function returing the points of a EquidistantGrid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 19
diff changeset
39 return EquidistantGrid((nPointsPerDim,), ((lims[1],),(lims[2],)))
2dbdd00eaea0 Implement function returing the points of a EquidistantGrid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 19
diff changeset
40 end
2dbdd00eaea0 Implement function returing the points of a EquidistantGrid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 19
diff changeset
41
14
b11b67c02d1a Started implementing grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 0
diff changeset
42 end
b11b67c02d1a Started implementing grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 0
diff changeset
43
b11b67c02d1a Started implementing grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 0
diff changeset
44 function numberOfDimensions(grid::EquidistantGrid)
21
2dbdd00eaea0 Implement function returing the points of a EquidistantGrid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 19
diff changeset
45 return length(grid.numberOfPointsPerDim)
14
b11b67c02d1a Started implementing grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 0
diff changeset
46 end
b11b67c02d1a Started implementing grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 0
diff changeset
47
b11b67c02d1a Started implementing grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 0
diff changeset
48 function numberOfPoints(grid::EquidistantGrid)
21
2dbdd00eaea0 Implement function returing the points of a EquidistantGrid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 19
diff changeset
49 numberOfPoints = grid.numberOfPointsPerDim[1];
2dbdd00eaea0 Implement function returing the points of a EquidistantGrid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 19
diff changeset
50 for i = 2:length(grid.numberOfPointsPerDim);
2dbdd00eaea0 Implement function returing the points of a EquidistantGrid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 19
diff changeset
51 numberOfPoints = numberOfPoints*grid.numberOfPointsPerDim[i]
19
af8469bc1cb3 Implement function returning points of grid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 16
diff changeset
52 end
af8469bc1cb3 Implement function returning points of grid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 16
diff changeset
53 return numberOfPoints
14
b11b67c02d1a Started implementing grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 0
diff changeset
54 end
b11b67c02d1a Started implementing grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 0
diff changeset
55
21
2dbdd00eaea0 Implement function returing the points of a EquidistantGrid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 19
diff changeset
56 # TODO: Decide if spacings should be positive or if it is allowed to be negative
2dbdd00eaea0 Implement function returing the points of a EquidistantGrid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 19
diff changeset
57 # If defined as positive, then need to do something extra when calculating the
22
f2dc3e09fffc Add comments
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 21
diff changeset
58 # points. The current implementation works for arbitarily given limits of the grid.
21
2dbdd00eaea0 Implement function returing the points of a EquidistantGrid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 19
diff changeset
59 function spacings(grid::EquidistantGrid)
2dbdd00eaea0 Implement function returing the points of a EquidistantGrid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 19
diff changeset
60 h = Vector{Real}(undef, numberOfDimensions(grid))
2dbdd00eaea0 Implement function returing the points of a EquidistantGrid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 19
diff changeset
61 for i ∈ eachindex(h)
2dbdd00eaea0 Implement function returing the points of a EquidistantGrid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 19
diff changeset
62 h[i] = (grid.limits[2][i]-grid.limits[1][i])/(grid.numberOfPointsPerDim[i]-1)
2dbdd00eaea0 Implement function returing the points of a EquidistantGrid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 19
diff changeset
63 end
2dbdd00eaea0 Implement function returing the points of a EquidistantGrid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 19
diff changeset
64 return Tuple(h)
2dbdd00eaea0 Implement function returing the points of a EquidistantGrid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 19
diff changeset
65 end
2dbdd00eaea0 Implement function returing the points of a EquidistantGrid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 19
diff changeset
66
14
b11b67c02d1a Started implementing grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 0
diff changeset
67 function points(grid::EquidistantGrid)
21
2dbdd00eaea0 Implement function returing the points of a EquidistantGrid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 19
diff changeset
68 nPoints = numberOfPoints(grid)
2dbdd00eaea0 Implement function returing the points of a EquidistantGrid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 19
diff changeset
69 points = Vector{NTuple{numberOfDimensions(grid),Real}}(undef, nPoints)
2dbdd00eaea0 Implement function returing the points of a EquidistantGrid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 19
diff changeset
70 cartesianIndices = CartesianIndices(grid.numberOfPointsPerDim)
2dbdd00eaea0 Implement function returing the points of a EquidistantGrid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 19
diff changeset
71 for i ∈ 1:nPoints
2dbdd00eaea0 Implement function returing the points of a EquidistantGrid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 19
diff changeset
72 ci = Tuple(cartesianIndices[i]) .-1
2dbdd00eaea0 Implement function returing the points of a EquidistantGrid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 19
diff changeset
73 points[i] = grid.limits[1] .+ spacings(grid).*ci
19
af8469bc1cb3 Implement function returning points of grid
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 16
diff changeset
74 end
16
c61af27cb67a Fix compile errors
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 15
diff changeset
75 return points
14
b11b67c02d1a Started implementing grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 0
diff changeset
76 end
b11b67c02d1a Started implementing grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 0
diff changeset
77
b11b67c02d1a Started implementing grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 0
diff changeset
78 end