annotate +grid/evalOn.m @ 774:66eb4a2bbb72 feature/grids

Remove default scaling of the system. The scaling doens't seem to help actual solutions. One example that fails in the flexural code. With large timesteps the solutions seems to blow up. One particular example is profilePresentation on the tdb_presentation_figures branch with k = 0.0005
author Jonatan Werpers <jonatan@werpers.com>
date Wed, 18 Jul 2018 15:42:52 -0700
parents 0609a72dcdfe
children 94f0f0b0d721
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
625
55e6267be117 Switch to using asserts for error checking
Jonatan Werpers <jonatan@werpers.com>
parents: 624
diff changeset
16 assert(g.D == nargin(func),'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);
627
c602fe0a778c Clean up numberOfCompnents
Jonatan Werpers <jonatan@werpers.com>
parents: 626
diff changeset
19 k = numberOfComponents(func);
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
627
c602fe0a778c Clean up numberOfCompnents
Jonatan Werpers <jonatan@werpers.com>
parents: 626
diff changeset
26 function k = numberOfComponents(func)
c602fe0a778c Clean up numberOfCompnents
Jonatan Werpers <jonatan@werpers.com>
parents: 626
diff changeset
27 x0 = num2cell(ones(1,nargin(func)));
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