Mercurial > repos > public > sbplib_julia
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 |
rev | line source |
---|---|
1222 | 1 # Grids refactor |
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 | 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 | 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 | 30 |
31 ## Frågor | |
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 | 34 |
35 ### Ska `Grid` vara en AbstractArray? | |
36 Efter som alla nät ska agera som en gridfunktion för koordinaterna måste man | |
37 svara på frågan hur vi hanterar generellla gridfunktioner samtidigt. | |
38 | |
39 Några saker att förhålla sig till: | |
40 - Multiblock nät? | |
41 - Unstructured? | |
42 - Triangular structured grids? | |
43 - Non-simply connected? | |
44 - CG/DG-nät | |
45 | |
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}. | |
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]`. | |
48 | |
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. | |
50 | |
51 Hur fungerar tankarna ovan om man har tex tensorprodukten av ett ostrukturerat nät och en ekvidistant nät? | |
52 ```julia | |
53 m = Mesh2DTriangle(10) | |
54 e = EqudistantGrid(range(1:10) | |
55 | |
56 e[4] # fourth point | |
57 | |
58 m[3][5] # Fifth node in third triangle | |
59 m[3,5] # Fifth node in third triangle # Funkar bara om alla nät är samma, (stämmer inte i mb-fallet) | |
60 | |
61 g = TensorGrid(m, e) | |
62 | |
63 g[3,4][5] # ?? | |
64 g[3,4] # ?? | |
65 | |
66 g[3,5,4] # ?? | |
67 | |
68 | |
69 | |
70 ``` | |
71 | |
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? | |
73 | |
74 Man skulle kunna utesluta MultiblockGrid i tensorgrids | |
75 | |
76 CG-nät och DG-nät blir olika. | |
77 På CG-nät kanske man både vill indexera noder och trianglar beroende på vad man håller på med? | |
78 | |
1235 | 79 |
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? | |
81 | |
1254 | 82 |
83 Det vi är ute efter är kanske att griddarna uppfyller Iteration och Indexing interfacen. | |
84 | |
1222 | 85 #### Försök till slutsater |
86 * Multiblock-nät indexeras i två nivåer tex `g[3][3,4]` | |
87 * Vi struntar i att implementera multiblock-nät som en del av ett tensorgrid till att börja med. | |
88 * En grid kan inte alltid vara en AbstractArray eftersom till exempel ett NCS eller strukturerad triangel inte har rätt form. | |
89 * Om vi har nod-indexerade ostrukturerade nät borde de fungera med TensorGrid. | |
1254 | 90 * Griddar ska uppfylla Indexing och Iteration interfacen |
1222 | 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 | 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 | 126 |
1287 | 127 ## Implement the tensor product operator for grids? |