annotate grid_refactor.md @ 1290:31d0b7638304 refactor/grids

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