comparison +time/SBPInTime.m @ 1113:47e86b5270ad feature/timesteppers

Change name of property k to dt in time.Timestepper
author Jonatan Werpers <jonatan@werpers.com>
date Wed, 10 Apr 2019 22:40:55 +0200
parents f5e14e5986b5
children
comparison
equal deleted inserted replaced
1112:835c8fa456ec 1113:47e86b5270ad
1 classdef SBPInTime < time.Timestepper 1 classdef SBPInTime < time.Timestepper
2 % The SBP in time method. 2 % The SBP in time method.
3 % Implemented for v_t = A*v + f(t) 3 % Implemented for v_t = A*v + f(t)
4 % 4 %
5 % Each "step" takes one block step and thus advances 5 % Each "step" takes one block step and thus advances
6 % k = k_local*(blockSize-1) in time. 6 % dt = k_local*(blockSize-1) in time.
7 properties 7 properties
8 M % System matrix 8 M % System matrix
9 L,U,P,Q % LU factorization of M 9 L,U,P,Q % LU factorization of M
10 A 10 A
11 Et_r 11 Et_r
12 penalty 12 penalty
13 f 13 f
14 k_local % step size within a block 14 k_local % step size within a block
15 k % Time size of a block k/(blockSize-1) = k_local 15 dt % Time size of a block dt/(blockSize-1) = k_local
16 t 16 t
17 v 17 v
18 m 18 m
19 n 19 n
20 blockSize % number of points in each block 20 blockSize % number of points in each block
21 order 21 order
22 nodes 22 nodes
23 end 23 end
24 24
25 methods 25 methods
26 function obj = SBPInTime(A, f, k, t0, v0, TYPE, order, blockSize) 26 function obj = SBPInTime(A, f, dt, t0, v0, TYPE, order, blockSize)
27 27
28 default_arg('TYPE','gauss'); 28 default_arg('TYPE','gauss');
29 29
30 if(strcmp(TYPE,'gauss')) 30 if(strcmp(TYPE,'gauss'))
31 default_arg('order',4) 31 default_arg('order',4)
35 default_arg('blockSize',time.SBPInTime.smallestBlockSize(order,TYPE)); 35 default_arg('blockSize',time.SBPInTime.smallestBlockSize(order,TYPE));
36 end 36 end
37 37
38 obj.A = A; 38 obj.A = A;
39 obj.f = f; 39 obj.f = f;
40 obj.k_local = k/(blockSize-1); 40 obj.k_local = dt/(blockSize-1);
41 obj.k = k; 41 obj.dt = dt;
42 obj.blockSize = blockSize; 42 obj.blockSize = blockSize;
43 obj.t = t0; 43 obj.t = t0;
44 obj.m = length(v0); 44 obj.m = length(v0);
45 obj.n = 0; 45 obj.n = 0;
46 46
47 %==== Build the time discretization matrix =====% 47 %==== Build the time discretization matrix =====%
48 switch TYPE 48 switch TYPE
49 case 'equidistant' 49 case 'equidistant'
50 ops = sbp.D2Standard(blockSize,{0,obj.k},order); 50 ops = sbp.D2Standard(blockSize,{0,obj.dt},order);
51 case 'optimal' 51 case 'optimal'
52 ops = sbp.D1Nonequidistant(blockSize,{0,obj.k},order); 52 ops = sbp.D1Nonequidistant(blockSize,{0,obj.dt},order);
53 case 'minimal' 53 case 'minimal'
54 ops = sbp.D1Nonequidistant(blockSize,{0,obj.k},order,'minimal'); 54 ops = sbp.D1Nonequidistant(blockSize,{0,obj.dt},order,'minimal');
55 case 'gauss' 55 case 'gauss'
56 ops = sbp.D1Gauss(blockSize,{0,obj.k}); 56 ops = sbp.D1Gauss(blockSize,{0,obj.dt});
57 end 57 end
58 58
59 D1 = ops.D1; 59 D1 = ops.D1;
60 HI = ops.HI; 60 HI = ops.HI;
61 e_l = ops.e_l; 61 e_l = ops.e_l;
97 function obj = step(obj) 97 function obj = step(obj)
98 obj.v = time.sbp.sbpintime(obj.v, obj.t, obj.nodes,... 98 obj.v = time.sbp.sbpintime(obj.v, obj.t, obj.nodes,...
99 obj.penalty, obj.f, obj.blockSize,... 99 obj.penalty, obj.f, obj.blockSize,...
100 obj.Et_r,... 100 obj.Et_r,...
101 obj.L, obj.U, obj.P, obj.Q); 101 obj.L, obj.U, obj.P, obj.Q);
102 obj.t = obj.t + obj.k; 102 obj.t = obj.t + obj.dt;
103 obj.n = obj.n + 1; 103 obj.n = obj.n + 1;
104 end 104 end
105 end 105 end
106 106
107 107