Mercurial > repos > public > sbplib
annotate +grid/evalOnScalar.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 | 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 |