1222
|
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
|