comparison grid_refactor.md @ 1222:5f677cd6f0b6 refactor/grids

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