annotate +time/Timestepper.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 64a9a8a27858
children 8894e9c49e40
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
1 classdef Timestepper < handle
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
2 properties (Abstract)
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
3 t
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
4 k
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
5 n
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
6 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
7
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
8 methods (Abstract)
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
9 [v,t] = getV(obj)
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
10 obj = step(obj)
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
11 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
12
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
13
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
14 methods
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
15 function [v,t] = stepN(obj,n,progress_bar)
13
b18d3d201a71 Fixed initialization of step counter in timesteppers.
Jonatan Werpers <jonatan@werpers.com>
parents: 3
diff changeset
16 default_arg('progress_bar',false);
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
17
16
f7975c054bc3 Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents: 13
diff changeset
18 if ~progress_bar
f7975c054bc3 Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents: 13
diff changeset
19 obj.stepN_without_progress(n);
f7975c054bc3 Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents: 13
diff changeset
20 else
f7975c054bc3 Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents: 13
diff changeset
21 obj.stepN_with_progress(n);
f7975c054bc3 Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents: 13
diff changeset
22 end
f7975c054bc3 Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents: 13
diff changeset
23
f7975c054bc3 Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents: 13
diff changeset
24 v = obj.getV;
f7975c054bc3 Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents: 13
diff changeset
25 t = obj.t;
f7975c054bc3 Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents: 13
diff changeset
26 end
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
27
16
f7975c054bc3 Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents: 13
diff changeset
28 function stepN_without_progress(obj, n)
f7975c054bc3 Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents: 13
diff changeset
29 for i=1:n
f7975c054bc3 Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents: 13
diff changeset
30 obj.step();
f7975c054bc3 Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents: 13
diff changeset
31 end
f7975c054bc3 Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents: 13
diff changeset
32 end
f7975c054bc3 Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents: 13
diff changeset
33
f7975c054bc3 Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents: 13
diff changeset
34 function stepN_with_progress(obj, n)
f7975c054bc3 Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents: 13
diff changeset
35 FRAME_RATE = 20;
f7975c054bc3 Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents: 13
diff changeset
36
f7975c054bc3 Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents: 13
diff changeset
37 steps_to_update = 1;
f7975c054bc3 Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents: 13
diff changeset
38 steps_since_update = 0;
f7975c054bc3 Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents: 13
diff changeset
39 last_update = tic();
f7975c054bc3 Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents: 13
diff changeset
40 s = util.replace_string('',' %d %%',0);
f7975c054bc3 Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents: 13
diff changeset
41 for i=1:n
f7975c054bc3 Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents: 13
diff changeset
42 obj.step();
f7975c054bc3 Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents: 13
diff changeset
43
f7975c054bc3 Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents: 13
diff changeset
44 steps_since_update = steps_since_update + 1;
f7975c054bc3 Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents: 13
diff changeset
45
f7975c054bc3 Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents: 13
diff changeset
46 if steps_since_update >= steps_to_update
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
47 s = util.replace_string(s,' %.2f %%',i/n*100);
16
f7975c054bc3 Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents: 13
diff changeset
48
f7975c054bc3 Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents: 13
diff changeset
49 time_since_update = toc(last_update);
f7975c054bc3 Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents: 13
diff changeset
50 time_error = time_since_update - 1/FRAME_RATE;
f7975c054bc3 Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents: 13
diff changeset
51 time_per_step = time_since_update/steps_since_update;
f7975c054bc3 Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents: 13
diff changeset
52
f7975c054bc3 Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents: 13
diff changeset
53 steps_to_update = max(steps_to_update - 0.9*time_error/time_per_step ,1);
f7975c054bc3 Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents: 13
diff changeset
54
f7975c054bc3 Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents: 13
diff changeset
55 steps_since_update = 0;
f7975c054bc3 Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents: 13
diff changeset
56 last_update = tic();
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
57 end
16
f7975c054bc3 Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents: 13
diff changeset
58 end
f7975c054bc3 Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents: 13
diff changeset
59
f7975c054bc3 Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents: 13
diff changeset
60 s = util.replace_string(s,'');
f7975c054bc3 Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents: 13
diff changeset
61 end
f7975c054bc3 Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents: 13
diff changeset
62
385
b361a04894e3 Fix bug in implicit cdiff. Add stepTo method for timesteppers.
Jonatan Werpers <jonatan@werpers.com>
parents: 126
diff changeset
63
b361a04894e3 Fix bug in implicit cdiff. Add stepTo method for timesteppers.
Jonatan Werpers <jonatan@werpers.com>
parents: 126
diff changeset
64 function [v, t] = stepTo(obj, n, progress_bar)
614
64a9a8a27858 Add assertion in time.Timestepper for robustness
Jonatan Werpers <jonatan@werpers.com>
parents: 385
diff changeset
65 assertScalar(n);
385
b361a04894e3 Fix bug in implicit cdiff. Add stepTo method for timesteppers.
Jonatan Werpers <jonatan@werpers.com>
parents: 126
diff changeset
66 default_arg('progress_bar',false);
b361a04894e3 Fix bug in implicit cdiff. Add stepTo method for timesteppers.
Jonatan Werpers <jonatan@werpers.com>
parents: 126
diff changeset
67
b361a04894e3 Fix bug in implicit cdiff. Add stepTo method for timesteppers.
Jonatan Werpers <jonatan@werpers.com>
parents: 126
diff changeset
68 [v, t] = obj.stepN(n-obj.n, progress_bar);
b361a04894e3 Fix bug in implicit cdiff. Add stepTo method for timesteppers.
Jonatan Werpers <jonatan@werpers.com>
parents: 126
diff changeset
69 end
b361a04894e3 Fix bug in implicit cdiff. Add stepTo method for timesteppers.
Jonatan Werpers <jonatan@werpers.com>
parents: 126
diff changeset
70
16
f7975c054bc3 Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents: 13
diff changeset
71 function [v,t] = evolve(obj, tend, progress_bar)
f7975c054bc3 Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents: 13
diff changeset
72 default_arg('progress_bar',false)
f7975c054bc3 Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents: 13
diff changeset
73 if ~progress_bar
f7975c054bc3 Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents: 13
diff changeset
74 obj.evolve_without_progress(tend);
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
75 else
16
f7975c054bc3 Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents: 13
diff changeset
76 obj.evolve_with_progress(tend);
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
77 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
78 v = obj.getV;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
79 t = obj.t;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
80 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
81
16
f7975c054bc3 Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents: 13
diff changeset
82 function evolve_without_progress(obj, tend)
126
54055b32d516 Changed evolve so that it always stops as close to tend as possible.
Jonatan Werpers <jonatan@werpers.com>
parents: 16
diff changeset
83 while obj.t < tend - obj.k/2
16
f7975c054bc3 Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents: 13
diff changeset
84 obj.step();
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
85 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
86 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
87
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
88 function evolve_with_progress(obj, tend)
3
5205251db8c3 Added some smartness to evolve with progress.`
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
89 FRAME_RATE = 20;
5205251db8c3 Added some smartness to evolve with progress.`
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
90
5205251db8c3 Added some smartness to evolve with progress.`
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
91 steps_to_update = 1;
5205251db8c3 Added some smartness to evolve with progress.`
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
92 steps_since_update = 0;
5205251db8c3 Added some smartness to evolve with progress.`
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
93 last_update = tic();
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
94 s = util.replace_string('',' %d %%',0);
126
54055b32d516 Changed evolve so that it always stops as close to tend as possible.
Jonatan Werpers <jonatan@werpers.com>
parents: 16
diff changeset
95 while obj.t < tend - obj.k/2
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
96 obj.step();
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
97
3
5205251db8c3 Added some smartness to evolve with progress.`
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
98 steps_since_update = steps_since_update + 1;
5205251db8c3 Added some smartness to evolve with progress.`
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
99
5205251db8c3 Added some smartness to evolve with progress.`
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
100 if steps_since_update >= steps_to_update
5205251db8c3 Added some smartness to evolve with progress.`
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
101 s = util.replace_string(s,' %.2f %%',obj.t/tend*100);
5205251db8c3 Added some smartness to evolve with progress.`
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
102
5205251db8c3 Added some smartness to evolve with progress.`
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
103 time_since_update = toc(last_update);
5205251db8c3 Added some smartness to evolve with progress.`
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
104 time_error = time_since_update - 1/FRAME_RATE;
5205251db8c3 Added some smartness to evolve with progress.`
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
105 time_per_step = time_since_update/steps_since_update;
5205251db8c3 Added some smartness to evolve with progress.`
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
106
5205251db8c3 Added some smartness to evolve with progress.`
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
107 steps_to_update = max(steps_to_update - 0.9*time_error/time_per_step ,1);
5205251db8c3 Added some smartness to evolve with progress.`
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
108
5205251db8c3 Added some smartness to evolve with progress.`
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
109 steps_since_update = 0;
5205251db8c3 Added some smartness to evolve with progress.`
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
110 last_update = tic();
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
111 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
112 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
113
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
114 s = util.replace_string(s,'');
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
115 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
116
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
117
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
118 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
119 end