annotate +sbp/D2Variable.m @ 1210:5e7692ed7c7c feature/laplace_curvilinear_test

Add CG interface coupling
author Martin Almquist <malmquist@stanford.edu>
date Sun, 22 Sep 2019 19:05:17 -0700
parents 738de3a4058b
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
252
07fa0d6a05bb Renamned class files and added nonequidistant operators.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
1 classdef D2Variable < sbp.OpSet
07fa0d6a05bb Renamned class files and added nonequidistant operators.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
2 properties
263
21a180acbd49 Renamed standard class to D2Standard etc, Rewrote class properties.
Martin Almquist <martin.almquist@it.uu.se>
parents: 262
diff changeset
3 D1 % SBP operator approximating first derivative
21a180acbd49 Renamed standard class to D2Standard etc, Rewrote class properties.
Martin Almquist <martin.almquist@it.uu.se>
parents: 262
diff changeset
4 H % Norm matrix
21a180acbd49 Renamed standard class to D2Standard etc, Rewrote class properties.
Martin Almquist <martin.almquist@it.uu.se>
parents: 262
diff changeset
5 HI % H^-1
21a180acbd49 Renamed standard class to D2Standard etc, Rewrote class properties.
Martin Almquist <martin.almquist@it.uu.se>
parents: 262
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
263
21a180acbd49 Renamed standard class to D2Standard etc, Rewrote class properties.
Martin Almquist <martin.almquist@it.uu.se>
parents: 262
diff changeset
9 D2 % SBP operator for second derivative
21a180acbd49 Renamed standard class to D2Standard etc, Rewrote class properties.
Martin Almquist <martin.almquist@it.uu.se>
parents: 262
diff changeset
10 M % Norm matrix, second derivative
268
4b9310edcdf8 Renamned boundary operators!
Martin Almquist <martin.almquist@it.uu.se>
parents: 264
diff changeset
11 d1_l % Left boundary first derivative
4b9310edcdf8 Renamned boundary operators!
Martin Almquist <martin.almquist@it.uu.se>
parents: 264
diff changeset
12 d1_r % Right boundary first derivative
252
07fa0d6a05bb Renamned class files and added nonequidistant operators.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
13 m % Number of grid points.
07fa0d6a05bb Renamned class files and added nonequidistant operators.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
14 h % Step size
263
21a180acbd49 Renamed standard class to D2Standard etc, Rewrote class properties.
Martin Almquist <martin.almquist@it.uu.se>
parents: 262
diff changeset
15 x % grid
21a180acbd49 Renamed standard class to D2Standard etc, Rewrote class properties.
Martin Almquist <martin.almquist@it.uu.se>
parents: 262
diff changeset
16 borrowing % Struct with borrowing limits for different norm matrices
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
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
20 function obj = D2Variable(m,lim,order)
336
f36d172e196b Added missing string method.
Jonatan Werpers <jonatan@werpers.com>
parents: 268
diff changeset
21
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
22 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
23 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
24 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
25 obj.h = L/(m-1);
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 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
27
07fa0d6a05bb Renamned class files and added nonequidistant operators.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
28 switch order
670
52a9dedb9171 Add 6th order to D2variable.
Martin Almquist <malmquist@stanford.edu>
parents: 668
diff changeset
29
52a9dedb9171 Add 6th order to D2variable.
Martin Almquist <malmquist@stanford.edu>
parents: 668
diff changeset
30 case 6
52a9dedb9171 Add 6th order to D2variable.
Martin Almquist <malmquist@stanford.edu>
parents: 668
diff changeset
31
52a9dedb9171 Add 6th order to D2variable.
Martin Almquist <malmquist@stanford.edu>
parents: 668
diff changeset
32 [obj.H, obj.HI, obj.D1, obj.D2, ...
52a9dedb9171 Add 6th order to D2variable.
Martin Almquist <malmquist@stanford.edu>
parents: 668
diff changeset
33 ~, obj.e_l, obj.e_r, ~, ~, ~, ~, ~,...
52a9dedb9171 Add 6th order to D2variable.
Martin Almquist <malmquist@stanford.edu>
parents: 668
diff changeset
34 obj.d1_l, obj.d1_r] = ...
52a9dedb9171 Add 6th order to D2variable.
Martin Almquist <malmquist@stanford.edu>
parents: 668
diff changeset
35 sbp.implementations.d4_variable_6(m, obj.h);
1140
738de3a4058b Update borrowing constants so that M constants are from Virta2014 and R constants are for bp=2,4,7.
Martin Almquist <malmquist@stanford.edu>
parents: 670
diff changeset
36 % obj.borrowing.M.d1 = 0.1878;
738de3a4058b Update borrowing constants so that M constants are from Virta2014 and R constants are for bp=2,4,7.
Martin Almquist <malmquist@stanford.edu>
parents: 670
diff changeset
37
738de3a4058b Update borrowing constants so that M constants are from Virta2014 and R constants are for bp=2,4,7.
Martin Almquist <malmquist@stanford.edu>
parents: 670
diff changeset
38 % From Virta 2014:
738de3a4058b Update borrowing constants so that M constants are from Virta2014 and R constants are for bp=2,4,7.
Martin Almquist <malmquist@stanford.edu>
parents: 670
diff changeset
39 obj.borrowing.M.d1 = 0.1878687080;
738de3a4058b Update borrowing constants so that M constants are from Virta2014 and R constants are for bp=2,4,7.
Martin Almquist <malmquist@stanford.edu>
parents: 670
diff changeset
40
738de3a4058b Update borrowing constants so that M constants are from Virta2014 and R constants are for bp=2,4,7.
Martin Almquist <malmquist@stanford.edu>
parents: 670
diff changeset
41 obj.borrowing.R.delta_D = 0.369684816368150;
670
52a9dedb9171 Add 6th order to D2variable.
Martin Almquist <malmquist@stanford.edu>
parents: 668
diff changeset
42 % Borrowing e^T*D1 - d1 from R
52a9dedb9171 Add 6th order to D2variable.
Martin Almquist <malmquist@stanford.edu>
parents: 668
diff changeset
43
252
07fa0d6a05bb Renamned class files and added nonequidistant operators.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
44 case 4
268
4b9310edcdf8 Renamned boundary operators!
Martin Almquist <martin.almquist@it.uu.se>
parents: 264
diff changeset
45 [obj.H, obj.HI, obj.D1, obj.D2, obj.e_l,...
4b9310edcdf8 Renamned boundary operators!
Martin Almquist <martin.almquist@it.uu.se>
parents: 264
diff changeset
46 obj.e_r, obj.d1_l, obj.d1_r] = ...
263
21a180acbd49 Renamed standard class to D2Standard etc, Rewrote class properties.
Martin Almquist <martin.almquist@it.uu.se>
parents: 262
diff changeset
47 sbp.implementations.d2_variable_4(m,obj.h);
1140
738de3a4058b Update borrowing constants so that M constants are from Virta2014 and R constants are for bp=2,4,7.
Martin Almquist <malmquist@stanford.edu>
parents: 670
diff changeset
48
738de3a4058b Update borrowing constants so that M constants are from Virta2014 and R constants are for bp=2,4,7.
Martin Almquist <malmquist@stanford.edu>
parents: 670
diff changeset
49 % From Virta 2014:
389
42c89b5eedc0 Add borrowing constants for D2 operators in D4Variable
Jonatan Werpers <jonatan@werpers.com>
parents: 336
diff changeset
50 obj.borrowing.M.d1 = 0.2505765857;
668
43ea848b6aa1 Add borrowing constants to D2variable
Martin Almquist <malmquist@stanford.edu>
parents: 395
diff changeset
51
1140
738de3a4058b Update borrowing constants so that M constants are from Virta2014 and R constants are for bp=2,4,7.
Martin Almquist <malmquist@stanford.edu>
parents: 670
diff changeset
52 obj.borrowing.R.delta_D = 0.577587500088252;
668
43ea848b6aa1 Add borrowing constants to D2variable
Martin Almquist <malmquist@stanford.edu>
parents: 395
diff changeset
53 % Borrowing e^T*D1 - d1 from R
362
ded4156e53e2 Added 2nd order accurate 2nd derivative with variable coefficents in a separate implementation file, used by the class D2Variable.
Martin Almquist <martin.almquist@it.uu.se>
parents: 268
diff changeset
54 case 2
ded4156e53e2 Added 2nd order accurate 2nd derivative with variable coefficents in a separate implementation file, used by the class D2Variable.
Martin Almquist <martin.almquist@it.uu.se>
parents: 268
diff changeset
55 [obj.H, obj.HI, obj.D1, obj.D2, obj.e_l,...
ded4156e53e2 Added 2nd order accurate 2nd derivative with variable coefficents in a separate implementation file, used by the class D2Variable.
Martin Almquist <martin.almquist@it.uu.se>
parents: 268
diff changeset
56 obj.e_r, obj.d1_l, obj.d1_r] = ...
ded4156e53e2 Added 2nd order accurate 2nd derivative with variable coefficents in a separate implementation file, used by the class D2Variable.
Martin Almquist <martin.almquist@it.uu.se>
parents: 268
diff changeset
57 sbp.implementations.d2_variable_2(m,obj.h);
1140
738de3a4058b Update borrowing constants so that M constants are from Virta2014 and R constants are for bp=2,4,7.
Martin Almquist <malmquist@stanford.edu>
parents: 670
diff changeset
58 obj.borrowing.M.d1 = 0.3636363636;
362
ded4156e53e2 Added 2nd order accurate 2nd derivative with variable coefficents in a separate implementation file, used by the class D2Variable.
Martin Almquist <martin.almquist@it.uu.se>
parents: 268
diff changeset
59 % Borrowing const taken from Virta 2014
668
43ea848b6aa1 Add borrowing constants to D2variable
Martin Almquist <malmquist@stanford.edu>
parents: 395
diff changeset
60
1140
738de3a4058b Update borrowing constants so that M constants are from Virta2014 and R constants are for bp=2,4,7.
Martin Almquist <malmquist@stanford.edu>
parents: 670
diff changeset
61 obj.borrowing.R.delta_D = 1.000000000000000;
668
43ea848b6aa1 Add borrowing constants to D2variable
Martin Almquist <malmquist@stanford.edu>
parents: 395
diff changeset
62 % Borrowing e^T*D1 - d1 from R
1140
738de3a4058b Update borrowing constants so that M constants are from Virta2014 and R constants are for bp=2,4,7.
Martin Almquist <malmquist@stanford.edu>
parents: 670
diff changeset
63
252
07fa0d6a05bb Renamned class files and added nonequidistant operators.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
64 otherwise
07fa0d6a05bb Renamned class files and added nonequidistant operators.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
65 error('Invalid operator order %d.',order);
07fa0d6a05bb Renamned class files and added nonequidistant operators.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
66 end
668
43ea848b6aa1 Add borrowing constants to D2variable
Martin Almquist <malmquist@stanford.edu>
parents: 395
diff changeset
67 obj.borrowing.H11 = obj.H(1,1)/obj.h; % First element in H/h,
252
07fa0d6a05bb Renamned class files and added nonequidistant operators.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
68 obj.m = m;
263
21a180acbd49 Renamed standard class to D2Standard etc, Rewrote class properties.
Martin Almquist <martin.almquist@it.uu.se>
parents: 262
diff changeset
69 obj.M = [];
252
07fa0d6a05bb Renamned class files and added nonequidistant operators.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
70 end
336
f36d172e196b Added missing string method.
Jonatan Werpers <jonatan@werpers.com>
parents: 268
diff changeset
71 function str = string(obj)
f36d172e196b Added missing string method.
Jonatan Werpers <jonatan@werpers.com>
parents: 268
diff changeset
72 str = [class(obj) '_' num2str(obj.order)];
252
07fa0d6a05bb Renamned class files and added nonequidistant operators.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
73 end
07fa0d6a05bb Renamned class files and added nonequidistant operators.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
74 end
07fa0d6a05bb Renamned class files and added nonequidistant operators.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
75
336
f36d172e196b Added missing string method.
Jonatan Werpers <jonatan@werpers.com>
parents: 268
diff changeset
76
252
07fa0d6a05bb Renamned class files and added nonequidistant operators.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
77 end
07fa0d6a05bb Renamned class files and added nonequidistant operators.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
78
07fa0d6a05bb Renamned class files and added nonequidistant operators.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
79
07fa0d6a05bb Renamned class files and added nonequidistant operators.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
80
07fa0d6a05bb Renamned class files and added nonequidistant operators.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
81
07fa0d6a05bb Renamned class files and added nonequidistant operators.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
82