annotate grid_refactor.md @ 1333:79a2193da5c1 refactor/grids

Implement coordinate_size() and component_type() types
author Jonatan Werpers <jonatan@werpers.com>
date Wed, 03 May 2023 15:39:34 +0200
parents e94ddef5e72f
children cca45af5e724
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1222
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
1 # Grids refactor
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
2
1277
79647b60a73b Add and delete notes
Jonatan Werpers <jonatan@werpers.com>
parents: 1275
diff changeset
3 ## Goals before merging
79647b60a73b Add and delete notes
Jonatan Werpers <jonatan@werpers.com>
parents: 1275
diff changeset
4 * A somewhat clear path towards multi-block grids and their grid functions.
79647b60a73b Add and delete notes
Jonatan Werpers <jonatan@werpers.com>
parents: 1275
diff changeset
5 * A somewhat clear path towards implementations of div() and rot() or the elastic operator (See Notes.md)
79647b60a73b Add and delete notes
Jonatan Werpers <jonatan@werpers.com>
parents: 1275
diff changeset
6
79647b60a73b Add and delete notes
Jonatan Werpers <jonatan@werpers.com>
parents: 1275
diff changeset
7 ## Change summary
79647b60a73b Add and delete notes
Jonatan Werpers <jonatan@werpers.com>
parents: 1275
diff changeset
8 * `EquidistantGrid` is now only a 1D thing.
79647b60a73b Add and delete notes
Jonatan Werpers <jonatan@werpers.com>
parents: 1275
diff changeset
9 * Higher dimensions are supported through `TensorGrid`.
79647b60a73b Add and delete notes
Jonatan Werpers <jonatan@werpers.com>
parents: 1275
diff changeset
10 * The old behavior of `EquidistantGrid` has been moved to the function `equidistant_grid`.
79647b60a73b Add and delete notes
Jonatan Werpers <jonatan@werpers.com>
parents: 1275
diff changeset
11 * Grids embedded in higher dimensions are now supported through tensor products with `ZeroDimGrid`s.
79647b60a73b Add and delete notes
Jonatan Werpers <jonatan@werpers.com>
parents: 1275
diff changeset
12 * Vector valued grid functions are now supported and the default element type is `SVector`.
79647b60a73b Add and delete notes
Jonatan Werpers <jonatan@werpers.com>
parents: 1275
diff changeset
13 * Grids are now expected to support Julia's indexing and iteration interface.
1279
1157f889bf50 Clear out some TBDs
Jonatan Werpers <jonatan@werpers.com>
parents: 1277
diff changeset
14 * `eval_on` can be called with both `f(x,y,...)` and `f(x̄)`.
1277
79647b60a73b Add and delete notes
Jonatan Werpers <jonatan@werpers.com>
parents: 1275
diff changeset
15
79647b60a73b Add and delete notes
Jonatan Werpers <jonatan@werpers.com>
parents: 1275
diff changeset
16
79647b60a73b Add and delete notes
Jonatan Werpers <jonatan@werpers.com>
parents: 1275
diff changeset
17 ## TODO
1292
6753b210d0ab Add todos
Jonatan Werpers <jonatan@werpers.com>
parents: 1287
diff changeset
18 * Add benchmarks or allocation tests for eval_on and indexing grids.
1277
79647b60a73b Add and delete notes
Jonatan Werpers <jonatan@werpers.com>
parents: 1275
diff changeset
19 * Document the expected behavior of grid functions
1325
797b4ee51edf Add todo and update manifests
Jonatan Werpers <jonatan@werpers.com>
parents: 1292
diff changeset
20 * Write down the thinking around Grid being an AbstractArray. Why it doesn't work.
797b4ee51edf Add todo and update manifests
Jonatan Werpers <jonatan@werpers.com>
parents: 1292
diff changeset
21 * Write about the design choices in the docs.
1292
6753b210d0ab Add todos
Jonatan Werpers <jonatan@werpers.com>
parents: 1287
diff changeset
22 * Merge and run benchmarks
1277
79647b60a73b Add and delete notes
Jonatan Werpers <jonatan@werpers.com>
parents: 1275
diff changeset
23
79647b60a73b Add and delete notes
Jonatan Werpers <jonatan@werpers.com>
parents: 1275
diff changeset
24 * Clean out Notes.md of any solved issues
79647b60a73b Add and delete notes
Jonatan Werpers <jonatan@werpers.com>
parents: 1275
diff changeset
25 * Delete this document, move remaining notes to Notes.md
79647b60a73b Add and delete notes
Jonatan Werpers <jonatan@werpers.com>
parents: 1275
diff changeset
26
79647b60a73b Add and delete notes
Jonatan Werpers <jonatan@werpers.com>
parents: 1275
diff changeset
27 ## Remaining work for feature branches
79647b60a73b Add and delete notes
Jonatan Werpers <jonatan@werpers.com>
parents: 1275
diff changeset
28 * Multi-block grids
79647b60a73b Add and delete notes
Jonatan Werpers <jonatan@werpers.com>
parents: 1275
diff changeset
29 * Periodic grids
79647b60a73b Add and delete notes
Jonatan Werpers <jonatan@werpers.com>
parents: 1275
diff changeset
30 * Grids with modified boundary nodes
79647b60a73b Add and delete notes
Jonatan Werpers <jonatan@werpers.com>
parents: 1275
diff changeset
31 * Unstructured grids?
1222
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
32
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
33 ## Frågor
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
34
1277
79647b60a73b Add and delete notes
Jonatan Werpers <jonatan@werpers.com>
parents: 1275
diff changeset
35 ### Should we move utility functions to their own file?
1222
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
36
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
37 ### Ska `Grid` vara en AbstractArray?
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
38 Efter som alla nät ska agera som en gridfunktion för koordinaterna måste man
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
39 svara på frågan hur vi hanterar generellla gridfunktioner samtidigt.
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
40
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
41 Några saker att förhålla sig till:
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
42 - Multiblock nät?
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
43 - Unstructured?
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
44 - Triangular structured grids?
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
45 - Non-simply connected?
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
46 - CG/DG-nät
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
47
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
48 Om alla nät är någon slags AbstractArray så kan tillexempel ett multiblock nät vara en AbstractArray{<:Grid, 1} och motsvarande gridfunktioner AbstractArray{<:AbstractArray,1}.
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
49 Där man alltså först indexerar för vilket när man vill åt och sedan indexerar nätet. Tex `mg[2][32,12]`.
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
50
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
51 Ett ostrukturerat nät med till exempel trianglar skulle vi kunna se på samma sätt som ett multiblocknät. Antagligen har de två typerna av nät olika underliggande datastruktur anpassade efter ändamålet.
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
52
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
53 Hur fungerar tankarna ovan om man har tex tensorprodukten av ett ostrukturerat nät och en ekvidistant nät?
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
54 ```julia
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
55 m = Mesh2DTriangle(10)
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
56 e = EqudistantGrid(range(1:10)
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
57
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
58 e[4] # fourth point
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
59
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
60 m[3][5] # Fifth node in third triangle
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
61 m[3,5] # Fifth node in third triangle # Funkar bara om alla nät är samma, (stämmer inte i mb-fallet)
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
62
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
63 g = TensorGrid(m, e)
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
64
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
65 g[3,4][5] # ??
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
66 g[3,4] # ??
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
67
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
68 g[3,5,4] # ??
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
69
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
70
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
71
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
72 ```
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
73
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
74 Alla grids kanske inte är AbstractArray? Måste de vara rektangulära? Det blir svårt för strukturerade trianglar och NSC-griddar. Men de ska i allafall vara indexerbara?
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
75
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
76 Man skulle kunna utesluta MultiblockGrid i tensorgrids
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
77
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
78 CG-nät och DG-nät blir olika.
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
79 På CG-nät kanske man både vill indexera noder och trianglar beroende på vad man håller på med?
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
80
1235
d58015e224ca More notes
Jonatan Werpers <jonatan@werpers.com>
parents: 1222
diff changeset
81
d58015e224ca More notes
Jonatan Werpers <jonatan@werpers.com>
parents: 1222
diff changeset
82 Om griddarna inte ska vara AbstractArray finns det många andra ställen som blir konstiga om de är AbstractArray. TensorApplication?! LazyArrays?! Är alla saker vi jobbar med egentligen mer generella object? Finns det något sätt att uttrycka koden så att man kan välja?
d58015e224ca More notes
Jonatan Werpers <jonatan@werpers.com>
parents: 1222
diff changeset
83
1254
f98d8ede0e90 Add some notes
Jonatan Werpers <jonatan@werpers.com>
parents: 1235
diff changeset
84
f98d8ede0e90 Add some notes
Jonatan Werpers <jonatan@werpers.com>
parents: 1235
diff changeset
85 Det vi är ute efter är kanske att griddarna uppfyller Iteration och Indexing interfacen.
f98d8ede0e90 Add some notes
Jonatan Werpers <jonatan@werpers.com>
parents: 1235
diff changeset
86
1222
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
87 #### Försök till slutsater
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
88 * Multiblock-nät indexeras i två nivåer tex `g[3][3,4]`
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
89 * Vi struntar i att implementera multiblock-nät som en del av ett tensorgrid till att börja med.
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
90 * En grid kan inte alltid vara en AbstractArray eftersom till exempel ett NCS eller strukturerad triangel inte har rätt form.
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
91 * Om vi har nod-indexerade ostrukturerade nät borde de fungera med TensorGrid.
1254
f98d8ede0e90 Add some notes
Jonatan Werpers <jonatan@werpers.com>
parents: 1235
diff changeset
92 * Griddar ska uppfylla Indexing och Iteration interfacen
1222
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
93
1277
79647b60a73b Add and delete notes
Jonatan Werpers <jonatan@werpers.com>
parents: 1275
diff changeset
94 ### Should Grid have function for the target manifold dimension?
1265
9c9ea2900250 grid_refactor.md: Add question about target dim function
Jonatan Werpers <jonatan@werpers.com>
parents: 1254
diff changeset
95 Where would it be used?
9c9ea2900250 grid_refactor.md: Add question about target dim function
Jonatan Werpers <jonatan@werpers.com>
parents: 1254
diff changeset
96 In the constructor for TensorGrid
1269
20f42cf0800c Add test for Grid and make them pass. Start implementing eval_on
Jonatan Werpers <jonatan@werpers.com>
parents: 1265
diff changeset
97 In eval on if we want to allow multiargument functions
1265
9c9ea2900250 grid_refactor.md: Add question about target dim function
Jonatan Werpers <jonatan@werpers.com>
parents: 1254
diff changeset
98 Elsewhere?
9c9ea2900250 grid_refactor.md: Add question about target dim function
Jonatan Werpers <jonatan@werpers.com>
parents: 1254
diff changeset
99
9c9ea2900250 grid_refactor.md: Add question about target dim function
Jonatan Werpers <jonatan@werpers.com>
parents: 1254
diff changeset
100 An alternative is to analyze T in Grid{T,D} to find the answer. (See combined_coordinate_vector_type in tensor_grid.jl)
9c9ea2900250 grid_refactor.md: Add question about target dim function
Jonatan Werpers <jonatan@werpers.com>
parents: 1254
diff changeset
101
1277
79647b60a73b Add and delete notes
Jonatan Werpers <jonatan@werpers.com>
parents: 1275
diff changeset
102 ### Lazy version of map for our needs?
1269
20f42cf0800c Add test for Grid and make them pass. Start implementing eval_on
Jonatan Werpers <jonatan@werpers.com>
parents: 1265
diff changeset
103 Could be used to
20f42cf0800c Add test for Grid and make them pass. Start implementing eval_on
Jonatan Werpers <jonatan@werpers.com>
parents: 1265
diff changeset
104 * evaulate functions on grids
20f42cf0800c Add test for Grid and make them pass. Start implementing eval_on
Jonatan Werpers <jonatan@werpers.com>
parents: 1265
diff changeset
105 * pick out components of grid functions
20f42cf0800c Add test for Grid and make them pass. Start implementing eval_on
Jonatan Werpers <jonatan@werpers.com>
parents: 1265
diff changeset
106 * More?
20f42cf0800c Add test for Grid and make them pass. Start implementing eval_on
Jonatan Werpers <jonatan@werpers.com>
parents: 1265
diff changeset
107
20f42cf0800c Add test for Grid and make them pass. Start implementing eval_on
Jonatan Werpers <jonatan@werpers.com>
parents: 1265
diff changeset
108 Maybe this:
20f42cf0800c Add test for Grid and make them pass. Start implementing eval_on
Jonatan Werpers <jonatan@werpers.com>
parents: 1265
diff changeset
109 ```julia
20f42cf0800c Add test for Grid and make them pass. Start implementing eval_on
Jonatan Werpers <jonatan@werpers.com>
parents: 1265
diff changeset
110 struct LazyMappedArray <: LazyArray
20f42cf0800c Add test for Grid and make them pass. Start implementing eval_on
Jonatan Werpers <jonatan@werpers.com>
parents: 1265
diff changeset
111 f::F
20f42cf0800c Add test for Grid and make them pass. Start implementing eval_on
Jonatan Werpers <jonatan@werpers.com>
parents: 1265
diff changeset
112 v::AT
20f42cf0800c Add test for Grid and make them pass. Start implementing eval_on
Jonatan Werpers <jonatan@werpers.com>
parents: 1265
diff changeset
113 end
20f42cf0800c Add test for Grid and make them pass. Start implementing eval_on
Jonatan Werpers <jonatan@werpers.com>
parents: 1265
diff changeset
114 ```
1265
9c9ea2900250 grid_refactor.md: Add question about target dim function
Jonatan Werpers <jonatan@werpers.com>
parents: 1254
diff changeset
115
1275
dcd8654ca33b Remove getcomponent stubs since we might have a cleaner way to solve it with map or lazymap
Jonatan Werpers <jonatan@werpers.com>
parents: 1269
diff changeset
116 Could allow us to remove eval_on.
dcd8654ca33b Remove getcomponent stubs since we might have a cleaner way to solve it with map or lazymap
Jonatan Werpers <jonatan@werpers.com>
parents: 1269
diff changeset
117
1277
79647b60a73b Add and delete notes
Jonatan Werpers <jonatan@werpers.com>
parents: 1275
diff changeset
118 ### Do we need functions like `getcomponent`?
1275
dcd8654ca33b Remove getcomponent stubs since we might have a cleaner way to solve it with map or lazymap
Jonatan Werpers <jonatan@werpers.com>
parents: 1269
diff changeset
119 Perhaps this can be more cleanly solved using map or a lazy version of map?
dcd8654ca33b Remove getcomponent stubs since we might have a cleaner way to solve it with map or lazymap
Jonatan Werpers <jonatan@werpers.com>
parents: 1269
diff changeset
120 That approach would be more flexible and more general requiring few specialized functions.
dcd8654ca33b Remove getcomponent stubs since we might have a cleaner way to solve it with map or lazymap
Jonatan Werpers <jonatan@werpers.com>
parents: 1269
diff changeset
121
dcd8654ca33b Remove getcomponent stubs since we might have a cleaner way to solve it with map or lazymap
Jonatan Werpers <jonatan@werpers.com>
parents: 1269
diff changeset
122 (see "Lazy version of map for our needs?" above)
dcd8654ca33b Remove getcomponent stubs since we might have a cleaner way to solve it with map or lazymap
Jonatan Werpers <jonatan@werpers.com>
parents: 1269
diff changeset
123
1287
014d365c18de Add some todos
Jonatan Werpers <jonatan@werpers.com>
parents: 1279
diff changeset
124 ## Implement the tensor product operator for grids?