annotate +time/Timestepper.m @ 87:0a29a60e0b21

In Curve: Rearranged for speed. arc_length_fun is now a property of Curve. If it is not supplied, it is computed via the derivative and spline fitting. Switching to the arc length parameterization is much faster now. The new stuff can be tested with testArcLength.m (which should be deleted after that).
author Martin Almquist <martin.almquist@it.uu.se>
date Sun, 29 Nov 2015 22:23:09 +0100
parents f7975c054bc3
children 54055b32d516
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
f7975c054bc3 Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents: 13
diff changeset
63 function [v,t] = evolve(obj, tend, progress_bar)
f7975c054bc3 Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents: 13
diff changeset
64 default_arg('progress_bar',false)
f7975c054bc3 Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents: 13
diff changeset
65 if ~progress_bar
f7975c054bc3 Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents: 13
diff changeset
66 obj.evolve_without_progress(tend);
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
67 else
16
f7975c054bc3 Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents: 13
diff changeset
68 obj.evolve_with_progress(tend);
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
69 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
70 v = obj.getV;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
71 t = obj.t;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
72 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
73
16
f7975c054bc3 Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents: 13
diff changeset
74 function evolve_without_progress(obj, tend)
f7975c054bc3 Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents: 13
diff changeset
75 while obj.t < tend - obj.k/100
f7975c054bc3 Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents: 13
diff changeset
76 obj.step();
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 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
79
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
80 function evolve_with_progress(obj, tend)
3
5205251db8c3 Added some smartness to evolve with progress.`
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
81 FRAME_RATE = 20;
5205251db8c3 Added some smartness to evolve with progress.`
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
82
5205251db8c3 Added some smartness to evolve with progress.`
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
83 steps_to_update = 1;
5205251db8c3 Added some smartness to evolve with progress.`
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
84 steps_since_update = 0;
5205251db8c3 Added some smartness to evolve with progress.`
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
85 last_update = tic();
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
86 s = util.replace_string('',' %d %%',0);
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
87 while obj.t < tend - obj.k/100
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
88 obj.step();
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
89
3
5205251db8c3 Added some smartness to evolve with progress.`
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
90 steps_since_update = steps_since_update + 1;
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 if steps_since_update >= steps_to_update
5205251db8c3 Added some smartness to evolve with progress.`
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
93 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
94
5205251db8c3 Added some smartness to evolve with progress.`
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
95 time_since_update = toc(last_update);
5205251db8c3 Added some smartness to evolve with progress.`
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
96 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
97 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
98
5205251db8c3 Added some smartness to evolve with progress.`
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
99 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
100
5205251db8c3 Added some smartness to evolve with progress.`
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
101 steps_since_update = 0;
5205251db8c3 Added some smartness to evolve with progress.`
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
102 last_update = tic();
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
103 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
104 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
105
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
106 s = util.replace_string(s,'');
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
107 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
108
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
109
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
110 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
111 end