Mercurial > repos > public > sbplib
annotate +time/Rk4SecondOrderNonlin.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 | c6fcee3fcf1b |
children |
rev | line source |
---|---|
0 | 1 classdef Rk4SecondOrderNonlin < time.Timestepper |
2 properties | |
3 F | |
4 k | |
5 t | |
6 w | |
7 m | |
8 | |
9 D | |
10 E | |
11 S | |
12 | |
13 n | |
14 end | |
15 | |
16 | |
17 methods | |
18 function obj = Rk4SecondOrderNonlin(D, E, S, k, t0, v0, v0t) | |
1
5ae4f23d9130
Added CdiffNonlin timestepper. Probably fixed a bug with Cdiff. Added default arguments to Rk4SecondOrderNonlin.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
19 default_arg('S',0); |
5ae4f23d9130
Added CdiffNonlin timestepper. Probably fixed a bug with Cdiff. Added default arguments to Rk4SecondOrderNonlin.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
20 default_arg('E',0); |
0 | 21 |
30
cd2e28c5ecd2
Corrected parameter treatment in nonlin timesteppers.
Jonatan Werpers <jonatan@werpers.com>
parents:
28
diff
changeset
|
22 if isnumeric(S) |
cd2e28c5ecd2
Corrected parameter treatment in nonlin timesteppers.
Jonatan Werpers <jonatan@werpers.com>
parents:
28
diff
changeset
|
23 S = @(v,t)S; |
0 | 24 end |
25 | |
30
cd2e28c5ecd2
Corrected parameter treatment in nonlin timesteppers.
Jonatan Werpers <jonatan@werpers.com>
parents:
28
diff
changeset
|
26 if isnumeric(E) |
cd2e28c5ecd2
Corrected parameter treatment in nonlin timesteppers.
Jonatan Werpers <jonatan@werpers.com>
parents:
28
diff
changeset
|
27 E = @(v)E; |
0 | 28 end |
29 | |
30 obj.k = k; | |
31 obj.t = t0; | |
32 obj.w = [v0; v0t]; | |
33 | |
34 m = length(v0); | |
35 function wt = F(w,t) | |
36 v = w(1:m); | |
37 vt = w(m+1:end); | |
38 | |
39 % Def: w = [v; vt] | |
40 wt(1:m,1) = vt; | |
41 wt(m+1:2*m,1) = D(v)*v + E(v)*vt + S(v,t); | |
42 | |
43 end | |
44 | |
45 obj.F = @F; | |
46 obj.D = D; | |
47 obj.E = E; | |
48 obj.S = S; | |
49 obj.m = m; | |
13
b18d3d201a71
Fixed initialization of step counter in timesteppers.
Jonatan Werpers <jonatan@werpers.com>
parents:
1
diff
changeset
|
50 obj.n = 0; |
0 | 51 end |
52 | |
53 function [v,t] = getV(obj) | |
54 v = obj.w(1:end/2); | |
55 t = obj.t; | |
56 end | |
57 | |
58 function [vt,t] = getVt(obj) | |
59 vt = obj.w(end/2+1:end); | |
60 t = obj.t; | |
61 end | |
62 | |
63 function obj = step(obj) | |
846
c6fcee3fcf1b
Add generalized RungeKutta and RungeKuttaRV class which extracts its coefficients from a butcher tableau, specified on the scheme.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
30
diff
changeset
|
64 obj.w = time.rk.rungekutta_4(obj.w, obj.t, obj.k, obj.F); |
0 | 65 obj.t = obj.t + obj.k; |
66 obj.n = obj.n + 1; | |
67 end | |
68 end | |
69 | |
70 | |
71 methods (Static) | |
72 function k = getTimeStep(lambda) | |
73 k = rk4.get_rk4_time_step(lambda); | |
74 end | |
75 end | |
76 | |
77 end |