annotate grid_refactor.md @ 1258:e67cddbb8adc refactor/grids

Add StaticArrays as a dependency
author Jonatan Werpers <jonatan@werpers.com>
date Thu, 23 Feb 2023 11:40:25 +0100
parents f98d8ede0e90
children 9c9ea2900250
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
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
3 ## Mål
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
4 * Embedded grids
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
5 * Vektorvärda grid funktioner, speciellt koordinat-funktionen
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
6 * Olika griddar i olika riktningar?
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
7 * Tex periodiskt i en riktning och intervall i en.
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
8 * Tex ostrukturerat i ett par och strukturerat i en.
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
9 * Enkelt att evaluera på 0d-grid
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
10
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
11 ## Frågor
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
12
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
13
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
14 ### Ska `Grid` vara en AbstractArray?
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
15 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
16 svara på frågan hur vi hanterar generellla gridfunktioner samtidigt.
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
17
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
18 Några saker att förhålla sig till:
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
19 - Multiblock nät?
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
20 - Unstructured?
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
21 - Triangular structured grids?
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
22 - Non-simply connected?
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
23 - CG/DG-nät
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
24
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
25
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
26 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
27 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
28
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
29 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
30
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
31 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
32 ```julia
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
33 m = Mesh2DTriangle(10)
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
34 e = EqudistantGrid(range(1:10)
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
35
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
36 e[4] # fourth point
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
37
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
38 m[3][5] # Fifth node in third triangle
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
39 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
40
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
41 g = TensorGrid(m, e)
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
42
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
43 g[3,4][5] # ??
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
44 g[3,4] # ??
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
45
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
46 g[3,5,4] # ??
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
47
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
48
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
49
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
50 ```
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
51
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
52 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
53
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
54 Man skulle kunna utesluta MultiblockGrid i tensorgrids
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
55
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
56 CG-nät och DG-nät blir olika.
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
57 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
58
1235
d58015e224ca More notes
Jonatan Werpers <jonatan@werpers.com>
parents: 1222
diff changeset
59
d58015e224ca More notes
Jonatan Werpers <jonatan@werpers.com>
parents: 1222
diff changeset
60 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
61
1254
f98d8ede0e90 Add some notes
Jonatan Werpers <jonatan@werpers.com>
parents: 1235
diff changeset
62
f98d8ede0e90 Add some notes
Jonatan Werpers <jonatan@werpers.com>
parents: 1235
diff changeset
63 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
64
1222
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
65 #### Försök till slutsater
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
66 * Multiblock-nät indexeras i två nivåer tex `g[3][3,4]`
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
67 * 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
68 * 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
69 * 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
70 * Griddar ska uppfylla Indexing och Iteration interfacen
1222
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
71
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
72 ### Kan vi introducera 1d griddar och tensorgriddar?
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
73 * Vanligt intervallgrid
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
74 * Periodiskt grid
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
75 * 0-dimensionellt grid
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
76
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
77 Det skulle kunna lösa frågan med embedded-griddar
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
78 och frågan om mixade grids.
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
79
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
80 En svårighet kan vara att implemetera indexeringen för tensorgridden. Är det
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
81 lätt att göra den transparent för kompilatorn?
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
82
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
83 Läs i notes.md om: Grids embedded in higher dimensions
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
84
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
85 Periodiska gridfunktioner? Eller ska vi bara skita i det och låta användaren
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
86 hantera det själv? Blir det krångligt i högre dimensioner?
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
87
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
88
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
89 ### Hur ska vi hantera gridfunktioner med flera komponenter?
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
90 Tex koordinat-funktionen på nätet?
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
91
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
92 Funkar det att ha StaticArray som element type?
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
93 Kan man köra rakt på med en operator då?
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
94
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
95 Vi skulle också kunna använda ArraysOfArrays. Skillnaden blir att den elementtypen är Array{T,N}. Vilket betyder att den är by reference?
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
96 Frågan är om kompilatorn kommer att bry sig... Jag skulle luta mot StaticArrays for safety
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
97
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
98 Läs i notes.md om: Vector valued grid functions
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
99
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
100 ## Notes from pluto notebook
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
101 - Är det dåligt att använda ndims om antalet index inte matchar?
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
102 - Tex ostrukturerat grid
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
103 - Baserat på hur Array fungerar och ndims docs borde den nog returnera
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
104 antalet index och inte griddens dimension
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
105 - Å andra sidan kanske man inte behöver veta viken dimension det är? Fast det känns konstigt...
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
106 - Should we keep the `points` function?
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
107 - Maybe it's better to support `collect` on the grid?
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
108 - How to handle boundary identifiers and boundary grids on `TensorGrid`?
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
109
5f677cd6f0b6 Start refactoring
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
110