Mercurial > repos > public > sbplib
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 |
rev | line source |
---|---|
604 | 1 % noname.animate(discretization, time_modifier, Tend, dirname, opt) |
0 | 2 % |
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 | 6 |
604 | 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 | 16 |
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 | 35 |
36 fprintf('Animating: %s\n',discretization.name); | |
37 fprintf('order : %d\n',discretization.order); | |
38 fprintf('m : %d\n',size(discretization)); | |
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 | 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 | 58 if makemovies |
59 save_frame = anim.setup_fig_mov(figure_handle,dirname); | |
60 end | |
61 | |
62 % Initialize loop | |
63 str = ''; | |
64 % Loop function | |
65 function next_t = G(next_t) | |
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 | 70 % waitforbuttonpress |
71 if makemovies | |
72 save_frame(); | |
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 | 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 | 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 | 104 |
105 % if makemovies | |
106 % fprintf('Generating movies...\n') | |
107 % system(sprintf('bash make_movie.sh %s',dirname)); | |
108 % end | |
109 end |