Mercurial > repos > public > sbplib
diff +sbp/higher_variable4_min_boundary_points.m @ 249:02423f9323c6 feature/beams
Started modifying operator files.
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Mon, 05 Sep 2016 16:38:41 +0200 |
parents | fe26791489e0 |
children |
line wrap: on
line diff
--- a/+sbp/higher_variable4_min_boundary_points.m Mon Sep 05 16:34:22 2016 +0200 +++ b/+sbp/higher_variable4_min_boundary_points.m Mon Sep 05 16:38:41 2016 +0200 @@ -1,3 +1,4 @@ +function [H, HI, D2, D4, e_1, e_m, M4, S2_1, S2_m, S3_1, S3_m, S_1, S_m] = higher_variable4_min_boundary_points(m,h) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% 4:de ordn. SBP Finita differens %%% %%% operatorer framtagna av Mark Carpenter %%% @@ -11,32 +12,62 @@ %m=20; %problemstorlek %h=1/(m-1); %h=1; - -% x=1:h:m*h;x=x'; -% %c=x.^2/fac(2); -% x0=x.^0/fac(1); -% x1=x.^1/fac(1); -% x2=x.^2/fac(2); -% x3=x.^3/fac(3); -% x4=x.^4/fac(4); -% x5=x.^5/fac(5); -%c=ones(m,1); + +Hv = ones(m,1) +Hv(1:4) = [17/48 59/48 43/48 49/48]; +Hv(m-3:m) = rot90(Hv(1:4),2); +Hv = h * Hv; +H = spdiag(Hv,0); +HI = spdiag(1./Hv,0); + + +% Boundary operators +e_1 = sparse(m,1); +e_1(1) = 1; +e_m = rot90(e_1, 2); + +S_U=[-0.11e2 / 0.6e1 3 -0.3e1 / 0.2e1 0.1e1 / 0.3e1;]/h; +S_1=sparse(1,m); +S_1(1:4)=S_U; +S_m = -rot90(S_1, 2); + +S2_U=[2 -5 4 -1;]/h^2; +S2_1=sparse(1,m); +S2_1(1:4)=S2_U; +S2_m = rot90(S2_1, 2); - -H=diag(ones(m,1),0); -H(1:4,1:4)=diag([17/48 59/48 43/48 49/48]); -H(m-3:m,m-3:m)=fliplr(flipud(diag([17/48 59/48 43/48 49/48]))); -H=H*h; -HI=inv(H); +S3_U=[-1 3 -3 1;]/h^3; +S3_1=sparse(1,m); +S3_1(1:4)=S3_U; +S3_m = rot90(S3_1, 2); + + + + + - +q_diags = [-1, 0, 1, 2]; + q_stencil = [-1/3 -1/2 1 -1/6]; + Qp = stripeMatrix(q_stencil, q_diags,m); + + Q_U = [ + -1/24 17/24 -1/6; + -13/24 -1/4 23/24; + 1/12 -11/24 -11/24; + ]; + Qp(1:3,1:3)=Q_U; + Qp(m-2:m,m-2:m)=rot90(Q_U,2)'; %%% This is different from standard SBP + + Qm=-Qp'; + + 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)); 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;]; Q(1:4,1:4)=Q_U; Q(m-3:m,m-3:m)=flipud( fliplr(-Q_U(1:4,1:4) ) ); -e_1=zeros(m,1);e_1(1)=1; -e_m=zeros(m,1);e_m(m)=1; + + D1=HI*(Q-1/2*e_1*e_1'+1/2*e_m*e_m') ; @@ -47,13 +78,6 @@ M(m-3:m,m-3:m)=flipud( fliplr( M_U ) ); M=M/h; - -S_U=[-0.11e2 / 0.6e1 3 -0.3e1 / 0.2e1 0.1e1 / 0.3e1;]/h; -S_1=zeros(1,m); -S_1(1:4)=S_U; -S_m=zeros(1,m); -S_m(m-3:m)=fliplr(-S_U); - M=zeros(m,m); for i=4:m-3 @@ -67,72 +91,14 @@ M=M/h; D2=HI*(-M-c(1)*e_1*S_1+c(m)*e_m*S_m); - -S2_U=[2 -5 4 -1;]/h^2; -S2_1=zeros(1,m); -S2_1(1:4)=S2_U; -S2_m=zeros(1,m); -S2_m(m-3:m)=fliplr(S2_U); - m3=-1/6;m2=2;m1=-13/2;m0=28/3; 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); -%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)); M4_U=[0.8e1 / 0.3e1 -0.37e2 / 0.6e1 0.13e2 / 0.3e1 -0.5e1 / 0.6e1; -0.37e2 / 0.6e1 0.47e2 / 0.3e1 -13 0.11e2 / 0.3e1; 0.13e2 / 0.3e1 -13 0.44e2 / 0.3e1 -0.47e2 / 0.6e1; -0.5e1 / 0.6e1 0.11e2 / 0.3e1 -0.47e2 / 0.6e1 0.29e2 / 0.3e1;]; M4(1:4,1:4)=M4_U; M4(m-3:m,m-3:m)=flipud( fliplr( M4_U ) ); M4=M4/h^3; - -S3_U=[-1 3 -3 1;]/h^3; -S3_1=zeros(1,m); -S3_1(1:4)=S3_U; -S3_m=zeros(1,m); -S3_m(m-3:m)=fliplr(-S3_U); D4=HI*(M4-e_1*S3_1+e_m*S3_m + S_1'*S2_1-S_m'*S2_m); - -% % Test -% d3=[-1 3 -3 1]; -% DD_3=(-diag(ones(m-2,1),-2)+3*diag(ones(m-1,1),-1)-3*diag(ones(m,1),0)+ ... -% diag(ones(m-1,1),1)); -% DD_3(1:2,1:4)=[d3;d3]; -% DD_3(m,m-3:m)=[d3]; -% -% nnn=round(0.1/h); -% x0=h; -% x1=nnn*h; -% d=h; % Start level -% g=1; % interrior level -% -% c0 = (-10*x1^3*x0^2*d+5*x1^4*x0*d-d*x1^5+10*x1^2*x0^3*g-5*x1*x0^4*g+x0^5* ... -% g)/(10*x1^2*x0^3-10*x0^2*x1^3+5*x0*x1^4-5*x1*x0^4+x0^5-x1^5); -% c1 = -30*(-d+g)*x1^2*x0^2/(10*x1^2*x0^3-10*x0^2*x1^3+5*x0*x1^4-5*x1*x0^4+x0^5-x1^5); -% c2 = 30*(-d+g)*x1*x0*(x0+x1)/(10*x1^2*x0^3-10*x0^2*x1^3+5*x0*x1^4-5*x1* ... -% x0^4+x0^5-x1^5); -% c3 = -10*(-d+g)*(x0^2+4*x1*x0+x1^2)/(10*x1^2*x0^3-10*x0^2*x1^3+5*x0*x1^4- ... -% 5*x1*x0^4+x0^5-x1^5); -% c4 = 15*(-d+g)*(x0+x1)/(10*x1^2*x0^3-10*x0^2*x1^3+5*x0*x1^4-5*x1*x0^4+ ... -% x0^5-x1^5); -% c5 = -6*(-d+g)/(10*x1^2*x0^3-10*x0^2*x1^3+5*x0*x1^4-5*x1*x0^4+x0^5-x1^5); -% -% xt=x0:h:x1; -% ct=polyval([c5 c4 c3 c2 c1 c0],xt); -% -% BB1=zeros(m); -% BB1(1:nnn,1:nnn)=diag(ct); -% BB1(m-nnn+1:m,m-nnn+1:m)=diag(fliplr(ct)); -% BB1(nnn+1:m-nnn,nnn+1:m-nnn)=g*eye(length(nnn+1:m-nnn)); -% -% DI=(1/h^3)*DD_3'*BB1*DD_3; -% -% I=eye(m); -% MM1=kron(H,D2'*H*D2)+kron(D2'*H*D2,H)+kron(D2'*H,H*D2)+kron(H*D2,D2'*H); -% ee1=eig(MM1);min(real(ee1)),max(real(ee1)) -% -% -% MM2=kron(H,M4)+kron(M4,H)+kron(D2'*H,H*D2)+kron(H*D2,D2'*H); -% MM3=kron(H,M4+DI)+kron(M4+DI,H)+kron(D2'*H,H*D2)+kron(H*D2,D2'*H); -% ee3=eig(MM3);min(real(ee3)),max(real(ee3)) -