Mercurial > repos > public > sbplib
annotate +noname/testCfl.m @ 1198:2924b3a9b921 feature/d2_compatible
Add OpSet for fully compatible D2Variable, created from regular D2Variable by replacing d1 by first row of D1. Formal reduction by one order of accuracy at the boundary point.
author | Martin Almquist <malmquist@stanford.edu> |
---|---|
date | Fri, 16 Aug 2019 14:30:28 -0700 |
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 |