annotate +anim/animate.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 2fe13db674da
children
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 % Calls F(t) repeatedly
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
2 % Should there be a Fsetup and a F, two function, to allow creating a plot and then updating it?
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
3 % F takes the time to generate the frame for and returns the actual time for the generated frame.
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
4 % t = F(t_r) is a function that paints a frame for time t. t is the closest time <=t_r
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
5 % it will be called for increasnig t.
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
6
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
7 %Todo: make it catch up and produce warnings if it lags behind? Instead of just requesting the next target time
132
6ec2248b83c4 Refactored +anim.animate to be more clear.
Jonatan Werpers <jonatan@werpers.com>
parents: 79
diff changeset
8
6ec2248b83c4 Refactored +anim.animate to be more clear.
Jonatan Werpers <jonatan@werpers.com>
parents: 79
diff changeset
9
6ec2248b83c4 Refactored +anim.animate to be more clear.
Jonatan Werpers <jonatan@werpers.com>
parents: 79
diff changeset
10 % If adapt is true time_modifier is treated as an upper bound
6ec2248b83c4 Refactored +anim.animate to be more clear.
Jonatan Werpers <jonatan@werpers.com>
parents: 79
diff changeset
11 function animate(F, tstart, tend, time_modifier, target_frame_rate)
6ec2248b83c4 Refactored +anim.animate to be more clear.
Jonatan Werpers <jonatan@werpers.com>
parents: 79
diff changeset
12 default_arg('time_modifier', 1);
6ec2248b83c4 Refactored +anim.animate to be more clear.
Jonatan Werpers <jonatan@werpers.com>
parents: 79
diff changeset
13 default_arg('target_frame_rate',30);
6ec2248b83c4 Refactored +anim.animate to be more clear.
Jonatan Werpers <jonatan@werpers.com>
parents: 79
diff changeset
14
6ec2248b83c4 Refactored +anim.animate to be more clear.
Jonatan Werpers <jonatan@werpers.com>
parents: 79
diff changeset
15 % t is simulation time
6ec2248b83c4 Refactored +anim.animate to be more clear.
Jonatan Werpers <jonatan@werpers.com>
parents: 79
diff changeset
16 % tau is real time
6ec2248b83c4 Refactored +anim.animate to be more clear.
Jonatan Werpers <jonatan@werpers.com>
parents: 79
diff changeset
17
6ec2248b83c4 Refactored +anim.animate to be more clear.
Jonatan Werpers <jonatan@werpers.com>
parents: 79
diff changeset
18 time_modifier_bound = time_modifier;
6ec2248b83c4 Refactored +anim.animate to be more clear.
Jonatan Werpers <jonatan@werpers.com>
parents: 79
diff changeset
19 dTau_target = 1/target_frame_rate; % Real time between frames
6ec2248b83c4 Refactored +anim.animate to be more clear.
Jonatan Werpers <jonatan@werpers.com>
parents: 79
diff changeset
20
6ec2248b83c4 Refactored +anim.animate to be more clear.
Jonatan Werpers <jonatan@werpers.com>
parents: 79
diff changeset
21 rs = util.ReplaceableString();
144
2fe13db674da animate: Show the simulation time.
Jonatan Werpers <jonatan@werpers.com>
parents: 133
diff changeset
22 rs.appendFormat(' t: %d\n');
133
43f8df3595cf Prepared for dynamic workload in animation.
Jonatan Werpers <jonatan@werpers.com>
parents: 132
diff changeset
23 rs.appendFormat(' tau: %d\n');
43f8df3595cf Prepared for dynamic workload in animation.
Jonatan Werpers <jonatan@werpers.com>
parents: 132
diff changeset
24 rs.appendFormat(' target tau: %d\n');
43f8df3595cf Prepared for dynamic workload in animation.
Jonatan Werpers <jonatan@werpers.com>
parents: 132
diff changeset
25 rs.appendFormat(' Target fps: %.2f\n');
43f8df3595cf Prepared for dynamic workload in animation.
Jonatan Werpers <jonatan@werpers.com>
parents: 132
diff changeset
26 rs.appendFormat(' Actual fps: %.2f\n');
43f8df3595cf Prepared for dynamic workload in animation.
Jonatan Werpers <jonatan@werpers.com>
parents: 132
diff changeset
27 rs.appendFormat('Target time_modifier: %d\n');
43f8df3595cf Prepared for dynamic workload in animation.
Jonatan Werpers <jonatan@werpers.com>
parents: 132
diff changeset
28 rs.appendFormat('actual time_modifier: %d\n');
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
29
132
6ec2248b83c4 Refactored +anim.animate to be more clear.
Jonatan Werpers <jonatan@werpers.com>
parents: 79
diff changeset
30 animation_start = tic();
6ec2248b83c4 Refactored +anim.animate to be more clear.
Jonatan Werpers <jonatan@werpers.com>
parents: 79
diff changeset
31 prevTau = 0;
6ec2248b83c4 Refactored +anim.animate to be more clear.
Jonatan Werpers <jonatan@werpers.com>
parents: 79
diff changeset
32 targetTau = 0;
133
43f8df3595cf Prepared for dynamic workload in animation.
Jonatan Werpers <jonatan@werpers.com>
parents: 132
diff changeset
33 tauFrameStart = -dTau_target;
132
6ec2248b83c4 Refactored +anim.animate to be more clear.
Jonatan Werpers <jonatan@werpers.com>
parents: 79
diff changeset
34 t = F(tstart);
6ec2248b83c4 Refactored +anim.animate to be more clear.
Jonatan Werpers <jonatan@werpers.com>
parents: 79
diff changeset
35
6ec2248b83c4 Refactored +anim.animate to be more clear.
Jonatan Werpers <jonatan@werpers.com>
parents: 79
diff changeset
36 while t < tend
6ec2248b83c4 Refactored +anim.animate to be more clear.
Jonatan Werpers <jonatan@werpers.com>
parents: 79
diff changeset
37 % Sleep until the frame should start
6ec2248b83c4 Refactored +anim.animate to be more clear.
Jonatan Werpers <jonatan@werpers.com>
parents: 79
diff changeset
38 pause(targetTau-toc(animation_start));
133
43f8df3595cf Prepared for dynamic workload in animation.
Jonatan Werpers <jonatan@werpers.com>
parents: 132
diff changeset
39 tau = toc(animation_start);
43f8df3595cf Prepared for dynamic workload in animation.
Jonatan Werpers <jonatan@werpers.com>
parents: 132
diff changeset
40 dTau = tau - tauFrameStart;
43f8df3595cf Prepared for dynamic workload in animation.
Jonatan Werpers <jonatan@werpers.com>
parents: 132
diff changeset
41
43f8df3595cf Prepared for dynamic workload in animation.
Jonatan Werpers <jonatan@werpers.com>
parents: 132
diff changeset
42 % Calculate error in tau
43f8df3595cf Prepared for dynamic workload in animation.
Jonatan Werpers <jonatan@werpers.com>
parents: 132
diff changeset
43 e_Tau = tau - targetTau;
43f8df3595cf Prepared for dynamic workload in animation.
Jonatan Werpers <jonatan@werpers.com>
parents: 132
diff changeset
44
43f8df3595cf Prepared for dynamic workload in animation.
Jonatan Werpers <jonatan@werpers.com>
parents: 132
diff changeset
45 % Regulate time_modifier based on e_Tau
43f8df3595cf Prepared for dynamic workload in animation.
Jonatan Werpers <jonatan@werpers.com>
parents: 132
diff changeset
46 % time_modifier = min(time_modifier_bound, max(0.5, abs(1-e_Tau/dTau)) * time_modifier);
43f8df3595cf Prepared for dynamic workload in animation.
Jonatan Werpers <jonatan@werpers.com>
parents: 132
diff changeset
47
43f8df3595cf Prepared for dynamic workload in animation.
Jonatan Werpers <jonatan@werpers.com>
parents: 132
diff changeset
48 % Mark the start of the frame
43f8df3595cf Prepared for dynamic workload in animation.
Jonatan Werpers <jonatan@werpers.com>
parents: 132
diff changeset
49 tauFrameStart = tau;
132
6ec2248b83c4 Refactored +anim.animate to be more clear.
Jonatan Werpers <jonatan@werpers.com>
parents: 79
diff changeset
50
6ec2248b83c4 Refactored +anim.animate to be more clear.
Jonatan Werpers <jonatan@werpers.com>
parents: 79
diff changeset
51 dt_target = dTau_target*time_modifier; % Targeted simulation time between frames
6ec2248b83c4 Refactored +anim.animate to be more clear.
Jonatan Werpers <jonatan@werpers.com>
parents: 79
diff changeset
52
6ec2248b83c4 Refactored +anim.animate to be more clear.
Jonatan Werpers <jonatan@werpers.com>
parents: 79
diff changeset
53 t_prev = t;
6ec2248b83c4 Refactored +anim.animate to be more clear.
Jonatan Werpers <jonatan@werpers.com>
parents: 79
diff changeset
54 t = F(t + dt_target); % Run simulation
6ec2248b83c4 Refactored +anim.animate to be more clear.
Jonatan Werpers <jonatan@werpers.com>
parents: 79
diff changeset
55
6ec2248b83c4 Refactored +anim.animate to be more clear.
Jonatan Werpers <jonatan@werpers.com>
parents: 79
diff changeset
56 % Calculate when this frame should end and the next start. (this depends on what simulation time we ended up on)
6ec2248b83c4 Refactored +anim.animate to be more clear.
Jonatan Werpers <jonatan@werpers.com>
parents: 79
diff changeset
57 dt = t-t_prev;
133
43f8df3595cf Prepared for dynamic workload in animation.
Jonatan Werpers <jonatan@werpers.com>
parents: 132
diff changeset
58 % targetTau = targetTau + dt/time_modifier;
43f8df3595cf Prepared for dynamic workload in animation.
Jonatan Werpers <jonatan@werpers.com>
parents: 132
diff changeset
59 targetTau = targetTau + dTau_target;
132
6ec2248b83c4 Refactored +anim.animate to be more clear.
Jonatan Werpers <jonatan@werpers.com>
parents: 79
diff changeset
60
6ec2248b83c4 Refactored +anim.animate to be more clear.
Jonatan Werpers <jonatan@werpers.com>
parents: 79
diff changeset
61 % Update information about this frame
6ec2248b83c4 Refactored +anim.animate to be more clear.
Jonatan Werpers <jonatan@werpers.com>
parents: 79
diff changeset
62 tau = toc(animation_start);
144
2fe13db674da animate: Show the simulation time.
Jonatan Werpers <jonatan@werpers.com>
parents: 133
diff changeset
63 rs.updateParam(t, tau, targetTau, 1/dTau_target, 1/dTau, time_modifier_bound, time_modifier);
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
64 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
65
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
66
132
6ec2248b83c4 Refactored +anim.animate to be more clear.
Jonatan Werpers <jonatan@werpers.com>
parents: 79
diff changeset
67 % Final time reporting
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
68 time_to_animate = toc(animation_start);
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
69 expected_time = tend/time_modifier;
71
1edee9e1ea41 Updated printing stuff for animation functions.
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
70 fprintf('\n');
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
71 fprintf('Time to animate: %.3f\n', time_to_animate)
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
72 fprintf('Expected time : %.3f\n', expected_time)
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
73 end