Mercurial > repos > public > sbplib
annotate +noname/testCfl.m @ 1346:464e6f65c2c6 feature/poroelastic
Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
author | Martin Almquist <martin.almquist@it.uu.se> |
---|---|
date | Tue, 30 Apr 2024 14:18:47 +0200 |
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 |