Mercurial > repos > public > sbplib
changeset 320:3955ccffb7c8 feature/beams
Cleaned d4_variable_8_min_boundary_points
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Mon, 26 Sep 2016 08:57:25 +0200 |
parents | fc91e3a2d44a |
children | 5c9e5ba1c1ab |
files | +sbp/+implementations/d4_variable_8_min_boundary_points.m |
diffstat | 1 files changed, 34 insertions(+), 45 deletions(-) [+] |
line wrap: on
line diff
--- a/+sbp/+implementations/d4_variable_8_min_boundary_points.m Mon Sep 26 08:52:03 2016 +0200 +++ b/+sbp/+implementations/d4_variable_8_min_boundary_points.m Mon Sep 26 08:57:25 2016 +0200 @@ -16,55 +16,45 @@ %%% DI=D4*B*H*D4 %%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - H = diag(ones(m,1),0); - H(1:8,1:8) = diag([1498139/5080320, 1107307/725760, 20761/80640, 1304999/725760, 299527/725760, 103097/80640, 670091/725760, 5127739/5080320]); - H(m-7:m,m-7:m) = fliplr(flipud(diag([1498139/5080320, 1107307/725760, 20761/80640, 1304999/725760, 299527/725760, 103097/80640, 670091/725760, 5127739/5080320]))); + BP = 8; + if(m<2*BP) + error(['Operator requires at least ' num2str(2*BP) ' grid points']); + end + + % Norm + Hv = ones(m,1); + Hv(1:8) = [1498139/5080320, 1107307/725760, 20761/80640, 1304999/725760, 299527/725760, 103097/80640, 670091/725760, 5127739/5080320]; + Hv(m-7:m) = rot90(Hv(1:8),2); + Hv = h*Hv; + H = spdiag(Hv, 0); + HI = spdiag(1./Hv, 0); - e_1 = zeros(m,1); - e_1(1) = 1; - e_m = zeros(m,1); - e_m(m) = 1; - - S_U = [-0.137e3/0.60e2 5 -5 0.10e2/0.3e1 -0.5e1/0.4e1 0.1e1/0.5e1;]/h; - S_1 = zeros(1,m); - S_1(1:6) = S_U; - S_m = zeros(1,m); - S_m(m-5:m) = fliplr(-S_U); + % Boundary operators + e_l = sparse(m,1); + e_l(1) = 1; + e_r = rot90(e_l, 2); - S2_U = [0.15e2/0.4e1 -0.77e2/0.6e1 0.107e3/0.6e1 -13 0.61e2/0.12e2 -0.5e1/0.6e1;]/h^2; - S2_1 = zeros(1,m); - S2_1(1:6) = S2_U; - S2_m = zeros(1,m); - S2_m(m-5:m) = fliplr(S2_U); + d1_l = sparse(m,1); + d1_l(1:6) = [-0.137e3/0.60e2 5 -5 0.10e2/0.3e1 -0.5e1/0.4e1 0.1e1/0.5e1;]/h; + d1_r = -rot90(d1_l); - S3_U = [-0.17e2/0.4e1 0.71e2/0.4e1 -0.59e2/0.2e1 0.49e2/0.2e1 -0.41e2/0.4e1 0.7e1/0.4e1;]/h^3; - S3_1 = zeros(1,m); - S3_1(1:6) = S3_U; - S3_m = zeros(1,m); - S3_m(m-5:m) = fliplr(-S3_U); + d2_l = sparse(m,1); + d2_l(1:6) = [0.15e2/0.4e1 -0.77e2/0.6e1 0.107e3/0.6e1 -13 0.61e2/0.12e2 -0.5e1/0.6e1;]/h^2; + d2_r = rot90(d2_l, 2); + + d3_l = sparse(m,1); + d3_l(1:6) = [-0.17e2/0.4e1 0.71e2/0.4e1 -0.59e2/0.2e1 0.49e2/0.2e1 -0.41e2/0.4e1 0.7e1/0.4e1;]/h^3; + d3_r = -rot90(d3_l, 2); - H = h*H; - HI = inv(H); - - - - % Fourth derivative, 1th order accurate at first 8 boundary points (still - % yield 5th order convergence if stable: for example u_tt = -u_xxxx + % Fourth derivative, 1th order accurate at first 8 boundary points - m5 = -0.41e2/0.7560e4; - m4 = 0.1261e4/0.15120e5; - m3 = -0.541e3/0.840e3; - m2 = 0.4369e4/0.1260e4; - m1 = -0.1669e4/0.180e3; - m0 = 0.1529e4/0.120e3; + stencil = [-0.41e2/0.7560e4, 0.1261e4/0.15120e5,-0.541e3/0.840e3,0.4369e4/0.1260e4,-0.1669e4/0.180e3,0.1529e4/0.120e3,-0.1669e4/0.180e3,0.4369e4/0.1260e4,-0.541e3/0.840e3, 0.1261e4/0.15120e5,-0.41e2/0.7560e4]; + diags = -5:5; + M4 = stripeMatrix(stencil, diags, m); - M4=m5*(diag(ones(m-5,1),5)+diag(ones(m-5,1),-5))+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); - - %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=[ + M4_U = [ 0.151705142321e12/0.29189160000e11 -0.25643455801727e14/0.1634592960000e13 0.286417898677e12/0.15135120000e11 -0.4038072020317e13/0.326918592000e12 0.96455968907e11/0.20432412000e11 -0.151076916769e12/0.181621440000e12 0.14511526363e11/0.408648240000e12 -0.196663079e9/0.33359040000e11; -0.25643455801727e14/0.1634592960000e13 0.735383382473e12/0.14594580000e11 -0.5035391734409e13/0.77837760000e11 0.20392440917e11/0.467026560e9 -0.109540902413e12/0.6671808000e10 0.2488686539e10/0.884520000e9 -0.2798067539e10/0.33359040000e11 0.6433463591e10/0.408648240000e12; 0.286417898677e12/0.15135120000e11 -0.5035391734409e13/0.77837760000e11 0.145019791981e12/0.1621620000e10 -0.333577111061e12/0.5189184000e10 0.18928722391e11/0.778377600e9 -0.93081704557e11/0.25945920000e11 -0.372660319e9/0.3243240000e10 0.2861399869e10/0.544864320000e12; @@ -76,9 +66,8 @@ ]; M4(1:8,1:8) = M4_U; + M4(m-7:m,m-7:m) = rot90(M4_U, 2); + M4 = 1/h^3*M4; - M4(m-7:m,m-7:m) = flipud( fliplr( M4_U ) ); - M4 = M4/h^3; - - D4=HI*(M4-e_1*S3_1+e_m*S3_m + S_1'*S2_1-S_m'*S2_m); + D4=HI*(M4 - e_l*d3_l'+e_r*d3_r' + d1_l*d2_l'-d1_r*d2_r'); end