Mercurial > repos > public > sbplib_julia
annotate src/Grids/tensor_grid.jl @ 1871:b1eb33e62d1e refactor/grids/iterable_boundary_indices
Remove unneded type paramter name
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Mon, 27 Jan 2025 09:17:54 +0100 |
parents | 516eaabf1169 |
children |
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 | 9 grids::GT |
10 | |
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 | 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 | 16 end |
17 end | |
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 | 21 szs = ndims.(g.grids) |
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 | 24 ps = map((g,I)->SVector(g[I...]), g.grids, Is) |
25 | |
26 return vcat(ps...) | |
27 end | |
28 | |
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 | 31 return CartesianIndices(szs) |
32 end | |
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 | 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 | 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 | 73 |
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 | 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 | 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 | 84 end |
85 | |
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 | 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 | 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 | 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 |