Mercurial > repos > public > sbplib
annotate +time/SBPInTimeSecondOrderForm.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 | c92d2f8319c2 |
| children | b5e5b195da1e |
| rev | line source |
|---|---|
|
399
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
1 classdef SBPInTimeSecondOrderForm < time.Timestepper |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
2 properties |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
3 A,B,C |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
4 M, f |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
5 |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
6 n |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
7 t |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
8 k |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
9 |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
10 firstOrderTimeStepper |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
11 end |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
12 |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
13 methods |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
14 % Solves u_tt = Au + Bu_t + C |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
15 % A, B can either both be constants or both be function handles, |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
16 % They can also be omitted by setting them equal to the empty matrix. |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
17 function obj = SBPInTimeSecondOrderForm(A, B, C, k, t0, v0, v0t, TYPE, order, blockSize) |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
18 default_arg('TYPE', []); |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
19 default_arg('order', []); |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
20 default_arg('blockSize',[]); |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
21 |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
22 m = length(v0); |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
23 |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
24 default_arg('A', sparse(m, m)); |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
25 default_arg('B', sparse(m, m)); |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
26 default_arg('C', sparse(m, 1)); |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
27 |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
28 I = speye(m); |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
29 O = sparse(m,m); |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
30 |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
31 obj.M = [ |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
32 O, I; |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
33 A, B; |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
34 ]; |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
35 obj.f = @(t)[ |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
36 sparse(m,1); |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
37 C; |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
38 ]; |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
39 |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
40 w0 = [v0; v0t]; |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
41 |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
42 obj.k = k; |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
43 obj.t = t0; |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
44 obj.n = 0; |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
45 |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
46 obj.firstOrderTimeStepper = time.SBPInTime(obj.M, obj.f, obj.k, obj.t, w0, TYPE, order, blockSize); |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
47 end |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
48 |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
49 function [v,t] = getV(obj) |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
50 w = obj.firstOrderTimeStepper.getV(); |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
51 v = w(1:end/2); |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
52 t = obj.t; |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
53 end |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
54 |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
55 function [vt,t] = getVt(obj) |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
56 w = obj.firstOrderTimeStepper.getV(); |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
57 vt = w(end/2+1:end); |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
58 t = obj.t; |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
59 end |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
60 |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
61 function obj = step(obj) |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
62 obj.firstOrderTimeStepper.step(); |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
63 obj.t = obj.firstOrderTimeStepper.t; |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
64 obj.n = obj.firstOrderTimeStepper.n; |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
65 end |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
66 end |
|
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
67 end |
