annotate +noname/animate.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 082c7bf3192e
children c9147e05d228
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
604
082c7bf3192e Remove unused output
Jonatan Werpers <jonatan@werpers.com>
parents: 603
diff changeset
1 % noname.animate(discretization, time_modifier, Tend, dirname, opt)
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
2 %
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
3 % Example:
134
08d7bb7c8ac4 Improved some comments in noname.animate
Jonatan Werpers <jonatan@werpers.com>
parents: 132
diff changeset
4 % noname.animate(discr,timemodifier,tend)
08d7bb7c8ac4 Improved some comments in noname.animate
Jonatan Werpers <jonatan@werpers.com>
parents: 132
diff changeset
5 % noname.animate(discr,1, [tstart tend],'my_mov', opt)
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
6
604
082c7bf3192e Remove unused output
Jonatan Werpers <jonatan@werpers.com>
parents: 603
diff changeset
7 function animate(discretization, time_modifier, Tend, dirname, opt)
305
dfa4455033db Made opt more useful.
Jonatan Werpers <jonatan@werpers.com>
parents: 134
diff changeset
8 default_arg('time_modifier', 1);
80
14bf01b7a068 Changed noname.animate and noname.Discretization to use a opt struct for timestepper options.
Jonatan Werpers <jonatan@werpers.com>
parents: 71
diff changeset
9 default_arg('Tend', Inf);
305
dfa4455033db Made opt more useful.
Jonatan Werpers <jonatan@werpers.com>
parents: 134
diff changeset
10 default_arg('dirname', '');
dfa4455033db Made opt more useful.
Jonatan Werpers <jonatan@werpers.com>
parents: 134
diff changeset
11
dfa4455033db Made opt more useful.
Jonatan Werpers <jonatan@werpers.com>
parents: 134
diff changeset
12 optDefault.plotType = 'animation';
dfa4455033db Made opt more useful.
Jonatan Werpers <jonatan@werpers.com>
parents: 134
diff changeset
13 optDefault.time = [];
dfa4455033db Made opt more useful.
Jonatan Werpers <jonatan@werpers.com>
parents: 134
diff changeset
14
dfa4455033db Made opt more useful.
Jonatan Werpers <jonatan@werpers.com>
parents: 134
diff changeset
15 default_struct('opt', optDefault);
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
16
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
17
57
9a647dcccbdd Added pausing option to noname.animate. Added characteristic bc to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents: 53
diff changeset
18 if time_modifier < 0
9a647dcccbdd Added pausing option to noname.animate. Added characteristic bc to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents: 53
diff changeset
19 do_pause = true;
9a647dcccbdd Added pausing option to noname.animate. Added characteristic bc to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents: 53
diff changeset
20 time_modifier = -time_modifier;
9a647dcccbdd Added pausing option to noname.animate. Added characteristic bc to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents: 53
diff changeset
21 else
9a647dcccbdd Added pausing option to noname.animate. Added characteristic bc to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents: 53
diff changeset
22 do_pause = false;
9a647dcccbdd Added pausing option to noname.animate. Added characteristic bc to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents: 53
diff changeset
23 end
9a647dcccbdd Added pausing option to noname.animate. Added characteristic bc to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents: 53
diff changeset
24
112
b7f40a0c6476 Added ability to see every timestep.
Jonatan Werpers <jonatan@werpers.com>
parents: 80
diff changeset
25 if isinf(time_modifier)
b7f40a0c6476 Added ability to see every timestep.
Jonatan Werpers <jonatan@werpers.com>
parents: 80
diff changeset
26 do_step = true;
b7f40a0c6476 Added ability to see every timestep.
Jonatan Werpers <jonatan@werpers.com>
parents: 80
diff changeset
27 else
b7f40a0c6476 Added ability to see every timestep.
Jonatan Werpers <jonatan@werpers.com>
parents: 80
diff changeset
28 do_step = false;
b7f40a0c6476 Added ability to see every timestep.
Jonatan Werpers <jonatan@werpers.com>
parents: 80
diff changeset
29 end
b7f40a0c6476 Added ability to see every timestep.
Jonatan Werpers <jonatan@werpers.com>
parents: 80
diff changeset
30
80
14bf01b7a068 Changed noname.animate and noname.Discretization to use a opt struct for timestepper options.
Jonatan Werpers <jonatan@werpers.com>
parents: 71
diff changeset
31 makemovies = ~strcmp(dirname,'');
14bf01b7a068 Changed noname.animate and noname.Discretization to use a opt struct for timestepper options.
Jonatan Werpers <jonatan@werpers.com>
parents: 71
diff changeset
32 if makemovies
14bf01b7a068 Changed noname.animate and noname.Discretization to use a opt struct for timestepper options.
Jonatan Werpers <jonatan@werpers.com>
parents: 71
diff changeset
33 dirname = ['mov/' dirname];
14bf01b7a068 Changed noname.animate and noname.Discretization to use a opt struct for timestepper options.
Jonatan Werpers <jonatan@werpers.com>
parents: 71
diff changeset
34 end
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
35
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
36 fprintf('Animating: %s\n',discretization.name);
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
37 fprintf('order : %d\n',discretization.order);
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
38 fprintf('m : %d\n',size(discretization));
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
39
80
14bf01b7a068 Changed noname.animate and noname.Discretization to use a opt struct for timestepper options.
Jonatan Werpers <jonatan@werpers.com>
parents: 71
diff changeset
40
305
dfa4455033db Made opt more useful.
Jonatan Werpers <jonatan@werpers.com>
parents: 134
diff changeset
41 ts = discretization.getTimestepper(opt.time);
80
14bf01b7a068 Changed noname.animate and noname.Discretization to use a opt struct for timestepper options.
Jonatan Werpers <jonatan@werpers.com>
parents: 71
diff changeset
42
14bf01b7a068 Changed noname.animate and noname.Discretization to use a opt struct for timestepper options.
Jonatan Werpers <jonatan@werpers.com>
parents: 71
diff changeset
43 if numel(Tend) == 2
14bf01b7a068 Changed noname.animate and noname.Discretization to use a opt struct for timestepper options.
Jonatan Werpers <jonatan@werpers.com>
parents: 71
diff changeset
44 Tstart = Tend(1);
14bf01b7a068 Changed noname.animate and noname.Discretization to use a opt struct for timestepper options.
Jonatan Werpers <jonatan@werpers.com>
parents: 71
diff changeset
45 Tend = Tend(2);
14bf01b7a068 Changed noname.animate and noname.Discretization to use a opt struct for timestepper options.
Jonatan Werpers <jonatan@werpers.com>
parents: 71
diff changeset
46
14bf01b7a068 Changed noname.animate and noname.Discretization to use a opt struct for timestepper options.
Jonatan Werpers <jonatan@werpers.com>
parents: 71
diff changeset
47
14bf01b7a068 Changed noname.animate and noname.Discretization to use a opt struct for timestepper options.
Jonatan Werpers <jonatan@werpers.com>
parents: 71
diff changeset
48 fprintf('Evolving to starting time: ');
14bf01b7a068 Changed noname.animate and noname.Discretization to use a opt struct for timestepper options.
Jonatan Werpers <jonatan@werpers.com>
parents: 71
diff changeset
49 ts.evolve(Tstart,'true');
14bf01b7a068 Changed noname.animate and noname.Discretization to use a opt struct for timestepper options.
Jonatan Werpers <jonatan@werpers.com>
parents: 71
diff changeset
50 fprintf(' - Done\n');
14bf01b7a068 Changed noname.animate and noname.Discretization to use a opt struct for timestepper options.
Jonatan Werpers <jonatan@werpers.com>
parents: 71
diff changeset
51 start_solution = discretization.getTimeSnapshot(ts);
14bf01b7a068 Changed noname.animate and noname.Discretization to use a opt struct for timestepper options.
Jonatan Werpers <jonatan@werpers.com>
parents: 71
diff changeset
52 else
14bf01b7a068 Changed noname.animate and noname.Discretization to use a opt struct for timestepper options.
Jonatan Werpers <jonatan@werpers.com>
parents: 71
diff changeset
53 start_solution = discretization.getTimeSnapshot(0);
114
1035c190e8de noname.animate: Updated documentation. Fixed bug with start time. Added pause before starting.
Jonatan Werpers <jonatan@werpers.com>
parents: 112
diff changeset
54 Tstart = start_solution.t;
80
14bf01b7a068 Changed noname.animate and noname.Discretization to use a opt struct for timestepper options.
Jonatan Werpers <jonatan@werpers.com>
parents: 71
diff changeset
55 end
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
56
305
dfa4455033db Made opt more useful.
Jonatan Werpers <jonatan@werpers.com>
parents: 134
diff changeset
57 [update, figure_handle] = discretization.setupPlot(opt.plotType);
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
58 if makemovies
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
59 save_frame = anim.setup_fig_mov(figure_handle,dirname);
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
60 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
61
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
62 % Initialize loop
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
63 str = '';
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
64 % Loop function
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
65 function next_t = G(next_t)
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
66 ts.evolve(next_t);
20
c7efff913935 Decoupled plotting and timesteppers. Added possibility of different plot_types. Added functions for printing and plotting solution file content.
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
67 sol = discretization.getTimeSnapshot(ts);
c7efff913935 Decoupled plotting and timesteppers. Added possibility of different plot_types. Added functions for printing and plotting solution file content.
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
68 update(sol);
69
f87003695677 Moved drawno out of plot update functions for huge performance boost.
Jonatan Werpers <jonatan@werpers.com>
parents: 57
diff changeset
69 drawnow
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
70 % waitforbuttonpress
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
71 if makemovies
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
72 save_frame();
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
73 end
57
9a647dcccbdd Added pausing option to noname.animate. Added characteristic bc to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents: 53
diff changeset
74
9a647dcccbdd Added pausing option to noname.animate. Added characteristic bc to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents: 53
diff changeset
75 if do_pause
9a647dcccbdd Added pausing option to noname.animate. Added characteristic bc to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents: 53
diff changeset
76 pause
9a647dcccbdd Added pausing option to noname.animate. Added characteristic bc to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents: 53
diff changeset
77 end
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
78 end
80
14bf01b7a068 Changed noname.animate and noname.Discretization to use a opt struct for timestepper options.
Jonatan Werpers <jonatan@werpers.com>
parents: 71
diff changeset
79 update(start_solution);
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
80
80
14bf01b7a068 Changed noname.animate and noname.Discretization to use a opt struct for timestepper options.
Jonatan Werpers <jonatan@werpers.com>
parents: 71
diff changeset
81 fprintf('Using time step k = %.6f\n',ts.k);
14bf01b7a068 Changed noname.animate and noname.Discretization to use a opt struct for timestepper options.
Jonatan Werpers <jonatan@werpers.com>
parents: 71
diff changeset
82 fprintf('System size: %d\n',size(discretization));
69
f87003695677 Moved drawno out of plot update functions for huge performance boost.
Jonatan Werpers <jonatan@werpers.com>
parents: 57
diff changeset
83 % waitforbuttonpress
80
14bf01b7a068 Changed noname.animate and noname.Discretization to use a opt struct for timestepper options.
Jonatan Werpers <jonatan@werpers.com>
parents: 71
diff changeset
84
112
b7f40a0c6476 Added ability to see every timestep.
Jonatan Werpers <jonatan@werpers.com>
parents: 80
diff changeset
85
b7f40a0c6476 Added ability to see every timestep.
Jonatan Werpers <jonatan@werpers.com>
parents: 80
diff changeset
86 if ~do_step
114
1035c190e8de noname.animate: Updated documentation. Fixed bug with start time. Added pause before starting.
Jonatan Werpers <jonatan@werpers.com>
parents: 112
diff changeset
87 pause
112
b7f40a0c6476 Added ability to see every timestep.
Jonatan Werpers <jonatan@werpers.com>
parents: 80
diff changeset
88 anim.animate(@G, Tstart, Tend, time_modifier);
b7f40a0c6476 Added ability to see every timestep.
Jonatan Werpers <jonatan@werpers.com>
parents: 80
diff changeset
89 else
600
0da1c913a611 Add missing pause command in noname.Animate
Jonatan Werpers <jonatan@werpers.com>
parents: 305
diff changeset
90 pause
603
d196b7cdc626 Respect end time in step mode
Jonatan Werpers <jonatan@werpers.com>
parents: 600
diff changeset
91 while ts.t < Tend
112
b7f40a0c6476 Added ability to see every timestep.
Jonatan Werpers <jonatan@werpers.com>
parents: 80
diff changeset
92 ts.step();
b7f40a0c6476 Added ability to see every timestep.
Jonatan Werpers <jonatan@werpers.com>
parents: 80
diff changeset
93 sol = discretization.getTimeSnapshot(ts);
b7f40a0c6476 Added ability to see every timestep.
Jonatan Werpers <jonatan@werpers.com>
parents: 80
diff changeset
94 update(sol);
b7f40a0c6476 Added ability to see every timestep.
Jonatan Werpers <jonatan@werpers.com>
parents: 80
diff changeset
95 drawnow
b7f40a0c6476 Added ability to see every timestep.
Jonatan Werpers <jonatan@werpers.com>
parents: 80
diff changeset
96
b7f40a0c6476 Added ability to see every timestep.
Jonatan Werpers <jonatan@werpers.com>
parents: 80
diff changeset
97 if do_pause
b7f40a0c6476 Added ability to see every timestep.
Jonatan Werpers <jonatan@werpers.com>
parents: 80
diff changeset
98 pause
b7f40a0c6476 Added ability to see every timestep.
Jonatan Werpers <jonatan@werpers.com>
parents: 80
diff changeset
99 end
b7f40a0c6476 Added ability to see every timestep.
Jonatan Werpers <jonatan@werpers.com>
parents: 80
diff changeset
100 end
b7f40a0c6476 Added ability to see every timestep.
Jonatan Werpers <jonatan@werpers.com>
parents: 80
diff changeset
101 end
80
14bf01b7a068 Changed noname.animate and noname.Discretization to use a opt struct for timestepper options.
Jonatan Werpers <jonatan@werpers.com>
parents: 71
diff changeset
102
71
1edee9e1ea41 Updated printing stuff for animation functions.
Jonatan Werpers <jonatan@werpers.com>
parents: 69
diff changeset
103 % str = util.replace_string(str,'');
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
104
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
105 % if makemovies
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
106 % fprintf('Generating movies...\n')
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
107 % system(sprintf('bash make_movie.sh %s',dirname));
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
108 % end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
109 end