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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
fe8fe3f01162 Docs touch up
Jonatan Werpers <jonatan@werpers.com>
parents: 829
diff changeset
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
fe8fe3f01162 Docs touch up
Jonatan Werpers <jonatan@werpers.com>
parents: 829
diff changeset
69 If possible the goal should be for the parsing to get all the way to the
fe8fe3f01162 Docs touch up
Jonatan Werpers <jonatan@werpers.com>
parents: 829
diff changeset
70 stencils so that a user calls `read_stencil_set` and gets a
fe8fe3f01162 Docs touch up
Jonatan Werpers <jonatan@werpers.com>
parents: 829
diff changeset
71 dictionary-structure containing stencils, tuples, scalars and other types
fe8fe3f01162 Docs touch up
Jonatan Werpers <jonatan@werpers.com>
parents: 829
diff changeset
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
1ba8a398af9c Rename types
Jonatan Werpers <jonatan@werpers.com>
parents: 866
diff changeset
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
1ba8a398af9c Rename types
Jonatan Werpers <jonatan@werpers.com>
parents: 866
diff changeset
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
1ba8a398af9c Rename types
Jonatan Werpers <jonatan@werpers.com>
parents: 866
diff changeset
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
1ba8a398af9c Rename types
Jonatan Werpers <jonatan@werpers.com>
parents: 866
diff changeset
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
1ba8a398af9c Rename types
Jonatan Werpers <jonatan@werpers.com>
parents: 866
diff changeset
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
10a67ac48d6e Add some notes
Jonatan Werpers <jonatan@werpers.com>
parents: 410
diff changeset
270
10a67ac48d6e Add some notes
Jonatan Werpers <jonatan@werpers.com>
parents: 410
diff changeset
271 ### Test-applikationer
10a67ac48d6e Add some notes
Jonatan Werpers <jonatan@werpers.com>
parents: 410
diff changeset
272 div och grad operationer
10a67ac48d6e Add some notes
Jonatan Werpers <jonatan@werpers.com>
parents: 410
diff changeset
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
1ba8a398af9c Rename types
Jonatan Werpers <jonatan@werpers.com>
parents: 866
diff changeset
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
1ba8a398af9c Rename types
Jonatan Werpers <jonatan@werpers.com>
parents: 866
diff changeset
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
1ba8a398af9c Rename types
Jonatan Werpers <jonatan@werpers.com>
parents: 866
diff changeset
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
1ba8a398af9c Rename types
Jonatan Werpers <jonatan@werpers.com>
parents: 866
diff changeset
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
1ba8a398af9c Rename types
Jonatan Werpers <jonatan@werpers.com>
parents: 866
diff changeset
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
1ba8a398af9c Rename types
Jonatan Werpers <jonatan@werpers.com>
parents: 866
diff changeset
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`