comparison +sbp/+implementations/d4_variable_6.m @ 317:c7ac7e12de8a feature/beams

Clean up 6th order.
author Jonatan Werpers <jonatan@werpers.com>
date Sun, 25 Sep 2016 16:52:26 +0200
parents 203afa156f59
children 99005a80b4c2
comparison
equal deleted inserted replaced
316:203afa156f59 317:c7ac7e12de8a
19 BP = 8; 19 BP = 8;
20 if(m<2*BP) 20 if(m<2*BP)
21 error(['Operator requires at least ' num2str(2*BP) ' grid points']); 21 error(['Operator requires at least ' num2str(2*BP) ' grid points']);
22 end 22 end
23 23
24 24 % Norm
25 H=speye(m,m); 25 Hv = ones(m,1);
26 H(1:6,1:6)=diag([13649/43200,12013/8640,2711/4320,5359/4320,7877/8640, 43801/43200]); 26 Hv(1:6) = [13649/43200,12013/8640,2711/4320,5359/4320,7877/8640, 43801/43200];
27 H(m-5:m,m-5:m)=rot90(diag([13649/43200,12013/8640,2711/4320,5359/4320,7877/8640,43801/43200]),2); 27 Hv(m-5:m) = rot90(Hv(1:6),2);
28 Hv = h*Hv;
29 H = spdiag(Hv, 0);
30 HI = spdiag(1./Hv, 0);
28 31
29 32
33 % Boundary operators
34 e_l = sparse(m,1);
35 e_l(1) = 1;
36 e_r = rot90(e_l, 2);
37
38 d1_l = sparse(m,1);
39 d1_l(1:5) = [-25/12, 4, -3, 4/3, -1/4]/h;
40 d1_r = -rot90(d1_l);
41
42 d2_l = sparse(m,1);
43 d2_l(1:5) = [0.35e2/0.12e2 -0.26e2/0.3e1 0.19e2/0.2e1 -0.14e2/0.3e1 0.11e2/0.12e2;]/h^2;
44 d2_r = rot90(d2_l, 2);
45
46 d3_l = sparse(m,1);
47 d3_l(1:5) = [-5/2 9 -12 7 -3/2]/h^3;
48 d3_r = -rot90(d3_l, 2);
49
50
51 % First derivtive
30 % x1=0.70127127127127; 52 % x1=0.70127127127127;
31 53
32 54
33 % D1=(1/60*diag(ones(m-3,1),3)-9/60*diag(ones(m-2,1),2)+45/60*diag(ones(m-1,1),1)-45/60*diag(ones(m-1,1),-1)+9/60*diag(ones(m-2,1),-2)-1/60*diag(ones(m-3,1),-3)); 55 % D1=(1/60*diag(ones(m-3,1),3)-9/60*diag(ones(m-2,1),2)+45/60*diag(ones(m-1,1),1)-45/60*diag(ones(m-1,1),-1)+9/60*diag(ones(m-2,1),-2)-1/60*diag(ones(m-3,1),-3));
34 % 56 %
53 % -259200/43801*x1+182261/43801, 172800/43801*x1-710473/262806, ... 75 % -259200/43801*x1+182261/43801, 172800/43801*x1-710473/262806, ...
54 % -43200/43801*x1, 0, 32400/43801, -6480/43801, 720/43801]; 76 % -43200/43801*x1, 0, 32400/43801, -6480/43801, 720/43801];
55 % D1(m-5:m,m-8:m)=rot90( -D1(1:6,1:9),2); 77 % D1(m-5:m,m-8:m)=rot90( -D1(1:6,1:9),2);
56 % D1=D1/h; 78 % D1=D1/h;
57 79
58 e_1=sparse(m,1);
59 e_1(1)=1;
60 e_m=sparse(m,1);
61 e_m(m)=1;
62 80
63 S_U=[-25/12, 4, -3, 4/3, -1/4]/h; 81 % Second derivative
64 S_1=sparse(1,m);
65 S_1(1:5)=S_U;
66 S_m=sparse(1,m);
67 S_m(m-4:m)=fliplr(-S_U);
68 S_1 = S_1';
69 S_m = S_m';
70 e_1 = sparse(e_1);
71 e_m = sparse(e_m);
72 S_1 = sparse(S_1);
73 S_m = sparse(S_m);
74 S2_U=[0.35e2/0.12e2 -0.26e2/0.3e1 0.19e2/0.2e1 -0.14e2/0.3e1 0.11e2/0.12e2;]/h^2;
75 S2_1=sparse(1,m);
76 S2_1(1:5)=S2_U;
77 S2_m=sparse(1,m);
78 S2_m(m-4:m)=fliplr(S2_U);
79 S2_1 = S2_1';
80 S2_m = S2_m';
81 S3_U = [-5/2 9 -12 7 -3/2]/h^3;
82 S3_1 = sparse(1,m);
83 S3_1(1:5)=S3_U;
84 S3_m = sparse(1,m);
85 S3_m(m-4:m) = fliplr(-S3_U);
86 S3_1 = S3_1';
87 S3_m = S3_m';
88
89
90 %DS=sparse(m,m);
91 %DS(1,1:5)=-[-25/12, 4, -3, 4/3, -1/4];
92 %DS(m,m-4:m)=fliplr(-[-25/12, 4, -3, 4/3, -1/4]);
93 %DS=diag(c)*DS/h;
94
95
96 H=h*H;
97 HI=inv(H);
98
99
100 M=sparse(m,m); 82 M=sparse(m,m);
101 83
102 scheme_width = 7; 84 scheme_width = 7;
103 scheme_radius = (scheme_width-1)/2; 85 scheme_radius = (scheme_width-1)/2;
104 r = (1+scheme_radius):(m-scheme_radius); 86 r = (1+scheme_radius):(m-scheme_radius);
148 D2=HI*(-M-diag(c)*e_1*S_1'+diag(c)*e_m*S_m'); 130 D2=HI*(-M-diag(c)*e_1*S_1'+diag(c)*e_m*S_m');
149 end 131 end
150 D2 = @D2_fun; 132 D2 = @D2_fun;
151 133
152 134
153
154
155
156
157
158 % Fourth derivative, 1th order accurate at first 8 boundary points (still 135 % Fourth derivative, 1th order accurate at first 8 boundary points (still
159 % yield 5th order convergence if stable: for example u_tt=-u_xxxx 136 % yield 5th order convergence if stable: for example u_tt=-u_xxxx
160 137 stencil = [7/240, -2/5, 169/60, -122/15, 91/8, -122/15, 169/60, -2/5, 7/240];
161 m4=7/240; 138 diags = -4:4;
162 m3=-2/5;
163 m2=169/60;
164 m1=-122/15;
165 m0=91/8;
166 % M4=m4*(diag(ones(m-4,1),4)+diag(ones(m-4,1),-4))+m3*(diag(ones(m-3,1),3)+diag(ones(m-3,1),-3))+m2*(diag(ones(m-2,1),2)+diag(ones(m-2,1),-2))+m1*(diag(ones(m-1,1),1)+diag(ones(m-1,1),-1))+m0*diag(ones(m,1),0);
167 stencil = [m4,m3,m2,m1,m0,m1,m2,m3,m4];
168 d = (length(stencil)-1)/2;
169 diags = -d:d;
170 M4 = stripeMatrix(stencil, diags, m); 139 M4 = stripeMatrix(stencil, diags, m);
171
172 %M4=(-1/6*(diag(ones(m-3,1),3)+diag(ones(m-3,1),-3) ) + 2*(diag(ones(m-2,1),2)+diag(ones(m-2,1),-2)) -13/2*(diag(ones(m-1,1),1)+diag(ones(m-1,1),-1)) + 28/3*diag(ones(m,1),0));
173 140
174 M4_U = [ 141 M4_U = [
175 0.1394226315049e13/0.367201486080e12 -0.1137054563243e13/0.114750464400e12 0.16614189027367e14/0.1836007430400e13 -0.1104821700277e13/0.306001238400e12 0.1355771086763e13/0.1836007430400e13 -0.27818686453e11/0.459001857600e12 -0.40671054239e11/0.1836007430400e13 0.5442887371e10/0.306001238400e12; 142 0.1394226315049e13/0.367201486080e12 -0.1137054563243e13/0.114750464400e12 0.16614189027367e14/0.1836007430400e13 -0.1104821700277e13/0.306001238400e12 0.1355771086763e13/0.1836007430400e13 -0.27818686453e11/0.459001857600e12 -0.40671054239e11/0.1836007430400e13 0.5442887371e10/0.306001238400e12;
176 -0.1137054563243e13/0.114750464400e12 0.70616795535409e14/0.2570410402560e13 -0.173266854731041e15/0.6426026006400e13 0.28938615291031e14/0.2570410402560e13 -0.146167361863e12/0.71400288960e11 0.2793470836571e13/0.12852052012800e14 0.6219558097e10/0.428401733760e12 -0.7313844559e10/0.166909766400e12; 143 -0.1137054563243e13/0.114750464400e12 0.70616795535409e14/0.2570410402560e13 -0.173266854731041e15/0.6426026006400e13 0.28938615291031e14/0.2570410402560e13 -0.146167361863e12/0.71400288960e11 0.2793470836571e13/0.12852052012800e14 0.6219558097e10/0.428401733760e12 -0.7313844559e10/0.166909766400e12;
177 0.16614189027367e14/0.1836007430400e13 -0.173266854731041e15/0.6426026006400e13 0.378613061504779e15/0.12852052012800e14 -0.9117069604217e13/0.642602600640e12 0.632177582849e12/0.233673672960e12 -0.1057776382577e13/0.6426026006400e13 0.443019868399e12/0.4284017337600e13 -0.3707981e7/0.2318191200e10; 144 0.16614189027367e14/0.1836007430400e13 -0.173266854731041e15/0.6426026006400e13 0.378613061504779e15/0.12852052012800e14 -0.9117069604217e13/0.642602600640e12 0.632177582849e12/0.233673672960e12 -0.1057776382577e13/0.6426026006400e13 0.443019868399e12/0.4284017337600e13 -0.3707981e7/0.2318191200e10;
181 -0.40671054239e11/0.1836007430400e13 0.6219558097e10/0.428401733760e12 0.443019868399e12/0.4284017337600e13 -0.13731270505e11/0.64260260064e11 0.310830296467e12/0.171360693504e12 -0.14432772918527e14/0.2142008668800e13 0.27102479467823e14/0.2570410402560e13 -0.1216032192203e13/0.153000619200e12; 148 -0.40671054239e11/0.1836007430400e13 0.6219558097e10/0.428401733760e12 0.443019868399e12/0.4284017337600e13 -0.13731270505e11/0.64260260064e11 0.310830296467e12/0.171360693504e12 -0.14432772918527e14/0.2142008668800e13 0.27102479467823e14/0.2570410402560e13 -0.1216032192203e13/0.153000619200e12;
182 0.5442887371e10/0.306001238400e12 -0.7313844559e10/0.166909766400e12 -0.3707981e7/0.2318191200e10 0.2933596129e10/0.40800165120e11 -0.55284274391e11/0.183600743040e12 0.58102695589e11/0.22666758400e11 -0.1216032192203e13/0.153000619200e12 0.20799922829107e14/0.1836007430400e13; 149 0.5442887371e10/0.306001238400e12 -0.7313844559e10/0.166909766400e12 -0.3707981e7/0.2318191200e10 0.2933596129e10/0.40800165120e11 -0.55284274391e11/0.183600743040e12 0.58102695589e11/0.22666758400e11 -0.1216032192203e13/0.153000619200e12 0.20799922829107e14/0.1836007430400e13;
183 ]; 150 ];
184 151
185 M4(1:8,1:8) = M4_U; 152 M4(1:8,1:8) = M4_U;
186
187 M4(m-7:m,m-7:m) = rot90( M4_U ,2 ); 153 M4(m-7:m,m-7:m) = rot90( M4_U ,2 );
188 M4 = M4/h^3; 154 M4 = M4/h^3;
189 155
190 156
191 157
192 D4=HI*(M4-e_1*S3_1'+e_m*S3_m' + S_1*S2_1'-S_m*S2_m'); 158 D4=HI*(M4 - e_l*d3_l'+e_r*d3_r' + d1_l*d2_l'-d1_r*d2_r');
193
194 end 159 end