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 |
