comparison grid_refactor.md @ 1342:c0c1189c5f2e refactor/grids

Clean up grid_refactor.md
author Jonatan Werpers <jonatan@werpers.com>
date Fri, 12 May 2023 15:50:09 +0200
parents 5761f4060f2b
children fa3695f634de
comparison
equal deleted inserted replaced
1341:5761f4060f2b 1342:c0c1189c5f2e
21 * Merge and run benchmarks 21 * Merge and run benchmarks
22 22
23 * Clean out Notes.md of any solved issues 23 * Clean out Notes.md of any solved issues
24 * Delete this document, move remaining notes to Notes.md 24 * Delete this document, move remaining notes to Notes.md
25 25
26 ## Remaining work for feature branches
27 * Multi-block grids
28 * Periodic grids
29 * Grids with modified boundary nodes
30 * Unstructured grids?
31
32 ## Frågor 26 ## Frågor
33 27
34 ### Should we move utility functions to their own file? 28 ### Implement the tensor product operator for grids?
35 29 Yes!
36 ### Ska `Grid` vara en AbstractArray? 30 This could be a useful way to create grids with mixes of different kinds of 1d grids. An example could be a grid which is periodic in one direction and bounded in one.
37 Efter som alla nät ska agera som en gridfunktion för koordinaterna måste man
38 svara på frågan hur vi hanterar generellla gridfunktioner samtidigt.
39
40 Några saker att förhålla sig till:
41 - Multiblock nät?
42 - Unstructured?
43 - Triangular structured grids?
44 - Non-simply connected?
45 - CG/DG-nät
46
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}.
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]`.
49
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.
51
52 Hur fungerar tankarna ovan om man har tex tensorprodukten av ett ostrukturerat nät och en ekvidistant nät?
53 ```julia
54 m = Mesh2DTriangle(10)
55 e = EqudistantGrid(range(1:10)
56
57 e[4] # fourth point
58
59 m[3][5] # Fifth node in third triangle
60 m[3,5] # Fifth node in third triangle # Funkar bara om alla nät är samma, (stämmer inte i mb-fallet)
61
62 g = TensorGrid(m, e)
63
64 g[3,4][5] # ??
65 g[3,4] # ??
66
67 g[3,5,4] # ??
68
69
70
71 ```
72
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?
74
75 Man skulle kunna utesluta MultiblockGrid i tensorgrids
76
77 CG-nät och DG-nät blir olika.
78 På CG-nät kanske man både vill indexera noder och trianglar beroende på vad man håller på med?
79
80
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?
82
83
84 Det vi är ute efter är kanske att griddarna uppfyller Iteration och Indexing interfacen.
85
86 #### Försök till slutsater
87 * Multiblock-nät indexeras i två nivåer tex `g[3][3,4]`
88 * Vi struntar i att implementera multiblock-nät som en del av ett tensorgrid till att börja med.
89 * En grid kan inte alltid vara en AbstractArray eftersom till exempel ett NCS eller strukturerad triangel inte har rätt form.
90 * Om vi har nod-indexerade ostrukturerade nät borde de fungera med TensorGrid.
91 * Griddar ska uppfylla Indexing och Iteration interfacen
92
93 ### Should Grid have function for the target manifold dimension?
94 Where would it be used?
95 In the constructor for TensorGrid
96 In eval on if we want to allow multiargument functions
97 Elsewhere?
98
99 An alternative is to analyze T in Grid{T,D} to find the answer. (See combined_coordinate_vector_type in tensor_grid.jl)
100
101 ### Lazy version of map for our needs?
102 Could be used to
103 * evaulate functions on grids
104 * pick out components of grid functions
105 * More?
106
107 Maybe this:
108 ```julia
109 struct LazyMappedArray <: LazyArray
110 f::F
111 v::AT
112 end
113 ```
114
115 Could allow us to remove eval_on.
116
117 ### Do we need functions like `getcomponent`?
118 Perhaps this can be more cleanly solved using map or a lazy version of map?
119 That approach would be more flexible and more general requiring few specialized functions.
120
121 (see "Lazy version of map for our needs?" above)
122
123 ## Implement the tensor product operator for grids?