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
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'}
396
3fdfad20037e Remove whitespace.
Jonatan Werpers <jonatan@werpers.com>
parents: 268
diff changeset
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
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'}
396
3fdfad20037e Remove whitespace.
Jonatan Werpers <jonatan@werpers.com>
parents: 268
diff changeset
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
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
396
3fdfad20037e Remove whitespace.
Jonatan Werpers <jonatan@werpers.com>
parents: 268
diff changeset
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
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