Mercurial > repos > public > sbplib_julia
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 |
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 | 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 | 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 |