comparison +sbp/D4Lonely.m @ 425:e56dbd9e4196 feature/grids

Merge feature/beams
author Jonatan Werpers <jonatan@werpers.com>
date Tue, 07 Feb 2017 16:09:02 +0100
parents 25b01643e438
children
comparison
equal deleted inserted replaced
423:a2cb0d4f4a02 425:e56dbd9e4196
1 classdef D4Lonely < sbp.OpSet
2 properties
3 m % Number of grid points.
4 h % Step size
5 x % grid
6 H % Norm matrix
7 HI % H^-1
8 D4 % SBP operator for fourth derivative
9 M4 % Norm matrix, fourth derivative
10 e_l, e_r % Left and right boundary operator
11 d1_l, d1_r % Left and right boundary first derivative
12 d2_l, d2_r % Left and right boundary second derivative
13 d3_l, d3_r % Left and right boundary third derivative
14 borrowing % Struct with borrowing limits for different norm matrices
15 opt
16 order
17 end
18
19 methods
20 function obj = D4Lonely(m, lim, order, opt)
21 default_arg('opt', '')
22
23 obj.opt = opt;
24 obj.order = order;
25
26 x_l = lim{1};
27 x_r = lim{2};
28 L = x_r-x_l;
29 obj.h = L/(m-1);
30 obj.x = linspace(x_l, x_r,m)';
31
32 if order == 2
33 switch opt
34 case ''
35 [H, HI, D1, D2, D4, e_l, e_r, M4, d2_l, d2_r, d3_l, d3_r, d1_l, d1_r] = ...
36 sbp.implementations.d4_variable_2(m, obj.h);
37 obj.borrowing.N.S2 = 1.2500;
38 obj.borrowing.N.S3 = 0.4000;
39 otherwise
40 error('Invalid operator option.');
41 end
42
43 elseif order == 4
44 switch opt
45 case 'min_boundary_points'
46 [H, HI, D4, e_l, e_r, M4, d2_l, d2_r, d3_l, d3_r, d1_l, d1_r] = ...
47 sbp.implementations.d4_lonely_4_min_boundary_points(m, obj.h);
48 obj.borrowing.N.S2 = 0.6244;
49 obj.borrowing.N.S3 = 1.3961;
50 case ''
51 [H, HI, D1, D2, D4, e_l, e_r, M4, d2_l, d2_r, d3_l, d3_r, d1_l, d1_r] = ...
52 sbp.implementations.d4_variable_4(m, obj.h);
53 obj.borrowing.N.S2 = 0.5055;
54 obj.borrowing.N.S3 = 0.9290;
55 otherwise
56 error('Invalid operator option.');
57 end
58
59 elseif order == 6
60 switch opt
61 case '2'
62 [H, HI, D4, e_l, e_r, M4, d2_l, d2_r, d3_l, d3_r, d1_l, d1_r] = ...
63 sbp.implementations.d4_lonely_6_2(m, obj.h);
64 obj.borrowing.N.S2 = 0.2931;
65 obj.borrowing.N.S3 = 0.0807;
66 case '3'
67 [H, HI, D4, e_l, e_r, M4, d2_l, d2_r, d3_l, d3_r, d1_l, d1_r] = ...
68 sbp.implementations.d4_lonely_6_3(m, obj.h);
69 obj.borrowing.N.S2 = 0.2842;
70 obj.borrowing.N.S3 = 0.0709;
71 case 'min_boundary_points'
72 [H, HI, D4, e_l, e_r, M4, d2_l, d2_r, d3_l, d3_r, d1_l, d1_r] = ...
73 sbp.implementations.d4_lonely_6_min_boundary_points(m, obj.h);
74 obj.borrowing.N.S2 = 0.3569;
75 obj.borrowing.N.S3 = 0.1908;
76 case ''
77 [H, HI, D1, D2, D4, e_l, e_r, M4, d2_l, d2_r, d3_l, d3_r, d1_l, d1_r] = ...
78 sbp.implementations.d4_variable_6(m, obj.h);
79 obj.borrowing.N.S2 = 0.3259;
80 obj.borrowing.N.S3 = 0.1580;
81 otherwise
82 error('Invalid operator option.');
83 end
84
85 elseif order == 8
86 switch opt
87 case 'min_boundary_points'
88 [H, HI, D4, e_l, e_r, M4, d2_l, d2_r, d3_l, d3_r, d1_l, d1_r] = ...
89 sbp.implementations.d4_lonely_8_min_boundary_points(m, obj.h);
90 obj.borrowing.N.S2 = 0.2804;
91 obj.borrowing.N.S3 = 0.0740;
92 case ''
93 [H, HI, D4, e_l, e_r, M4, d2_l, d2_r, d3_l, d3_r, d1_l, d1_r] = ...
94 sbp.implementations.d4_lonely_8_higher_boundary_order(m, obj.h);
95 obj.borrowing.N.S2 = 0.2475;
96 obj.borrowing.N.S3 = 0.0401;
97 otherwise
98 error('Invalid operator option.');
99 end
100 else
101 error('Invalid operator order.');
102 end
103
104 obj.m = m;
105
106 obj.H = H;
107 obj.HI = HI;
108 obj.D4 = D4;
109 obj.M4 = M4;
110 obj.e_l = e_l;
111 obj.e_r = e_r;
112 obj.d1_l = d1_l;
113 obj.d1_r = d1_r;
114 obj.d2_l = d2_l;
115 obj.d2_r = d2_r;
116 obj.d3_l = d3_l;
117 obj.d3_r = d3_r;
118 end
119
120 function str = string(obj)
121 str = [class(obj) '_' num2str(obj.order) '_' obj.opt];
122 end
123 end
124 end