Mercurial > repos > public > sbplib
annotate +time/Timestepper.m @ 1113:47e86b5270ad feature/timesteppers
Change name of property k to dt in time.Timestepper
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Wed, 10 Apr 2019 22:40:55 +0200 |
parents | a99f00896b8e |
children |
rev | line source |
---|---|
0 | 1 classdef Timestepper < handle |
2 properties (Abstract) | |
3 t | |
1113
47e86b5270ad
Change name of property k to dt in time.Timestepper
Jonatan Werpers <jonatan@werpers.com>
parents:
991
diff
changeset
|
4 dt % TBD: should this be a method instead? |
0 | 5 n |
6 end | |
7 | |
8 methods (Abstract) | |
816
b5e5b195da1e
Add getState to timesteppers, returning the relevant state of the timestepper
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
126
diff
changeset
|
9 % Returns the solution vector v at timestep t. |
b5e5b195da1e
Add getState to timesteppers, returning the relevant state of the timestepper
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
126
diff
changeset
|
10 [v,t] = getV(obj) |
b5e5b195da1e
Add getState to timesteppers, returning the relevant state of the timestepper
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
126
diff
changeset
|
11 obj = step(obj) |
0 | 12 end |
13 | |
14 | |
15 methods | |
16 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
|
17 default_arg('progress_bar',false); |
0 | 18 |
16
f7975c054bc3
Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents:
13
diff
changeset
|
19 if ~progress_bar |
f7975c054bc3
Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents:
13
diff
changeset
|
20 obj.stepN_without_progress(n); |
f7975c054bc3
Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents:
13
diff
changeset
|
21 else |
f7975c054bc3
Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents:
13
diff
changeset
|
22 obj.stepN_with_progress(n); |
f7975c054bc3
Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents:
13
diff
changeset
|
23 end |
f7975c054bc3
Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents:
13
diff
changeset
|
24 |
f7975c054bc3
Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents:
13
diff
changeset
|
25 v = obj.getV; |
f7975c054bc3
Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents:
13
diff
changeset
|
26 t = obj.t; |
f7975c054bc3
Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents:
13
diff
changeset
|
27 end |
0 | 28 |
16
f7975c054bc3
Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents:
13
diff
changeset
|
29 function stepN_without_progress(obj, n) |
f7975c054bc3
Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents:
13
diff
changeset
|
30 for i=1:n |
f7975c054bc3
Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents:
13
diff
changeset
|
31 obj.step(); |
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 end |
f7975c054bc3
Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents:
13
diff
changeset
|
34 |
f7975c054bc3
Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents:
13
diff
changeset
|
35 function stepN_with_progress(obj, n) |
f7975c054bc3
Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents:
13
diff
changeset
|
36 FRAME_RATE = 20; |
f7975c054bc3
Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents:
13
diff
changeset
|
37 |
f7975c054bc3
Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents:
13
diff
changeset
|
38 steps_to_update = 1; |
f7975c054bc3
Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents:
13
diff
changeset
|
39 steps_since_update = 0; |
f7975c054bc3
Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents:
13
diff
changeset
|
40 last_update = tic(); |
f7975c054bc3
Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents:
13
diff
changeset
|
41 s = util.replace_string('',' %d %%',0); |
f7975c054bc3
Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents:
13
diff
changeset
|
42 for i=1:n |
f7975c054bc3
Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents:
13
diff
changeset
|
43 obj.step(); |
f7975c054bc3
Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents:
13
diff
changeset
|
44 |
f7975c054bc3
Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents:
13
diff
changeset
|
45 steps_since_update = steps_since_update + 1; |
f7975c054bc3
Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents:
13
diff
changeset
|
46 |
f7975c054bc3
Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents:
13
diff
changeset
|
47 if steps_since_update >= steps_to_update |
0 | 48 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
|
49 |
f7975c054bc3
Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents:
13
diff
changeset
|
50 time_since_update = toc(last_update); |
f7975c054bc3
Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents:
13
diff
changeset
|
51 time_error = time_since_update - 1/FRAME_RATE; |
f7975c054bc3
Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents:
13
diff
changeset
|
52 time_per_step = time_since_update/steps_since_update; |
f7975c054bc3
Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents:
13
diff
changeset
|
53 |
f7975c054bc3
Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents:
13
diff
changeset
|
54 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
|
55 |
f7975c054bc3
Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents:
13
diff
changeset
|
56 steps_since_update = 0; |
f7975c054bc3
Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents:
13
diff
changeset
|
57 last_update = tic(); |
0 | 58 end |
16
f7975c054bc3
Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents:
13
diff
changeset
|
59 end |
f7975c054bc3
Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents:
13
diff
changeset
|
60 |
f7975c054bc3
Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents:
13
diff
changeset
|
61 s = util.replace_string(s,''); |
f7975c054bc3
Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents:
13
diff
changeset
|
62 end |
f7975c054bc3
Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents:
13
diff
changeset
|
63 |
385
b361a04894e3
Fix bug in implicit cdiff. Add stepTo method for timesteppers.
Jonatan Werpers <jonatan@werpers.com>
parents:
126
diff
changeset
|
64 |
b361a04894e3
Fix bug in implicit cdiff. Add stepTo method for timesteppers.
Jonatan Werpers <jonatan@werpers.com>
parents:
126
diff
changeset
|
65 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
|
66 assertScalar(n); |
385
b361a04894e3
Fix bug in implicit cdiff. Add stepTo method for timesteppers.
Jonatan Werpers <jonatan@werpers.com>
parents:
126
diff
changeset
|
67 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
|
68 |
b361a04894e3
Fix bug in implicit cdiff. Add stepTo method for timesteppers.
Jonatan Werpers <jonatan@werpers.com>
parents:
126
diff
changeset
|
69 [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
|
70 end |
b361a04894e3
Fix bug in implicit cdiff. Add stepTo method for timesteppers.
Jonatan Werpers <jonatan@werpers.com>
parents:
126
diff
changeset
|
71 |
16
f7975c054bc3
Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents:
13
diff
changeset
|
72 function [v,t] = evolve(obj, tend, progress_bar) |
f7975c054bc3
Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents:
13
diff
changeset
|
73 default_arg('progress_bar',false) |
f7975c054bc3
Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents:
13
diff
changeset
|
74 if ~progress_bar |
f7975c054bc3
Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents:
13
diff
changeset
|
75 obj.evolve_without_progress(tend); |
0 | 76 else |
16
f7975c054bc3
Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents:
13
diff
changeset
|
77 obj.evolve_with_progress(tend); |
0 | 78 end |
79 v = obj.getV; | |
80 t = obj.t; | |
81 end | |
82 | |
16
f7975c054bc3
Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents:
13
diff
changeset
|
83 function evolve_without_progress(obj, tend) |
1113
47e86b5270ad
Change name of property k to dt in time.Timestepper
Jonatan Werpers <jonatan@werpers.com>
parents:
991
diff
changeset
|
84 while obj.t < tend - obj.dt/2 |
16
f7975c054bc3
Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents:
13
diff
changeset
|
85 obj.step(); |
0 | 86 end |
87 end | |
88 | |
89 function evolve_with_progress(obj, tend) | |
3
5205251db8c3
Added some smartness to evolve with progress.`
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
90 FRAME_RATE = 20; |
5205251db8c3
Added some smartness to evolve with progress.`
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
91 |
5205251db8c3
Added some smartness to evolve with progress.`
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
92 steps_to_update = 1; |
5205251db8c3
Added some smartness to evolve with progress.`
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
93 steps_since_update = 0; |
5205251db8c3
Added some smartness to evolve with progress.`
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
94 last_update = tic(); |
0 | 95 s = util.replace_string('',' %d %%',0); |
1113
47e86b5270ad
Change name of property k to dt in time.Timestepper
Jonatan Werpers <jonatan@werpers.com>
parents:
991
diff
changeset
|
96 while obj.t < tend - obj.dt/2 |
0 | 97 obj.step(); |
98 | |
3
5205251db8c3
Added some smartness to evolve with progress.`
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
99 steps_since_update = steps_since_update + 1; |
5205251db8c3
Added some smartness to evolve with progress.`
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
100 |
5205251db8c3
Added some smartness to evolve with progress.`
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
101 if steps_since_update >= steps_to_update |
5205251db8c3
Added some smartness to evolve with progress.`
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
102 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
|
103 |
5205251db8c3
Added some smartness to evolve with progress.`
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
104 time_since_update = toc(last_update); |
5205251db8c3
Added some smartness to evolve with progress.`
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
105 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
|
106 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
|
107 |
5205251db8c3
Added some smartness to evolve with progress.`
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
108 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
|
109 |
5205251db8c3
Added some smartness to evolve with progress.`
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
110 steps_since_update = 0; |
5205251db8c3
Added some smartness to evolve with progress.`
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
111 last_update = tic(); |
0 | 112 end |
113 end | |
114 | |
115 s = util.replace_string(s,''); | |
116 end | |
117 | |
118 | |
119 end | |
120 end |