Mercurial > repos > public > sbplib
annotate +time/Rungekutta4SecondOrder.m @ 816:b5e5b195da1e feature/timesteppers
Add getState to timesteppers, returning the relevant state of the timestepper
- Add getState which returns the 'state' of the specialized timestepper.
author | Vidar Stiernström <vidar.stiernstrom@it.uu.se> |
---|---|
date | Mon, 10 Sep 2018 16:19:16 +0200 |
parents | b18d3d201a71 |
children | 8894e9c49e40 |
rev | line source |
---|---|
0 | 1 classdef Rungekutta4SecondOrder < time.Timestepper |
2 properties | |
3 F | |
4 k | |
5 t | |
6 w | |
7 m | |
8 D | |
9 E | |
10 S | |
11 M | |
12 C | |
13 n | |
14 end | |
15 | |
16 | |
17 methods | |
18 function obj = Rungekutta4SecondOrder(D, E, S, k, t0, v0, v0t) | |
19 obj.D = D; | |
20 obj.E = E; | |
21 obj.S = S; | |
22 obj.m = length(v0); | |
13
b18d3d201a71
Fixed initialization of step counter in timesteppers.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
23 obj.n = 0; |
0 | 24 |
25 I = speye(obj.m); | |
26 O = sparse(obj.m,obj.m); | |
27 obj.M = [O, I; D, E*I]; % Multiply with I to allow 0 as input. | |
28 | |
29 if S == 0 | |
30 obj.C = zeros(2*obj.m,1); | |
31 else | |
32 obj.C = [zeros(obj.m,1), S]; | |
33 end | |
34 | |
35 obj.k = k; | |
36 obj.t = t0; | |
37 obj.w = [v0; v0t]; | |
38 | |
39 obj.F = @(w,t)(obj.M*w + obj.C); | |
40 end | |
41 | |
42 function [v,t] = getV(obj) | |
43 v = obj.w(1:end/2); | |
44 t = obj.t; | |
45 end | |
46 | |
47 function [vt,t] = getVt(obj) | |
48 vt = obj.w(end/2+1:end); | |
49 t = obj.t; | |
50 end | |
51 | |
816
b5e5b195da1e
Add getState to timesteppers, returning the relevant state of the timestepper
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
13
diff
changeset
|
52 function state = getState(obj) |
b5e5b195da1e
Add getState to timesteppers, returning the relevant state of the timestepper
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
13
diff
changeset
|
53 [v, t] = obj.getV(); |
b5e5b195da1e
Add getState to timesteppers, returning the relevant state of the timestepper
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
13
diff
changeset
|
54 [vt] = obj.getVt(); |
b5e5b195da1e
Add getState to timesteppers, returning the relevant state of the timestepper
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
13
diff
changeset
|
55 state = struct('v', v, 'vt', vt, 't', t, 'k', obj.k); |
b5e5b195da1e
Add getState to timesteppers, returning the relevant state of the timestepper
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
13
diff
changeset
|
56 end |
b5e5b195da1e
Add getState to timesteppers, returning the relevant state of the timestepper
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
13
diff
changeset
|
57 |
0 | 58 function obj = step(obj) |
59 obj.w = time.rk4.rungekutta_4(obj.w, obj.t, obj.k, obj.F); | |
60 obj.t = obj.t + obj.k; | |
61 obj.n = obj.n + 1; | |
62 end | |
63 end | |
64 | |
65 | |
66 methods (Static) | |
67 function k = getTimeStep(lambda) | |
68 k = rk4.get_rk4_time_step(lambda); | |
69 end | |
70 end | |
71 | |
72 end |