Mercurial > repos > public > sbplib
annotate +noname/testCfl.m @ 116:ee9c03dc7f42
noname.testCfl: Improved relyability and clarity.
| author | Jonatan Werpers <jonatan@werpers.com> |
|---|---|
| date | Mon, 14 Dec 2015 19:09:03 +0100 |
| parents | 9933169d2651 |
| children | 5046ff7d13b8 |
| rev | line source |
|---|---|
|
116
ee9c03dc7f42
noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents:
101
diff
changeset
|
1 % noname.testCfl(discr, timestepper_method, T, alpha0, tol,threshold, silentFlag) |
|
ee9c03dc7f42
noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents:
101
diff
changeset
|
2 % Example: |
|
ee9c03dc7f42
noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents:
101
diff
changeset
|
3 % noname.testCfl(Discr(100,4), 'rk4', 1, [0, 1]) |
|
39
7249f105e67b
Added silent option to noname.testCfl.
Jonatan Werpers <jonatan@werpers.com>
parents:
2
diff
changeset
|
4 function testCfl(discr, timestepper_method, T, alpha0, tol,threshold, silentFlag) |
|
2
bce9e28c1e26
Added a cfl paramater to getTimestepper in Discretization. Added function to get cfl value for a Discr.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
5 default_arg('tol',0.00005); |
|
bce9e28c1e26
Added a cfl paramater to getTimestepper in Discretization. Added function to get cfl value for a Discr.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
6 default_arg('threshold',1e2); |
|
39
7249f105e67b
Added silent option to noname.testCfl.
Jonatan Werpers <jonatan@werpers.com>
parents:
2
diff
changeset
|
7 default_arg('silentFlag', false); |
|
2
bce9e28c1e26
Added a cfl paramater to getTimestepper in Discretization. Added function to get cfl value for a Discr.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
8 |
|
116
ee9c03dc7f42
noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents:
101
diff
changeset
|
9 if T < alpha0(2) |
|
ee9c03dc7f42
noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents:
101
diff
changeset
|
10 error('Upper bound on alpha must be smaller than T'); |
|
ee9c03dc7f42
noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents:
101
diff
changeset
|
11 end |
|
ee9c03dc7f42
noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents:
101
diff
changeset
|
12 |
|
ee9c03dc7f42
noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents:
101
diff
changeset
|
13 testAlpha = getAlphaTester(discr, T, threshold, silentFlag, timestepper_method); |
|
2
bce9e28c1e26
Added a cfl paramater to getTimestepper in Discretization. Added function to get cfl value for a Discr.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
14 |
|
116
ee9c03dc7f42
noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents:
101
diff
changeset
|
15 % Make sure that the upper bound is not working |
|
ee9c03dc7f42
noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents:
101
diff
changeset
|
16 ok = testAlpha(alpha0(2)); |
|
ee9c03dc7f42
noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents:
101
diff
changeset
|
17 if ok % Upper bound too large! |
|
ee9c03dc7f42
noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents:
101
diff
changeset
|
18 error('The upper bound on alpha is stable!') |
|
ee9c03dc7f42
noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents:
101
diff
changeset
|
19 end |
|
ee9c03dc7f42
noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents:
101
diff
changeset
|
20 |
|
ee9c03dc7f42
noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents:
101
diff
changeset
|
21 % Make sure that the lower bound is ok |
|
ee9c03dc7f42
noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents:
101
diff
changeset
|
22 if alpha0(1) ~= 0 |
|
ee9c03dc7f42
noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents:
101
diff
changeset
|
23 ok = testAlpha(alpha0(1)); |
|
ee9c03dc7f42
noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents:
101
diff
changeset
|
24 if ~ok |
|
ee9c03dc7f42
noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents:
101
diff
changeset
|
25 error('The lower bound on alpha is unstable!'); |
|
ee9c03dc7f42
noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents:
101
diff
changeset
|
26 end |
|
ee9c03dc7f42
noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents:
101
diff
changeset
|
27 end |
|
ee9c03dc7f42
noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents:
101
diff
changeset
|
28 |
|
ee9c03dc7f42
noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents:
101
diff
changeset
|
29 % Use bisection to find sharp estimate |
|
2
bce9e28c1e26
Added a cfl paramater to getTimestepper in Discretization. Added function to get cfl value for a Discr.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
30 while( (alpha0(2)-alpha0(1))/alpha0(1) > tol) |
|
bce9e28c1e26
Added a cfl paramater to getTimestepper in Discretization. Added function to get cfl value for a Discr.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
31 alpha = mean(alpha0); |
|
116
ee9c03dc7f42
noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents:
101
diff
changeset
|
32 fprintf('[%.3e,%.3e]: ', alpha0(1), alpha0(2)); |
|
ee9c03dc7f42
noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents:
101
diff
changeset
|
33 ok = testAlpha(alpha); |
|
ee9c03dc7f42
noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents:
101
diff
changeset
|
34 if ok |
|
ee9c03dc7f42
noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents:
101
diff
changeset
|
35 alpha0(1) = alpha; |
|
ee9c03dc7f42
noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents:
101
diff
changeset
|
36 else |
|
ee9c03dc7f42
noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents:
101
diff
changeset
|
37 alpha0(2) = alpha; |
|
ee9c03dc7f42
noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents:
101
diff
changeset
|
38 end |
|
ee9c03dc7f42
noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents:
101
diff
changeset
|
39 end |
|
2
bce9e28c1e26
Added a cfl paramater to getTimestepper in Discretization. Added function to get cfl value for a Discr.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
40 |
|
116
ee9c03dc7f42
noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents:
101
diff
changeset
|
41 fprintf('T = %-3d dof = %-4d order = %d: clf = %.4e\n',T, discr.size(), discr.order, alpha0(1)); |
|
ee9c03dc7f42
noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents:
101
diff
changeset
|
42 |
|
ee9c03dc7f42
noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents:
101
diff
changeset
|
43 end |
|
ee9c03dc7f42
noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents:
101
diff
changeset
|
44 |
|
ee9c03dc7f42
noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents:
101
diff
changeset
|
45 function f = getAlphaTester(discr, T, threshold, silentFlag, timestepper_method) |
|
ee9c03dc7f42
noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents:
101
diff
changeset
|
46 |
|
ee9c03dc7f42
noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents:
101
diff
changeset
|
47 % Returns true if cfl was ok |
|
ee9c03dc7f42
noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents:
101
diff
changeset
|
48 function ok = testAlpha(alpha) |
|
101
9933169d2651
Adapted testCfl to new opt style parameters in discrs.
Jonatan Werpers <jonatan@werpers.com>
parents:
39
diff
changeset
|
49 ts = discr.getTimestepper(struct('method', timestepper_method, 'cfl', alpha)); |
|
2
bce9e28c1e26
Added a cfl paramater to getTimestepper in Discretization. Added function to get cfl value for a Discr.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
50 |
|
bce9e28c1e26
Added a cfl paramater to getTimestepper in Discretization. Added function to get cfl value for a Discr.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
51 warning('off','all') |
|
bce9e28c1e26
Added a cfl paramater to getTimestepper in Discretization. Added function to get cfl value for a Discr.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
52 ts.evolve(T,true); |
|
bce9e28c1e26
Added a cfl paramater to getTimestepper in Discretization. Added function to get cfl value for a Discr.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
53 warning('on','all') |
|
bce9e28c1e26
Added a cfl paramater to getTimestepper in Discretization. Added function to get cfl value for a Discr.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
54 |
|
bce9e28c1e26
Added a cfl paramater to getTimestepper in Discretization. Added function to get cfl value for a Discr.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
55 [v,t] = ts.getV(); |
|
116
ee9c03dc7f42
noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents:
101
diff
changeset
|
56 maxVal = max(v); |
|
2
bce9e28c1e26
Added a cfl paramater to getTimestepper in Discretization. Added function to get cfl value for a Discr.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
57 |
|
116
ee9c03dc7f42
noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents:
101
diff
changeset
|
58 if isnan(maxVal) || maxVal == Inf || maxVal > threshold |
|
ee9c03dc7f42
noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents:
101
diff
changeset
|
59 ok = false; |
|
2
bce9e28c1e26
Added a cfl paramater to getTimestepper in Discretization. Added function to get cfl value for a Discr.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
60 else |
|
116
ee9c03dc7f42
noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents:
101
diff
changeset
|
61 ok = true; |
|
2
bce9e28c1e26
Added a cfl paramater to getTimestepper in Discretization. Added function to get cfl value for a Discr.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
62 end |
|
bce9e28c1e26
Added a cfl paramater to getTimestepper in Discretization. Added function to get cfl value for a Discr.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
63 |
|
39
7249f105e67b
Added silent option to noname.testCfl.
Jonatan Werpers <jonatan@werpers.com>
parents:
2
diff
changeset
|
64 if ~silentFlag |
|
116
ee9c03dc7f42
noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents:
101
diff
changeset
|
65 fprintf('a = %.3e, max= %.2e\n', alpha, maxVal); |
|
39
7249f105e67b
Added silent option to noname.testCfl.
Jonatan Werpers <jonatan@werpers.com>
parents:
2
diff
changeset
|
66 end |
|
2
bce9e28c1e26
Added a cfl paramater to getTimestepper in Discretization. Added function to get cfl value for a Discr.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
67 end |
|
bce9e28c1e26
Added a cfl paramater to getTimestepper in Discretization. Added function to get cfl value for a Discr.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
68 |
|
116
ee9c03dc7f42
noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents:
101
diff
changeset
|
69 f = @testAlpha; |
|
2
bce9e28c1e26
Added a cfl paramater to getTimestepper in Discretization. Added function to get cfl value for a Discr.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
70 end |
