Mercurial > repos > public > sbplib
annotate +time/Rk4SecondOrderNonlin.m @ 1031:2ef20d00b386 feature/advectionRV
For easier comparison, return both the first order and residual viscosity when evaluating the residual. Add the first order and residual viscosity to the state of the RungekuttaRV time steppers
author | Vidar Stiernström <vidar.stiernstrom@it.uu.se> |
---|---|
date | Thu, 17 Jan 2019 10:25:06 +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 |