Mercurial > repos > public > sbplib
annotate +sbp/D1Nonequidistant.m @ 259:a94bb3d92aba operator_remake
Added empty borrowing property to nonequidstant class.
author | Martin Almquist <martin.almquist@it.uu.se> |
---|---|
date | Thu, 08 Sep 2016 13:44:13 +0200 |
parents | a8d89688ba01 |
children | 6009f2712d13 |
rev | line source |
---|---|
258
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
1 classdef D1Nonequidistant < sbp.OpSet |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
2 properties |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
3 D1 % SBP operator approximating first derivative |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
4 H % Norm matrix |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
5 HI % H^-1 |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
6 Q % Skew-symmetric matrix |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
7 e_1 % Left boundary operator |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
8 e_m % Right boundary operator |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
9 m % Number of grid points. |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
10 h % Step size |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
11 x % grid |
259
a94bb3d92aba
Added empty borrowing property to nonequidstant class.
Martin Almquist <martin.almquist@it.uu.se>
parents:
258
diff
changeset
|
12 borrowing % Struct with borrowing limits for different norm matrices |
258
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
13 end |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
14 |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
15 methods |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
16 function obj = D1Nonequidistant(m,L,order,option) |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
17 |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
18 default_arg('option','Accurate'); |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
19 % 'Accurate' operators are optimized for accuracy |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
20 % 'Minimal' operators have the smallest possible boundary |
259
a94bb3d92aba
Added empty borrowing property to nonequidstant class.
Martin Almquist <martin.almquist@it.uu.se>
parents:
258
diff
changeset
|
21 % closure |
258
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
22 |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
23 switch option |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
24 |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
25 case {'Accurate','accurate','A'} |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
26 |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
27 if order == 4 |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
28 [obj.D1,obj.H,obj.x,obj.h] = sbp.D1_4th_4BP_2shifts(m,L); |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
29 elseif order == 6 |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
30 [obj.D1,obj.H,obj.x,obj.h] = sbp.D1_6th_6BP_3shifts(m,L); |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
31 elseif order == 8 |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
32 [obj.D1,obj.H,obj.x,obj.h] = sbp.D1_8th_8BP_4shifts(m,L); |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
33 elseif order == 10 |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
34 [obj.D1,obj.H,obj.x,obj.h] = sbp.D1_10th_10BP_5shifts(m,L); |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
35 elseif order == 12 |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
36 [obj.D1,obj.H,obj.x,obj.h] = sbp.D1_12th_12BP_6shifts(m,L); |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
37 else |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
38 error('Invalid operator order %d.',order); |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
39 end |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
40 |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
41 case {'Minimal','minimal','M'} |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
42 |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
43 if order == 4 |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
44 [obj.D1,obj.H,obj.x,obj.h] = sbp.D1_minimal_4th_3BP_1shifts(m,L); |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
45 elseif order == 6 |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
46 [obj.D1,obj.H,obj.x,obj.h] = sbp.D1_minimal_6th_5BP_2shifts(m,L); |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
47 elseif order == 8 |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
48 [obj.D1,obj.H,obj.x,obj.h] = sbp.D1_minimal_8th_6BP_2shifts(m,L); |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
49 elseif order == 10 |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
50 [obj.D1,obj.H,obj.x,obj.h] = sbp.D1_minimal_10th_8BP_3shifts(m,L); |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
51 elseif order == 12 |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
52 [obj.D1,obj.H,obj.x,obj.h] = sbp.D1_minimal_12th_10BP_4shifts(m,L); |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
53 else |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
54 error('Invalid operator order %d.',order); |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
55 end |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
56 |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
57 end |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
58 |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
59 obj.e_1 = sparse(m,1); |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
60 obj.e_m = sparse(m,1); |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
61 obj.e_1(1) = 1; |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
62 obj.e_m(m) = 1; |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
63 |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
64 obj.HI = inv(obj.H); |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
65 obj.Q = obj.H*obj.D1 - obj.e_m*obj.e_m' + obj.e_0*obj.e_0'; |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
66 |
259
a94bb3d92aba
Added empty borrowing property to nonequidstant class.
Martin Almquist <martin.almquist@it.uu.se>
parents:
258
diff
changeset
|
67 obj.borrowing = []; |
a94bb3d92aba
Added empty borrowing property to nonequidstant class.
Martin Almquist <martin.almquist@it.uu.se>
parents:
258
diff
changeset
|
68 |
258
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
69 end |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
70 end |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
71 |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
72 methods (Static) |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
73 function lambda = smallestGrid(obj) |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
74 error('Not implmented') |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
75 end |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
76 end |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
77 end |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
78 |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
79 |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
80 |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
81 |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
82 |