annotate +noname/testCfl.m @ 1287:38653d26225c feature/boundary_optimized_grids

Make accurate/minimalBoundaryOptimizedGrid take the domain limits as input
author Vidar Stiernström <vidar.stiernstrom@it.uu.se>
date Wed, 01 Jul 2020 14:54:21 +0200
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