comparison +time/SBPInTimeSecondOrderFormImplicit.m @ 744:94bd0f3293c8 feature/grids

SBPInTimeSecondOrderForm: Scale the system acording to C by default
author Jonatan Werpers <jonatan@werpers.com>
date Wed, 28 Mar 2018 12:47:53 +0200
parents d4b999585af1
children f2f5efc3644f
comparison
equal deleted inserted replaced
723:87436a107d8a 744:94bd0f3293c8
12 12
13 methods 13 methods
14 % Solves A*u_tt + B*u_t + C*u = f(t) 14 % Solves A*u_tt + B*u_t + C*u = f(t)
15 % A, B can either both be constants or both be function handles, 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. 16 % They can also be omitted by setting them equal to the empty matrix.
17 function obj = SBPInTimeSecondOrderFormImplicit(A, B, C, f, k, t0, v0, v0t, TYPE, order, blockSize) 17 function obj = SBPInTimeSecondOrderFormImplicit(A, B, C, f, k, t0, v0, v0t, do_scaling, TYPE, order, blockSize)
18 default_arg('f', []); 18 default_arg('f', []);
19 default_arg('TYPE', []); 19 default_arg('TYPE', []);
20 default_arg('order', []); 20 default_arg('order', []);
21 default_arg('blockSize',[]); 21 default_arg('blockSize',[]);
22 default_arg('do_scaling', true);
22 23
23 m = length(v0); 24 m = length(v0);
24 25
25 default_arg('A', sparse(m, m)); 26 default_arg('A', sparse(m, m));
26 default_arg('B', sparse(m, m)); 27 default_arg('B', sparse(m, m));
54 55
55 obj.k = k; 56 obj.k = k;
56 obj.t = t0; 57 obj.t = t0;
57 obj.n = 0; 58 obj.n = 0;
58 59
59 obj.firstOrderTimeStepper = time.SBPInTimeImplicitFormulation(obj.AA, obj.BB, obj.ff, obj.k, obj.t, w0, TYPE, order, blockSize); 60 if do_scaling
61 scaling = [ones(m,1); sqrt(diag(C))];
62 obj.firstOrderTimeStepper = time.SBPInTimeScaled(obj.AA, obj.BB, obj.ff, obj.k, obj.t, w0, scaling, TYPE, order, blockSize);
63 else
64 obj.firstOrderTimeStepper = time.SBPInTimeImplicitFormulation(obj.AA, obj.BB, obj.ff, obj.k, obj.t, w0, TYPE, order, blockSize);
65 end
60 end 66 end
61 67
62 function [v,t] = getV(obj) 68 function [v,t] = getV(obj)
63 w = obj.firstOrderTimeStepper.getV(); 69 w = obj.firstOrderTimeStepper.getV();
64 v = w(1:end/2); 70 v = w(1:end/2);