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