annotate src/Grids/tensor_grid.jl @ 1979:db3383581b9f feature/grids/geometry_functions

Remove dead code
author Jonatan Werpers <jonatan@werpers.com>
date Wed, 26 Feb 2025 15:40:37 +0100
parents b1eb33e62d1e
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1266
a4ddae8b5d49 Add tests for TensorGrid and make them pass
Jonatan Werpers <jonatan@werpers.com>
parents: 1257
diff changeset
1 """
a4ddae8b5d49 Add tests for TensorGrid and make them pass
Jonatan Werpers <jonatan@werpers.com>
parents: 1257
diff changeset
2 TensorGrid{T,D} <: Grid{T,D}
a4ddae8b5d49 Add tests for TensorGrid and make them pass
Jonatan Werpers <jonatan@werpers.com>
parents: 1257
diff changeset
3
1338
5604676d8426 Docs in tensor_grid.jl
Jonatan Werpers <jonatan@werpers.com>
parents: 1337
diff changeset
4 A grid constructed as the tensor product of other grids.
5604676d8426 Docs in tensor_grid.jl
Jonatan Werpers <jonatan@werpers.com>
parents: 1337
diff changeset
5
5604676d8426 Docs in tensor_grid.jl
Jonatan Werpers <jonatan@werpers.com>
parents: 1337
diff changeset
6 Currently only supports grids with the `HasShape`-trait.
1266
a4ddae8b5d49 Add tests for TensorGrid and make them pass
Jonatan Werpers <jonatan@werpers.com>
parents: 1257
diff changeset
7 """
1257
198ccda331a6 Remove range dim as a type paratmeter on Grid as it is already encoded in T if available
Jonatan Werpers <jonatan@werpers.com>
parents: 1256
diff changeset
8 struct TensorGrid{T,D,GT<:NTuple{N,Grid} where N} <: Grid{T,D}
1222
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
9 grids::GT
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
10
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
11 function TensorGrid(gs...)
1266
a4ddae8b5d49 Add tests for TensorGrid and make them pass
Jonatan Werpers <jonatan@werpers.com>
parents: 1257
diff changeset
12 T = mapreduce(eltype, combined_coordinate_vector_type, gs)
a4ddae8b5d49 Add tests for TensorGrid and make them pass
Jonatan Werpers <jonatan@werpers.com>
parents: 1257
diff changeset
13 D = sum(ndims, gs)
1222
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
14
1257
198ccda331a6 Remove range dim as a type paratmeter on Grid as it is already encoded in T if available
Jonatan Werpers <jonatan@werpers.com>
parents: 1256
diff changeset
15 return new{T,D,typeof(gs)}(gs)
1222
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
16 end
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
17 end
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
18
1256
3fc78ad26d03 Add notes and todos about interface implementations for grids
Jonatan Werpers <jonatan@werpers.com>
parents: 1251
diff changeset
19 # Indexing interface
1386
4d628c83987e Add method `getindex(::Grid,::CartesianIndex)` with a default implementation
Jonatan Werpers <jonatan@werpers.com>
parents: 1349
diff changeset
20 function Base.getindex(g::TensorGrid, I::Vararg{Int})
1222
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
21 szs = ndims.(g.grids)
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
22
1251
6f75f2d2bf5c Qualify package when using split_tuple and concatenate_tuple
Jonatan Werpers <jonatan@werpers.com>
parents: 1236
diff changeset
23 Is = LazyTensors.split_tuple(I, szs)
1222
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
24 ps = map((g,I)->SVector(g[I...]), g.grids, Is)
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
25
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
26 return vcat(ps...)
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
27 end
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
28
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
29 function Base.eachindex(g::TensorGrid)
1251
6f75f2d2bf5c Qualify package when using split_tuple and concatenate_tuple
Jonatan Werpers <jonatan@werpers.com>
parents: 1236
diff changeset
30 szs = LazyTensors.concatenate_tuples(size.(g.grids)...)
1222
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
31 return CartesianIndices(szs)
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
32 end
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
33
1399
adbdbf1c3480 Replace `firstindex` and `lastindex` with implementation of `axes`
Jonatan Werpers <jonatan@werpers.com>
parents: 1394
diff changeset
34 function Base.axes(g::TensorGrid, d)
1390
47931bef8471 Implement `firstindex` and `lastindex` for `TensorGrid`
Jonatan Werpers <jonatan@werpers.com>
parents: 1388
diff changeset
35 i, ld = grid_and_local_dim_index(ndims.(g.grids), d)
1399
adbdbf1c3480 Replace `firstindex` and `lastindex` with implementation of `axes`
Jonatan Werpers <jonatan@werpers.com>
parents: 1394
diff changeset
36 return axes(g.grids[i], ld)
1390
47931bef8471 Implement `firstindex` and `lastindex` for `TensorGrid`
Jonatan Werpers <jonatan@werpers.com>
parents: 1388
diff changeset
37 end
47931bef8471 Implement `firstindex` and `lastindex` for `TensorGrid`
Jonatan Werpers <jonatan@werpers.com>
parents: 1388
diff changeset
38
1266
a4ddae8b5d49 Add tests for TensorGrid and make them pass
Jonatan Werpers <jonatan@werpers.com>
parents: 1257
diff changeset
39 # Iteration interface
a4ddae8b5d49 Add tests for TensorGrid and make them pass
Jonatan Werpers <jonatan@werpers.com>
parents: 1257
diff changeset
40 Base.iterate(g::TensorGrid) = iterate(Iterators.product(g.grids...)) |> _iterate_combine_coords
a4ddae8b5d49 Add tests for TensorGrid and make them pass
Jonatan Werpers <jonatan@werpers.com>
parents: 1257
diff changeset
41 Base.iterate(g::TensorGrid, state) = iterate(Iterators.product(g.grids...), state) |> _iterate_combine_coords
a4ddae8b5d49 Add tests for TensorGrid and make them pass
Jonatan Werpers <jonatan@werpers.com>
parents: 1257
diff changeset
42 _iterate_combine_coords(::Nothing) = nothing
a4ddae8b5d49 Add tests for TensorGrid and make them pass
Jonatan Werpers <jonatan@werpers.com>
parents: 1257
diff changeset
43 _iterate_combine_coords((next,state)) = combine_coordinates(next...), state
1222
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
44
1266
a4ddae8b5d49 Add tests for TensorGrid and make them pass
Jonatan Werpers <jonatan@werpers.com>
parents: 1257
diff changeset
45 Base.IteratorSize(::Type{<:TensorGrid{<:Any, D}}) where D = Base.HasShape{D}()
1423
48e16efaac7a Fix implementation of `length(::TensorGrid)`
Jonatan Werpers <jonatan@werpers.com>
parents: 1418
diff changeset
46 Base.length(g::TensorGrid) = prod(length, g.grids)
1266
a4ddae8b5d49 Add tests for TensorGrid and make them pass
Jonatan Werpers <jonatan@werpers.com>
parents: 1257
diff changeset
47 Base.size(g::TensorGrid) = LazyTensors.concatenate_tuples(size.(g.grids)...)
1437
e3a80ef08d09 Implement size(g,d) for EquidistantGrid and TensorGrid
Jonatan Werpers <jonatan@werpers.com>
parents: 1418
diff changeset
48 Base.size(g::TensorGrid, d) = size(g)[d]
1266
a4ddae8b5d49 Add tests for TensorGrid and make them pass
Jonatan Werpers <jonatan@werpers.com>
parents: 1257
diff changeset
49
1823
054447ac4b0e Resolve review comments by filtering ZeroDimGrids
Jonatan Werpers <jonatan@werpers.com>
parents: 1822
diff changeset
50 function spacing(g::TensorGrid)
054447ac4b0e Resolve review comments by filtering ZeroDimGrids
Jonatan Werpers <jonatan@werpers.com>
parents: 1822
diff changeset
51 relevant_grids = filter(g->!isa(g,ZeroDimGrid),g.grids)
054447ac4b0e Resolve review comments by filtering ZeroDimGrids
Jonatan Werpers <jonatan@werpers.com>
parents: 1822
diff changeset
52 return spacing.(relevant_grids)
054447ac4b0e Resolve review comments by filtering ZeroDimGrids
Jonatan Werpers <jonatan@werpers.com>
parents: 1822
diff changeset
53 end
1222
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
54
1646
5f348cc5598e Add min_spacing function for grids
Jonatan Werpers <jonatan@werpers.com>
parents: 1604
diff changeset
55 function min_spacing(g::TensorGrid)
5f348cc5598e Add min_spacing function for grids
Jonatan Werpers <jonatan@werpers.com>
parents: 1604
diff changeset
56 relevant_grids = filter(g->!isa(g,ZeroDimGrid),g.grids)
5f348cc5598e Add min_spacing function for grids
Jonatan Werpers <jonatan@werpers.com>
parents: 1604
diff changeset
57 d = min_spacing.(relevant_grids)
5f348cc5598e Add min_spacing function for grids
Jonatan Werpers <jonatan@werpers.com>
parents: 1604
diff changeset
58 return minimum(d)
5f348cc5598e Add min_spacing function for grids
Jonatan Werpers <jonatan@werpers.com>
parents: 1604
diff changeset
59 end
5f348cc5598e Add min_spacing function for grids
Jonatan Werpers <jonatan@werpers.com>
parents: 1604
diff changeset
60
1266
a4ddae8b5d49 Add tests for TensorGrid and make them pass
Jonatan Werpers <jonatan@werpers.com>
parents: 1257
diff changeset
61 refine(g::TensorGrid, r::Int) = mapreduce(g->refine(g,r), TensorGrid, g.grids)
a4ddae8b5d49 Add tests for TensorGrid and make them pass
Jonatan Werpers <jonatan@werpers.com>
parents: 1257
diff changeset
62 coarsen(g::TensorGrid, r::Int) = mapreduce(g->coarsen(g,r), TensorGrid, g.grids)
a4ddae8b5d49 Add tests for TensorGrid and make them pass
Jonatan Werpers <jonatan@werpers.com>
parents: 1257
diff changeset
63
a4ddae8b5d49 Add tests for TensorGrid and make them pass
Jonatan Werpers <jonatan@werpers.com>
parents: 1257
diff changeset
64 """
1330
5f05a708d730 grid.l: More documentation
Jonatan Werpers <jonatan@werpers.com>
parents: 1289
diff changeset
65 TensorGridBoundary{N, BID} <: BoundaryIdentifier
1338
5604676d8426 Docs in tensor_grid.jl
Jonatan Werpers <jonatan@werpers.com>
parents: 1337
diff changeset
66
5604676d8426 Docs in tensor_grid.jl
Jonatan Werpers <jonatan@werpers.com>
parents: 1337
diff changeset
67 A boundary identifier for a tensor grid. `N` Specifies which grid in the
5604676d8426 Docs in tensor_grid.jl
Jonatan Werpers <jonatan@werpers.com>
parents: 1337
diff changeset
68 tensor product and `BID` which boundary on that grid.
1266
a4ddae8b5d49 Add tests for TensorGrid and make them pass
Jonatan Werpers <jonatan@werpers.com>
parents: 1257
diff changeset
69 """
a4ddae8b5d49 Add tests for TensorGrid and make them pass
Jonatan Werpers <jonatan@werpers.com>
parents: 1257
diff changeset
70 struct TensorGridBoundary{N, BID} <: BoundaryIdentifier end
a4ddae8b5d49 Add tests for TensorGrid and make them pass
Jonatan Werpers <jonatan@werpers.com>
parents: 1257
diff changeset
71 grid_id(::TensorGridBoundary{N, BID}) where {N, BID} = N
a4ddae8b5d49 Add tests for TensorGrid and make them pass
Jonatan Werpers <jonatan@werpers.com>
parents: 1257
diff changeset
72 boundary_id(::TensorGridBoundary{N, BID}) where {N, BID} = BID()
1222
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
73
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
74 """
1347
08f06bfacd5c Fix typos and formatting of documentation
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1338
diff changeset
75 boundary_identifiers(g::TensorGrid)
1222
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
76
1347
08f06bfacd5c Fix typos and formatting of documentation
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1338
diff changeset
77 Returns a tuple containing the boundary identifiers of `g`.
1222
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
78 """
1236
95e294576c2a Implement boundary methods for TensorGrid
Jonatan Werpers <jonatan@werpers.com>
parents: 1222
diff changeset
79 function boundary_identifiers(g::TensorGrid)
95e294576c2a Implement boundary methods for TensorGrid
Jonatan Werpers <jonatan@werpers.com>
parents: 1222
diff changeset
80 per_grid = map(eachindex(g.grids)) do i
1266
a4ddae8b5d49 Add tests for TensorGrid and make them pass
Jonatan Werpers <jonatan@werpers.com>
parents: 1257
diff changeset
81 return map(bid -> TensorGridBoundary{i, typeof(bid)}(), boundary_identifiers(g.grids[i]))
1236
95e294576c2a Implement boundary methods for TensorGrid
Jonatan Werpers <jonatan@werpers.com>
parents: 1222
diff changeset
82 end
1251
6f75f2d2bf5c Qualify package when using split_tuple and concatenate_tuple
Jonatan Werpers <jonatan@werpers.com>
parents: 1236
diff changeset
83 return LazyTensors.concatenate_tuples(per_grid...)
1222
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
84 end
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
85
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
86 """
1347
08f06bfacd5c Fix typos and formatting of documentation
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1338
diff changeset
87 boundary_grid(g::TensorGrid, id::TensorGridBoundary)
1222
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
88
1347
08f06bfacd5c Fix typos and formatting of documentation
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1338
diff changeset
89 The grid for the boundary of `g` specified by `id`.
1222
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
90 """
1347
08f06bfacd5c Fix typos and formatting of documentation
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1338
diff changeset
91 function boundary_grid(g::TensorGrid, id::TensorGridBoundary)
08f06bfacd5c Fix typos and formatting of documentation
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1338
diff changeset
92 local_boundary_grid = boundary_grid(g.grids[grid_id(id)], boundary_id(id))
08f06bfacd5c Fix typos and formatting of documentation
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1338
diff changeset
93 new_grids = Base.setindex(g.grids, local_boundary_grid, grid_id(id))
1236
95e294576c2a Implement boundary methods for TensorGrid
Jonatan Werpers <jonatan@werpers.com>
parents: 1222
diff changeset
94 return TensorGrid(new_grids...)
1222
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
95 end
1266
a4ddae8b5d49 Add tests for TensorGrid and make them pass
Jonatan Werpers <jonatan@werpers.com>
parents: 1257
diff changeset
96
1465
88e738d807cb Implement boundary_indices for TensorGrid
Jonatan Werpers <jonatan@werpers.com>
parents: 1441
diff changeset
97
1871
b1eb33e62d1e Remove unneded type paramter name
Jonatan Werpers <jonatan@werpers.com>
parents: 1863
diff changeset
98 function boundary_indices(g::TensorGrid{<:Any, 1}, id::TensorGridBoundary)
1827
ab397590898e Try to change the implementation
Jonatan Werpers <jonatan@werpers.com>
parents: 1604
diff changeset
99 return boundary_indices(g.grids[grid_id(id)], boundary_id(id))
ab397590898e Try to change the implementation
Jonatan Werpers <jonatan@werpers.com>
parents: 1604
diff changeset
100 end
1465
88e738d807cb Implement boundary_indices for TensorGrid
Jonatan Werpers <jonatan@werpers.com>
parents: 1441
diff changeset
101 function boundary_indices(g::TensorGrid, id::TensorGridBoundary)
88e738d807cb Implement boundary_indices for TensorGrid
Jonatan Werpers <jonatan@werpers.com>
parents: 1441
diff changeset
102 local_b_ind = boundary_indices(g.grids[grid_id(id)], boundary_id(id))
88e738d807cb Implement boundary_indices for TensorGrid
Jonatan Werpers <jonatan@werpers.com>
parents: 1441
diff changeset
103
1833
0e0833663dee Simplify code for tensor grids
Jonatan Werpers <jonatan@werpers.com>
parents: 1829
diff changeset
104 b_ind = Base.setindex(map(eachindex, g.grids), local_b_ind, grid_id(id))
1465
88e738d807cb Implement boundary_indices for TensorGrid
Jonatan Werpers <jonatan@werpers.com>
parents: 1441
diff changeset
105
1833
0e0833663dee Simplify code for tensor grids
Jonatan Werpers <jonatan@werpers.com>
parents: 1829
diff changeset
106 return view(eachindex(g), b_ind...)
1465
88e738d807cb Implement boundary_indices for TensorGrid
Jonatan Werpers <jonatan@werpers.com>
parents: 1441
diff changeset
107 end
88e738d807cb Implement boundary_indices for TensorGrid
Jonatan Werpers <jonatan@werpers.com>
parents: 1441
diff changeset
108
1266
a4ddae8b5d49 Add tests for TensorGrid and make them pass
Jonatan Werpers <jonatan@werpers.com>
parents: 1257
diff changeset
109 function combined_coordinate_vector_type(coordinate_types...)
1270
dcbac783e4c1 Factor out functions for getting the type and number of components in a type
Jonatan Werpers <jonatan@werpers.com>
parents: 1266
diff changeset
110 combined_coord_length = mapreduce(_ncomponents, +, coordinate_types)
1289
3b7ebd135918 Remove _component_type and replace with eltype
Jonatan Werpers <jonatan@werpers.com>
parents: 1270
diff changeset
111 combined_coord_type = mapreduce(eltype, promote_type, coordinate_types)
1266
a4ddae8b5d49 Add tests for TensorGrid and make them pass
Jonatan Werpers <jonatan@werpers.com>
parents: 1257
diff changeset
112
a4ddae8b5d49 Add tests for TensorGrid and make them pass
Jonatan Werpers <jonatan@werpers.com>
parents: 1257
diff changeset
113 if combined_coord_length == 1
a4ddae8b5d49 Add tests for TensorGrid and make them pass
Jonatan Werpers <jonatan@werpers.com>
parents: 1257
diff changeset
114 return combined_coord_type
a4ddae8b5d49 Add tests for TensorGrid and make them pass
Jonatan Werpers <jonatan@werpers.com>
parents: 1257
diff changeset
115 else
a4ddae8b5d49 Add tests for TensorGrid and make them pass
Jonatan Werpers <jonatan@werpers.com>
parents: 1257
diff changeset
116 return SVector{combined_coord_length, combined_coord_type}
a4ddae8b5d49 Add tests for TensorGrid and make them pass
Jonatan Werpers <jonatan@werpers.com>
parents: 1257
diff changeset
117 end
a4ddae8b5d49 Add tests for TensorGrid and make them pass
Jonatan Werpers <jonatan@werpers.com>
parents: 1257
diff changeset
118 end
a4ddae8b5d49 Add tests for TensorGrid and make them pass
Jonatan Werpers <jonatan@werpers.com>
parents: 1257
diff changeset
119
a4ddae8b5d49 Add tests for TensorGrid and make them pass
Jonatan Werpers <jonatan@werpers.com>
parents: 1257
diff changeset
120 function combine_coordinates(coords...)
a4ddae8b5d49 Add tests for TensorGrid and make them pass
Jonatan Werpers <jonatan@werpers.com>
parents: 1257
diff changeset
121 return mapreduce(SVector, vcat, coords)
a4ddae8b5d49 Add tests for TensorGrid and make them pass
Jonatan Werpers <jonatan@werpers.com>
parents: 1257
diff changeset
122 end
1388
c0208286234e Add `grid_and_local_dim_index`
Jonatan Werpers <jonatan@werpers.com>
parents: 1349
diff changeset
123
c0208286234e Add `grid_and_local_dim_index`
Jonatan Werpers <jonatan@werpers.com>
parents: 1349
diff changeset
124 """
1726
471a948cd2b2 Rename project from Sbplib to Diffinitive
Vidar Stiernström <vidar.stiernstrom@gmail.com>
parents: 1646
diff changeset
125 grid_and_local_dim_index(nds, d)
1388
c0208286234e Add `grid_and_local_dim_index`
Jonatan Werpers <jonatan@werpers.com>
parents: 1349
diff changeset
126
1415
18e21601da2d Attempt to clearify docs for `grid_and_local_dim_index`
Jonatan Werpers <jonatan@werpers.com>
parents: 1399
diff changeset
127 Given a tuple of number of dimensions `nds`, and a global dimension index `d`,
18e21601da2d Attempt to clearify docs for `grid_and_local_dim_index`
Jonatan Werpers <jonatan@werpers.com>
parents: 1399
diff changeset
128 calculate which grid index, and local dimension, `d` corresponds to.
18e21601da2d Attempt to clearify docs for `grid_and_local_dim_index`
Jonatan Werpers <jonatan@werpers.com>
parents: 1399
diff changeset
129
18e21601da2d Attempt to clearify docs for `grid_and_local_dim_index`
Jonatan Werpers <jonatan@werpers.com>
parents: 1399
diff changeset
130 `nds` would come from broadcasting `ndims` on the grids tuple of a
18e21601da2d Attempt to clearify docs for `grid_and_local_dim_index`
Jonatan Werpers <jonatan@werpers.com>
parents: 1399
diff changeset
131 `TensorGrid`. If you are interested in a dimension `d` of a tensor grid `g`
18e21601da2d Attempt to clearify docs for `grid_and_local_dim_index`
Jonatan Werpers <jonatan@werpers.com>
parents: 1399
diff changeset
132 ```julia
18e21601da2d Attempt to clearify docs for `grid_and_local_dim_index`
Jonatan Werpers <jonatan@werpers.com>
parents: 1399
diff changeset
133 gi, ldi = grid_and_local_dim_index(ndims.(g.grids), d)
18e21601da2d Attempt to clearify docs for `grid_and_local_dim_index`
Jonatan Werpers <jonatan@werpers.com>
parents: 1399
diff changeset
134 ```
1418
e82240df974d Correct spelling
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1415
diff changeset
135 tells you which grid it belongs to (`gi`) and which index it is at within that
1415
18e21601da2d Attempt to clearify docs for `grid_and_local_dim_index`
Jonatan Werpers <jonatan@werpers.com>
parents: 1399
diff changeset
136 grid (`ldi`).
1388
c0208286234e Add `grid_and_local_dim_index`
Jonatan Werpers <jonatan@werpers.com>
parents: 1349
diff changeset
137 """
c0208286234e Add `grid_and_local_dim_index`
Jonatan Werpers <jonatan@werpers.com>
parents: 1349
diff changeset
138 function grid_and_local_dim_index(nds, d)
c0208286234e Add `grid_and_local_dim_index`
Jonatan Werpers <jonatan@werpers.com>
parents: 1349
diff changeset
139 I = findfirst(>=(d), cumsum(nds))
c0208286234e Add `grid_and_local_dim_index`
Jonatan Werpers <jonatan@werpers.com>
parents: 1349
diff changeset
140
c0208286234e Add `grid_and_local_dim_index`
Jonatan Werpers <jonatan@werpers.com>
parents: 1349
diff changeset
141 if I == 1
c0208286234e Add `grid_and_local_dim_index`
Jonatan Werpers <jonatan@werpers.com>
parents: 1349
diff changeset
142 return (1, d)
c0208286234e Add `grid_and_local_dim_index`
Jonatan Werpers <jonatan@werpers.com>
parents: 1349
diff changeset
143 else
c0208286234e Add `grid_and_local_dim_index`
Jonatan Werpers <jonatan@werpers.com>
parents: 1349
diff changeset
144 return (I, d-cumsum(nds)[I-1])
c0208286234e Add `grid_and_local_dim_index`
Jonatan Werpers <jonatan@werpers.com>
parents: 1349
diff changeset
145 end
c0208286234e Add `grid_and_local_dim_index`
Jonatan Werpers <jonatan@werpers.com>
parents: 1349
diff changeset
146 end