Mercurial > repos > public > sbplib_julia
annotate Notes.md @ 1050:396278072f18
Add some notes and clean up TODO.md a little bit
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Wed, 23 Mar 2022 13:09:31 +0100 |
parents | 6b94663f4376 |
children | eeecdf135912 c0bff9f6e0fb 6757cc9ba22e 5f677cd6f0b6 e2f6dafb5d83 |
rev | line source |
---|---|
318
0c8d4a734c4f
Add some todos and add a Notes.md file
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
1 # Notes |
0c8d4a734c4f
Add some todos and add a Notes.md file
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
2 |
654
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
3 ## Reading operators |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
4 |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
5 Jonatan's suggestion is to add methods to `Laplace`, `SecondDerivative` and |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
6 similar functions that take in a filename from which to read stencils. These |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
7 methods encode how to use the structure in a file to build the particular |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
8 operator. The filename should be a keyword argument and could have a default |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
9 value. |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
10 |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
11 * This allows easy creation of operators without the user having to handle stencils. |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
12 * The user can easily switch between sets of operators by changing the file stecils are read from. |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
13 |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
14 Grids for optimized operators could be created by reading from a .toml file in |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
15 a similar fashion as for the operators. The grid can then be used in a |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
16 `Laplace` method which dispatches on the grid type and knows how to read the |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
17 optimized operators. The method would also make sure the operators match the |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
18 grid. |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
19 |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
20 Idea: Make the current upper case methods lower case. Add types with the upper |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
21 case names. These types are tensor mappings for the operator but also contain |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
22 the associated operators as fields. For example: |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
23 |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
24 ```julia |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
25 L = Laplace(grid) |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
26 L.H |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
27 L.Hi |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
28 L.e |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
29 L.d |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
30 L.M |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
31 |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
32 wave = L - L.Hi∘L.e'∘L.d |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
33 ``` |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
34 |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
35 These types could also contain things like borrowing and such. |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
36 |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
37 ## Storage of operators |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
38 We need to change the toml format so that it is easier to store several |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
39 operator with different kinds of differentiations. For example there could be |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
40 several operators of the same order but with different number of boundary |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
41 points or different choice of boundary stencils. |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
42 |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
43 Properties that differentiate operators should for this reason be stored in |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
44 variables and not be section or table names. |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
45 |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
46 Operators/sets of stencils should be stored in an [array of tables](https://toml.io/en/v1.0.0-rc.3#array-of-tables). |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
47 |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
48 We should formalize the format and write simple and general access methods for |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
49 getting operators/sets of stencils from the file. They should support a simple |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
50 way to filter based on values of variables. There filters could possibly be |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
51 implemented through keyword arguments that are sent through all the layers of |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
52 operator creation. |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
53 |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
54 * Remove order as a table name and put it as a variable. |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
55 |
853 | 56 ### Parsing of stencil sets |
829
1de10f5b2008
Add some notes on the format of operator storage
Jonatan Werpers <jonatan@werpers.com>
parents:
775
diff
changeset
|
57 At the moment the only parsing that can be done at the top level is conversion |
1de10f5b2008
Add some notes on the format of operator storage
Jonatan Werpers <jonatan@werpers.com>
parents:
775
diff
changeset
|
58 from the toml file to a dict of strings. This forces the user to dig through |
1de10f5b2008
Add some notes on the format of operator storage
Jonatan Werpers <jonatan@werpers.com>
parents:
775
diff
changeset
|
59 the dictionary and apply the correct parsing methods for the different parts, |
1de10f5b2008
Add some notes on the format of operator storage
Jonatan Werpers <jonatan@werpers.com>
parents:
775
diff
changeset
|
60 e.g. `parse_stencil` or `parse_tuple`. While very flexible there is a tight |
1de10f5b2008
Add some notes on the format of operator storage
Jonatan Werpers <jonatan@werpers.com>
parents:
775
diff
changeset
|
61 coupling between what is written in the file and what code is run to make data |
1de10f5b2008
Add some notes on the format of operator storage
Jonatan Werpers <jonatan@werpers.com>
parents:
775
diff
changeset
|
62 in the file usable. While this coupling is hard to avoid it should be made |
1de10f5b2008
Add some notes on the format of operator storage
Jonatan Werpers <jonatan@werpers.com>
parents:
775
diff
changeset
|
63 explicit. This could be done by putting a reference to a parsing function in |
1de10f5b2008
Add some notes on the format of operator storage
Jonatan Werpers <jonatan@werpers.com>
parents:
775
diff
changeset
|
64 the operator-storage format or somehow specifying the type of each object. |
1de10f5b2008
Add some notes on the format of operator storage
Jonatan Werpers <jonatan@werpers.com>
parents:
775
diff
changeset
|
65 This mechanism should be extensible without changing the package. Perhaps |
1de10f5b2008
Add some notes on the format of operator storage
Jonatan Werpers <jonatan@werpers.com>
parents:
775
diff
changeset
|
66 there could be a way to register parsing functions or object types for the |
1de10f5b2008
Add some notes on the format of operator storage
Jonatan Werpers <jonatan@werpers.com>
parents:
775
diff
changeset
|
67 toml. |
1de10f5b2008
Add some notes on the format of operator storage
Jonatan Werpers <jonatan@werpers.com>
parents:
775
diff
changeset
|
68 |
853 | 69 If possible the goal should be for the parsing to get all the way to the |
70 stencils so that a user calls `read_stencil_set` and gets a | |
71 dictionary-structure containing stencils, tuples, scalars and other types | |
72 ready for input to the methods creating the operators. | |
654
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
73 |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
74 ## Variable second derivative |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
75 |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
76 2020-12-08 after discussion with Vidar: |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
77 We will have to handle the variable second derivative in a new variant of |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
78 VolumeOperator, "SecondDerivativeVariable?". Somehow it needs to know about |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
79 the coefficients. They should be provided as an AbstractVector. Where they are |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
80 provided is another question. It could be that you provide a reference to the |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
81 array to the constructor of SecondDerivativeVariable. If that array is mutable |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
82 you are free to change it whenever and the changes should propagate |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
83 accordingly. Another option is that the counter part to "Laplace" for this |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
84 variable second derivate returns a function or acts like a functions that |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
85 takes an Abstract array and returns a SecondDerivativeVariable with the |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
86 appropriate array. This would allow syntax like `D2(a)*v`. Can this be made |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
87 performant? |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
88 |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
89 For the 1d case we can have a constructor |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
90 `SecondDerivativeVariable(D2::SecondDerivativeVariable, a)` that just creates |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
91 a copy with a different `a`. |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
92 |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
93 Apart from just the second derivative in 1D we need operators for higher |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
94 dimensions. What happens if a=a(x,y)? Maybe this can be solved orthogonally to |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
95 the `D2(a)*v` issue, meaning that if a constant nD version of |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
96 SecondDerivativeVariable is available then maybe it can be wrapped to support |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
97 function like syntax. We might have to implement `SecondDerivativeVariable` |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
98 for N dimensions which takes a N dimensional a. If this could be easily |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
99 closured to allow D(a) syntax we would have come a long way. |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
100 |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
101 For `Laplace` which might use a variable D2 if it is on a curvilinear grid we |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
102 might want to choose how to calculate the metric coefficients. They could be |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
103 known on closed form, they could be calculated from the grid coordinates or |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
104 they could be provided as a vector. Which way you want to do it might change |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
105 depending on for example if you are memory bound or compute bound. This choice |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
106 cannot be done on the grid since the grid shouldn't care about the computer |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
107 architecture. The most sensible option seems to be to have an argument to the |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
108 `Laplace` function which controls how the coefficients are gotten from the |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
109 grid. The argument could for example be a function which is to be applied to |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
110 the grid. |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
111 |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
112 What happens if the grid or the varible coefficient is dependent on time? |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
113 Maybe it becomes important to support `D(a)` or even `D(t,a)` syntax in a more |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
114 general way. |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
115 |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
116 ``` |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
117 g = TimeDependentGrid() |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
118 L = Laplace(g) |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
119 function Laplace(g::TimeDependentGrid) |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
120 g_logical = logical(g) # g_logical is time independent |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
121 ... Build a L(a) assuming we can do that ... |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
122 a(t) = metric_coeffs(g,t) |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
123 return t->L(a(t)) |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
124 end |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
125 ``` |
d26231227b89
Add a bunch of notes on reading and storing operators and how to implement variable second derivatives
Jonatan Werpers <jonatan@werpers.com>
parents:
606
diff
changeset
|
126 |
318
0c8d4a734c4f
Add some todos and add a Notes.md file
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
127 ## Known size of range and domain? |
320
d705b397aa33
Clean up Notes.md and TODO.md
Jonatan Werpers <jonatan@werpers.com>
parents:
319
diff
changeset
|
128 Is there any reason to use a trait to differentiate between fixed size and unknown size? |
d705b397aa33
Clean up Notes.md and TODO.md
Jonatan Werpers <jonatan@werpers.com>
parents:
319
diff
changeset
|
129 |
379
de4746d6d126
Add some notes and todos
Jonatan Werpers <jonatan@werpers.com>
parents:
332
diff
changeset
|
130 When do we need to know the size of the range and domain? |
de4746d6d126
Add some notes and todos
Jonatan Werpers <jonatan@werpers.com>
parents:
332
diff
changeset
|
131 * When indexing to provide boundschecking? |
de4746d6d126
Add some notes and todos
Jonatan Werpers <jonatan@werpers.com>
parents:
332
diff
changeset
|
132 * When doing specialised computations for different parts of the range/domain? |
de4746d6d126
Add some notes and todos
Jonatan Werpers <jonatan@werpers.com>
parents:
332
diff
changeset
|
133 * More? |
319
05ac7d7f9176
Move research and thinking from TODO.md to Notes.md
Jonatan Werpers <jonatan@werpers.com>
parents:
318
diff
changeset
|
134 |
995 | 135 Maybe if we should have dynamic sizing it could be only for the range. `domain_size` would not be implemented. And the `range_size` would be a function of a vector that the LazyTensor is applied to. |
332
535f1bff4bcc
Add some notes and some todos
Jonatan Werpers <jonatan@werpers.com>
parents:
320
diff
changeset
|
136 |
319
05ac7d7f9176
Move research and thinking from TODO.md to Notes.md
Jonatan Werpers <jonatan@werpers.com>
parents:
318
diff
changeset
|
137 ## Reasearch and thinking |
995 | 138 - [ ] Use a trait to indicate that a LazyTensor har the same range and domain? |
319
05ac7d7f9176
Move research and thinking from TODO.md to Notes.md
Jonatan Werpers <jonatan@werpers.com>
parents:
318
diff
changeset
|
139 - [ ] Check how the native julia doc generator works |
05ac7d7f9176
Move research and thinking from TODO.md to Notes.md
Jonatan Werpers <jonatan@werpers.com>
parents:
318
diff
changeset
|
140 - [ ] Check if Vidars design docs fit in there |
05ac7d7f9176
Move research and thinking from TODO.md to Notes.md
Jonatan Werpers <jonatan@werpers.com>
parents:
318
diff
changeset
|
141 - [ ] Create a macro @lazy which replaces a binary op (+,-) by its lazy equivalent? Would be a neat way to indicate which evaluations are lazy without cluttering/confusing with special characters. |
606
8f9b3eac128a
Add a bunch of stuff to TODO.md and Notes.md
Jonatan Werpers <jonatan@werpers.com>
parents:
427
diff
changeset
|
142 - [ ] Dispatch on Lower() instead of the type Lower so `::Lower` instead of `::Type{Lower}` ??? |
332
535f1bff4bcc
Add some notes and some todos
Jonatan Werpers <jonatan@werpers.com>
parents:
320
diff
changeset
|
143 Seems better unless there is some specific reason to use the type instead of the value. |
379
de4746d6d126
Add some notes and todos
Jonatan Werpers <jonatan@werpers.com>
parents:
332
diff
changeset
|
144 - [ ] How do we handle mixes of periodic and non-periodic grids? Seems it should be supported on the grid level and on the 1d operator level. Between there it should be transparent. |
995 | 145 - [ ] Can we have a trait to tell if a LazyTensor is transposable? |
379
de4746d6d126
Add some notes and todos
Jonatan Werpers <jonatan@werpers.com>
parents:
332
diff
changeset
|
146 - [ ] Is it ok to have "Constructors" for abstract types which create subtypes? For example a Grids() functions that gives different kind of grids based on input? |
663
f1803ab08740
Add Note on how we should treat the borrowing parameters of operators.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
654
diff
changeset
|
147 - [ ] Figure out how to treat the borrowing parameters of operators. Include in into the struct? Expose via function dispatched on the operator type and grid? |
410
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
148 |
1050
396278072f18
Add some notes and clean up TODO.md a little bit
Jonatan Werpers <jonatan@werpers.com>
parents:
1041
diff
changeset
|
149 ## Identifiers for regions |
396278072f18
Add some notes and clean up TODO.md a little bit
Jonatan Werpers <jonatan@werpers.com>
parents:
1041
diff
changeset
|
150 The identifiers (`Upper`, `Lower`, `Interior`) used for region indecies should probabily be included in the grid module. This allows new grid types to come with their own regions. |
396278072f18
Add some notes and clean up TODO.md a little bit
Jonatan Werpers <jonatan@werpers.com>
parents:
1041
diff
changeset
|
151 |
606
8f9b3eac128a
Add a bunch of stuff to TODO.md and Notes.md
Jonatan Werpers <jonatan@werpers.com>
parents:
427
diff
changeset
|
152 ## Regions and tensormappings |
995 | 153 - [ ] Use a trait to indicate if a LazyTensor uses indices with regions. |
606
8f9b3eac128a
Add a bunch of stuff to TODO.md and Notes.md
Jonatan Werpers <jonatan@werpers.com>
parents:
427
diff
changeset
|
154 The default should be that they do NOT. |
8f9b3eac128a
Add a bunch of stuff to TODO.md and Notes.md
Jonatan Werpers <jonatan@werpers.com>
parents:
427
diff
changeset
|
155 - [ ] What to name this trait? Can we call it IndexStyle but not export it to avoid conflicts with Base.IndexStyle? |
995 | 156 - [ ] Figure out repeated application of regioned LazyTensors. Maybe an instance of a tensor mapping needs to know the exact size of the range and domain for this to work? |
606
8f9b3eac128a
Add a bunch of stuff to TODO.md and Notes.md
Jonatan Werpers <jonatan@werpers.com>
parents:
427
diff
changeset
|
157 |
1050
396278072f18
Add some notes and clean up TODO.md a little bit
Jonatan Werpers <jonatan@werpers.com>
parents:
1041
diff
changeset
|
158 ### Ideas for information sharing functions |
396278072f18
Add some notes and clean up TODO.md a little bit
Jonatan Werpers <jonatan@werpers.com>
parents:
1041
diff
changeset
|
159 ```julia |
396278072f18
Add some notes and clean up TODO.md a little bit
Jonatan Werpers <jonatan@werpers.com>
parents:
1041
diff
changeset
|
160 using StaticArrays |
396278072f18
Add some notes and clean up TODO.md a little bit
Jonatan Werpers <jonatan@werpers.com>
parents:
1041
diff
changeset
|
161 |
396278072f18
Add some notes and clean up TODO.md a little bit
Jonatan Werpers <jonatan@werpers.com>
parents:
1041
diff
changeset
|
162 function regions(op::SecondDerivativeVariable) |
396278072f18
Add some notes and clean up TODO.md a little bit
Jonatan Werpers <jonatan@werpers.com>
parents:
1041
diff
changeset
|
163 t = ntuple(i->(Interior(),),range_dim(op)) |
396278072f18
Add some notes and clean up TODO.md a little bit
Jonatan Werpers <jonatan@werpers.com>
parents:
1041
diff
changeset
|
164 return Base.setindex(t, (Lower(), Interior(), Upper()), derivative_direction(op)) |
396278072f18
Add some notes and clean up TODO.md a little bit
Jonatan Werpers <jonatan@werpers.com>
parents:
1041
diff
changeset
|
165 end |
396278072f18
Add some notes and clean up TODO.md a little bit
Jonatan Werpers <jonatan@werpers.com>
parents:
1041
diff
changeset
|
166 |
396278072f18
Add some notes and clean up TODO.md a little bit
Jonatan Werpers <jonatan@werpers.com>
parents:
1041
diff
changeset
|
167 function regionsizes(op::SecondDerivativeVariable) |
396278072f18
Add some notes and clean up TODO.md a little bit
Jonatan Werpers <jonatan@werpers.com>
parents:
1041
diff
changeset
|
168 sz = tuple.(range_size(op)) |
396278072f18
Add some notes and clean up TODO.md a little bit
Jonatan Werpers <jonatan@werpers.com>
parents:
1041
diff
changeset
|
169 |
396278072f18
Add some notes and clean up TODO.md a little bit
Jonatan Werpers <jonatan@werpers.com>
parents:
1041
diff
changeset
|
170 cl = closuresize(op) |
396278072f18
Add some notes and clean up TODO.md a little bit
Jonatan Werpers <jonatan@werpers.com>
parents:
1041
diff
changeset
|
171 return Base.setindex(sz, (cl, n-2cl, cl), derivative_direction(op)) |
396278072f18
Add some notes and clean up TODO.md a little bit
Jonatan Werpers <jonatan@werpers.com>
parents:
1041
diff
changeset
|
172 end |
396278072f18
Add some notes and clean up TODO.md a little bit
Jonatan Werpers <jonatan@werpers.com>
parents:
1041
diff
changeset
|
173 |
396278072f18
Add some notes and clean up TODO.md a little bit
Jonatan Werpers <jonatan@werpers.com>
parents:
1041
diff
changeset
|
174 |
396278072f18
Add some notes and clean up TODO.md a little bit
Jonatan Werpers <jonatan@werpers.com>
parents:
1041
diff
changeset
|
175 g = EquidistantGrid((11,9), (0.,0.), (10.,8.)) # h = 1 |
396278072f18
Add some notes and clean up TODO.md a little bit
Jonatan Werpers <jonatan@werpers.com>
parents:
1041
diff
changeset
|
176 c = evalOn(g, (x,y)->x+y) |
396278072f18
Add some notes and clean up TODO.md a little bit
Jonatan Werpers <jonatan@werpers.com>
parents:
1041
diff
changeset
|
177 |
396278072f18
Add some notes and clean up TODO.md a little bit
Jonatan Werpers <jonatan@werpers.com>
parents:
1041
diff
changeset
|
178 D₂ᶜ = SecondDerivativeVariable(g, c, interior_stencil, closure_stencils,1) |
396278072f18
Add some notes and clean up TODO.md a little bit
Jonatan Werpers <jonatan@werpers.com>
parents:
1041
diff
changeset
|
179 @test regions(D₂ᶜ) == ( |
396278072f18
Add some notes and clean up TODO.md a little bit
Jonatan Werpers <jonatan@werpers.com>
parents:
1041
diff
changeset
|
180 (Lower(), Interior(), Upper()), |
396278072f18
Add some notes and clean up TODO.md a little bit
Jonatan Werpers <jonatan@werpers.com>
parents:
1041
diff
changeset
|
181 (Interior(),), |
396278072f18
Add some notes and clean up TODO.md a little bit
Jonatan Werpers <jonatan@werpers.com>
parents:
1041
diff
changeset
|
182 ) |
396278072f18
Add some notes and clean up TODO.md a little bit
Jonatan Werpers <jonatan@werpers.com>
parents:
1041
diff
changeset
|
183 @test regionsizes(D₂ᶜ) == ((1,9,1),(9,)) |
396278072f18
Add some notes and clean up TODO.md a little bit
Jonatan Werpers <jonatan@werpers.com>
parents:
1041
diff
changeset
|
184 |
396278072f18
Add some notes and clean up TODO.md a little bit
Jonatan Werpers <jonatan@werpers.com>
parents:
1041
diff
changeset
|
185 |
396278072f18
Add some notes and clean up TODO.md a little bit
Jonatan Werpers <jonatan@werpers.com>
parents:
1041
diff
changeset
|
186 D₂ᶜ = SecondDerivativeVariable(g, c, interior_stencil, closure_stencils,2) |
396278072f18
Add some notes and clean up TODO.md a little bit
Jonatan Werpers <jonatan@werpers.com>
parents:
1041
diff
changeset
|
187 @test regions(D₂ᶜ) == ( |
396278072f18
Add some notes and clean up TODO.md a little bit
Jonatan Werpers <jonatan@werpers.com>
parents:
1041
diff
changeset
|
188 (Interior(),), |
396278072f18
Add some notes and clean up TODO.md a little bit
Jonatan Werpers <jonatan@werpers.com>
parents:
1041
diff
changeset
|
189 (Lower(), Interior(), Upper()), |
396278072f18
Add some notes and clean up TODO.md a little bit
Jonatan Werpers <jonatan@werpers.com>
parents:
1041
diff
changeset
|
190 ) |
396278072f18
Add some notes and clean up TODO.md a little bit
Jonatan Werpers <jonatan@werpers.com>
parents:
1041
diff
changeset
|
191 @test regionsizes(D₂ᶜ) == ((11,),(1,7,1)) |
396278072f18
Add some notes and clean up TODO.md a little bit
Jonatan Werpers <jonatan@werpers.com>
parents:
1041
diff
changeset
|
192 ``` |
396278072f18
Add some notes and clean up TODO.md a little bit
Jonatan Werpers <jonatan@werpers.com>
parents:
1041
diff
changeset
|
193 |
396278072f18
Add some notes and clean up TODO.md a little bit
Jonatan Werpers <jonatan@werpers.com>
parents:
1041
diff
changeset
|
194 |
606
8f9b3eac128a
Add a bunch of stuff to TODO.md and Notes.md
Jonatan Werpers <jonatan@werpers.com>
parents:
427
diff
changeset
|
195 ## Boundschecking and dimension checking |
8f9b3eac128a
Add a bunch of stuff to TODO.md and Notes.md
Jonatan Werpers <jonatan@werpers.com>
parents:
427
diff
changeset
|
196 Does it make sense to have boundschecking only in getindex methods? |
8f9b3eac128a
Add a bunch of stuff to TODO.md and Notes.md
Jonatan Werpers <jonatan@werpers.com>
parents:
427
diff
changeset
|
197 This would mean no bounds checking in applys, however any indexing that they do would be boundschecked. The only loss would be readability of errors. But users aren't really supposed to call apply directly anyway. |
8f9b3eac128a
Add a bunch of stuff to TODO.md and Notes.md
Jonatan Werpers <jonatan@werpers.com>
parents:
427
diff
changeset
|
198 |
8f9b3eac128a
Add a bunch of stuff to TODO.md and Notes.md
Jonatan Werpers <jonatan@werpers.com>
parents:
427
diff
changeset
|
199 Preferably dimensions and sizes should be checked when lazy objects are created, for example TensorApplication, TensorComposition and so on. If dimension checks decreases performance we can make them skippable later. |
8f9b3eac128a
Add a bunch of stuff to TODO.md and Notes.md
Jonatan Werpers <jonatan@werpers.com>
parents:
427
diff
changeset
|
200 |
410
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
201 ## Vector valued grid functions |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
202 Från slack konversation: |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
203 |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
204 Jonatan Werpers: |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
205 Med vektorvärda gridfunktioner vill vi ju fortfarande att grid funktionen ska vara till exempel AbstractArray{LitenVektor,2} |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
206 Och att man ska kunna göra allt man vill med LitenVektor |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
207 typ addera, jämföra osv |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
208 Och då borde points returnera AbstractArray{LitenVektor{Float,2},2} för ett 2d nät |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
209 Men det kanske bara ska vara Static arrays? |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
210 |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
211 Vidar Stiernström: |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
212 Ja, jag vet inte riktigt vad som är en rimlig representation |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
213 Du menar en vektor av static arrays då? |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
214 |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
215 Jonatan Werpers: |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
216 Ja, att LitenVektor är en StaticArray |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
217 |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
218 Vidar Stiernström: |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
219 Tuplar känns typ rätt inuitivt för att representera värdet i en punkt |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
220 men |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
221 det suger att man inte har + och - för dem |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
222 |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
223 Jonatan Werpers: |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
224 Ja precis |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
225 |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
226 Vidar Stiernström: |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
227 så kanske är bra med static arrays i detta fall |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
228 |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
229 Jonatan Werpers: |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
230 Man vill ju kunna köra en Operator rakt på och vara klar eller? |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
231 |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
232 Vidar Stiernström: |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
233 Har inte alls tänkt på hur det vi gör funkar mot vektorvärda funktioner |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
234 men känns som staticarrays är hur man vill göra det |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
235 tuplar är ju immutable också |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
236 blir jobbigt om man bara agerar på en komponent då |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
237 |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
238 Jonatan Werpers: |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
239 Hm… |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
240 Tål att tänkas på |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
241 Men det lär ju bli mer indirektion med mutables eller? |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
242 Hur fungerar det? |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
243 Det finns ju hur som helst både SVector och MVector i StaticArrays |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
244 |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
245 Vidar Stiernström: |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
246 När vi jobbat i c/c++ och kollat runt lite hur man brukar göra så lagrar man i princip alla sina obekanta i en lång vektor och så får man specificera i funktioerna vilken komponent man agerar på och till vilken man skriver |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
247 så man lagrar grejer enl: w = [u1, v1, u2, v2, …] i 1D. |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
248 Men alltså har ingen aning hur julia hanterar detta |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
249 |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
250 Jonatan Werpers: |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
251 Det vi är ute efter kanske är att en grid funcktion är en AbstractArray{T,2} where T<:NågotSomViKanRäknaMed |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
252 Och så får den typen var lite vad som helst. |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
253 |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
254 Vidar Stiernström: |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
255 Tror det kan vara farligt att ha nåt som är AbstractArray{LitenArray{NDof},Dim} |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
256 Jag gissar att det kompilatorn vill ha är en stor array med doubles |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
257 |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
258 Jonatan Werpers: |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
259 Och sen är det upp till den som använder grejerna att vara smart |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
260 Vill man vara trixig kan man väl då imlementera SuperHaxxorGridFunction <: AbstractArray{Array{…},2} som lagrar allt linjärt eller något sånt |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
261 Det kommer väl lösa sig när man börjar implementera vektorvärda saker |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
262 Euler nästa! |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
263 New |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
264 Vidar Stiernström: |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
265 Det vore skönt att inte behöva skriva såhär varje gång man testar mot en tupel :smile: @test [gp[i]...] ≈ [p[i]...] atol=5e-13 |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
266 |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
267 Jonatan Werpers: |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
268 https://github.com/JuliaArrays/ArraysOfArrays.jl |
26e186b565b3
Add some notes about vector valued grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
379
diff
changeset
|
269 https://github.com/jw3126/Setfield.jl |
423 | 270 |
271 ### Test-applikationer | |
272 div och grad operationer | |
273 | |
606
8f9b3eac128a
Add a bunch of stuff to TODO.md and Notes.md
Jonatan Werpers <jonatan@werpers.com>
parents:
427
diff
changeset
|
274 Enligt Wikipedia verkar det som att `∇⋅` agerar på första dimensionen av ett tensor fält och `div()` på sista. |
8f9b3eac128a
Add a bunch of stuff to TODO.md and Notes.md
Jonatan Werpers <jonatan@werpers.com>
parents:
427
diff
changeset
|
275 Om man generaliserar kanske `∇` i så fall bara lägger till en dimension i början. |
8f9b3eac128a
Add a bunch of stuff to TODO.md and Notes.md
Jonatan Werpers <jonatan@werpers.com>
parents:
427
diff
changeset
|
276 |
8f9b3eac128a
Add a bunch of stuff to TODO.md and Notes.md
Jonatan Werpers <jonatan@werpers.com>
parents:
427
diff
changeset
|
277 Kan vi implementera `⋅`(\cdot) så att de fungerar som man vill för både tensor-fält och tensor-operatorer? |
427
1c41f4fd3e61
Add some notes and todos
Jonatan Werpers <jonatan@werpers.com>
parents:
423
diff
changeset
|
278 |
606
8f9b3eac128a
Add a bunch of stuff to TODO.md and Notes.md
Jonatan Werpers <jonatan@werpers.com>
parents:
427
diff
changeset
|
279 Är `∇` ett tensor-fält av tensor-operatorer? Vad är ett tensor-fält i vår kod? Är det en special-fall av en tensor-mapping? |
427
1c41f4fd3e61
Add some notes and todos
Jonatan Werpers <jonatan@werpers.com>
parents:
423
diff
changeset
|
280 |
606
8f9b3eac128a
Add a bunch of stuff to TODO.md and Notes.md
Jonatan Werpers <jonatan@werpers.com>
parents:
427
diff
changeset
|
281 ### Grid-funktionen |
8f9b3eac128a
Add a bunch of stuff to TODO.md and Notes.md
Jonatan Werpers <jonatan@werpers.com>
parents:
427
diff
changeset
|
282 Grid-funktionon har typen `AbstractArray{T,2} where T`. |
8f9b3eac128a
Add a bunch of stuff to TODO.md and Notes.md
Jonatan Werpers <jonatan@werpers.com>
parents:
427
diff
changeset
|
283 `T` kan vara lite vad som helst, tillexemel en SVector eller Array, eller tuple. TensorOperatorerna bryr sig inte om exakt vad det är, mer än att typen måste stödja de operationer som operatorn använder. |
8f9b3eac128a
Add a bunch of stuff to TODO.md and Notes.md
Jonatan Werpers <jonatan@werpers.com>
parents:
427
diff
changeset
|
284 |
8f9b3eac128a
Add a bunch of stuff to TODO.md and Notes.md
Jonatan Werpers <jonatan@werpers.com>
parents:
427
diff
changeset
|
285 En nackdel kan vara hur man ska få ut gridfunktionen för tex andra komponenten. |
427
1c41f4fd3e61
Add some notes and todos
Jonatan Werpers <jonatan@werpers.com>
parents:
423
diff
changeset
|
286 |
1c41f4fd3e61
Add some notes and todos
Jonatan Werpers <jonatan@werpers.com>
parents:
423
diff
changeset
|
287 Syntax: |
1c41f4fd3e61
Add some notes and todos
Jonatan Werpers <jonatan@werpers.com>
parents:
423
diff
changeset
|
288 ``` |
606
8f9b3eac128a
Add a bunch of stuff to TODO.md and Notes.md
Jonatan Werpers <jonatan@werpers.com>
parents:
427
diff
changeset
|
289 f(x̄) = x̄ |
8f9b3eac128a
Add a bunch of stuff to TODO.md and Notes.md
Jonatan Werpers <jonatan@werpers.com>
parents:
427
diff
changeset
|
290 gf = evalOn(g, f) |
8f9b3eac128a
Add a bunch of stuff to TODO.md and Notes.md
Jonatan Werpers <jonatan@werpers.com>
parents:
427
diff
changeset
|
291 gf[2,3] # x̄ för en viss gridpunkt |
8f9b3eac128a
Add a bunch of stuff to TODO.md and Notes.md
Jonatan Werpers <jonatan@werpers.com>
parents:
427
diff
changeset
|
292 gf[2,3][2] # x̄[2] för en viss gridpunkt |
427
1c41f4fd3e61
Add some notes and todos
Jonatan Werpers <jonatan@werpers.com>
parents:
423
diff
changeset
|
293 ``` |
1c41f4fd3e61
Add some notes and todos
Jonatan Werpers <jonatan@werpers.com>
parents:
423
diff
changeset
|
294 |
606
8f9b3eac128a
Add a bunch of stuff to TODO.md and Notes.md
Jonatan Werpers <jonatan@werpers.com>
parents:
427
diff
changeset
|
295 Note: Behöver bestämma om eval on skickar in `x̄` eller `x̄...` till `f`. Eller om man kan stödja båda. |
427
1c41f4fd3e61
Add some notes and todos
Jonatan Werpers <jonatan@werpers.com>
parents:
423
diff
changeset
|
296 |
606
8f9b3eac128a
Add a bunch of stuff to TODO.md and Notes.md
Jonatan Werpers <jonatan@werpers.com>
parents:
427
diff
changeset
|
297 ### Tensor operatorer |
8f9b3eac128a
Add a bunch of stuff to TODO.md and Notes.md
Jonatan Werpers <jonatan@werpers.com>
parents:
427
diff
changeset
|
298 Vi kan ha tensor-operatorer som agerar på ett skalärt fält och ger ett vektorfält eller tensorfält. |
8f9b3eac128a
Add a bunch of stuff to TODO.md and Notes.md
Jonatan Werpers <jonatan@werpers.com>
parents:
427
diff
changeset
|
299 Vi kan också ha tensor-operatorer som agerar på ett vektorfält eller tensorfält och ger ett skalärt fält. |
8f9b3eac128a
Add a bunch of stuff to TODO.md and Notes.md
Jonatan Werpers <jonatan@werpers.com>
parents:
427
diff
changeset
|
300 |
995 | 301 TBD: Just nu gör `apply_transpose` antagandet att domän-typen är samma som range-typen. Det behöver vi på något sätt bryta. Ett alternativ är låta en LazyTensor ha `T_domain` och `T_range` istället för bara `T`. Känns dock lite grötigt. Ett annat alternativ skulle vara någon typ av trait för transpose? Den skulle kunna innehålla typen som transponatet agerar på? Vet inte om det fungerar dock. |
606
8f9b3eac128a
Add a bunch of stuff to TODO.md and Notes.md
Jonatan Werpers <jonatan@werpers.com>
parents:
427
diff
changeset
|
302 |
995 | 303 TBD: Vad är målet med `T`-parametern för en LazyTensor? Om vi vill kunna applicera en difference operator på vad som helst kan man inte anta att en `LazyTensor{T}` bara agerar på instanser av `T`. |
427
1c41f4fd3e61
Add some notes and todos
Jonatan Werpers <jonatan@werpers.com>
parents:
423
diff
changeset
|
304 |
606
8f9b3eac128a
Add a bunch of stuff to TODO.md and Notes.md
Jonatan Werpers <jonatan@werpers.com>
parents:
427
diff
changeset
|
305 Man kan implementera `∇` som en tensormapping som agerar på T och returnerar `StaticVector{N,T} where N`. |
8f9b3eac128a
Add a bunch of stuff to TODO.md and Notes.md
Jonatan Werpers <jonatan@werpers.com>
parents:
427
diff
changeset
|
306 (Man skulle eventuellt också kunna låta den agera på `StaticMatrix{N,T,D} where N` och returnera `StaticMatrix{M,T,D+1}`. Frågan är om man vinner något på det...) |
8f9b3eac128a
Add a bunch of stuff to TODO.md and Notes.md
Jonatan Werpers <jonatan@werpers.com>
parents:
427
diff
changeset
|
307 |
995 | 308 Skulle kunna ha en funktion `range_type(::LazyTensor, ::Type{domain_type})` |
606
8f9b3eac128a
Add a bunch of stuff to TODO.md and Notes.md
Jonatan Werpers <jonatan@werpers.com>
parents:
427
diff
changeset
|
309 |
995 | 310 Kanske kan man implementera `⋅(tm::LazyTensor{R,D}, v::AbstractArray{T,D})` där T är en AbstractArray, tm på något sätt har komponenter, lika många som T har element. |
606
8f9b3eac128a
Add a bunch of stuff to TODO.md and Notes.md
Jonatan Werpers <jonatan@werpers.com>
parents:
427
diff
changeset
|
311 |
8f9b3eac128a
Add a bunch of stuff to TODO.md and Notes.md
Jonatan Werpers <jonatan@werpers.com>
parents:
427
diff
changeset
|
312 ### Ratade alternativ: |
8f9b3eac128a
Add a bunch of stuff to TODO.md and Notes.md
Jonatan Werpers <jonatan@werpers.com>
parents:
427
diff
changeset
|
313 |
8f9b3eac128a
Add a bunch of stuff to TODO.md and Notes.md
Jonatan Werpers <jonatan@werpers.com>
parents:
427
diff
changeset
|
314 |
8f9b3eac128a
Add a bunch of stuff to TODO.md and Notes.md
Jonatan Werpers <jonatan@werpers.com>
parents:
427
diff
changeset
|
315 #### 2.AbstractArray{T,2+1} where T (NOPE!) |
8f9b3eac128a
Add a bunch of stuff to TODO.md and Notes.md
Jonatan Werpers <jonatan@werpers.com>
parents:
427
diff
changeset
|
316 Blir inte den här. Bryter mot alla tankar om hur grid funktioner ska fungera. Om de tillåts ha en annan dimension än nätet blir allt hemskt. |
8f9b3eac128a
Add a bunch of stuff to TODO.md and Notes.md
Jonatan Werpers <jonatan@werpers.com>
parents:
427
diff
changeset
|
317 |
427
1c41f4fd3e61
Add some notes and todos
Jonatan Werpers <jonatan@werpers.com>
parents:
423
diff
changeset
|
318 Man låter helt enkelt arrayen ha en extra dimension. En fördel är att man har en väldigt "native" typ. En nackdel kan vara att det eventuellt blir rörigt vilken dimension olika operatorer ska agera på. I värsta fall behöver vi "kroneckra in" de tillagda dimensionerna. Vektorfältets index kommer också att bli det första eftersom vi vill att de ska lagras kontinuerligt i minnet pga chachen. (Går kanske att lösa med en custom typ men då krånglar man till det för sig). En fördel skulle vara att man enkelt får ut olika komponenter. |
1c41f4fd3e61
Add some notes and todos
Jonatan Werpers <jonatan@werpers.com>
parents:
423
diff
changeset
|
319 |
1c41f4fd3e61
Add some notes and todos
Jonatan Werpers <jonatan@werpers.com>
parents:
423
diff
changeset
|
320 Syntax: |
1c41f4fd3e61
Add some notes and todos
Jonatan Werpers <jonatan@werpers.com>
parents:
423
diff
changeset
|
321 ``` |
1c41f4fd3e61
Add some notes and todos
Jonatan Werpers <jonatan@werpers.com>
parents:
423
diff
changeset
|
322 gf = eval_on_grid(g,f) |
1c41f4fd3e61
Add some notes and todos
Jonatan Werpers <jonatan@werpers.com>
parents:
423
diff
changeset
|
323 gf[:,2,3] # Hela vektorn för en gridpunkt |
1c41f4fd3e61
Add some notes and todos
Jonatan Werpers <jonatan@werpers.com>
parents:
423
diff
changeset
|
324 gf[2,2,3] # Andra komponenten av vektor fältet i en punkt. |
1c41f4fd3e61
Add some notes and todos
Jonatan Werpers <jonatan@werpers.com>
parents:
423
diff
changeset
|
325 gf[2,:,:] # |
1c41f4fd3e61
Add some notes and todos
Jonatan Werpers <jonatan@werpers.com>
parents:
423
diff
changeset
|
326 ``` |
1c41f4fd3e61
Add some notes and todos
Jonatan Werpers <jonatan@werpers.com>
parents:
423
diff
changeset
|
327 |
1c41f4fd3e61
Add some notes and todos
Jonatan Werpers <jonatan@werpers.com>
parents:
423
diff
changeset
|
328 ### Evaluering av funktioner på nät |
1c41f4fd3e61
Add some notes and todos
Jonatan Werpers <jonatan@werpers.com>
parents:
423
diff
changeset
|
329 Hur ska man skriva funktioner som evalueras på nätet? `f(x,y) = ...` eller `f(x̄) = ...`? Eller båda? Kan eval_on_grid se skillnad eller får användaren specificera? |
1c41f4fd3e61
Add some notes and todos
Jonatan Werpers <jonatan@werpers.com>
parents:
423
diff
changeset
|
330 |
1c41f4fd3e61
Add some notes and todos
Jonatan Werpers <jonatan@werpers.com>
parents:
423
diff
changeset
|
331 ``` |
1c41f4fd3e61
Add some notes and todos
Jonatan Werpers <jonatan@werpers.com>
parents:
423
diff
changeset
|
332 f(x,y) = [x^2, y^2] |
1c41f4fd3e61
Add some notes and todos
Jonatan Werpers <jonatan@werpers.com>
parents:
423
diff
changeset
|
333 f(x̄) = [x̄[1]^2, x̄[2]^2] |
1c41f4fd3e61
Add some notes and todos
Jonatan Werpers <jonatan@werpers.com>
parents:
423
diff
changeset
|
334 ``` |
1c41f4fd3e61
Add some notes and todos
Jonatan Werpers <jonatan@werpers.com>
parents:
423
diff
changeset
|
335 |
1c41f4fd3e61
Add some notes and todos
Jonatan Werpers <jonatan@werpers.com>
parents:
423
diff
changeset
|
336 Påverkas detta av hur vi förväntar oss kunna skapa lata gridfunktioner? |
1c41f4fd3e61
Add some notes and todos
Jonatan Werpers <jonatan@werpers.com>
parents:
423
diff
changeset
|
337 |
1c41f4fd3e61
Add some notes and todos
Jonatan Werpers <jonatan@werpers.com>
parents:
423
diff
changeset
|
338 ### Komponenter som gridfunktioner |
606
8f9b3eac128a
Add a bunch of stuff to TODO.md and Notes.md
Jonatan Werpers <jonatan@werpers.com>
parents:
427
diff
changeset
|
339 En viktig operation för vektor fält är att kunna få ut komponenter som grid-funktioner. Detta behöver antagligen kunna ske lazy. |
427
1c41f4fd3e61
Add some notes and todos
Jonatan Werpers <jonatan@werpers.com>
parents:
423
diff
changeset
|
340 Det finns ett par olika lösningar: |
1c41f4fd3e61
Add some notes and todos
Jonatan Werpers <jonatan@werpers.com>
parents:
423
diff
changeset
|
341 * Implementera en egen typ av view som tar hand om detta. Eller Accessors.jl? |
995 | 342 * Använda en LazyTensor |
427
1c41f4fd3e61
Add some notes and todos
Jonatan Werpers <jonatan@werpers.com>
parents:
423
diff
changeset
|
343 * Någon typ av lazy-broadcast |
1c41f4fd3e61
Add some notes and todos
Jonatan Werpers <jonatan@werpers.com>
parents:
423
diff
changeset
|
344 * En lazy array som applicerar en funktion för varje element. |
1c41f4fd3e61
Add some notes and todos
Jonatan Werpers <jonatan@werpers.com>
parents:
423
diff
changeset
|
345 |
1c41f4fd3e61
Add some notes and todos
Jonatan Werpers <jonatan@werpers.com>
parents:
423
diff
changeset
|
346 Skulle vara en fördel om det är hyffsat generiskt så att en eventuell användare kan utöka det enkelt om de har någon egen exotisk typ. Eller ska man vila helt på |
1c41f4fd3e61
Add some notes and todos
Jonatan Werpers <jonatan@werpers.com>
parents:
423
diff
changeset
|
347 |
1c41f4fd3e61
Add some notes and todos
Jonatan Werpers <jonatan@werpers.com>
parents:
423
diff
changeset
|
348 Syntax: |
1c41f4fd3e61
Add some notes and todos
Jonatan Werpers <jonatan@werpers.com>
parents:
423
diff
changeset
|
349 ``` |
1c41f4fd3e61
Add some notes and todos
Jonatan Werpers <jonatan@werpers.com>
parents:
423
diff
changeset
|
350 gf = eval(...) |
1c41f4fd3e61
Add some notes and todos
Jonatan Werpers <jonatan@werpers.com>
parents:
423
diff
changeset
|
351 component(gf,2) # Andra komponenten av en vektor |
1c41f4fd3e61
Add some notes and todos
Jonatan Werpers <jonatan@werpers.com>
parents:
423
diff
changeset
|
352 component(gf,2,3) # (2,3) elementet av en matris |
1c41f4fd3e61
Add some notes and todos
Jonatan Werpers <jonatan@werpers.com>
parents:
423
diff
changeset
|
353 component(gf,:,2) # Andra kolumnen av en matris |
1c41f4fd3e61
Add some notes and todos
Jonatan Werpers <jonatan@werpers.com>
parents:
423
diff
changeset
|
354 @ourview gf[:,:][2] |
1c41f4fd3e61
Add some notes and todos
Jonatan Werpers <jonatan@werpers.com>
parents:
423
diff
changeset
|
355 ``` |
683
841ca12f3359
Add notes about embedded grids
Jonatan Werpers <jonatan@werpers.com>
parents:
654
diff
changeset
|
356 |
841ca12f3359
Add notes about embedded grids
Jonatan Werpers <jonatan@werpers.com>
parents:
654
diff
changeset
|
357 ## Grids embedded in higher dimensions |
841ca12f3359
Add notes about embedded grids
Jonatan Werpers <jonatan@werpers.com>
parents:
654
diff
changeset
|
358 |
841ca12f3359
Add notes about embedded grids
Jonatan Werpers <jonatan@werpers.com>
parents:
654
diff
changeset
|
359 For grids generated by asking for boundary grids for a regular grid, it would |
841ca12f3359
Add notes about embedded grids
Jonatan Werpers <jonatan@werpers.com>
parents:
654
diff
changeset
|
360 make sense if these grids knew they were embedded in a higher dimension. They |
841ca12f3359
Add notes about embedded grids
Jonatan Werpers <jonatan@werpers.com>
parents:
654
diff
changeset
|
361 would return coordinates in the full room. This would make sense when |
841ca12f3359
Add notes about embedded grids
Jonatan Werpers <jonatan@werpers.com>
parents:
654
diff
changeset
|
362 drawing points for example, or when evaluating functions on the boundary. |
841ca12f3359
Add notes about embedded grids
Jonatan Werpers <jonatan@werpers.com>
parents:
654
diff
changeset
|
363 |
841ca12f3359
Add notes about embedded grids
Jonatan Werpers <jonatan@werpers.com>
parents:
654
diff
changeset
|
364 Implementation of this is an issue that requires some thought. Adding an extra |
841ca12f3359
Add notes about embedded grids
Jonatan Werpers <jonatan@werpers.com>
parents:
654
diff
changeset
|
365 "Embedded" type for each grid would make it easy to understand each type but |
841ca12f3359
Add notes about embedded grids
Jonatan Werpers <jonatan@werpers.com>
parents:
654
diff
changeset
|
366 contribute to "type bloat". On the other hand adapting existing types to |
841ca12f3359
Add notes about embedded grids
Jonatan Werpers <jonatan@werpers.com>
parents:
654
diff
changeset
|
367 handle embeddedness would complicate the now very simple grid types. Are there |
841ca12f3359
Add notes about embedded grids
Jonatan Werpers <jonatan@werpers.com>
parents:
654
diff
changeset
|
368 other ways of doing the implentation? |
718
05d8ea88c690
Add note about performance testin
Jonatan Werpers <jonatan@werpers.com>
parents:
683
diff
changeset
|
369 |
05d8ea88c690
Add note about performance testin
Jonatan Werpers <jonatan@werpers.com>
parents:
683
diff
changeset
|
370 ## Performance measuring |
05d8ea88c690
Add note about performance testin
Jonatan Werpers <jonatan@werpers.com>
parents:
683
diff
changeset
|
371 We should be measuring performance early. How does our effective cpu and memory bandwidth utilization compare to peak performance? |
05d8ea88c690
Add note about performance testin
Jonatan Werpers <jonatan@werpers.com>
parents:
683
diff
changeset
|
372 |
05d8ea88c690
Add note about performance testin
Jonatan Werpers <jonatan@werpers.com>
parents:
683
diff
changeset
|
373 We should make these test simple to run for any solver. |
05d8ea88c690
Add note about performance testin
Jonatan Werpers <jonatan@werpers.com>
parents:
683
diff
changeset
|
374 |
05d8ea88c690
Add note about performance testin
Jonatan Werpers <jonatan@werpers.com>
parents:
683
diff
changeset
|
375 See [this talk](https://www.youtube.com/watch?v=vPsfZUqI4_0) for some simple ideas for defining effecive memory usage and some comparison with peak performance. |
05d8ea88c690
Add note about performance testin
Jonatan Werpers <jonatan@werpers.com>
parents:
683
diff
changeset
|
376 |
05d8ea88c690
Add note about performance testin
Jonatan Werpers <jonatan@werpers.com>
parents:
683
diff
changeset
|
377 |
761
d7d030f8f708
Add note about adjoint as trait
Jonatan Werpers <jonatan@werpers.com>
parents:
718
diff
changeset
|
378 ## Adjoint as a trait on the sbp_operator level? |
d7d030f8f708
Add note about adjoint as trait
Jonatan Werpers <jonatan@werpers.com>
parents:
718
diff
changeset
|
379 |
d7d030f8f708
Add note about adjoint as trait
Jonatan Werpers <jonatan@werpers.com>
parents:
718
diff
changeset
|
380 It would be nice to have a way of refering to adjoints with resepct to the sbp-inner-product. |
d7d030f8f708
Add note about adjoint as trait
Jonatan Werpers <jonatan@werpers.com>
parents:
718
diff
changeset
|
381 If it was possible you could reduce the number of times you have to deal with the inner product matrix. |
d7d030f8f708
Add note about adjoint as trait
Jonatan Werpers <jonatan@werpers.com>
parents:
718
diff
changeset
|
382 |
d7d030f8f708
Add note about adjoint as trait
Jonatan Werpers <jonatan@werpers.com>
parents:
718
diff
changeset
|
383 Since the LazyOperators package is sort of implementing matrix-free matrices there is no concept of inner products there at the moment. It seems to complicate large parts of the package if this was included there. |
d7d030f8f708
Add note about adjoint as trait
Jonatan Werpers <jonatan@werpers.com>
parents:
718
diff
changeset
|
384 |
d7d030f8f708
Add note about adjoint as trait
Jonatan Werpers <jonatan@werpers.com>
parents:
718
diff
changeset
|
385 A different approach would be to include it as a trait for operators so that you can specify what the adjoint for that operator is. |
d7d030f8f708
Add note about adjoint as trait
Jonatan Werpers <jonatan@werpers.com>
parents:
718
diff
changeset
|
386 |
d7d030f8f708
Add note about adjoint as trait
Jonatan Werpers <jonatan@werpers.com>
parents:
718
diff
changeset
|
387 |
775
1d166e7a9deb
Add a note about the name of VolumeOperator
Jonatan Werpers <jonatan@werpers.com>
parents:
761
diff
changeset
|
388 ## Name of the `VolumeOperator` type for constant stencils |
995 | 389 It seems that the name is too general. The name of the method `volume_operator` makes sense. It should return different types of `LazyTensor` specialized for the grid. A suggetion for a better name is `ConstantStencilVolumeOperator` |