Mercurial > repos > public > sbplib
annotate +sbp/D1Nonequidistant.m @ 1344:b4e5e45bd239 feature/D2_boundary_opt
Remove round off zeros from D2Nonequidistant operators
author | Vidar Stiernström <vidar.stiernstrom@it.uu.se> |
---|---|
date | Sat, 15 Oct 2022 15:48:20 +0200 |
parents | 8978521b0f06 |
children |
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 |
268
4b9310edcdf8
Renamned boundary operators!
Martin Almquist <martin.almquist@it.uu.se>
parents:
264
diff
changeset
|
7 e_l % Left boundary operator |
4b9310edcdf8
Renamned boundary operators!
Martin Almquist <martin.almquist@it.uu.se>
parents:
264
diff
changeset
|
8 e_r % Right boundary operator |
258
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 |
396 | 14 |
258
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
15 methods |
264
8a625c5a3633
Changed input parameter L (domain length) to lim (cell with domain boundaries)
Martin Almquist <martin.almquist@it.uu.se>
parents:
262
diff
changeset
|
16 function obj = D1Nonequidistant(m,lim,order,option) |
396 | 17 |
258
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 switch option |
396 | 23 |
258
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
24 case {'Accurate','accurate','A'} |
1301
8978521b0f06
Fix incorrect package name.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
1287
diff
changeset
|
25 [x,h] = sbp.grid.accurateBoundaryOptimizedGrid(lim,m,order); |
258
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
26 if order == 4 |
1286
4cb627c7fb90
Make D1Nonequidistant use the grid generation functions accurate/minimalBoundaryOptimizedGrid and remove grid generation from +implementations
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
402
diff
changeset
|
27 [obj.D1,obj.H] = ... |
4cb627c7fb90
Make D1Nonequidistant use the grid generation functions accurate/minimalBoundaryOptimizedGrid and remove grid generation from +implementations
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
402
diff
changeset
|
28 sbp.implementations.d1_noneq_4(m,h); |
258
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
29 elseif order == 6 |
1286
4cb627c7fb90
Make D1Nonequidistant use the grid generation functions accurate/minimalBoundaryOptimizedGrid and remove grid generation from +implementations
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
402
diff
changeset
|
30 [obj.D1,obj.H] = ... |
4cb627c7fb90
Make D1Nonequidistant use the grid generation functions accurate/minimalBoundaryOptimizedGrid and remove grid generation from +implementations
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
402
diff
changeset
|
31 sbp.implementations.d1_noneq_6(m,h); |
258
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
32 elseif order == 8 |
1286
4cb627c7fb90
Make D1Nonequidistant use the grid generation functions accurate/minimalBoundaryOptimizedGrid and remove grid generation from +implementations
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
402
diff
changeset
|
33 [obj.D1,obj.H] = ... |
4cb627c7fb90
Make D1Nonequidistant use the grid generation functions accurate/minimalBoundaryOptimizedGrid and remove grid generation from +implementations
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
402
diff
changeset
|
34 sbp.implementations.d1_noneq_8(m,h); |
258
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
35 elseif order == 10 |
1286
4cb627c7fb90
Make D1Nonequidistant use the grid generation functions accurate/minimalBoundaryOptimizedGrid and remove grid generation from +implementations
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
402
diff
changeset
|
36 [obj.D1,obj.H] = ... |
4cb627c7fb90
Make D1Nonequidistant use the grid generation functions accurate/minimalBoundaryOptimizedGrid and remove grid generation from +implementations
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
402
diff
changeset
|
37 sbp.implementations.d1_noneq_10(m,h); |
258
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
38 elseif order == 12 |
1286
4cb627c7fb90
Make D1Nonequidistant use the grid generation functions accurate/minimalBoundaryOptimizedGrid and remove grid generation from +implementations
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
402
diff
changeset
|
39 [obj.D1,obj.H] = ... |
4cb627c7fb90
Make D1Nonequidistant use the grid generation functions accurate/minimalBoundaryOptimizedGrid and remove grid generation from +implementations
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
402
diff
changeset
|
40 sbp.implementations.d1_noneq_12(m,h); |
258
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
41 else |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
42 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
|
43 end |
396 | 44 |
258
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
45 case {'Minimal','minimal','M'} |
1301
8978521b0f06
Fix incorrect package name.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
1287
diff
changeset
|
46 [x,h] = sbp.grid.minimalBoundaryOptimizedGrid(lim,m,order); |
258
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
47 if order == 4 |
1286
4cb627c7fb90
Make D1Nonequidistant use the grid generation functions accurate/minimalBoundaryOptimizedGrid and remove grid generation from +implementations
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
402
diff
changeset
|
48 [obj.D1,obj.H] = ... |
4cb627c7fb90
Make D1Nonequidistant use the grid generation functions accurate/minimalBoundaryOptimizedGrid and remove grid generation from +implementations
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
402
diff
changeset
|
49 sbp.implementations.d1_noneq_minimal_4(m,h); |
258
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
50 elseif order == 6 |
1286
4cb627c7fb90
Make D1Nonequidistant use the grid generation functions accurate/minimalBoundaryOptimizedGrid and remove grid generation from +implementations
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
402
diff
changeset
|
51 [obj.D1,obj.H] = ... |
4cb627c7fb90
Make D1Nonequidistant use the grid generation functions accurate/minimalBoundaryOptimizedGrid and remove grid generation from +implementations
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
402
diff
changeset
|
52 sbp.implementations.d1_noneq_minimal_6(m,h); |
258
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
53 elseif order == 8 |
1286
4cb627c7fb90
Make D1Nonequidistant use the grid generation functions accurate/minimalBoundaryOptimizedGrid and remove grid generation from +implementations
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
402
diff
changeset
|
54 [obj.D1,obj.H] = ... |
4cb627c7fb90
Make D1Nonequidistant use the grid generation functions accurate/minimalBoundaryOptimizedGrid and remove grid generation from +implementations
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
402
diff
changeset
|
55 sbp.implementations.d1_noneq_minimal_8(m,h); |
258
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
56 elseif order == 10 |
1286
4cb627c7fb90
Make D1Nonequidistant use the grid generation functions accurate/minimalBoundaryOptimizedGrid and remove grid generation from +implementations
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
402
diff
changeset
|
57 [obj.D1,obj.H] = ... |
4cb627c7fb90
Make D1Nonequidistant use the grid generation functions accurate/minimalBoundaryOptimizedGrid and remove grid generation from +implementations
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
402
diff
changeset
|
58 sbp.implementations.d1_noneq_minimal_10(m,h); |
258
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
59 elseif order == 12 |
1286
4cb627c7fb90
Make D1Nonequidistant use the grid generation functions accurate/minimalBoundaryOptimizedGrid and remove grid generation from +implementations
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
402
diff
changeset
|
60 [obj.D1,obj.H] = ... |
4cb627c7fb90
Make D1Nonequidistant use the grid generation functions accurate/minimalBoundaryOptimizedGrid and remove grid generation from +implementations
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
402
diff
changeset
|
61 sbp.implementations.d1_noneq_minimal_12(m,h); |
258
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
62 else |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
63 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
|
64 end |
396 | 65 |
258
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
66 end |
1286
4cb627c7fb90
Make D1Nonequidistant use the grid generation functions accurate/minimalBoundaryOptimizedGrid and remove grid generation from +implementations
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
402
diff
changeset
|
67 obj.h = h; |
1287
38653d26225c
Make accurate/minimalBoundaryOptimizedGrid take the domain limits as input
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
1286
diff
changeset
|
68 obj.x = x; |
396 | 69 |
268
4b9310edcdf8
Renamned boundary operators!
Martin Almquist <martin.almquist@it.uu.se>
parents:
264
diff
changeset
|
70 obj.e_l = sparse(m,1); |
4b9310edcdf8
Renamned boundary operators!
Martin Almquist <martin.almquist@it.uu.se>
parents:
264
diff
changeset
|
71 obj.e_r = sparse(m,1); |
4b9310edcdf8
Renamned boundary operators!
Martin Almquist <martin.almquist@it.uu.se>
parents:
264
diff
changeset
|
72 obj.e_l(1) = 1; |
4b9310edcdf8
Renamned boundary operators!
Martin Almquist <martin.almquist@it.uu.se>
parents:
264
diff
changeset
|
73 obj.e_r(m) = 1; |
396 | 74 |
258
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
75 obj.HI = inv(obj.H); |
268
4b9310edcdf8
Renamned boundary operators!
Martin Almquist <martin.almquist@it.uu.se>
parents:
264
diff
changeset
|
76 obj.Q = obj.H*obj.D1 - obj.e_r*obj.e_r' + obj.e_l*obj.e_l'; |
396 | 77 |
259
a94bb3d92aba
Added empty borrowing property to nonequidstant class.
Martin Almquist <martin.almquist@it.uu.se>
parents:
258
diff
changeset
|
78 obj.borrowing = []; |
402
bc78157c89cb
Add string methods to some sbp classes.
Jonatan Werpers <jonatan@werpers.com>
parents:
397
diff
changeset
|
79 |
bc78157c89cb
Add string methods to some sbp classes.
Jonatan Werpers <jonatan@werpers.com>
parents:
397
diff
changeset
|
80 end |
bc78157c89cb
Add string methods to some sbp classes.
Jonatan Werpers <jonatan@werpers.com>
parents:
397
diff
changeset
|
81 |
bc78157c89cb
Add string methods to some sbp classes.
Jonatan Werpers <jonatan@werpers.com>
parents:
397
diff
changeset
|
82 function str = string(obj) |
bc78157c89cb
Add string methods to some sbp classes.
Jonatan Werpers <jonatan@werpers.com>
parents:
397
diff
changeset
|
83 str = [class(obj) '_' num2str(obj.order)]; |
258
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
84 end |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
85 end |
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
86 end |