Mercurial > repos > public > sbplib
annotate +time/SBPInTimeSecondOrderFormImplicit.m @ 463:45a3924140f4 feature/grids
Move f(t) to the RHS
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Thu, 22 Jun 2017 13:06:41 +0200 |
parents | e0caae9ef6ed |
children | d4b999585af1 |
rev | line source |
---|---|
460
e0caae9ef6ed
Add SBPinTime for linear DAE formulations (BUGS!)
Jonatan Werpers <jonatan@werpers.com>
parents:
399
diff
changeset
|
1 classdef SBPInTimeSecondOrderFormImplicit < time.Timestepper |
399
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
2 properties |
460
e0caae9ef6ed
Add SBPinTime for linear DAE formulations (BUGS!)
Jonatan Werpers <jonatan@werpers.com>
parents:
399
diff
changeset
|
3 A, B, C, f |
e0caae9ef6ed
Add SBPinTime for linear DAE formulations (BUGS!)
Jonatan Werpers <jonatan@werpers.com>
parents:
399
diff
changeset
|
4 AA, BB, ff |
399
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 |
463 | 14 % Solves A*u_tt + B*u_t + C*u = f(t) |
399
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. |
460
e0caae9ef6ed
Add SBPinTime for linear DAE formulations (BUGS!)
Jonatan Werpers <jonatan@werpers.com>
parents:
399
diff
changeset
|
17 function obj = SBPInTimeSecondOrderFormImplicit(A, B, C, f, k, t0, v0, v0t, TYPE, order, blockSize) |
e0caae9ef6ed
Add SBPinTime for linear DAE formulations (BUGS!)
Jonatan Werpers <jonatan@werpers.com>
parents:
399
diff
changeset
|
18 default_arg('f', []); |
399
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
19 default_arg('TYPE', []); |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
20 default_arg('order', []); |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
21 default_arg('blockSize',[]); |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
22 |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
23 m = length(v0); |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
24 |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
25 default_arg('A', sparse(m, m)); |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
26 default_arg('B', sparse(m, m)); |
460
e0caae9ef6ed
Add SBPinTime for linear DAE formulations (BUGS!)
Jonatan Werpers <jonatan@werpers.com>
parents:
399
diff
changeset
|
27 default_arg('C', sparse(m, m)); |
399
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
28 |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
29 I = speye(m); |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
30 O = sparse(m,m); |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
31 |
460
e0caae9ef6ed
Add SBPinTime for linear DAE formulations (BUGS!)
Jonatan Werpers <jonatan@werpers.com>
parents:
399
diff
changeset
|
32 % Rewrite to |
e0caae9ef6ed
Add SBPinTime for linear DAE formulations (BUGS!)
Jonatan Werpers <jonatan@werpers.com>
parents:
399
diff
changeset
|
33 % AA*w_t = BB*w + ff(t); |
e0caae9ef6ed
Add SBPinTime for linear DAE formulations (BUGS!)
Jonatan Werpers <jonatan@werpers.com>
parents:
399
diff
changeset
|
34 |
e0caae9ef6ed
Add SBPinTime for linear DAE formulations (BUGS!)
Jonatan Werpers <jonatan@werpers.com>
parents:
399
diff
changeset
|
35 obj.AA = [ |
e0caae9ef6ed
Add SBPinTime for linear DAE formulations (BUGS!)
Jonatan Werpers <jonatan@werpers.com>
parents:
399
diff
changeset
|
36 I, O; |
e0caae9ef6ed
Add SBPinTime for linear DAE formulations (BUGS!)
Jonatan Werpers <jonatan@werpers.com>
parents:
399
diff
changeset
|
37 O, A; |
399
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
38 ]; |
460
e0caae9ef6ed
Add SBPinTime for linear DAE formulations (BUGS!)
Jonatan Werpers <jonatan@werpers.com>
parents:
399
diff
changeset
|
39 obj.BB = [ |
e0caae9ef6ed
Add SBPinTime for linear DAE formulations (BUGS!)
Jonatan Werpers <jonatan@werpers.com>
parents:
399
diff
changeset
|
40 O, I; |
e0caae9ef6ed
Add SBPinTime for linear DAE formulations (BUGS!)
Jonatan Werpers <jonatan@werpers.com>
parents:
399
diff
changeset
|
41 -B, -C; |
399
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
42 ]; |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
43 |
460
e0caae9ef6ed
Add SBPinTime for linear DAE formulations (BUGS!)
Jonatan Werpers <jonatan@werpers.com>
parents:
399
diff
changeset
|
44 if ~isempty(f) |
e0caae9ef6ed
Add SBPinTime for linear DAE formulations (BUGS!)
Jonatan Werpers <jonatan@werpers.com>
parents:
399
diff
changeset
|
45 obj.ff = @(t)[ |
e0caae9ef6ed
Add SBPinTime for linear DAE formulations (BUGS!)
Jonatan Werpers <jonatan@werpers.com>
parents:
399
diff
changeset
|
46 sparse(m,1); |
463 | 47 f(t); |
460
e0caae9ef6ed
Add SBPinTime for linear DAE formulations (BUGS!)
Jonatan Werpers <jonatan@werpers.com>
parents:
399
diff
changeset
|
48 ]; |
e0caae9ef6ed
Add SBPinTime for linear DAE formulations (BUGS!)
Jonatan Werpers <jonatan@werpers.com>
parents:
399
diff
changeset
|
49 else |
e0caae9ef6ed
Add SBPinTime for linear DAE formulations (BUGS!)
Jonatan Werpers <jonatan@werpers.com>
parents:
399
diff
changeset
|
50 obj.ff = @(t) sparse(2*m,1); |
e0caae9ef6ed
Add SBPinTime for linear DAE formulations (BUGS!)
Jonatan Werpers <jonatan@werpers.com>
parents:
399
diff
changeset
|
51 end |
e0caae9ef6ed
Add SBPinTime for linear DAE formulations (BUGS!)
Jonatan Werpers <jonatan@werpers.com>
parents:
399
diff
changeset
|
52 |
399
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
53 w0 = [v0; v0t]; |
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 obj.k = k; |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
56 obj.t = t0; |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
57 obj.n = 0; |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
58 |
460
e0caae9ef6ed
Add SBPinTime for linear DAE formulations (BUGS!)
Jonatan Werpers <jonatan@werpers.com>
parents:
399
diff
changeset
|
59 obj.firstOrderTimeStepper = time.SBPInTimeImplicitFormulation(obj.AA, obj.BB, obj.ff, obj.k, obj.t, w0, TYPE, order, blockSize); |
399
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
60 end |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
61 |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
62 function [v,t] = getV(obj) |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
63 w = obj.firstOrderTimeStepper.getV(); |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
64 v = w(1:end/2); |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
65 t = obj.t; |
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 |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
68 function [vt,t] = getVt(obj) |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
69 w = obj.firstOrderTimeStepper.getV(); |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
70 vt = w(end/2+1:end); |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
71 t = obj.t; |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
72 end |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
73 |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
74 function obj = step(obj) |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
75 obj.firstOrderTimeStepper.step(); |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
76 obj.t = obj.firstOrderTimeStepper.t; |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
77 obj.n = obj.firstOrderTimeStepper.n; |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
78 end |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
79 end |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
80 end |