Mercurial > repos > public > sbplib
comparison +time/SBPInTime.m @ 411:16a76db8c279
Merged in feature/SBPInTimeGauss (pull request #6)
Feature/sbpintimegauss
author | Jonatan Werpers <jonatan.werpers@it.uu.se> |
---|---|
date | Tue, 07 Feb 2017 12:54:52 +0000 |
parents | e1db62d14835 |
children | 38173ea263ed b5e5b195da1e |
comparison
equal
deleted
inserted
replaced
404:d6d27fdc342a | 411:16a76db8c279 |
---|---|
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, k, t0, v0, TYPE, order, blockSize) |
27 default_arg('TYPE','minimal'); | 27 |
28 default_arg('order', 8); | 28 default_arg('TYPE','gauss'); |
29 default_arg('blockSize',time.SBPInTime.smallestBlockSize(order,TYPE)); | 29 |
30 if(strcmp(TYPE,'gauss')) | |
31 default_arg('order',4) | |
32 default_arg('blockSize',4) | |
33 else | |
34 default_arg('order', 8); | |
35 default_arg('blockSize',time.SBPInTime.smallestBlockSize(order,TYPE)); | |
36 end | |
30 | 37 |
31 obj.A = A; | 38 obj.A = A; |
32 obj.f = f; | 39 obj.f = f; |
33 obj.k_local = k/(blockSize-1); | 40 obj.k_local = k/(blockSize-1); |
34 obj.k = k; | 41 obj.k = k; |
43 ops = sbp.D2Standard(blockSize,{0,obj.k},order); | 50 ops = sbp.D2Standard(blockSize,{0,obj.k},order); |
44 case 'optimal' | 51 case 'optimal' |
45 ops = sbp.D1Nonequidistant(blockSize,{0,obj.k},order); | 52 ops = sbp.D1Nonequidistant(blockSize,{0,obj.k},order); |
46 case 'minimal' | 53 case 'minimal' |
47 ops = sbp.D1Nonequidistant(blockSize,{0,obj.k},order,'minimal'); | 54 ops = sbp.D1Nonequidistant(blockSize,{0,obj.k},order,'minimal'); |
55 case 'gauss' | |
56 ops = sbp.D1Gauss(blockSize,{0,obj.k}); | |
48 end | 57 end |
49 | 58 |
50 D1 = ops.D1; | 59 D1 = ops.D1; |
51 HI = ops.HI; | 60 HI = ops.HI; |
52 e_l = ops.e_l; | 61 e_l = ops.e_l; |
74 % LU factorization | 83 % LU factorization |
75 [obj.L,obj.U,obj.P,obj.Q] = lu(obj.M); | 84 [obj.L,obj.U,obj.P,obj.Q] = lu(obj.M); |
76 | 85 |
77 % Pretend that the initial condition is the last level | 86 % Pretend that the initial condition is the last level |
78 % of a previous step. | 87 % of a previous step. |
79 obj.v = obj.Et_r * v0; | 88 obj.v = 1/(e_r'*e_r) * obj.Et_r * v0; |
80 | 89 |
81 end | 90 end |
82 | 91 |
83 function [v,t] = getV(obj) | 92 function [v,t] = getV(obj) |
84 v = obj.Et_r' * obj.v; | 93 v = obj.Et_r' * obj.v; |
95 end | 104 end |
96 end | 105 end |
97 | 106 |
98 methods(Static) | 107 methods(Static) |
99 function N = smallestBlockSize(order,TYPE) | 108 function N = smallestBlockSize(order,TYPE) |
100 default_arg('TYPE','equidistant') | 109 default_arg('TYPE','gauss') |
101 | 110 |
102 switch TYPE | 111 switch TYPE |
103 | 112 |
104 case 'equidistant' | 113 case 'equidistant' |
105 switch order | 114 switch order |
150 case 12 | 159 case 12 |
151 N = 20; | 160 N = 20; |
152 otherwise | 161 otherwise |
153 error('Operator does not exist'); | 162 error('Operator does not exist'); |
154 end | 163 end |
164 case 'gauss' | |
165 N = 4; | |
155 end | 166 end |
156 end | 167 end |
157 end | 168 end |
158 end | 169 end |