Mercurial > repos > public > sbplib
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 |