Mercurial > repos > public > sbplib
annotate +sbp/D4Lonely.m @ 1198:2924b3a9b921 feature/d2_compatible
Add OpSet for fully compatible D2Variable, created from regular D2Variable by replacing d1 by first row of D1. Formal reduction by one order of accuracy at the boundary point.
author | Martin Almquist <malmquist@stanford.edu> |
---|---|
date | Fri, 16 Aug 2019 14:30:28 -0700 |
parents | 25b01643e438 |
children |
rev | line source |
---|---|
324
c0cbffcf6513
Created new operator class for lonely D4 operators. Removed some output parameters of implementations.
Jonatan Werpers <jonatan@werpers.com>
parents:
312
diff
changeset
|
1 classdef D4Lonely < sbp.OpSet |
252
07fa0d6a05bb
Renamned class files and added nonequidistant operators.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
2 properties |
328
31d6698c1edf
Clean up and fixing of new operators
Jonatan Werpers <jonatan@werpers.com>
parents:
327
diff
changeset
|
3 m % Number of grid points. |
31d6698c1edf
Clean up and fixing of new operators
Jonatan Werpers <jonatan@werpers.com>
parents:
327
diff
changeset
|
4 h % Step size |
31d6698c1edf
Clean up and fixing of new operators
Jonatan Werpers <jonatan@werpers.com>
parents:
327
diff
changeset
|
5 x % grid |
308
067fd13ba320
Improved form of D4CompatibleVariable.
Jonatan Werpers <jonatan@werpers.com>
parents:
307
diff
changeset
|
6 H % Norm matrix |
067fd13ba320
Improved form of D4CompatibleVariable.
Jonatan Werpers <jonatan@werpers.com>
parents:
307
diff
changeset
|
7 HI % H^-1 |
328
31d6698c1edf
Clean up and fixing of new operators
Jonatan Werpers <jonatan@werpers.com>
parents:
327
diff
changeset
|
8 D4 % SBP operator for fourth derivative |
31d6698c1edf
Clean up and fixing of new operators
Jonatan Werpers <jonatan@werpers.com>
parents:
327
diff
changeset
|
9 M4 % Norm matrix, fourth derivative |
324
c0cbffcf6513
Created new operator class for lonely D4 operators. Removed some output parameters of implementations.
Jonatan Werpers <jonatan@werpers.com>
parents:
312
diff
changeset
|
10 e_l, e_r % Left and right boundary operator |
c0cbffcf6513
Created new operator class for lonely D4 operators. Removed some output parameters of implementations.
Jonatan Werpers <jonatan@werpers.com>
parents:
312
diff
changeset
|
11 d1_l, d1_r % Left and right boundary first derivative |
c0cbffcf6513
Created new operator class for lonely D4 operators. Removed some output parameters of implementations.
Jonatan Werpers <jonatan@werpers.com>
parents:
312
diff
changeset
|
12 d2_l, d2_r % Left and right boundary second derivative |
c0cbffcf6513
Created new operator class for lonely D4 operators. Removed some output parameters of implementations.
Jonatan Werpers <jonatan@werpers.com>
parents:
312
diff
changeset
|
13 d3_l, d3_r % Left and right boundary third derivative |
263
21a180acbd49
Renamed standard class to D2Standard etc, Rewrote class properties.
Martin Almquist <martin.almquist@it.uu.se>
parents:
262
diff
changeset
|
14 borrowing % Struct with borrowing limits for different norm matrices |
330
25b01643e438
Added a string method to OpSet.
Jonatan Werpers <jonatan@werpers.com>
parents:
328
diff
changeset
|
15 opt |
25b01643e438
Added a string method to OpSet.
Jonatan Werpers <jonatan@werpers.com>
parents:
328
diff
changeset
|
16 order |
252
07fa0d6a05bb
Renamned class files and added nonequidistant operators.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
17 end |
07fa0d6a05bb
Renamned class files and added nonequidistant operators.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
18 |
07fa0d6a05bb
Renamned class files and added nonequidistant operators.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
19 methods |
324
c0cbffcf6513
Created new operator class for lonely D4 operators. Removed some output parameters of implementations.
Jonatan Werpers <jonatan@werpers.com>
parents:
312
diff
changeset
|
20 function obj = D4Lonely(m, lim, order, opt) |
307 | 21 default_arg('opt', '') |
22 | |
330
25b01643e438
Added a string method to OpSet.
Jonatan Werpers <jonatan@werpers.com>
parents:
328
diff
changeset
|
23 obj.opt = opt; |
25b01643e438
Added a string method to OpSet.
Jonatan Werpers <jonatan@werpers.com>
parents:
328
diff
changeset
|
24 obj.order = order; |
25b01643e438
Added a string method to OpSet.
Jonatan Werpers <jonatan@werpers.com>
parents:
328
diff
changeset
|
25 |
264
8a625c5a3633
Changed input parameter L (domain length) to lim (cell with domain boundaries)
Martin Almquist <martin.almquist@it.uu.se>
parents:
263
diff
changeset
|
26 x_l = lim{1}; |
8a625c5a3633
Changed input parameter L (domain length) to lim (cell with domain boundaries)
Martin Almquist <martin.almquist@it.uu.se>
parents:
263
diff
changeset
|
27 x_r = lim{2}; |
8a625c5a3633
Changed input parameter L (domain length) to lim (cell with domain boundaries)
Martin Almquist <martin.almquist@it.uu.se>
parents:
263
diff
changeset
|
28 L = x_r-x_l; |
263
21a180acbd49
Renamed standard class to D2Standard etc, Rewrote class properties.
Martin Almquist <martin.almquist@it.uu.se>
parents:
262
diff
changeset
|
29 obj.h = L/(m-1); |
307 | 30 obj.x = linspace(x_l, x_r,m)'; |
252
07fa0d6a05bb
Renamned class files and added nonequidistant operators.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
31 |
07fa0d6a05bb
Renamned class files and added nonequidistant operators.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
32 if order == 2 |
330
25b01643e438
Added a string method to OpSet.
Jonatan Werpers <jonatan@werpers.com>
parents:
328
diff
changeset
|
33 switch opt |
25b01643e438
Added a string method to OpSet.
Jonatan Werpers <jonatan@werpers.com>
parents:
328
diff
changeset
|
34 case '' |
25b01643e438
Added a string method to OpSet.
Jonatan Werpers <jonatan@werpers.com>
parents:
328
diff
changeset
|
35 [H, HI, D1, D2, D4, e_l, e_r, M4, d2_l, d2_r, d3_l, d3_r, d1_l, d1_r] = ... |
25b01643e438
Added a string method to OpSet.
Jonatan Werpers <jonatan@werpers.com>
parents:
328
diff
changeset
|
36 sbp.implementations.d4_variable_2(m, obj.h); |
25b01643e438
Added a string method to OpSet.
Jonatan Werpers <jonatan@werpers.com>
parents:
328
diff
changeset
|
37 obj.borrowing.N.S2 = 1.2500; |
25b01643e438
Added a string method to OpSet.
Jonatan Werpers <jonatan@werpers.com>
parents:
328
diff
changeset
|
38 obj.borrowing.N.S3 = 0.4000; |
25b01643e438
Added a string method to OpSet.
Jonatan Werpers <jonatan@werpers.com>
parents:
328
diff
changeset
|
39 otherwise |
25b01643e438
Added a string method to OpSet.
Jonatan Werpers <jonatan@werpers.com>
parents:
328
diff
changeset
|
40 error('Invalid operator option.'); |
25b01643e438
Added a string method to OpSet.
Jonatan Werpers <jonatan@werpers.com>
parents:
328
diff
changeset
|
41 end |
308
067fd13ba320
Improved form of D4CompatibleVariable.
Jonatan Werpers <jonatan@werpers.com>
parents:
307
diff
changeset
|
42 |
252
07fa0d6a05bb
Renamned class files and added nonequidistant operators.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
43 elseif order == 4 |
307 | 44 switch opt |
45 case 'min_boundary_points' | |
324
c0cbffcf6513
Created new operator class for lonely D4 operators. Removed some output parameters of implementations.
Jonatan Werpers <jonatan@werpers.com>
parents:
312
diff
changeset
|
46 [H, HI, D4, e_l, e_r, M4, d2_l, d2_r, d3_l, d3_r, d1_l, d1_r] = ... |
325
72468bc9b63f
Renamed some operator implementations.
Jonatan Werpers <jonatan@werpers.com>
parents:
324
diff
changeset
|
47 sbp.implementations.d4_lonely_4_min_boundary_points(m, obj.h); |
327
d24869abc7cd
Calculated borrowin for D4Lonely.
Jonatan Werpers <jonatan@werpers.com>
parents:
325
diff
changeset
|
48 obj.borrowing.N.S2 = 0.6244; |
d24869abc7cd
Calculated borrowin for D4Lonely.
Jonatan Werpers <jonatan@werpers.com>
parents:
325
diff
changeset
|
49 obj.borrowing.N.S3 = 1.3961; |
330
25b01643e438
Added a string method to OpSet.
Jonatan Werpers <jonatan@werpers.com>
parents:
328
diff
changeset
|
50 case '' |
312 | 51 [H, HI, D1, D2, D4, e_l, e_r, M4, d2_l, d2_r, d3_l, d3_r, d1_l, d1_r] = ... |
310
ffa5d557942b
Moved operator implementations and fixed some naming.
Jonatan Werpers <jonatan@werpers.com>
parents:
309
diff
changeset
|
52 sbp.implementations.d4_variable_4(m, obj.h); |
307 | 53 obj.borrowing.N.S2 = 0.5055; |
54 obj.borrowing.N.S3 = 0.9290; | |
330
25b01643e438
Added a string method to OpSet.
Jonatan Werpers <jonatan@werpers.com>
parents:
328
diff
changeset
|
55 otherwise |
25b01643e438
Added a string method to OpSet.
Jonatan Werpers <jonatan@werpers.com>
parents:
328
diff
changeset
|
56 error('Invalid operator option.'); |
307 | 57 end |
58 | |
252
07fa0d6a05bb
Renamned class files and added nonequidistant operators.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
59 elseif order == 6 |
307 | 60 switch opt |
61 case '2' | |
324
c0cbffcf6513
Created new operator class for lonely D4 operators. Removed some output parameters of implementations.
Jonatan Werpers <jonatan@werpers.com>
parents:
312
diff
changeset
|
62 [H, HI, D4, e_l, e_r, M4, d2_l, d2_r, d3_l, d3_r, d1_l, d1_r] = ... |
325
72468bc9b63f
Renamed some operator implementations.
Jonatan Werpers <jonatan@werpers.com>
parents:
324
diff
changeset
|
63 sbp.implementations.d4_lonely_6_2(m, obj.h); |
327
d24869abc7cd
Calculated borrowin for D4Lonely.
Jonatan Werpers <jonatan@werpers.com>
parents:
325
diff
changeset
|
64 obj.borrowing.N.S2 = 0.2931; |
d24869abc7cd
Calculated borrowin for D4Lonely.
Jonatan Werpers <jonatan@werpers.com>
parents:
325
diff
changeset
|
65 obj.borrowing.N.S3 = 0.0807; |
307 | 66 case '3' |
324
c0cbffcf6513
Created new operator class for lonely D4 operators. Removed some output parameters of implementations.
Jonatan Werpers <jonatan@werpers.com>
parents:
312
diff
changeset
|
67 [H, HI, D4, e_l, e_r, M4, d2_l, d2_r, d3_l, d3_r, d1_l, d1_r] = ... |
325
72468bc9b63f
Renamed some operator implementations.
Jonatan Werpers <jonatan@werpers.com>
parents:
324
diff
changeset
|
68 sbp.implementations.d4_lonely_6_3(m, obj.h); |
327
d24869abc7cd
Calculated borrowin for D4Lonely.
Jonatan Werpers <jonatan@werpers.com>
parents:
325
diff
changeset
|
69 obj.borrowing.N.S2 = 0.2842; |
d24869abc7cd
Calculated borrowin for D4Lonely.
Jonatan Werpers <jonatan@werpers.com>
parents:
325
diff
changeset
|
70 obj.borrowing.N.S3 = 0.0709; |
307 | 71 case 'min_boundary_points' |
324
c0cbffcf6513
Created new operator class for lonely D4 operators. Removed some output parameters of implementations.
Jonatan Werpers <jonatan@werpers.com>
parents:
312
diff
changeset
|
72 [H, HI, D4, e_l, e_r, M4, d2_l, d2_r, d3_l, d3_r, d1_l, d1_r] = ... |
325
72468bc9b63f
Renamed some operator implementations.
Jonatan Werpers <jonatan@werpers.com>
parents:
324
diff
changeset
|
73 sbp.implementations.d4_lonely_6_min_boundary_points(m, obj.h); |
327
d24869abc7cd
Calculated borrowin for D4Lonely.
Jonatan Werpers <jonatan@werpers.com>
parents:
325
diff
changeset
|
74 obj.borrowing.N.S2 = 0.3569; |
d24869abc7cd
Calculated borrowin for D4Lonely.
Jonatan Werpers <jonatan@werpers.com>
parents:
325
diff
changeset
|
75 obj.borrowing.N.S3 = 0.1908; |
330
25b01643e438
Added a string method to OpSet.
Jonatan Werpers <jonatan@werpers.com>
parents:
328
diff
changeset
|
76 case '' |
312 | 77 [H, HI, D1, D2, D4, e_l, e_r, M4, d2_l, d2_r, d3_l, d3_r, d1_l, d1_r] = ... |
310
ffa5d557942b
Moved operator implementations and fixed some naming.
Jonatan Werpers <jonatan@werpers.com>
parents:
309
diff
changeset
|
78 sbp.implementations.d4_variable_6(m, obj.h); |
307 | 79 obj.borrowing.N.S2 = 0.3259; |
80 obj.borrowing.N.S3 = 0.1580; | |
330
25b01643e438
Added a string method to OpSet.
Jonatan Werpers <jonatan@werpers.com>
parents:
328
diff
changeset
|
81 otherwise |
25b01643e438
Added a string method to OpSet.
Jonatan Werpers <jonatan@werpers.com>
parents:
328
diff
changeset
|
82 error('Invalid operator option.'); |
307 | 83 end |
308
067fd13ba320
Improved form of D4CompatibleVariable.
Jonatan Werpers <jonatan@werpers.com>
parents:
307
diff
changeset
|
84 |
307 | 85 elseif order == 8 |
86 switch opt | |
87 case 'min_boundary_points' | |
324
c0cbffcf6513
Created new operator class for lonely D4 operators. Removed some output parameters of implementations.
Jonatan Werpers <jonatan@werpers.com>
parents:
312
diff
changeset
|
88 [H, HI, D4, e_l, e_r, M4, d2_l, d2_r, d3_l, d3_r, d1_l, d1_r] = ... |
325
72468bc9b63f
Renamed some operator implementations.
Jonatan Werpers <jonatan@werpers.com>
parents:
324
diff
changeset
|
89 sbp.implementations.d4_lonely_8_min_boundary_points(m, obj.h); |
327
d24869abc7cd
Calculated borrowin for D4Lonely.
Jonatan Werpers <jonatan@werpers.com>
parents:
325
diff
changeset
|
90 obj.borrowing.N.S2 = 0.2804; |
d24869abc7cd
Calculated borrowin for D4Lonely.
Jonatan Werpers <jonatan@werpers.com>
parents:
325
diff
changeset
|
91 obj.borrowing.N.S3 = 0.0740; |
330
25b01643e438
Added a string method to OpSet.
Jonatan Werpers <jonatan@werpers.com>
parents:
328
diff
changeset
|
92 case '' |
324
c0cbffcf6513
Created new operator class for lonely D4 operators. Removed some output parameters of implementations.
Jonatan Werpers <jonatan@werpers.com>
parents:
312
diff
changeset
|
93 [H, HI, D4, e_l, e_r, M4, d2_l, d2_r, d3_l, d3_r, d1_l, d1_r] = ... |
325
72468bc9b63f
Renamed some operator implementations.
Jonatan Werpers <jonatan@werpers.com>
parents:
324
diff
changeset
|
94 sbp.implementations.d4_lonely_8_higher_boundary_order(m, obj.h); |
327
d24869abc7cd
Calculated borrowin for D4Lonely.
Jonatan Werpers <jonatan@werpers.com>
parents:
325
diff
changeset
|
95 obj.borrowing.N.S2 = 0.2475; |
d24869abc7cd
Calculated borrowin for D4Lonely.
Jonatan Werpers <jonatan@werpers.com>
parents:
325
diff
changeset
|
96 obj.borrowing.N.S3 = 0.0401; |
330
25b01643e438
Added a string method to OpSet.
Jonatan Werpers <jonatan@werpers.com>
parents:
328
diff
changeset
|
97 otherwise |
25b01643e438
Added a string method to OpSet.
Jonatan Werpers <jonatan@werpers.com>
parents:
328
diff
changeset
|
98 error('Invalid operator option.'); |
307 | 99 end |
252
07fa0d6a05bb
Renamned class files and added nonequidistant operators.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
100 else |
07fa0d6a05bb
Renamned class files and added nonequidistant operators.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
101 error('Invalid operator order.'); |
07fa0d6a05bb
Renamned class files and added nonequidistant operators.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
102 end |
07fa0d6a05bb
Renamned class files and added nonequidistant operators.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
103 |
07fa0d6a05bb
Renamned class files and added nonequidistant operators.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
104 obj.m = m; |
307 | 105 |
308
067fd13ba320
Improved form of D4CompatibleVariable.
Jonatan Werpers <jonatan@werpers.com>
parents:
307
diff
changeset
|
106 obj.H = H; |
067fd13ba320
Improved form of D4CompatibleVariable.
Jonatan Werpers <jonatan@werpers.com>
parents:
307
diff
changeset
|
107 obj.HI = HI; |
067fd13ba320
Improved form of D4CompatibleVariable.
Jonatan Werpers <jonatan@werpers.com>
parents:
307
diff
changeset
|
108 obj.D4 = D4; |
067fd13ba320
Improved form of D4CompatibleVariable.
Jonatan Werpers <jonatan@werpers.com>
parents:
307
diff
changeset
|
109 obj.M4 = M4; |
067fd13ba320
Improved form of D4CompatibleVariable.
Jonatan Werpers <jonatan@werpers.com>
parents:
307
diff
changeset
|
110 obj.e_l = e_l; |
067fd13ba320
Improved form of D4CompatibleVariable.
Jonatan Werpers <jonatan@werpers.com>
parents:
307
diff
changeset
|
111 obj.e_r = e_r; |
067fd13ba320
Improved form of D4CompatibleVariable.
Jonatan Werpers <jonatan@werpers.com>
parents:
307
diff
changeset
|
112 obj.d1_l = d1_l; |
312 | 113 obj.d1_r = d1_r; |
308
067fd13ba320
Improved form of D4CompatibleVariable.
Jonatan Werpers <jonatan@werpers.com>
parents:
307
diff
changeset
|
114 obj.d2_l = d2_l; |
067fd13ba320
Improved form of D4CompatibleVariable.
Jonatan Werpers <jonatan@werpers.com>
parents:
307
diff
changeset
|
115 obj.d2_r = d2_r; |
067fd13ba320
Improved form of D4CompatibleVariable.
Jonatan Werpers <jonatan@werpers.com>
parents:
307
diff
changeset
|
116 obj.d3_l = d3_l; |
067fd13ba320
Improved form of D4CompatibleVariable.
Jonatan Werpers <jonatan@werpers.com>
parents:
307
diff
changeset
|
117 obj.d3_r = d3_r; |
252
07fa0d6a05bb
Renamned class files and added nonequidistant operators.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
118 end |
330
25b01643e438
Added a string method to OpSet.
Jonatan Werpers <jonatan@werpers.com>
parents:
328
diff
changeset
|
119 |
25b01643e438
Added a string method to OpSet.
Jonatan Werpers <jonatan@werpers.com>
parents:
328
diff
changeset
|
120 function str = string(obj) |
25b01643e438
Added a string method to OpSet.
Jonatan Werpers <jonatan@werpers.com>
parents:
328
diff
changeset
|
121 str = [class(obj) '_' num2str(obj.order) '_' obj.opt]; |
25b01643e438
Added a string method to OpSet.
Jonatan Werpers <jonatan@werpers.com>
parents:
328
diff
changeset
|
122 end |
252
07fa0d6a05bb
Renamned class files and added nonequidistant operators.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
123 end |
07fa0d6a05bb
Renamned class files and added nonequidistant operators.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
124 end |