Mercurial > repos > public > sbplib
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 |
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 |