Mercurial > repos > public > sbplib
annotate +grid/evalOnScalar.m @ 1037:2d7ba44340d0 feature/burgers1d
Pass scheme specific parameters as cell array. This will enabale constructDiffOps to be more general. In addition, allow for schemes returning function handles as diffOps, which is currently how non-linear schemes such as Burgers1d are implemented.
author | Vidar Stiernström <vidar.stiernstrom@it.uu.se> |
---|---|
date | Fri, 18 Jan 2019 09:02:02 +0100 |
parents | 3ea2ae2a3d15 |
children |
rev | line source |
---|---|
275
3ea2ae2a3d15
Improvments to eval on grids. Added function to extrac components of a vector gf.
Jonatan Werpers <jonatan@werpers.com>
parents:
273
diff
changeset
|
1 % WHAT KIND OF A FUNCTION NAME IS THIS?! |
3ea2ae2a3d15
Improvments to eval on grids. Added function to extrac components of a vector gf.
Jonatan Werpers <jonatan@werpers.com>
parents:
273
diff
changeset
|
2 % This functions send matrixa arguments to func unlike grid.evalOn() |
273
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
3 % Takes a funciton and evaluates it on a grid to return a grid function in the |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
4 % form of a (n*k)x1 vector, where n is the number of grid points and k is the |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
5 % number of components of the function. |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
6 % g -- Grid to evaluate on. |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
7 % func -- Function to evaluate. May be a function handle or a constant. If |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
8 % it is a vector value it has to be provided as a column vector, |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
9 function gf = evalOn(g, func) |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
10 if ~isa(func, 'function_handle') |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
11 % We should have a constant. |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
12 if size(func,2) ~= 1 |
275
3ea2ae2a3d15
Improvments to eval on grids. Added function to extrac components of a vector gf.
Jonatan Werpers <jonatan@werpers.com>
parents:
273
diff
changeset
|
13 error('grid:evalOnScalar:VectorValuedWrongDim', 'A vector valued function must be given as a column vector') |
273
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
14 end |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
15 |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
16 gf = repmat(func,[g.N, 1]); |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
17 return |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
18 end |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
19 % func should now be a function_handle |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
20 |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
21 % Get coordinates and convert to cell array for easier use as a parameter |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
22 x = g.points(); |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
23 X = {}; |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
24 for i = 1:size(x, 2) |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
25 X{i} = x(:,i); |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
26 end |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
27 |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
28 % Find the number of components |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
29 x0 = num2cell(x(1,:)); |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
30 f0 = func(x0{:}); |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
31 k = length(f0); |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
32 |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
33 if size(f0,2) ~= 1 |
275
3ea2ae2a3d15
Improvments to eval on grids. Added function to extrac components of a vector gf.
Jonatan Werpers <jonatan@werpers.com>
parents:
273
diff
changeset
|
34 error('grid:evalOnScalar:VectorValuedWrongDim', 'A vector valued function must be given as a column vector') |
273
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
35 end |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
36 |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
37 gf = func(X{:}); |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
38 if k > 1 % Reorder so that componets sits together. |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
39 gf = reshape(reshape(gf, [g.N, k])', [g.N*k, 1]); |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
40 end |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
41 end |