Mercurial > repos > public > sbplib
annotate +sbp/D1Nonequidistant.m @ 262:23051a86faa4 operator_remake
Removed static method smallestGrid
author | Martin Almquist <martin.almquist@it.uu.se> |
---|---|
date | Thu, 08 Sep 2016 15:37:48 +0200 |
parents | 6009f2712d13 |
children | 8a625c5a3633 |
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 |
261
6009f2712d13
Moved and renamned all implementations.
Martin Almquist <martin.almquist@it.uu.se>
parents:
259
diff
changeset
|
28 [obj.D1,obj.H,obj.x,obj.h] = ... |
6009f2712d13
Moved and renamned all implementations.
Martin Almquist <martin.almquist@it.uu.se>
parents:
259
diff
changeset
|
29 sbp.implementations.d1_noneq_4(m,L); |
258
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
30 elseif order == 6 |
261
6009f2712d13
Moved and renamned all implementations.
Martin Almquist <martin.almquist@it.uu.se>
parents:
259
diff
changeset
|
31 [obj.D1,obj.H,obj.x,obj.h] = ... |
6009f2712d13
Moved and renamned all implementations.
Martin Almquist <martin.almquist@it.uu.se>
parents:
259
diff
changeset
|
32 sbp.implementations.d1_noneq_6(m,L); |
258
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
33 elseif order == 8 |
261
6009f2712d13
Moved and renamned all implementations.
Martin Almquist <martin.almquist@it.uu.se>
parents:
259
diff
changeset
|
34 [obj.D1,obj.H,obj.x,obj.h] = ... |
6009f2712d13
Moved and renamned all implementations.
Martin Almquist <martin.almquist@it.uu.se>
parents:
259
diff
changeset
|
35 sbp.implementations.d1_noneq_8(m,L); |
258
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
36 elseif order == 10 |
261
6009f2712d13
Moved and renamned all implementations.
Martin Almquist <martin.almquist@it.uu.se>
parents:
259
diff
changeset
|
37 [obj.D1,obj.H,obj.x,obj.h] = ... |
6009f2712d13
Moved and renamned all implementations.
Martin Almquist <martin.almquist@it.uu.se>
parents:
259
diff
changeset
|
38 sbp.implementations.d1_noneq_10(m,L); |
258
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
39 elseif order == 12 |
261
6009f2712d13
Moved and renamned all implementations.
Martin Almquist <martin.almquist@it.uu.se>
parents:
259
diff
changeset
|
40 [obj.D1,obj.H,obj.x,obj.h] = ... |
6009f2712d13
Moved and renamned all implementations.
Martin Almquist <martin.almquist@it.uu.se>
parents:
259
diff
changeset
|
41 sbp.implementations.d1_noneq_12(m,L); |
258
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
42 else |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
43 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
|
44 end |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
45 |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
46 case {'Minimal','minimal','M'} |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
47 |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
48 if order == 4 |
261
6009f2712d13
Moved and renamned all implementations.
Martin Almquist <martin.almquist@it.uu.se>
parents:
259
diff
changeset
|
49 [obj.D1,obj.H,obj.x,obj.h] = ... |
6009f2712d13
Moved and renamned all implementations.
Martin Almquist <martin.almquist@it.uu.se>
parents:
259
diff
changeset
|
50 sbp.implementations.d1_noneq_minimal_4(m,L); |
258
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
51 elseif order == 6 |
261
6009f2712d13
Moved and renamned all implementations.
Martin Almquist <martin.almquist@it.uu.se>
parents:
259
diff
changeset
|
52 [obj.D1,obj.H,obj.x,obj.h] = ... |
6009f2712d13
Moved and renamned all implementations.
Martin Almquist <martin.almquist@it.uu.se>
parents:
259
diff
changeset
|
53 sbp.implementations.d1_noneq_minimal_6(m,L); |
258
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
54 elseif order == 8 |
261
6009f2712d13
Moved and renamned all implementations.
Martin Almquist <martin.almquist@it.uu.se>
parents:
259
diff
changeset
|
55 [obj.D1,obj.H,obj.x,obj.h] = ... |
6009f2712d13
Moved and renamned all implementations.
Martin Almquist <martin.almquist@it.uu.se>
parents:
259
diff
changeset
|
56 sbp.implementations.d1_noneq_minimal_8(m,L); |
258
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
57 elseif order == 10 |
261
6009f2712d13
Moved and renamned all implementations.
Martin Almquist <martin.almquist@it.uu.se>
parents:
259
diff
changeset
|
58 [obj.D1,obj.H,obj.x,obj.h] = ... |
6009f2712d13
Moved and renamned all implementations.
Martin Almquist <martin.almquist@it.uu.se>
parents:
259
diff
changeset
|
59 sbp.implementations.d1_noneq_minimal_10(m,L); |
258
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
60 elseif order == 12 |
261
6009f2712d13
Moved and renamned all implementations.
Martin Almquist <martin.almquist@it.uu.se>
parents:
259
diff
changeset
|
61 [obj.D1,obj.H,obj.x,obj.h] = ... |
6009f2712d13
Moved and renamned all implementations.
Martin Almquist <martin.almquist@it.uu.se>
parents:
259
diff
changeset
|
62 sbp.implementations.d1_noneq_minimal_12(m,L); |
258
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
63 else |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
64 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
|
65 end |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
66 |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
67 end |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
68 |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
69 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
|
70 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
|
71 obj.e_1(1) = 1; |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
72 obj.e_m(m) = 1; |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
73 |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
74 obj.HI = inv(obj.H); |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
75 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
|
76 |
259
a94bb3d92aba
Added empty borrowing property to nonequidstant class.
Martin Almquist <martin.almquist@it.uu.se>
parents:
258
diff
changeset
|
77 obj.borrowing = []; |
a94bb3d92aba
Added empty borrowing property to nonequidstant class.
Martin Almquist <martin.almquist@it.uu.se>
parents:
258
diff
changeset
|
78 |
258
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
79 end |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
80 end |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
81 |
262
23051a86faa4
Removed static method smallestGrid
Martin Almquist <martin.almquist@it.uu.se>
parents:
261
diff
changeset
|
82 |
258
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
83 end |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
84 |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
85 |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
86 |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
87 |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
88 |