annotate +time/Timestepper.m @ 577:e45c9b56d50d feature/grids

Add an Empty grid class The need turned up for the flexural code when we may or may not have a grid for the open water and want to plot that solution. In case there is no open water we need an empty grid to plot the empty gridfunction against to avoid errors.
author Jonatan Werpers <jonatan@werpers.com>
date Thu, 07 Sep 2017 09:16:12 +0200
parents b361a04894e3
children 64a9a8a27858
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
385
b361a04894e3 Fix bug in implicit cdiff. Add stepTo method for timesteppers.
Jonatan Werpers <jonatan@werpers.com>
parents: 126
diff changeset
63
b361a04894e3 Fix bug in implicit cdiff. Add stepTo method for timesteppers.
Jonatan Werpers <jonatan@werpers.com>
parents: 126
diff changeset
64 function [v, t] = stepTo(obj, n, progress_bar)
b361a04894e3 Fix bug in implicit cdiff. Add stepTo method for timesteppers.
Jonatan Werpers <jonatan@werpers.com>
parents: 126
diff changeset
65 default_arg('progress_bar',false);
b361a04894e3 Fix bug in implicit cdiff. Add stepTo method for timesteppers.
Jonatan Werpers <jonatan@werpers.com>
parents: 126
diff changeset
66
b361a04894e3 Fix bug in implicit cdiff. Add stepTo method for timesteppers.
Jonatan Werpers <jonatan@werpers.com>
parents: 126
diff changeset
67 [v, t] = obj.stepN(n-obj.n, progress_bar);
b361a04894e3 Fix bug in implicit cdiff. Add stepTo method for timesteppers.
Jonatan Werpers <jonatan@werpers.com>
parents: 126
diff changeset
68 end
b361a04894e3 Fix bug in implicit cdiff. Add stepTo method for timesteppers.
Jonatan Werpers <jonatan@werpers.com>
parents: 126
diff changeset
69
16
f7975c054bc3 Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents: 13
diff changeset
70 function [v,t] = evolve(obj, tend, progress_bar)
f7975c054bc3 Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents: 13
diff changeset
71 default_arg('progress_bar',false)
f7975c054bc3 Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents: 13
diff changeset
72 if ~progress_bar
f7975c054bc3 Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents: 13
diff changeset
73 obj.evolve_without_progress(tend);
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
74 else
16
f7975c054bc3 Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents: 13
diff changeset
75 obj.evolve_with_progress(tend);
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
76 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
77 v = obj.getV;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
78 t = obj.t;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
79 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
80
16
f7975c054bc3 Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents: 13
diff changeset
81 function evolve_without_progress(obj, tend)
126
54055b32d516 Changed evolve so that it always stops as close to tend as possible.
Jonatan Werpers <jonatan@werpers.com>
parents: 16
diff changeset
82 while obj.t < tend - obj.k/2
16
f7975c054bc3 Improved progress indication for stepN
Jonatan Werpers <jonatan@werpers.com>
parents: 13
diff changeset
83 obj.step();
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
84 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
85 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
86
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
87 function evolve_with_progress(obj, tend)
3
5205251db8c3 Added some smartness to evolve with progress.`
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
88 FRAME_RATE = 20;
5205251db8c3 Added some smartness to evolve with progress.`
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
89
5205251db8c3 Added some smartness to evolve with progress.`
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
90 steps_to_update = 1;
5205251db8c3 Added some smartness to evolve with progress.`
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
91 steps_since_update = 0;
5205251db8c3 Added some smartness to evolve with progress.`
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
92 last_update = tic();
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
93 s = util.replace_string('',' %d %%',0);
126
54055b32d516 Changed evolve so that it always stops as close to tend as possible.
Jonatan Werpers <jonatan@werpers.com>
parents: 16
diff changeset
94 while obj.t < tend - obj.k/2
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
95 obj.step();
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
96
3
5205251db8c3 Added some smartness to evolve with progress.`
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
97 steps_since_update = steps_since_update + 1;
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 if steps_since_update >= steps_to_update
5205251db8c3 Added some smartness to evolve with progress.`
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
100 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
101
5205251db8c3 Added some smartness to evolve with progress.`
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
102 time_since_update = toc(last_update);
5205251db8c3 Added some smartness to evolve with progress.`
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
103 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
104 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
105
5205251db8c3 Added some smartness to evolve with progress.`
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
106 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
107
5205251db8c3 Added some smartness to evolve with progress.`
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
108 steps_since_update = 0;
5205251db8c3 Added some smartness to evolve with progress.`
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
109 last_update = tic();
0
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
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
112
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
113 s = util.replace_string(s,'');
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
114 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
115
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
116
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
117 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
118 end