annotate +grid/evalOn.m @ 1031:2ef20d00b386 feature/advectionRV

For easier comparison, return both the first order and residual viscosity when evaluating the residual. Add the first order and residual viscosity to the state of the RungekuttaRV time steppers
author Vidar Stiernström <vidar.stiernstrom@it.uu.se>
date Thu, 17 Jan 2019 10:25:06 +0100
parents 77451445955f
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
276
30321dc180e1 Fixed documentation for Curvilinear and evalOn.
Jonatan Werpers <jonatan@werpers.com>
parents: 275
diff changeset
1 % Takes a function and evaluates it on a grid to return a grid function in the
157
ea8103ad2cc5 Added function eval on.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
2 % form of a (n*k)x1 vector, where n is the number of grid points and k is the
ea8103ad2cc5 Added function eval on.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
3 % number of components of the function.
ea8103ad2cc5 Added function eval on.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
4 % g -- Grid to evaluate on.
ea8103ad2cc5 Added function eval on.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
5 % func -- Function to evaluate. May be a function handle or a constant. If
ea8103ad2cc5 Added function eval on.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
6 % it is a vector value it has to be provided as a column vector,
ea8103ad2cc5 Added function eval on.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
7 function gf = evalOn(g, func)
ea8103ad2cc5 Added function eval on.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
8 if ~isa(func, 'function_handle')
ea8103ad2cc5 Added function eval on.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
9 % We should have a constant.
625
55e6267be117 Switch to using asserts for error checking
Jonatan Werpers <jonatan@werpers.com>
parents: 624
diff changeset
10 assert(size(func,2) == 1,'grid:evalOn:VectorValuedWrongDim', 'A vector valued function must be given as a column vector');
157
ea8103ad2cc5 Added function eval on.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
11
ea8103ad2cc5 Added function eval on.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
12 gf = repmat(func,[g.N, 1]);
ea8103ad2cc5 Added function eval on.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
13 return
ea8103ad2cc5 Added function eval on.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
14 end
ea8103ad2cc5 Added function eval on.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
15 % func should now be a function_handle
809
94f0f0b0d721 Allow functions with variable number of arguments in grid.evalOn
Jonatan Werpers <jonatan@werpers.com>
parents: 628
diff changeset
16 assert(g.D == nargin(func) || nargin(func) < 0,'grid:evalOn:WrongNumberOfInputs', 'The number of inputs of the function must match the dimension of the domain.')
277
4c3f55a628c8 Made evalOn give more error message.
Jonatan Werpers <jonatan@werpers.com>
parents: 276
diff changeset
17
626
da30d3bbeea6 Avoid eval
Jonatan Werpers <jonatan@werpers.com>
parents: 625
diff changeset
18 x = num2cell(g.points(),1);
810
77451445955f Bugfix in grid/evalOn
Martin Almquist <malmquist@stanford.edu>
parents: 809
diff changeset
19 k = numberOfComponents(func, g.D);
277
4c3f55a628c8 Made evalOn give more error message.
Jonatan Werpers <jonatan@werpers.com>
parents: 276
diff changeset
20
626
da30d3bbeea6 Avoid eval
Jonatan Werpers <jonatan@werpers.com>
parents: 625
diff changeset
21 gf = func(x{:});
628
0609a72dcdfe Factor out function for reordering components
Jonatan Werpers <jonatan@werpers.com>
parents: 627
diff changeset
22 gf = reorderComponents(gf, k);
624
0e20f4c9a94e Factor out function for calculating the number of components
Jonatan Werpers <jonatan@werpers.com>
parents: 623
diff changeset
23 end
0e20f4c9a94e Factor out function for calculating the number of components
Jonatan Werpers <jonatan@werpers.com>
parents: 623
diff changeset
24
0e20f4c9a94e Factor out function for calculating the number of components
Jonatan Werpers <jonatan@werpers.com>
parents: 623
diff changeset
25 % Find the number of vector components of func
810
77451445955f Bugfix in grid/evalOn
Martin Almquist <malmquist@stanford.edu>
parents: 809
diff changeset
26 function k = numberOfComponents(func, dim)
77451445955f Bugfix in grid/evalOn
Martin Almquist <malmquist@stanford.edu>
parents: 809
diff changeset
27 x0 = num2cell(ones(1, dim));
626
da30d3bbeea6 Avoid eval
Jonatan Werpers <jonatan@werpers.com>
parents: 625
diff changeset
28 f0 = func(x0{:});
627
c602fe0a778c Clean up numberOfCompnents
Jonatan Werpers <jonatan@werpers.com>
parents: 626
diff changeset
29 assert(size(f0,2) == 1, 'grid:evalOn:VectorValuedWrongDim', 'A vector valued function must be given as a column vector');
157
ea8103ad2cc5 Added function eval on.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
30 k = length(f0);
627
c602fe0a778c Clean up numberOfCompnents
Jonatan Werpers <jonatan@werpers.com>
parents: 626
diff changeset
31 end
628
0609a72dcdfe Factor out function for reordering components
Jonatan Werpers <jonatan@werpers.com>
parents: 627
diff changeset
32
0609a72dcdfe Factor out function for reordering components
Jonatan Werpers <jonatan@werpers.com>
parents: 627
diff changeset
33 % Reorder the components of the function to sit together
0609a72dcdfe Factor out function for reordering components
Jonatan Werpers <jonatan@werpers.com>
parents: 627
diff changeset
34 function gf = reorderComponents(a, k)
0609a72dcdfe Factor out function for reordering components
Jonatan Werpers <jonatan@werpers.com>
parents: 627
diff changeset
35 N = length(a)/k;
0609a72dcdfe Factor out function for reordering components
Jonatan Werpers <jonatan@werpers.com>
parents: 627
diff changeset
36 gf = zeros(N*k, 1);
0609a72dcdfe Factor out function for reordering components
Jonatan Werpers <jonatan@werpers.com>
parents: 627
diff changeset
37 for i = 1:k
0609a72dcdfe Factor out function for reordering components
Jonatan Werpers <jonatan@werpers.com>
parents: 627
diff changeset
38 gf(i:k:end) = a((i-1)*N + 1 : i*N);
0609a72dcdfe Factor out function for reordering components
Jonatan Werpers <jonatan@werpers.com>
parents: 627
diff changeset
39 end
0609a72dcdfe Factor out function for reordering components
Jonatan Werpers <jonatan@werpers.com>
parents: 627
diff changeset
40 end