annotate grid_refactor.md @ 1341:5761f4060f2b refactor/grids

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