annotate +noname/testCfl.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 7f6f04bfc007
children
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
118
5046ff7d13b8 Fixed bug and made more robust.
Jonatan Werpers <jonatan@werpers.com>
parents: 116
diff changeset
9 % TODO:
5046ff7d13b8 Fixed bug and made more robust.
Jonatan Werpers <jonatan@werpers.com>
parents: 116
diff changeset
10 % Set threshold from the initial conditions of the pde?
5046ff7d13b8 Fixed bug and made more robust.
Jonatan Werpers <jonatan@werpers.com>
parents: 116
diff changeset
11 % Take a set number of steps instead of evolving to a certain time?
5046ff7d13b8 Fixed bug and made more robust.
Jonatan Werpers <jonatan@werpers.com>
parents: 116
diff changeset
12 % Stop evolving when it has blown up?
116
ee9c03dc7f42 noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents: 101
diff changeset
13
ee9c03dc7f42 noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents: 101
diff changeset
14 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
15
116
ee9c03dc7f42 noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents: 101
diff changeset
16 % 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
17 ok = testAlpha(alpha0(2));
ee9c03dc7f42 noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents: 101
diff changeset
18 if ok % Upper bound too large!
ee9c03dc7f42 noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents: 101
diff changeset
19 error('The upper bound on alpha is stable!')
ee9c03dc7f42 noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents: 101
diff changeset
20 end
ee9c03dc7f42 noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents: 101
diff changeset
21
ee9c03dc7f42 noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents: 101
diff changeset
22 % Make sure that the lower bound is ok
ee9c03dc7f42 noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents: 101
diff changeset
23 if alpha0(1) ~= 0
ee9c03dc7f42 noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents: 101
diff changeset
24 ok = testAlpha(alpha0(1));
ee9c03dc7f42 noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents: 101
diff changeset
25 if ~ok
ee9c03dc7f42 noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents: 101
diff changeset
26 error('The lower bound on alpha is unstable!');
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 end
ee9c03dc7f42 noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents: 101
diff changeset
29
230
2dd9cfad2cac improved printing in silent mode.
Jonatan Werpers <jonatan@werpers.com>
parents: 225
diff changeset
30 if silentFlag
2dd9cfad2cac improved printing in silent mode.
Jonatan Werpers <jonatan@werpers.com>
parents: 225
diff changeset
31 rsInterval = util.ReplaceableString('');
2dd9cfad2cac improved printing in silent mode.
Jonatan Werpers <jonatan@werpers.com>
parents: 225
diff changeset
32 end
2dd9cfad2cac improved printing in silent mode.
Jonatan Werpers <jonatan@werpers.com>
parents: 225
diff changeset
33
116
ee9c03dc7f42 noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents: 101
diff changeset
34 % 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
35 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
36 alpha = mean(alpha0);
118
5046ff7d13b8 Fixed bug and made more robust.
Jonatan Werpers <jonatan@werpers.com>
parents: 116
diff changeset
37
5046ff7d13b8 Fixed bug and made more robust.
Jonatan Werpers <jonatan@werpers.com>
parents: 116
diff changeset
38 if ~silentFlag
5046ff7d13b8 Fixed bug and made more robust.
Jonatan Werpers <jonatan@werpers.com>
parents: 116
diff changeset
39 fprintf('[%.3e,%.3e]: ', alpha0(1), alpha0(2));
230
2dd9cfad2cac improved printing in silent mode.
Jonatan Werpers <jonatan@werpers.com>
parents: 225
diff changeset
40 else
2dd9cfad2cac improved printing in silent mode.
Jonatan Werpers <jonatan@werpers.com>
parents: 225
diff changeset
41 rsInterval.update('[%.3e,%.3e]: ', alpha0(1), alpha0(2));
118
5046ff7d13b8 Fixed bug and made more robust.
Jonatan Werpers <jonatan@werpers.com>
parents: 116
diff changeset
42 end
5046ff7d13b8 Fixed bug and made more robust.
Jonatan Werpers <jonatan@werpers.com>
parents: 116
diff changeset
43
5046ff7d13b8 Fixed bug and made more robust.
Jonatan Werpers <jonatan@werpers.com>
parents: 116
diff changeset
44 [ok, n_step, maxVal] = testAlpha(alpha);
5046ff7d13b8 Fixed bug and made more robust.
Jonatan Werpers <jonatan@werpers.com>
parents: 116
diff changeset
45
116
ee9c03dc7f42 noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents: 101
diff changeset
46 if ok
ee9c03dc7f42 noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents: 101
diff changeset
47 alpha0(1) = alpha;
230
2dd9cfad2cac improved printing in silent mode.
Jonatan Werpers <jonatan@werpers.com>
parents: 225
diff changeset
48 stability = 'STABLE';
116
ee9c03dc7f42 noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents: 101
diff changeset
49 else
ee9c03dc7f42 noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents: 101
diff changeset
50 alpha0(2) = alpha;
225
de8bcef865b0 noname.testCfl: Added if the run was stable or not to the output.
Jonatan Werpers <jonatan@werpers.com>
parents: 118
diff changeset
51 stability = 'UNSTABLE';
de8bcef865b0 noname.testCfl: Added if the run was stable or not to the output.
Jonatan Werpers <jonatan@werpers.com>
parents: 118
diff changeset
52 end
de8bcef865b0 noname.testCfl: Added if the run was stable or not to the output.
Jonatan Werpers <jonatan@werpers.com>
parents: 118
diff changeset
53
118
5046ff7d13b8 Fixed bug and made more robust.
Jonatan Werpers <jonatan@werpers.com>
parents: 116
diff changeset
54 if ~silentFlag
225
de8bcef865b0 noname.testCfl: Added if the run was stable or not to the output.
Jonatan Werpers <jonatan@werpers.com>
parents: 118
diff changeset
55 fprintf('a = %.3e, n_step=%d %8s max = %.2e\n', alpha, n_step, stability, maxVal);
118
5046ff7d13b8 Fixed bug and made more robust.
Jonatan Werpers <jonatan@werpers.com>
parents: 116
diff changeset
56 end
5046ff7d13b8 Fixed bug and made more robust.
Jonatan Werpers <jonatan@werpers.com>
parents: 116
diff changeset
57 end
5046ff7d13b8 Fixed bug and made more robust.
Jonatan Werpers <jonatan@werpers.com>
parents: 116
diff changeset
58
5046ff7d13b8 Fixed bug and made more robust.
Jonatan Werpers <jonatan@werpers.com>
parents: 116
diff changeset
59 if silentFlag
230
2dd9cfad2cac improved printing in silent mode.
Jonatan Werpers <jonatan@werpers.com>
parents: 225
diff changeset
60 rsInterval = util.ReplaceableString('');
116
ee9c03dc7f42 noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents: 101
diff changeset
61 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
62
116
ee9c03dc7f42 noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents: 101
diff changeset
63 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
64
ee9c03dc7f42 noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents: 101
diff changeset
65 end
ee9c03dc7f42 noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents: 101
diff changeset
66
ee9c03dc7f42 noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents: 101
diff changeset
67 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
68
ee9c03dc7f42 noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents: 101
diff changeset
69 % Returns true if cfl was ok
118
5046ff7d13b8 Fixed bug and made more robust.
Jonatan Werpers <jonatan@werpers.com>
parents: 116
diff changeset
70 function [ok, n_step, maxVal] = testAlpha(alpha)
101
9933169d2651 Adapted testCfl to new opt style parameters in discrs.
Jonatan Werpers <jonatan@werpers.com>
parents: 39
diff changeset
71 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
72
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
73 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
74 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
75 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
76
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
77 [v,t] = ts.getV();
116
ee9c03dc7f42 noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents: 101
diff changeset
78 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
79
118
5046ff7d13b8 Fixed bug and made more robust.
Jonatan Werpers <jonatan@werpers.com>
parents: 116
diff changeset
80 if isnan(maxVal) || maxVal == Inf || abs(maxVal) > threshold
116
ee9c03dc7f42 noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents: 101
diff changeset
81 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
82 else
116
ee9c03dc7f42 noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents: 101
diff changeset
83 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
84 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
85
118
5046ff7d13b8 Fixed bug and made more robust.
Jonatan Werpers <jonatan@werpers.com>
parents: 116
diff changeset
86 n_step = ts.n;
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
87 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
88
116
ee9c03dc7f42 noname.testCfl: Improved relyability and clarity.
Jonatan Werpers <jonatan@werpers.com>
parents: 101
diff changeset
89 f = @testAlpha;
118
5046ff7d13b8 Fixed bug and made more robust.
Jonatan Werpers <jonatan@werpers.com>
parents: 116
diff changeset
90 end