annotate +grid/evalOn.m @ 1299:73e52c74baac feature/boundary_optimized_grids

Closed branch feature/boundary_optimized_grids
author Vidar Stiernström <vidar.stiernstrom@it.uu.se>
date Wed, 08 Jul 2020 18:20:57 +0200
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