Mercurial > repos > public > sbplib
annotate +anim/animate.m @ 1031:2ef20d00b386 feature/advectionRV
For easier comparison, return both the first order and residual viscosity when evaluating the residual. Add the first order and residual viscosity to the state of the RungekuttaRV time steppers
author | Vidar Stiernström <vidar.stiernstrom@it.uu.se> |
---|---|
date | Thu, 17 Jan 2019 10:25:06 +0100 |
parents | 2fe13db674da |
children |
rev | line source |
---|---|
0 | 1 % Calls F(t) repeatedly |
2 % Should there be a Fsetup and a F, two function, to allow creating a plot and then updating it? | |
3 % F takes the time to generate the frame for and returns the actual time for the generated frame. | |
4 % t = F(t_r) is a function that paints a frame for time t. t is the closest time <=t_r | |
5 % it will be called for increasnig t. | |
6 | |
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 | 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 | 64 end |
65 | |
66 | |
132
6ec2248b83c4
Refactored +anim.animate to be more clear.
Jonatan Werpers <jonatan@werpers.com>
parents:
79
diff
changeset
|
67 % Final time reporting |
0 | 68 time_to_animate = toc(animation_start); |
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 | 71 fprintf('Time to animate: %.3f\n', time_to_animate) |
72 fprintf('Expected time : %.3f\n', expected_time) | |
73 end |