annotate +sbp/D1Nonequidistant.m @ 1286:4cb627c7fb90 feature/boundary_optimized_grids

Make D1Nonequidistant use the grid generation functions accurate/minimalBoundaryOptimizedGrid and remove grid generation from +implementations
author Vidar Stiernström <vidar.stiernstrom@it.uu.se>
date Wed, 01 Jul 2020 13:43:32 +0200
parents bc78157c89cb
children 38653d26225c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
3fdfad20037e Remove whitespace.
Jonatan Werpers <jonatan@werpers.com>
parents: 268
diff changeset
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
3fdfad20037e Remove whitespace.
Jonatan Werpers <jonatan@werpers.com>
parents: 268
diff changeset
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
396
3fdfad20037e Remove whitespace.
Jonatan Werpers <jonatan@werpers.com>
parents: 268
diff changeset
22
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
23 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: 262
diff changeset
24 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: 262
diff changeset
25 L = x_r-x_l;
396
3fdfad20037e Remove whitespace.
Jonatan Werpers <jonatan@werpers.com>
parents: 268
diff changeset
26
258
a8d89688ba01 Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
27 switch option
396
3fdfad20037e Remove whitespace.
Jonatan Werpers <jonatan@werpers.com>
parents: 268
diff changeset
28
258
a8d89688ba01 Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
29 case {'Accurate','accurate','A'}
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 [x,h] = sbp.util.accurateBoundaryOptimizedGrid(L,m,order);
258
a8d89688ba01 Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
31 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
32 [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
33 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
34 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
35 [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
36 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
37 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
38 [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
39 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
40 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
41 [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
42 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
43 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
44 [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
45 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
46 else
a8d89688ba01 Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
47 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
48 end
396
3fdfad20037e Remove whitespace.
Jonatan Werpers <jonatan@werpers.com>
parents: 268
diff changeset
49
258
a8d89688ba01 Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
50 case {'Minimal','minimal','M'}
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 [x,h] = sbp.util.minimalBoundaryOptimizedGrid(L,m,order);
258
a8d89688ba01 Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
52 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
53 [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
54 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
55 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
56 [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
57 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
58 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
59 [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
60 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
61 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
62 [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
63 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
64 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
65 [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
66 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
67 else
a8d89688ba01 Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
68 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
69 end
396
3fdfad20037e Remove whitespace.
Jonatan Werpers <jonatan@werpers.com>
parents: 268
diff changeset
70
258
a8d89688ba01 Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
71 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
72 obj.h = 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
73 obj.x = x + x_l;
396
3fdfad20037e Remove whitespace.
Jonatan Werpers <jonatan@werpers.com>
parents: 268
diff changeset
74
268
4b9310edcdf8 Renamned boundary operators!
Martin Almquist <martin.almquist@it.uu.se>
parents: 264
diff changeset
75 obj.e_l = sparse(m,1);
4b9310edcdf8 Renamned boundary operators!
Martin Almquist <martin.almquist@it.uu.se>
parents: 264
diff changeset
76 obj.e_r = sparse(m,1);
4b9310edcdf8 Renamned boundary operators!
Martin Almquist <martin.almquist@it.uu.se>
parents: 264
diff changeset
77 obj.e_l(1) = 1;
4b9310edcdf8 Renamned boundary operators!
Martin Almquist <martin.almquist@it.uu.se>
parents: 264
diff changeset
78 obj.e_r(m) = 1;
396
3fdfad20037e Remove whitespace.
Jonatan Werpers <jonatan@werpers.com>
parents: 268
diff changeset
79
258
a8d89688ba01 Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
80 obj.HI = inv(obj.H);
268
4b9310edcdf8 Renamned boundary operators!
Martin Almquist <martin.almquist@it.uu.se>
parents: 264
diff changeset
81 obj.Q = obj.H*obj.D1 - obj.e_r*obj.e_r' + obj.e_l*obj.e_l';
396
3fdfad20037e Remove whitespace.
Jonatan Werpers <jonatan@werpers.com>
parents: 268
diff changeset
82
259
a94bb3d92aba Added empty borrowing property to nonequidstant class.
Martin Almquist <martin.almquist@it.uu.se>
parents: 258
diff changeset
83 obj.borrowing = [];
402
bc78157c89cb Add string methods to some sbp classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 397
diff changeset
84
bc78157c89cb Add string methods to some sbp classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 397
diff changeset
85 end
bc78157c89cb Add string methods to some sbp classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 397
diff changeset
86
bc78157c89cb Add string methods to some sbp classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 397
diff changeset
87 function str = string(obj)
bc78157c89cb Add string methods to some sbp classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 397
diff changeset
88 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
89 end
a8d89688ba01 Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
90 end
a8d89688ba01 Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
91 end