annotate grid_refactor.md @ 1277:79647b60a73b refactor/grids

Add and delete notes
author Jonatan Werpers <jonatan@werpers.com>
date Sun, 26 Feb 2023 17:09:51 +0100
parents dcd8654ca33b
children 1157f889bf50
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.
79647b60a73b Add and delete notes
Jonatan Werpers <jonatan@werpers.com>
parents: 1275
diff changeset
14
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 ## TODO
79647b60a73b Add and delete notes
Jonatan Werpers <jonatan@werpers.com>
parents: 1275
diff changeset
17 * Document the expected behavior of grid functions
79647b60a73b Add and delete notes
Jonatan Werpers <jonatan@werpers.com>
parents: 1275
diff changeset
18 * Write down the thinking around Grid being an AbstractArray. Why it doesn't work
79647b60a73b Add and delete notes
Jonatan Werpers <jonatan@werpers.com>
parents: 1275
diff changeset
19
79647b60a73b Add and delete notes
Jonatan Werpers <jonatan@werpers.com>
parents: 1275
diff changeset
20 * Clean out Notes.md of any solved issues
79647b60a73b Add and delete notes
Jonatan Werpers <jonatan@werpers.com>
parents: 1275
diff changeset
21 * Delete this document, move remaining notes to Notes.md
79647b60a73b Add and delete notes
Jonatan Werpers <jonatan@werpers.com>
parents: 1275
diff changeset
22
79647b60a73b Add and delete notes
Jonatan Werpers <jonatan@werpers.com>
parents: 1275
diff changeset
23 ## Remaining work for feature branches
79647b60a73b Add and delete notes
Jonatan Werpers <jonatan@werpers.com>
parents: 1275
diff changeset
24 * Multi-block grids
79647b60a73b Add and delete notes
Jonatan Werpers <jonatan@werpers.com>
parents: 1275
diff changeset
25 * Periodic grids
79647b60a73b Add and delete notes
Jonatan Werpers <jonatan@werpers.com>
parents: 1275
diff changeset
26 * Grids with modified boundary nodes
79647b60a73b Add and delete notes
Jonatan Werpers <jonatan@werpers.com>
parents: 1275
diff changeset
27 * Unstructured grids?
1222
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
28
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
29 ## Frågor
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
30
1277
79647b60a73b Add and delete notes
Jonatan Werpers <jonatan@werpers.com>
parents: 1275
diff changeset
31 ### Should we move utility functions to their own file?
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 ### Ska `Grid` vara en AbstractArray?
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
34 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
35 svara på frågan hur vi hanterar generellla gridfunktioner samtidigt.
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
36
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
37 Några saker att förhålla sig till:
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
38 - Multiblock nät?
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
39 - Unstructured?
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
40 - Triangular structured grids?
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
41 - Non-simply connected?
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
42 - CG/DG-nät
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
43
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
44 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
45 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
46
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
47 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
48
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
49 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
50 ```julia
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
51 m = Mesh2DTriangle(10)
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
52 e = EqudistantGrid(range(1:10)
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
53
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
54 e[4] # fourth point
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
55
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
56 m[3][5] # Fifth node in third triangle
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
57 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
58
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
59 g = TensorGrid(m, e)
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
60
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
61 g[3,4][5] # ??
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
62 g[3,4] # ??
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
63
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
64 g[3,5,4] # ??
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
65
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
66
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
67
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
68 ```
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
69
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
70 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
71
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
72 Man skulle kunna utesluta MultiblockGrid i tensorgrids
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
73
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
74 CG-nät och DG-nät blir olika.
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
75 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
76
1235
d58015e224ca More notes
Jonatan Werpers <jonatan@werpers.com>
parents: 1222
diff changeset
77
d58015e224ca More notes
Jonatan Werpers <jonatan@werpers.com>
parents: 1222
diff changeset
78 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
79
1254
f98d8ede0e90 Add some notes
Jonatan Werpers <jonatan@werpers.com>
parents: 1235
diff changeset
80
f98d8ede0e90 Add some notes
Jonatan Werpers <jonatan@werpers.com>
parents: 1235
diff changeset
81 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
82
1222
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
83 #### Försök till slutsater
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
84 * Multiblock-nät indexeras i två nivåer tex `g[3][3,4]`
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
85 * 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
86 * 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
87 * 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
88 * Griddar ska uppfylla Indexing och Iteration interfacen
1222
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
89
1277
79647b60a73b Add and delete notes
Jonatan Werpers <jonatan@werpers.com>
parents: 1275
diff changeset
90 ### 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
91 Where would it be used?
9c9ea2900250 grid_refactor.md: Add question about target dim function
Jonatan Werpers <jonatan@werpers.com>
parents: 1254
diff changeset
92 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
93 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
94 Elsewhere?
9c9ea2900250 grid_refactor.md: Add question about target dim function
Jonatan Werpers <jonatan@werpers.com>
parents: 1254
diff changeset
95
9c9ea2900250 grid_refactor.md: Add question about target dim function
Jonatan Werpers <jonatan@werpers.com>
parents: 1254
diff changeset
96 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
97
1277
79647b60a73b Add and delete notes
Jonatan Werpers <jonatan@werpers.com>
parents: 1275
diff changeset
98 ### 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
99 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
100 * 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
101 * 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
102 * More?
20f42cf0800c Add test for Grid and make them pass. Start implementing eval_on
Jonatan Werpers <jonatan@werpers.com>
parents: 1265
diff changeset
103
20f42cf0800c Add test for Grid and make them pass. Start implementing eval_on
Jonatan Werpers <jonatan@werpers.com>
parents: 1265
diff changeset
104 Maybe this:
20f42cf0800c Add test for Grid and make them pass. Start implementing eval_on
Jonatan Werpers <jonatan@werpers.com>
parents: 1265
diff changeset
105 ```julia
20f42cf0800c Add test for Grid and make them pass. Start implementing eval_on
Jonatan Werpers <jonatan@werpers.com>
parents: 1265
diff changeset
106 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
107 f::F
20f42cf0800c Add test for Grid and make them pass. Start implementing eval_on
Jonatan Werpers <jonatan@werpers.com>
parents: 1265
diff changeset
108 v::AT
20f42cf0800c Add test for Grid and make them pass. Start implementing eval_on
Jonatan Werpers <jonatan@werpers.com>
parents: 1265
diff changeset
109 end
20f42cf0800c Add test for Grid and make them pass. Start implementing eval_on
Jonatan Werpers <jonatan@werpers.com>
parents: 1265
diff changeset
110 ```
1265
9c9ea2900250 grid_refactor.md: Add question about target dim function
Jonatan Werpers <jonatan@werpers.com>
parents: 1254
diff changeset
111
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
112 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
113
1277
79647b60a73b Add and delete notes
Jonatan Werpers <jonatan@werpers.com>
parents: 1275
diff changeset
114 ### 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
115 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
116 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
117
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
118 (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
119
1277
79647b60a73b Add and delete notes
Jonatan Werpers <jonatan@werpers.com>
parents: 1275
diff changeset
120 ### Would it help to introduce a type for grid functions?
79647b60a73b Add and delete notes
Jonatan Werpers <jonatan@werpers.com>
parents: 1275
diff changeset
121 Seems easier to avoid this but it might be worth investigating.
1222
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
122
1277
79647b60a73b Add and delete notes
Jonatan Werpers <jonatan@werpers.com>
parents: 1275
diff changeset
123 Can it be done with some kind of trait? We can give AbstractArray the appropriate trait and keep them for the simplest grid functions.
1222
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
124