Mercurial > repos > public > sbplib
annotate +sbp/D1Nonequidistant.m @ 1031:2ef20d00b386 feature/advectionRV
For easier comparison, return both the first order and residual viscosity when evaluating the residual. Add the first order and residual viscosity to the state of the RungekuttaRV time steppers
author | Vidar Stiernström <vidar.stiernstrom@it.uu.se> |
---|---|
date | Thu, 17 Jan 2019 10:25:06 +0100 |
parents | bc78157c89cb |
children | 4cb627c7fb90 |
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 |
396 | 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 | 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 | 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'} |
396 | 30 |
258
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
31 if order == 4 |
261
6009f2712d13
Moved and renamned all implementations.
Martin Almquist <martin.almquist@it.uu.se>
parents:
259
diff
changeset
|
32 [obj.D1,obj.H,obj.x,obj.h] = ... |
6009f2712d13
Moved and renamned all implementations.
Martin Almquist <martin.almquist@it.uu.se>
parents:
259
diff
changeset
|
33 sbp.implementations.d1_noneq_4(m,L); |
258
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
34 elseif order == 6 |
261
6009f2712d13
Moved and renamned all implementations.
Martin Almquist <martin.almquist@it.uu.se>
parents:
259
diff
changeset
|
35 [obj.D1,obj.H,obj.x,obj.h] = ... |
6009f2712d13
Moved and renamned all implementations.
Martin Almquist <martin.almquist@it.uu.se>
parents:
259
diff
changeset
|
36 sbp.implementations.d1_noneq_6(m,L); |
258
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
37 elseif order == 8 |
261
6009f2712d13
Moved and renamned all implementations.
Martin Almquist <martin.almquist@it.uu.se>
parents:
259
diff
changeset
|
38 [obj.D1,obj.H,obj.x,obj.h] = ... |
6009f2712d13
Moved and renamned all implementations.
Martin Almquist <martin.almquist@it.uu.se>
parents:
259
diff
changeset
|
39 sbp.implementations.d1_noneq_8(m,L); |
258
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
40 elseif order == 10 |
261
6009f2712d13
Moved and renamned all implementations.
Martin Almquist <martin.almquist@it.uu.se>
parents:
259
diff
changeset
|
41 [obj.D1,obj.H,obj.x,obj.h] = ... |
6009f2712d13
Moved and renamned all implementations.
Martin Almquist <martin.almquist@it.uu.se>
parents:
259
diff
changeset
|
42 sbp.implementations.d1_noneq_10(m,L); |
258
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
43 elseif order == 12 |
261
6009f2712d13
Moved and renamned all implementations.
Martin Almquist <martin.almquist@it.uu.se>
parents:
259
diff
changeset
|
44 [obj.D1,obj.H,obj.x,obj.h] = ... |
6009f2712d13
Moved and renamned all implementations.
Martin Almquist <martin.almquist@it.uu.se>
parents:
259
diff
changeset
|
45 sbp.implementations.d1_noneq_12(m,L); |
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 | 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'} |
396 | 51 |
258
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
52 if order == 4 |
261
6009f2712d13
Moved and renamned all implementations.
Martin Almquist <martin.almquist@it.uu.se>
parents:
259
diff
changeset
|
53 [obj.D1,obj.H,obj.x,obj.h] = ... |
6009f2712d13
Moved and renamned all implementations.
Martin Almquist <martin.almquist@it.uu.se>
parents:
259
diff
changeset
|
54 sbp.implementations.d1_noneq_minimal_4(m,L); |
258
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
55 elseif order == 6 |
261
6009f2712d13
Moved and renamned all implementations.
Martin Almquist <martin.almquist@it.uu.se>
parents:
259
diff
changeset
|
56 [obj.D1,obj.H,obj.x,obj.h] = ... |
6009f2712d13
Moved and renamned all implementations.
Martin Almquist <martin.almquist@it.uu.se>
parents:
259
diff
changeset
|
57 sbp.implementations.d1_noneq_minimal_6(m,L); |
258
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
58 elseif order == 8 |
261
6009f2712d13
Moved and renamned all implementations.
Martin Almquist <martin.almquist@it.uu.se>
parents:
259
diff
changeset
|
59 [obj.D1,obj.H,obj.x,obj.h] = ... |
6009f2712d13
Moved and renamned all implementations.
Martin Almquist <martin.almquist@it.uu.se>
parents:
259
diff
changeset
|
60 sbp.implementations.d1_noneq_minimal_8(m,L); |
258
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
61 elseif order == 10 |
261
6009f2712d13
Moved and renamned all implementations.
Martin Almquist <martin.almquist@it.uu.se>
parents:
259
diff
changeset
|
62 [obj.D1,obj.H,obj.x,obj.h] = ... |
6009f2712d13
Moved and renamned all implementations.
Martin Almquist <martin.almquist@it.uu.se>
parents:
259
diff
changeset
|
63 sbp.implementations.d1_noneq_minimal_10(m,L); |
258
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
64 elseif order == 12 |
261
6009f2712d13
Moved and renamned all implementations.
Martin Almquist <martin.almquist@it.uu.se>
parents:
259
diff
changeset
|
65 [obj.D1,obj.H,obj.x,obj.h] = ... |
6009f2712d13
Moved and renamned all implementations.
Martin Almquist <martin.almquist@it.uu.se>
parents:
259
diff
changeset
|
66 sbp.implementations.d1_noneq_minimal_12(m,L); |
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 | 70 |
258
a8d89688ba01
Merged nonequidistant into one class and cleaned up.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff
changeset
|
71 end |
396 | 72 |
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
|
73 obj.x = obj.x + x_l; |
396 | 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 | 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 | 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 |