comparison +sbp/D4CompatibleVariable.m @ 308:067fd13ba320 feature/beams

Improved form of D4CompatibleVariable.
author Jonatan Werpers <jonatan@werpers.com>
date Fri, 23 Sep 2016 10:51:37 +0200
parents fefb2f9884f7
children
comparison
equal deleted inserted replaced
307:fefb2f9884f7 308:067fd13ba320
1 classdef D4CompatibleVariable < sbp.OpSet 1 classdef D4CompatibleVariable < sbp.OpSet
2 properties 2 properties
3 D1 % SBP operator approximating first derivative 3 D1 % SBP operator approximating first derivative
4 H % Norm matrix 4 H % Norm matrix
5 HI % H^-1 5 HI % H^-1
6 Q % Skew-symmetric matrix 6 Q % Skew-symmetric matrix
7 e_l % Left boundary operator 7 e_l % Left boundary operator
8 e_r % Right boundary operator 8 e_r % Right boundary operator
9 D2 % SBP operator for second derivative 9 D2 % SBP operator for second derivative
10 M % Norm matrix, second derivative 10 M % Norm matrix, second derivative
11 d1_l % Left boundary first derivative 11 d1_l % Left boundary first derivative
12 d1_r % Right boundary first derivative 12 d1_r % Right boundary first derivative
13 D3 % SBP operator for third derivative 13 D3 % SBP operator for third derivative
14 Q3 % Skew-symmetric matrix in third derivative 14 Q3 % Skew-symmetric matrix in third derivative
15 d2_l % Left boundary second derivative 15 d2_l % Left boundary second derivative
16 d2_r % Right boundary second derivative 16 d2_r % Right boundary second derivative
17 D4 % SBP operator for fourth derivative 17 D4 % SBP operator for fourth derivative
18 M4 % Norm matrix, fourth derivative 18 M4 % Norm matrix, fourth derivative
19 d3_l % Left boundary third derivative 19 d3_l % Left boundary third derivative
20 d3_r % Right boundary third derivative 20 d3_r % Right boundary third derivative
21 m % Number of grid points. 21 m % Number of grid points.
22 h % Step size 22 h % Step size
23 x % grid 23 x % grid
24 borrowing % Struct with borrowing limits for different norm matrices 24 borrowing % Struct with borrowing limits for different norm matrices
25 end 25 end
26
27
28 26
29 methods 27 methods
30 function obj = D4CompatibleVariable(m, lim, order, opt) 28 function obj = D4CompatibleVariable(m, lim, order, opt)
31 default_arg('opt', '') 29 default_arg('opt', '')
32 30
41 obj.M4, ~, obj.d2_l, obj.d2_r, obj.d3_l,... 39 obj.M4, ~, obj.d2_l, obj.d2_r, obj.d3_l,...
42 obj.d3_r, obj.d1_l, obj.d1_r] =... 40 obj.d3_r, obj.d1_l, obj.d1_r] =...
43 sbp.implementations.d4_compatible_halfvariable_2(m,obj.h); 41 sbp.implementations.d4_compatible_halfvariable_2(m,obj.h);
44 obj.borrowing.N.S2 = 1.2500; 42 obj.borrowing.N.S2 = 1.2500;
45 obj.borrowing.N.S3 = 0.4000; 43 obj.borrowing.N.S3 = 0.4000;
44
46 elseif order == 4 45 elseif order == 4
47 switch opt 46 switch opt
48 case 'min_boundary_points' 47 case 'min_boundary_points'
49 [H, HI, D2, D4, e_1, e_m, M4, S2_1, S2_m, S3_1, S3_m, S_1, S_m] = sbp.higher_variable4_min_boundary_points(m,h); 48 [H, HI, D2, D4, e_l, e_r, M4, d2_l, d2_r, d3_l, d3_r, d1_l, d1_r] = ...
49 sbp.higher_variable4_min_boundary_points(m, obj.h);
50 % obj.borrowing.N.S2 = 0.5055; 50 % obj.borrowing.N.S2 = 0.5055;
51 % obj.borrowing.N.S3 = 0.9290; 51 % obj.borrowing.N.S3 = 0.9290;
52 otherwise 52 otherwise
53 [obj.H, obj.HI, obj.D2, obj.D4, obj.e_l, obj.e_r, obj.M4,... 53 [H, HI, D2, D4, e_l, e_r, M4, d2_l, d2_r, d3_l, d3_r, d1_l, d1_r] = ...
54 obj.d2_l, obj.d2_r, obj.d3_l, obj.d3_r, obj.d1_l,... 54 sbp.implementations.d4_compatible_halfvariable_4(m, obj.h);
55 obj.d1_r] =...
56 sbp.implementations.d4_compatible_halfvariable_4(m,obj.h);
57 obj.borrowing.N.S2 = 0.5055; 55 obj.borrowing.N.S2 = 0.5055;
58 obj.borrowing.N.S3 = 0.9290; 56 obj.borrowing.N.S3 = 0.9290;
59 end 57 end
60 58
61 elseif order == 6 59 elseif order == 6
62
63
64 switch opt 60 switch opt
65 case '2' 61 case '2'
66 [H, HI, D2, D4, e_1, e_m, M4, S2_1, S2_m, S3_1, S3_m, S_1, S_m] = sbp.higher_variable6_2(m,h); 62 [H, HI, D2, D4, e_l, e_r, M4, d2_l, d2_r, d3_l, d3_r, d1_l, d1_r] = ...
63 sbp.higher_variable6_2(m, obj.h);
67 % obj.borrowing.N.S2 = 0.3259; 64 % obj.borrowing.N.S2 = 0.3259;
68 % obj.borrowing.N.S3 = 0.1580; 65 % obj.borrowing.N.S3 = 0.1580;
69 case '3' 66 case '3'
70 [H, HI, D2, D4, e_1, e_m, M4, S2_1, S2_m, S3_1, S3_m, S_1, S_m] = sbp.higher_variable6_3(m,h); 67 [H, HI, D2, D4, e_l, e_r, M4, d2_l, d2_r, d3_l, d3_r, d1_l, d1_r] = ...
68 sbp.higher_variable6_3(m, obj.h);
71 % obj.borrowing.N.S2 = 0.3259; 69 % obj.borrowing.N.S2 = 0.3259;
72 % obj.borrowing.N.S3 = 0.1580; 70 % obj.borrowing.N.S3 = 0.1580;
73 case 'min_boundary_points' 71 case 'min_boundary_points'
74 [H, HI, D2, D4, e_1, e_m, M4, S2_1, S2_m, S3_1, S3_m, S_1, S_m] = sbp.higher_variable6_min_boundary_points(m,h); 72 [H, HI, D2, D4, e_l, e_r, M4, d2_l, d2_r, d3_l, d3_r, d1_l, d1_r] = ...
73 sbp.higher_variable6_min_boundary_points(m, obj.h);
75 % obj.borrowing.N.S2 = 0.3259; 74 % obj.borrowing.N.S2 = 0.3259;
76 % obj.borrowing.N.S3 = 0.1580; 75 % obj.borrowing.N.S3 = 0.1580;
77 otherwise 76 otherwise
78 [obj.H, obj.HI, obj.D2, obj.D4, obj.e_l, obj.e_r, obj.M4,... 77 [H, HI, D2, D4, e_l, e_r, M4, d2_l, d2_r, d3_l, d3_r, d1_l, d1_r] = ...
79 obj.d2_l, obj.d2_r, obj.d3_l, obj.d3_r, obj.d1_l,... 78 sbp.implementations.d4_compatible_halfvariable_6(m, obj.h);
80 obj.d1_r] =...
81 sbp.implementations.d4_compatible_halfvariable_6(m,obj.h);
82 obj.borrowing.N.S2 = 0.3259; 79 obj.borrowing.N.S2 = 0.3259;
83 obj.borrowing.N.S3 = 0.1580; 80 obj.borrowing.N.S3 = 0.1580;
84 end 81 end
82
85 elseif order == 8 83 elseif order == 8
86 switch opt 84 switch opt
87 case 'min_boundary_points' 85 case 'min_boundary_points'
88 [H, HI, D2, D4, e_1, e_m, M4, S2_1, S2_m, S3_1, S3_m, S_1, S_m] = sbp.higher_variable8_min_boundary_points(m,h); 86 [H, HI, D2, D4, e_l, e_r, M4, d2_l, d2_r, d3_l, d3_r, d1_l, d1_r] = ...
87 sbp.higher_variable8_min_boundary_points(m, obj.h);
89 % obj.borrowing.N.S2 = 0.3259; 88 % obj.borrowing.N.S2 = 0.3259;
90 % obj.borrowing.N.S3 = 0.1580; 89 % obj.borrowing.N.S3 = 0.1580;
91 otherwise 90 otherwise
92 [H, HI, D2, D4, e_1, e_m, M4, S2_1, S2_m, S3_1, S3_m, S_1, S_m] = sbp.higher_variable8_higher_boundary_order(m,h); 91 [H, HI, D2, D4, e_l, e_r, M4, d2_l, d2_r, d3_l, d3_r, d1_l, d1_r] = ...
92 sbp.higher_variable8_higher_boundary_order(m, obj.h);
93 % obj.borrowing.N.S2 = 0.3259; 93 % obj.borrowing.N.S2 = 0.3259;
94 % obj.borrowing.N.S3 = 0.1580; 94 % obj.borrowing.N.S3 = 0.1580;
95 end 95 end
96 else 96 else
97 error('Invalid operator order.'); 97 error('Invalid operator order.');
98 end 98 end
99 99
100 obj.m = m; 100 obj.m = m;
101 101
102 obj.H = H;
103 obj.HI = HI;
104 obj.D2 = D2;
105 obj.D4 = D4;
106 obj.M4 = M4;
107 obj.e_l = e_l;
108 obj.e_r = e_r;
109 obj.d1_l = d1_l;
110 obj.d1_r = d1_r ;
111 obj.d2_l = d2_l;
112 obj.d2_r = d2_r;
113 obj.d3_l = d3_l;
114 obj.d3_r = d3_r;
115
102 obj.D1 = []; 116 obj.D1 = [];
103 obj.D3 = []; 117 obj.D3 = [];
104
105
106 end 118 end
107 end 119 end
108
109
110
111 end 120 end