Mercurial > repos > public > sbplib
comparison +sbp/+implementations/d4_compatible_halfvariable_4.m @ 267:f7ac3cd6eeaa operator_remake
Sparsified all implementation files, removed all matlab warnings, fixed small bugs on minimum grid points.
author | Martin Almquist <martin.almquist@it.uu.se> |
---|---|
date | Fri, 09 Sep 2016 14:53:41 +0200 |
parents | bfa130b7abf6 |
children |
comparison
equal
deleted
inserted
replaced
266:bfa130b7abf6 | 267:f7ac3cd6eeaa |
---|---|
11 | 11 |
12 %m=20; %problemstorlek | 12 %m=20; %problemstorlek |
13 %h=1/(m-1); | 13 %h=1/(m-1); |
14 %h=1; | 14 %h=1; |
15 | 15 |
16 BP = 4; | 16 BP = 6; |
17 if(m<2*BP) | 17 if(m<2*BP) |
18 error(['Operator requires at least ' num2str(2*BP) ' grid points']); | 18 error(['Operator requires at least ' num2str(2*BP) ' grid points']); |
19 end | 19 end |
20 | 20 |
21 c=ones(m,1); | 21 % c=ones(m,1); |
22 | 22 |
23 | 23 |
24 H=diag(ones(m,1),0); | 24 H=speye(m,m); |
25 H(1:4,1:4)=diag([17/48 59/48 43/48 49/48]); | 25 H(1:4,1:4)=diag([17/48 59/48 43/48 49/48]); |
26 H(m-3:m,m-3:m)=fliplr(flipud(diag([17/48 59/48 43/48 49/48]))); | 26 H(m-3:m,m-3:m)=rot90(diag([17/48 59/48 43/48 49/48]),2); |
27 H=H*h; | 27 H=H*h; |
28 HI=inv(H); | 28 HI=inv(H); |
29 HI = sparse(HI); | 29 HI = sparse(HI); |
30 | 30 |
31 | 31 |
32 | 32 |
33 Q=(-1/12*diag(ones(m-2,1),2)+8/12*diag(ones(m-1,1),1)-8/12*diag(ones(m-1,1),-1)+1/12*diag(ones(m-2,1),-2)); | 33 % Q=(-1/12*diag(ones(m-2,1),2)+8/12*diag(ones(m-1,1),1)-8/12*diag(ones(m-1,1),-1)+1/12*diag(ones(m-2,1),-2)); |
34 Q_U = [0 0.59e2 / 0.96e2 -0.1e1 / 0.12e2 -0.1e1 / 0.32e2; -0.59e2 / 0.96e2 0 0.59e2 / 0.96e2 0; 0.1e1 / 0.12e2 -0.59e2 / 0.96e2 0 0.59e2 / 0.96e2; 0.1e1 / 0.32e2 0 -0.59e2 / 0.96e2 0;]; | 34 e=ones(m,1); |
35 Q(1:4,1:4)=Q_U; | 35 % Q=spdiags([e -8*e 0*e 8*e -e], -2:2, m, m)/12; |
36 Q(m-3:m,m-3:m)=flipud( fliplr(-Q_U(1:4,1:4) ) ); | 36 % Q_U = [0 0.59e2 / 0.96e2 -0.1e1 / 0.12e2 -0.1e1 / 0.32e2; -0.59e2 / 0.96e2 0 0.59e2 / 0.96e2 0; 0.1e1 / 0.12e2 -0.59e2 / 0.96e2 0 0.59e2 / 0.96e2; 0.1e1 / 0.32e2 0 -0.59e2 / 0.96e2 0;]; |
37 % Q(1:4,1:4)=Q_U; | |
38 % Q(m-3:m,m-3:m)=rot90( -Q_U(1:4,1:4) ,2 ); | |
37 | 39 |
38 e_1=zeros(m,1);e_1(1)=1; | 40 e_1=sparse(m,1);e_1(1)=1; |
39 e_m=zeros(m,1);e_m(m)=1; | 41 e_m=sparse(m,1);e_m(m)=1; |
40 | 42 |
41 D1=HI*(Q-1/2*e_1*e_1'+1/2*e_m*e_m') ; | 43 % D1=HI*(Q-1/2*(e_1*e_1')+1/2*(e_m*e_m')) ; |
42 | 44 |
43 M_U=[0.9e1 / 0.8e1 -0.59e2 / 0.48e2 0.1e1 / 0.12e2 0.1e1 / 0.48e2; -0.59e2 / 0.48e2 0.59e2 / 0.24e2 -0.59e2 / 0.48e2 0; 0.1e1 / 0.12e2 -0.59e2 / 0.48e2 0.55e2 / 0.24e2 -0.59e2 / 0.48e2; 0.1e1 / 0.48e2 0 -0.59e2 / 0.48e2 0.59e2 / 0.24e2;]; | 45 M_U=[0.9e1 / 0.8e1 -0.59e2 / 0.48e2 0.1e1 / 0.12e2 0.1e1 / 0.48e2; -0.59e2 / 0.48e2 0.59e2 / 0.24e2 -0.59e2 / 0.48e2 0; 0.1e1 / 0.12e2 -0.59e2 / 0.48e2 0.55e2 / 0.24e2 -0.59e2 / 0.48e2; 0.1e1 / 0.48e2 0 -0.59e2 / 0.48e2 0.59e2 / 0.24e2;]; |
44 M=-(-1/12*diag(ones(m-2,1),2)+16/12*diag(ones(m-1,1),1)+16/12*diag(ones(m-1,1),-1)-1/12*diag(ones(m-2,1),-2)-30/12*diag(ones(m,1),0)); | 46 % M=-(-1/12*diag(ones(m-2,1),2)+16/12*diag(ones(m-1,1),1)+16/12*diag(ones(m-1,1),-1)-1/12*diag(ones(m-2,1),-2)-30/12*diag(ones(m,1),0)); |
47 M=-spdiags([-e 16*e -30*e 16*e -e], -2:2, m, m)/12; | |
45 | 48 |
46 M(1:4,1:4)=M_U; | 49 M(1:4,1:4)=M_U; |
47 | 50 |
48 M(m-3:m,m-3:m)=flipud( fliplr( M_U ) ); | 51 M(m-3:m,m-3:m)=rot90( M_U ,2 ); |
49 M=M/h; | 52 M=M/h; |
50 | 53 |
51 S_U=[-0.11e2 / 0.6e1 3 -0.3e1 / 0.2e1 0.1e1 / 0.3e1;]/h; | 54 S_U=[-0.11e2 / 0.6e1 3 -0.3e1 / 0.2e1 0.1e1 / 0.3e1;]/h; |
52 S_1=zeros(1,m); | 55 S_1=sparse(1,m); |
53 S_1(1:4)=S_U; | 56 S_1(1:4)=S_U; |
54 S_m=zeros(1,m); | 57 S_m=sparse(1,m); |
55 S_m(m-3:m)=fliplr(-S_U); | 58 S_m(m-3:m)=fliplr(-S_U); |
56 S_1 = S_1'; | 59 S_1 = S_1'; |
57 S_m = S_m'; | 60 S_m = S_m'; |
58 | 61 |
59 | 62 |
122 end | 125 end |
123 D2 = @D2_fun; | 126 D2 = @D2_fun; |
124 | 127 |
125 | 128 |
126 S2_U=[2 -5 4 -1;]/h^2; | 129 S2_U=[2 -5 4 -1;]/h^2; |
127 S2_1=zeros(1,m); | 130 S2_1=sparse(1,m); |
128 S2_1(1:4)=S2_U; | 131 S2_1(1:4)=S2_U; |
129 S2_m=zeros(1,m); | 132 S2_m=sparse(1,m); |
130 S2_m(m-3:m)=fliplr(S2_U); | 133 S2_m(m-3:m)=fliplr(S2_U); |
131 S2_1 = S2_1'; | 134 S2_1 = S2_1'; |
132 S2_m = S2_m'; | 135 S2_m = S2_m'; |
133 | 136 |
134 m3=-1/6;m2=2;m1=-13/2;m0=28/3; | 137 m3=-1/6;m2=2;m1=-13/2;m0=28/3; |
135 M4=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); | 138 % M4=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); |
139 stencil = [m3,m2,m1,m0,m1,m2,m3]; | |
140 d = (length(stencil)-1)/2; | |
141 diags = -d:d; | |
142 M4 = stripeMatrix(stencil, diags, m); | |
136 | 143 |
137 %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)); | 144 %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)); |
138 | 145 |
139 M4_U=[0.5762947e7 / 0.2316384e7 -0.6374287e7 / 0.1158192e7 0.573947e6 / 0.165456e6 -0.124637e6 / 0.289548e6 0.67979e5 / 0.2316384e7 -0.60257e5 / 0.1158192e7; -0.6374287e7 / 0.1158192e7 0.30392389e8 / 0.2316384e7 -0.2735053e7 / 0.289548e6 0.273109e6 / 0.165456e6 0.83767e5 / 0.1158192e7 0.245549e6 / 0.2316384e7; 0.573947e6 / 0.165456e6 -0.2735053e7 / 0.289548e6 0.5266855e7 / 0.579096e6 -0.1099715e7 / 0.289548e6 0.869293e6 / 0.1158192e7 -0.10195e5 / 0.144774e6; -0.124637e6 / 0.289548e6 0.273109e6 / 0.165456e6 -0.1099715e7 / 0.289548e6 0.3259225e7 / 0.579096e6 -0.324229e6 / 0.72387e5 0.1847891e7 / 0.1158192e7; 0.67979e5 / 0.2316384e7 0.83767e5 / 0.1158192e7 0.869293e6 / 0.1158192e7 -0.324229e6 / 0.72387e5 0.2626501e7 / 0.330912e6 -0.7115491e7 / 0.1158192e7; -0.60257e5 / 0.1158192e7 0.245549e6 / 0.2316384e7 -0.10195e5 / 0.144774e6 0.1847891e7 / 0.1158192e7 -0.7115491e7 / 0.1158192e7 0.21383077e8 / 0.2316384e7;]; | 146 M4_U=[0.5762947e7 / 0.2316384e7 -0.6374287e7 / 0.1158192e7 0.573947e6 / 0.165456e6 -0.124637e6 / 0.289548e6 0.67979e5 / 0.2316384e7 -0.60257e5 / 0.1158192e7; -0.6374287e7 / 0.1158192e7 0.30392389e8 / 0.2316384e7 -0.2735053e7 / 0.289548e6 0.273109e6 / 0.165456e6 0.83767e5 / 0.1158192e7 0.245549e6 / 0.2316384e7; 0.573947e6 / 0.165456e6 -0.2735053e7 / 0.289548e6 0.5266855e7 / 0.579096e6 -0.1099715e7 / 0.289548e6 0.869293e6 / 0.1158192e7 -0.10195e5 / 0.144774e6; -0.124637e6 / 0.289548e6 0.273109e6 / 0.165456e6 -0.1099715e7 / 0.289548e6 0.3259225e7 / 0.579096e6 -0.324229e6 / 0.72387e5 0.1847891e7 / 0.1158192e7; 0.67979e5 / 0.2316384e7 0.83767e5 / 0.1158192e7 0.869293e6 / 0.1158192e7 -0.324229e6 / 0.72387e5 0.2626501e7 / 0.330912e6 -0.7115491e7 / 0.1158192e7; -0.60257e5 / 0.1158192e7 0.245549e6 / 0.2316384e7 -0.10195e5 / 0.144774e6 0.1847891e7 / 0.1158192e7 -0.7115491e7 / 0.1158192e7 0.21383077e8 / 0.2316384e7;]; |
140 | 147 |
141 M4(1:6,1:6)=M4_U; | 148 M4(1:6,1:6)=M4_U; |
142 | 149 |
143 M4(m-5:m,m-5:m)=flipud( fliplr( M4_U ) ); | 150 M4(m-5:m,m-5:m)=rot90( M4_U ,2 ); |
144 M4=M4/h^3; | 151 M4=M4/h^3; |
145 | 152 |
146 S3_U=[-1 3 -3 1;]/h^3; | 153 S3_U=[-1 3 -3 1;]/h^3; |
147 S3_1=zeros(1,m); | 154 S3_1=sparse(1,m); |
148 S3_1(1:4)=S3_U; | 155 S3_1(1:4)=S3_U; |
149 S3_m=zeros(1,m); | 156 S3_m=sparse(1,m); |
150 S3_m(m-3:m)=fliplr(-S3_U); | 157 S3_m(m-3:m)=fliplr(-S3_U); |
151 S3_1 = S3_1'; | 158 S3_1 = S3_1'; |
152 S3_m = S3_m'; | 159 S3_m = S3_m'; |
153 | 160 |
154 D4=HI*(M4-e_1*S3_1'+e_m*S3_m' + S_1*S2_1'-S_m*S2_m'); | 161 D4=HI*(M4-e_1*S3_1'+e_m*S3_m' + S_1*S2_1'-S_m*S2_m'); |