Mercurial > repos > public > sbplib
annotate +time/Rk4SecondOrderNonlin.m @ 1014:e547794a9407 feature/advectionRV
Add boot-strapping to RungeKuttaExteriorRV
- Higher order BDF approximations are successively used as increasing number of time levels are obtained.
| author | Vidar Stiernström <vidar.stiernstrom@it.uu.se> |
|---|---|
| date | Thu, 06 Dec 2018 11:30:47 +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 |
