comparison +sbp/D1Nonequidistant.m @ 284:dae8c3a56f5e

Merged in operator_remake (pull request #2) Operator remake
author Jonatan Werpers <jonatan.werpers@it.uu.se>
date Mon, 12 Sep 2016 12:53:02 +0200
parents 4b9310edcdf8
children 3fdfad20037e
comparison
equal deleted inserted replaced
282:18c023aaf3f7 284:dae8c3a56f5e
1 classdef D1Nonequidistant < sbp.OpSet
2 properties
3 D1 % SBP operator approximating first derivative
4 H % Norm matrix
5 HI % H^-1
6 Q % Skew-symmetric matrix
7 e_l % Left boundary operator
8 e_r % Right boundary operator
9 m % Number of grid points.
10 h % Step size
11 x % grid
12 borrowing % Struct with borrowing limits for different norm matrices
13 end
14
15 methods
16 function obj = D1Nonequidistant(m,lim,order,option)
17
18 default_arg('option','Accurate');
19 % 'Accurate' operators are optimized for accuracy
20 % 'Minimal' operators have the smallest possible boundary
21 % closure
22
23 x_l = lim{1};
24 x_r = lim{2};
25 L = x_r-x_l;
26
27 switch option
28
29 case {'Accurate','accurate','A'}
30
31 if order == 4
32 [obj.D1,obj.H,obj.x,obj.h] = ...
33 sbp.implementations.d1_noneq_4(m,L);
34 elseif order == 6
35 [obj.D1,obj.H,obj.x,obj.h] = ...
36 sbp.implementations.d1_noneq_6(m,L);
37 elseif order == 8
38 [obj.D1,obj.H,obj.x,obj.h] = ...
39 sbp.implementations.d1_noneq_8(m,L);
40 elseif order == 10
41 [obj.D1,obj.H,obj.x,obj.h] = ...
42 sbp.implementations.d1_noneq_10(m,L);
43 elseif order == 12
44 [obj.D1,obj.H,obj.x,obj.h] = ...
45 sbp.implementations.d1_noneq_12(m,L);
46 else
47 error('Invalid operator order %d.',order);
48 end
49
50 case {'Minimal','minimal','M'}
51
52 if order == 4
53 [obj.D1,obj.H,obj.x,obj.h] = ...
54 sbp.implementations.d1_noneq_minimal_4(m,L);
55 elseif order == 6
56 [obj.D1,obj.H,obj.x,obj.h] = ...
57 sbp.implementations.d1_noneq_minimal_6(m,L);
58 elseif order == 8
59 [obj.D1,obj.H,obj.x,obj.h] = ...
60 sbp.implementations.d1_noneq_minimal_8(m,L);
61 elseif order == 10
62 [obj.D1,obj.H,obj.x,obj.h] = ...
63 sbp.implementations.d1_noneq_minimal_10(m,L);
64 elseif order == 12
65 [obj.D1,obj.H,obj.x,obj.h] = ...
66 sbp.implementations.d1_noneq_minimal_12(m,L);
67 else
68 error('Invalid operator order %d.',order);
69 end
70
71 end
72
73 obj.x = obj.x + x_l;
74
75 obj.e_l = sparse(m,1);
76 obj.e_r = sparse(m,1);
77 obj.e_l(1) = 1;
78 obj.e_r(m) = 1;
79
80 obj.HI = inv(obj.H);
81 obj.Q = obj.H*obj.D1 - obj.e_r*obj.e_r' + obj.e_l*obj.e_l';
82
83 obj.borrowing = [];
84
85 end
86 end
87
88
89 end
90
91
92
93
94