annotate +noname/testCfl.m @ 117:8514c3d67201

Corrected file permissions.
author Jonatan Werpers <jonatan@werpers.com>
date Mon, 14 Dec 2015 19:15:01 +0100
parents ee9c03dc7f42
children 5046ff7d13b8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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