Mercurial > repos > public > sbplib
changeset 284:dae8c3a56f5e
Merged in operator_remake (pull request #2)
Operator remake
author | Jonatan Werpers <jonatan.werpers@it.uu.se> |
---|---|
date | Mon, 12 Sep 2016 12:53:02 +0200 |
parents | 18c023aaf3f7 (current diff) 728fdc431212 (diff) |
children | 70184f6c6cb5 |
files | +sbp/BlockNorm.m +sbp/Higher.m +sbp/HigherCompatible.m +sbp/HigherCompatibleVariable.m +sbp/HigherPeriodic.m +sbp/Ordinary.m +sbp/Upwind.m +sbp/Variable.m +sbp/blocknorm10.m +sbp/blocknorm4.m +sbp/blocknorm6.m +sbp/blocknorm8.m +sbp/higher2_compatible_halfvariable.m +sbp/higher4.m +sbp/higher4_compatible_halfvariable.m +sbp/higher6.m +sbp/higher6_compatible_halfvariable.m +sbp/higher_compatible2.m +sbp/higher_compatible4.m +sbp/higher_compatible6.m +sbp/ordinary10.m +sbp/ordinary2.m +sbp/ordinary4.m +sbp/ordinary6.m +sbp/ordinary8.m +sbp/upwind2.m +sbp/upwind3.m +sbp/upwind4.m +sbp/upwind5.m +sbp/upwind6.m +sbp/upwind7.m +sbp/upwind8.m +sbp/upwind9.m +sbp/variable4.m |
diffstat | 80 files changed, 5152 insertions(+), 2618 deletions(-) [+] |
line wrap: on
line diff
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/+implementations/d1_noneq_10.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/+sbp/+implementations/d1_noneq_10.m Mon Sep 12 12:53:02 2016 +0200 @@ -0,0 +1,252 @@ +function [D1,H,x,h] = d1_noneq_10(N,L) + +% L: Domain length +% N: Number of grid points +if(nargin < 2) + L = 1; +end + +if(N<20) + error('Operator requires at least 20 grid points'); +end + +% BP: Number of boundary points +% m: Number of nonequidistant spacings +% order: Accuracy of interior stencil +BP = 10; +m = 5; +order = 10; + +%%%% Non-equidistant grid points %%%%% +x0 = 0.0000000000000e+00; +x1 = 3.5902433622052e-01; +x2 = 1.1436659188355e+00; +x3 = 2.2144895894456e+00; +x4 = 3.3682742337736e+00; +x5 = 4.4309689056870e+00; +x6 = 5.4309689056870e+00; +x7 = 6.4309689056870e+00; +x8 = 7.4309689056870e+00; +x9 = 8.4309689056870e+00; +x10 = 9.4309689056870e+00; + +xb = sparse(m+1,1); +for i = 0:m + xb(i+1) = eval(['x' num2str(i)]); +end +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%% Compute h %%%%%%%%%% +h = L/(2*xb(end) + N-1-2*m); +%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%% Define grid %%%%%%%% +x = h*[xb; linspace(xb(end)+1,L/h-xb(end)-1,N-2*(m+1))'; L/h-flip(xb) ]; +%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%% Norm matrix %%%%%%%% +P = sparse(BP,1); +%#ok<*NASGU> +P0 = 1.0000000000000e-01; +P1 = 5.8980851260667e-01; +P2 = 9.5666820955973e-01; +P3 = 1.1500297411596e+00; +P4 = 1.1232986993248e+00; +P5 = 1.0123020150951e+00; +P6 = 9.9877122702527e-01; +P7 = 1.0000873322761e+00; +P8 = 1.0000045540888e+00; +P9 = 9.9999861455083e-01; + +for i = 0:BP-1 + P(i+1) = eval(['P' num2str(i)]); +end + +H = ones(N,1); +H(1:BP) = P; +H(end-BP+1:end) = flip(P); +H = spdiags(h*H,0,N,N); +%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%% Q matrix %%%%%%%%%%% + +% interior stencil +switch order + case 2 + d = [-1/2,0,1/2]; + case 4 + d = [1/12,-2/3,0,2/3,-1/12]; + case 6 + d = [-1/60,3/20,-3/4,0,3/4,-3/20,1/60]; + case 8 + d = [1/280,-4/105,1/5,-4/5,0,4/5,-1/5,4/105,-1/280]; + case 10 + d = [-1/1260,5/504,-5/84,5/21,-5/6,0,5/6,-5/21,5/84,-5/504,1/1260]; + case 12 + d = [1/5544,-1/385,1/56,-5/63,15/56,-6/7,0,6/7,-15/56,5/63,-1/56,1/385,-1/5544]; +end +d = repmat(d,N,1); +Q = spdiags(d,-order/2:order/2,N,N); + +% Boundaries +Q0_0 = -5.0000000000000e-01; +Q0_1 = 6.7548747038002e-01; +Q0_2 = -2.6691978151546e-01; +Q0_3 = 1.4438714982130e-01; +Q0_4 = -7.7273673750760e-02; +Q0_5 = 2.5570078343005e-02; +Q0_6 = 4.2808774693299e-03; +Q0_7 = -8.2902108933389e-03; +Q0_8 = 3.2031176427908e-03; +Q0_9 = -4.4502749689556e-04; +Q0_10 = 0.0000000000000e+00; +Q0_11 = 0.0000000000000e+00; +Q0_12 = 0.0000000000000e+00; +Q0_13 = 0.0000000000000e+00; +Q0_14 = 0.0000000000000e+00; +Q1_0 = -6.7548747038002e-01; +Q1_1 = 0.0000000000000e+00; +Q1_2 = 9.5146052715180e-01; +Q1_3 = -4.2442349882626e-01; +Q1_4 = 2.1538865145190e-01; +Q1_5 = -7.1939778160350e-02; +Q1_6 = -8.2539187832840e-03; +Q1_7 = 1.9930661669090e-02; +Q1_8 = -7.7433256989613e-03; +Q1_9 = 1.0681515760869e-03; +Q1_10 = 0.0000000000000e+00; +Q1_11 = 0.0000000000000e+00; +Q1_12 = 0.0000000000000e+00; +Q1_13 = 0.0000000000000e+00; +Q1_14 = 0.0000000000000e+00; +Q2_0 = 2.6691978151546e-01; +Q2_1 = -9.5146052715180e-01; +Q2_2 = 0.0000000000000e+00; +Q2_3 = 9.6073770842387e-01; +Q2_4 = -3.9378595264609e-01; +Q2_5 = 1.3302097358959e-01; +Q2_6 = 8.1200458151489e-05; +Q2_7 = -2.3849770528789e-02; +Q2_8 = 9.6600442856829e-03; +Q2_9 = -1.3234579460680e-03; +Q2_10 = 0.0000000000000e+00; +Q2_11 = 0.0000000000000e+00; +Q2_12 = 0.0000000000000e+00; +Q2_13 = 0.0000000000000e+00; +Q2_14 = 0.0000000000000e+00; +Q3_0 = -1.4438714982130e-01; +Q3_1 = 4.2442349882626e-01; +Q3_2 = -9.6073770842387e-01; +Q3_3 = 0.0000000000000e+00; +Q3_4 = 9.1551097634196e-01; +Q3_5 = -2.8541713079648e-01; +Q3_6 = 4.1398809121293e-02; +Q3_7 = 1.7256059167927e-02; +Q3_8 = -9.4349194803610e-03; +Q3_9 = 1.3875650645663e-03; +Q3_10 = 0.0000000000000e+00; +Q3_11 = 0.0000000000000e+00; +Q3_12 = 0.0000000000000e+00; +Q3_13 = 0.0000000000000e+00; +Q3_14 = 0.0000000000000e+00; +Q4_0 = 7.7273673750760e-02; +Q4_1 = -2.1538865145190e-01; +Q4_2 = 3.9378595264609e-01; +Q4_3 = -9.1551097634196e-01; +Q4_4 = 0.0000000000000e+00; +Q4_5 = 8.3519401865051e-01; +Q4_6 = -2.0586492924974e-01; +Q4_7 = 3.1230261235901e-02; +Q4_8 = -2.0969453466651e-04; +Q4_9 = -5.0965470499782e-04; +Q4_10 = 0.0000000000000e+00; +Q4_11 = 0.0000000000000e+00; +Q4_12 = 0.0000000000000e+00; +Q4_13 = 0.0000000000000e+00; +Q4_14 = 0.0000000000000e+00; +Q5_0 = -2.5570078343005e-02; +Q5_1 = 7.1939778160350e-02; +Q5_2 = -1.3302097358959e-01; +Q5_3 = 2.8541713079648e-01; +Q5_4 = -8.3519401865051e-01; +Q5_5 = 0.0000000000000e+00; +Q5_6 = 8.1046389580138e-01; +Q5_7 = -2.1879194972141e-01; +Q5_8 = 5.2977237804899e-02; +Q5_9 = -9.0146730522360e-03; +Q5_10 = 7.9365079365079e-04; +Q5_11 = 0.0000000000000e+00; +Q5_12 = 0.0000000000000e+00; +Q5_13 = 0.0000000000000e+00; +Q5_14 = 0.0000000000000e+00; +Q6_0 = -4.2808774693299e-03; +Q6_1 = 8.2539187832840e-03; +Q6_2 = -8.1200458151489e-05; +Q6_3 = -4.1398809121293e-02; +Q6_4 = 2.0586492924974e-01; +Q6_5 = -8.1046389580138e-01; +Q6_6 = 0.0000000000000e+00; +Q6_7 = 8.2787884456005e-01; +Q6_8 = -2.3582460382545e-01; +Q6_9 = 5.9178678209520e-02; +Q6_10 = -9.9206349206349e-03; +Q6_11 = 7.9365079365079e-04; +Q6_12 = 0.0000000000000e+00; +Q6_13 = 0.0000000000000e+00; +Q6_14 = 0.0000000000000e+00; +Q7_0 = 8.2902108933389e-03; +Q7_1 = -1.9930661669090e-02; +Q7_2 = 2.3849770528789e-02; +Q7_3 = -1.7256059167927e-02; +Q7_4 = -3.1230261235901e-02; +Q7_5 = 2.1879194972141e-01; +Q7_6 = -8.2787884456005e-01; +Q7_7 = 0.0000000000000e+00; +Q7_8 = 8.3301028859275e-01; +Q7_9 = -2.3804321850015e-01; +Q7_10 = 5.9523809523809e-02; +Q7_11 = -9.9206349206349e-03; +Q7_12 = 7.9365079365079e-04; +Q7_13 = 0.0000000000000e+00; +Q7_14 = 0.0000000000000e+00; +Q8_0 = -3.2031176427908e-03; +Q8_1 = 7.7433256989613e-03; +Q8_2 = -9.6600442856829e-03; +Q8_3 = 9.4349194803610e-03; +Q8_4 = 2.0969453466651e-04; +Q8_5 = -5.2977237804899e-02; +Q8_6 = 2.3582460382545e-01; +Q8_7 = -8.3301028859275e-01; +Q8_8 = 0.0000000000000e+00; +Q8_9 = 8.3333655748509e-01; +Q8_10 = -2.3809523809524e-01; +Q8_11 = 5.9523809523809e-02; +Q8_12 = -9.9206349206349e-03; +Q8_13 = 7.9365079365079e-04; +Q8_14 = 0.0000000000000e+00; +Q9_0 = 4.4502749689556e-04; +Q9_1 = -1.0681515760869e-03; +Q9_2 = 1.3234579460680e-03; +Q9_3 = -1.3875650645663e-03; +Q9_4 = 5.0965470499782e-04; +Q9_5 = 9.0146730522360e-03; +Q9_6 = -5.9178678209520e-02; +Q9_7 = 2.3804321850015e-01; +Q9_8 = -8.3333655748509e-01; +Q9_9 = 0.0000000000000e+00; +Q9_10 = 8.3333333333333e-01; +Q9_11 = -2.3809523809524e-01; +Q9_12 = 5.9523809523809e-02; +Q9_13 = -9.9206349206349e-03; +Q9_14 = 7.9365079365079e-04; +for i = 1:BP + for j = 1:BP + Q(i,j) = eval(['Q' num2str(i-1) '_' num2str(j-1)]); + Q(N+1-i,N+1-j) = -eval(['Q' num2str(i-1) '_' num2str(j-1)]); + end +end +%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%% Difference operator %% +D1 = H\Q; +%%%%%%%%%%%%%%%%%%%%%%%%%%% \ No newline at end of file
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/+implementations/d1_noneq_12.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/+sbp/+implementations/d1_noneq_12.m Mon Sep 12 12:53:02 2016 +0200 @@ -0,0 +1,358 @@ +function [D1,H,x,h] = d1_noneq_12(N,L) + +% L: Domain length +% N: Number of grid points +if(nargin < 2) + L = 1; +end + +if(N<24) + error('Operator requires at least 24 grid points'); +end + +% BP: Number of boundary points +% m: Number of nonequidistant spacings +% order: Accuracy of interior stencil +BP = 12; +m = 6; +order = 12; + +%%%% Non-equidistant grid points %%%%% +x0 = 0.0000000000000e+00; +x1 = 3.6098032343909e-01; +x2 = 1.1634317168086e+00; +x3 = 2.2975905356987e+00; +x4 = 3.6057529790929e+00; +x5 = 4.8918275675510e+00; +x6 = 6.0000000000000e+00; +x7 = 7.0000000000000e+00; +x8 = 8.0000000000000e+00; +x9 = 9.0000000000000e+00; +x10 = 1.0000000000000e+01; +x11 = 1.1000000000000e+01; +x12 = 1.2000000000000e+01; + +xb = sparse(m+1,1); +for i = 0:m + xb(i+1) = eval(['x' num2str(i)]); +end +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%% Compute h %%%%%%%%%% +h = L/(2*xb(end) + N-1-2*m); +%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%% Define grid %%%%%%%% +x = h*[xb; linspace(xb(end)+1,L/h-xb(end)-1,N-2*(m+1))'; L/h-flip(xb) ]; +%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%% Norm matrix %%%%%%%% +P = sparse(BP,1); +%#ok<*NASGU> +P0 = 1.0000000000011e-01; +P1 = 5.9616216757547e-01; +P2 = 9.9065699844442e-01; +P3 = 1.2512548713913e+00; +P4 = 1.3316678989403e+00; +P5 = 1.2093375037721e+00; +P6 = 1.0236491595704e+00; +P7 = 9.9685258909811e-01; +P8 = 1.0004766563923e+00; +P9 = 9.9993617879146e-01; +P10 = 1.0000063122914e+00; +P11 = 9.9999966373260e-01; + +for i = 0:BP-1 + P(i+1) = eval(['P' num2str(i)]); +end + +H = ones(N,1); +H(1:BP) = P; +H(end-BP+1:end) = flip(P); +H = spdiags(h*H,0,N,N); +%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%% Q matrix %%%%%%%%%%% + +% interior stencil +switch order + case 2 + d = [-1/2,0,1/2]; + case 4 + d = [1/12,-2/3,0,2/3,-1/12]; + case 6 + d = [-1/60,3/20,-3/4,0,3/4,-3/20,1/60]; + case 8 + d = [1/280,-4/105,1/5,-4/5,0,4/5,-1/5,4/105,-1/280]; + case 10 + d = [-1/1260,5/504,-5/84,5/21,-5/6,0,5/6,-5/21,5/84,-5/504,1/1260]; + case 12 + d = [1/5544,-1/385,1/56,-5/63,15/56,-6/7,0,6/7,-15/56,5/63,-1/56,1/385,-1/5544]; +end +d = repmat(d,N,1); +Q = spdiags(d,-order/2:order/2,N,N); + +% Boundaries +Q0_0 = -5.0000000000000e-01; +Q0_1 = 6.7597560728423e-01; +Q0_2 = -2.6859785384416e-01; +Q0_3 = 1.4850302678903e-01; +Q0_4 = -8.7976689586154e-02; +Q0_5 = 4.1833336322613e-02; +Q0_6 = -2.2216684976993e-03; +Q0_7 = -1.5910034062022e-02; +Q0_8 = 1.1296706376589e-02; +Q0_9 = -3.1823678285130e-03; +Q0_10 = 2.4843594063649e-04; +Q0_11 = 3.1501105449828e-05; +Q0_12 = 0.0000000000000e+00; +Q0_13 = 0.0000000000000e+00; +Q0_14 = 0.0000000000000e+00; +Q0_15 = 0.0000000000000e+00; +Q0_16 = 0.0000000000000e+00; +Q0_17 = 0.0000000000000e+00; +Q1_0 = -6.7597560728423e-01; +Q1_1 = 0.0000000000000e+00; +Q1_2 = 9.5424013647146e-01; +Q1_3 = -4.3389334603464e-01; +Q1_4 = 2.4285669347653e-01; +Q1_5 = -1.1443465137214e-01; +Q1_6 = 8.5942765682435e-03; +Q1_7 = 4.0290424215772e-02; +Q1_8 = -2.9396383714543e-02; +Q1_9 = 8.5601827834256e-03; +Q1_10 = -7.8128092862319e-04; +Q1_11 = -6.0444181254875e-05; +Q1_12 = 0.0000000000000e+00; +Q1_13 = 0.0000000000000e+00; +Q1_14 = 0.0000000000000e+00; +Q1_15 = 0.0000000000000e+00; +Q1_16 = 0.0000000000000e+00; +Q1_17 = 0.0000000000000e+00; +Q2_0 = 2.6859785384416e-01; +Q2_1 = -9.5424013647146e-01; +Q2_2 = 0.0000000000000e+00; +Q2_3 = 9.7065114311923e-01; +Q2_4 = -4.3205328628292e-01; +Q2_5 = 1.9549970932735e-01; +Q2_6 = -2.4406885385172e-02; +Q2_7 = -5.5737279079895e-02; +Q2_8 = 4.3772338637753e-02; +Q2_9 = -1.3727655130726e-02; +Q2_10 = 1.6271304373071e-03; +Q2_11 = 1.7066984372933e-05; +Q2_12 = 0.0000000000000e+00; +Q2_13 = 0.0000000000000e+00; +Q2_14 = 0.0000000000000e+00; +Q2_15 = 0.0000000000000e+00; +Q2_16 = 0.0000000000000e+00; +Q2_17 = 0.0000000000000e+00; +Q3_0 = -1.4850302678903e-01; +Q3_1 = 4.3389334603464e-01; +Q3_2 = -9.7065114311923e-01; +Q3_3 = 0.0000000000000e+00; +Q3_4 = 9.5375878629204e-01; +Q3_5 = -3.6113954384951e-01; +Q3_6 = 6.9749289223875e-02; +Q3_7 = 6.5161366516465e-02; +Q3_8 = -6.0325702283960e-02; +Q3_9 = 2.1188913621662e-02; +Q3_10 = -3.2632650250470e-03; +Q3_11 = 1.3097937809499e-04; +Q3_12 = 0.0000000000000e+00; +Q3_13 = 0.0000000000000e+00; +Q3_14 = 0.0000000000000e+00; +Q3_15 = 0.0000000000000e+00; +Q3_16 = 0.0000000000000e+00; +Q3_17 = 0.0000000000000e+00; +Q4_0 = 8.7976689586154e-02; +Q4_1 = -2.4285669347653e-01; +Q4_2 = 4.3205328628292e-01; +Q4_3 = -9.5375878629204e-01; +Q4_4 = 0.0000000000000e+00; +Q4_5 = 8.8676146394834e-01; +Q4_6 = -2.1292503103800e-01; +Q4_7 = -4.6037018833218e-02; +Q4_8 = 7.4338719466734e-02; +Q4_9 = -3.1217656663809e-02; +Q4_10 = 6.1239492854797e-03; +Q4_11 = -4.5892226603067e-04; +Q4_12 = 0.0000000000000e+00; +Q4_13 = 0.0000000000000e+00; +Q4_14 = 0.0000000000000e+00; +Q4_15 = 0.0000000000000e+00; +Q4_16 = 0.0000000000000e+00; +Q4_17 = 0.0000000000000e+00; +Q5_0 = -4.1833336322613e-02; +Q5_1 = 1.1443465137214e-01; +Q5_2 = -1.9549970932735e-01; +Q5_3 = 3.6113954384951e-01; +Q5_4 = -8.8676146394834e-01; +Q5_5 = 0.0000000000000e+00; +Q5_6 = 7.7461223007026e-01; +Q5_7 = -1.0609547334165e-01; +Q5_8 = -4.4853791547749e-02; +Q5_9 = 3.2436468405486e-02; +Q5_10 = -8.4387621360184e-03; +Q5_11 = 8.5964292632428e-04; +Q5_12 = 0.0000000000000e+00; +Q5_13 = 0.0000000000000e+00; +Q5_14 = 0.0000000000000e+00; +Q5_15 = 0.0000000000000e+00; +Q5_16 = 0.0000000000000e+00; +Q5_17 = 0.0000000000000e+00; +Q6_0 = 2.2216684976993e-03; +Q6_1 = -8.5942765682435e-03; +Q6_2 = 2.4406885385172e-02; +Q6_3 = -6.9749289223875e-02; +Q6_4 = 2.1292503103800e-01; +Q6_5 = -7.7461223007026e-01; +Q6_6 = 0.0000000000000e+00; +Q6_7 = 7.4758103262966e-01; +Q6_8 = -1.5730779067906e-01; +Q6_9 = 2.6517620342970e-02; +Q6_10 = -4.3175367549700e-03; +Q6_11 = 1.1092605832824e-03; +Q6_12 = -1.8037518037522e-04; +Q6_13 = 0.0000000000000e+00; +Q6_14 = 0.0000000000000e+00; +Q6_15 = 0.0000000000000e+00; +Q6_16 = 0.0000000000000e+00; +Q6_17 = 0.0000000000000e+00; +Q7_0 = 1.5910034062022e-02; +Q7_1 = -4.0290424215772e-02; +Q7_2 = 5.5737279079895e-02; +Q7_3 = -6.5161366516465e-02; +Q7_4 = 4.6037018833218e-02; +Q7_5 = 1.0609547334165e-01; +Q7_6 = -7.4758103262966e-01; +Q7_7 = 0.0000000000000e+00; +Q7_8 = 8.0975719267918e-01; +Q7_9 = -2.3568822398349e-01; +Q7_10 = 6.9373143801571e-02; +Q7_11 = -1.6606121869177e-02; +Q7_12 = 2.5974025974031e-03; +Q7_13 = -1.8037518037522e-04; +Q7_14 = 0.0000000000000e+00; +Q7_15 = 0.0000000000000e+00; +Q7_16 = 0.0000000000000e+00; +Q7_17 = 0.0000000000000e+00; +Q8_0 = -1.1296706376589e-02; +Q8_1 = 2.9396383714543e-02; +Q8_2 = -4.3772338637753e-02; +Q8_3 = 6.0325702283960e-02; +Q8_4 = -7.4338719466734e-02; +Q8_5 = 4.4853791547749e-02; +Q8_6 = 1.5730779067906e-01; +Q8_7 = -8.0975719267918e-01; +Q8_8 = 0.0000000000000e+00; +Q8_9 = 8.4765775072084e-01; +Q8_10 = -2.6369594097148e-01; +Q8_11 = 7.8759594625702e-02; +Q8_12 = -1.7857142857146e-02; +Q8_13 = 2.5974025974031e-03; +Q8_14 = -1.8037518037522e-04; +Q8_15 = 0.0000000000000e+00; +Q8_16 = 0.0000000000000e+00; +Q8_17 = 0.0000000000000e+00; +Q9_0 = 3.1823678285130e-03; +Q9_1 = -8.5601827834256e-03; +Q9_2 = 1.3727655130726e-02; +Q9_3 = -2.1188913621662e-02; +Q9_4 = 3.1217656663809e-02; +Q9_5 = -3.2436468405486e-02; +Q9_6 = -2.6517620342970e-02; +Q9_7 = 2.3568822398349e-01; +Q9_8 = -8.4765775072084e-01; +Q9_9 = 0.0000000000000e+00; +Q9_10 = 8.5631774953989e-01; +Q9_11 = -2.6769768119702e-01; +Q9_12 = 7.9365079365093e-02; +Q9_13 = -1.7857142857146e-02; +Q9_14 = 2.5974025974031e-03; +Q9_15 = -1.8037518037522e-04; +Q9_16 = 0.0000000000000e+00; +Q9_17 = 0.0000000000000e+00; +Q10_0 = -2.4843594063649e-04; +Q10_0 = -2.4843594063649e-04; +Q10_1 = 7.8128092862319e-04; +Q10_1 = 7.8128092862319e-04; +Q10_2 = -1.6271304373071e-03; +Q10_2 = -1.6271304373071e-03; +Q10_3 = 3.2632650250470e-03; +Q10_3 = 3.2632650250470e-03; +Q10_4 = -6.1239492854797e-03; +Q10_4 = -6.1239492854797e-03; +Q10_5 = 8.4387621360184e-03; +Q10_5 = 8.4387621360184e-03; +Q10_6 = 4.3175367549700e-03; +Q10_6 = 4.3175367549700e-03; +Q10_7 = -6.9373143801571e-02; +Q10_7 = -6.9373143801571e-02; +Q10_8 = 2.6369594097148e-01; +Q10_8 = 2.6369594097148e-01; +Q10_9 = -8.5631774953989e-01; +Q10_9 = -8.5631774953989e-01; +Q10_10 = 0.0000000000000e+00; +Q10_10 = 0.0000000000000e+00; +Q10_11 = 8.5712580212095e-01; +Q10_11 = 8.5712580212095e-01; +Q10_12 = -2.6785714285718e-01; +Q10_12 = -2.6785714285718e-01; +Q10_13 = 7.9365079365093e-02; +Q10_13 = 7.9365079365093e-02; +Q10_14 = -1.7857142857146e-02; +Q10_14 = -1.7857142857146e-02; +Q10_15 = 2.5974025974031e-03; +Q10_15 = 2.5974025974031e-03; +Q10_16 = -1.8037518037522e-04; +Q10_16 = -1.8037518037522e-04; +Q10_17 = 0.0000000000000e+00; +Q10_17 = 0.0000000000000e+00; +Q11_0 = -3.1501105449828e-05; +Q11_0 = -3.1501105449828e-05; +Q11_1 = 6.0444181254875e-05; +Q11_1 = 6.0444181254875e-05; +Q11_2 = -1.7066984372933e-05; +Q11_2 = -1.7066984372933e-05; +Q11_3 = -1.3097937809499e-04; +Q11_3 = -1.3097937809499e-04; +Q11_4 = 4.5892226603067e-04; +Q11_4 = 4.5892226603067e-04; +Q11_5 = -8.5964292632428e-04; +Q11_5 = -8.5964292632428e-04; +Q11_6 = -1.1092605832824e-03; +Q11_6 = -1.1092605832824e-03; +Q11_7 = 1.6606121869177e-02; +Q11_7 = 1.6606121869177e-02; +Q11_8 = -7.8759594625702e-02; +Q11_8 = -7.8759594625702e-02; +Q11_9 = 2.6769768119702e-01; +Q11_9 = 2.6769768119702e-01; +Q11_10 = -8.5712580212095e-01; +Q11_10 = -8.5712580212095e-01; +Q11_11 = 0.0000000000000e+00; +Q11_11 = 0.0000000000000e+00; +Q11_12 = 8.5714285714289e-01; +Q11_12 = 8.5714285714289e-01; +Q11_13 = -2.6785714285718e-01; +Q11_13 = -2.6785714285718e-01; +Q11_14 = 7.9365079365093e-02; +Q11_14 = 7.9365079365093e-02; +Q11_15 = -1.7857142857146e-02; +Q11_15 = -1.7857142857146e-02; +Q11_16 = 2.5974025974031e-03; +Q11_16 = 2.5974025974031e-03; +Q11_17 = -1.8037518037522e-04; +Q11_17 = -1.8037518037522e-04; +for i = 1:BP + for j = 1:BP + Q(i,j) = eval(['Q' num2str(i-1) '_' num2str(j-1)]); + Q(N+1-i,N+1-j) = -eval(['Q' num2str(i-1) '_' num2str(j-1)]); + end +end +%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%% Difference operator %% +D1 = H\Q; +%%%%%%%%%%%%%%%%%%%%%%%%%%% \ No newline at end of file
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/+implementations/d1_noneq_4.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/+sbp/+implementations/d1_noneq_4.m Mon Sep 12 12:53:02 2016 +0200 @@ -0,0 +1,114 @@ +function [D1,H,x,h] = d1_noneq_4(N,L) + +% L: Domain length +% N: Number of grid points +if(nargin < 2) + L = 1; +end + +if(N<8) + error('Operator requires at least 8 grid points'); +end + +% BP: Number of boundary points +% m: Number of nonequidistant spacings +% order: Accuracy of interior stencil +BP = 4; +m = 2; +order = 4; + +%%%% Non-equidistant grid points %%%%% +x0 = 0.0000000000000e+00; +x1 = 6.8764546205559e-01; +x2 = 1.8022115125776e+00; +x3 = 2.8022115125776e+00; +x4 = 3.8022115125776e+00; + +xb = sparse(m+1,1); +for i = 0:m + xb(i+1) = eval(['x' num2str(i)]); +end +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%% Compute h %%%%%%%%%% +h = L/(2*xb(end) + N-1-2*m); +%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%% Define grid %%%%%%%% +x = h*[xb; linspace(xb(end)+1,L/h-xb(end)-1,N-2*(m+1))'; L/h-flip(xb) ]; +%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%% Norm matrix %%%%%%%% +P = sparse(BP,1); +%#ok<*NASGU> +P0 = 2.1259737557798e-01; +P1 = 1.0260290400758e+00; +P2 = 1.0775123588954e+00; +P3 = 9.8607273802835e-01; + +for i = 0:BP-1 + P(i+1) = eval(['P' num2str(i)]); +end + +H = ones(N,1); +H(1:BP) = P; +H(end-BP+1:end) = flip(P); +H = spdiags(h*H,0,N,N); +%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%% Q matrix %%%%%%%%%%% + +% interior stencil +switch order + case 2 + d = [-1/2,0,1/2]; + case 4 + d = [1/12,-2/3,0,2/3,-1/12]; + case 6 + d = [-1/60,3/20,-3/4,0,3/4,-3/20,1/60]; + case 8 + d = [1/280,-4/105,1/5,-4/5,0,4/5,-1/5,4/105,-1/280]; + case 10 + d = [-1/1260,5/504,-5/84,5/21,-5/6,0,5/6,-5/21,5/84,-5/504,1/1260]; + case 12 + d = [1/5544,-1/385,1/56,-5/63,15/56,-6/7,0,6/7,-15/56,5/63,-1/56,1/385,-1/5544]; +end +d = repmat(d,N,1); +Q = spdiags(d,-order/2:order/2,N,N); + +% Boundaries +Q0_0 = -5.0000000000000e-01; +Q0_1 = 6.5605279837843e-01; +Q0_2 = -1.9875859409017e-01; +Q0_3 = 4.2705795711740e-02; +Q0_4 = 0.0000000000000e+00; +Q0_5 = 0.0000000000000e+00; +Q1_0 = -6.5605279837843e-01; +Q1_1 = 0.0000000000000e+00; +Q1_2 = 8.1236966439895e-01; +Q1_3 = -1.5631686602052e-01; +Q1_4 = 0.0000000000000e+00; +Q1_5 = 0.0000000000000e+00; +Q2_0 = 1.9875859409017e-01; +Q2_1 = -8.1236966439895e-01; +Q2_2 = 0.0000000000000e+00; +Q2_3 = 6.9694440364211e-01; +Q2_4 = -8.3333333333333e-02; +Q2_5 = 0.0000000000000e+00; +Q3_0 = -4.2705795711740e-02; +Q3_1 = 1.5631686602052e-01; +Q3_2 = -6.9694440364211e-01; +Q3_3 = 0.0000000000000e+00; +Q3_4 = 6.6666666666667e-01; +Q3_5 = -8.3333333333333e-02; +for i = 1:BP + for j = 1:BP + Q(i,j) = eval(['Q' num2str(i-1) '_' num2str(j-1)]); + Q(N+1-i,N+1-j) = -eval(['Q' num2str(i-1) '_' num2str(j-1)]); + end +end +%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%% Difference operator %% +D1 = H\Q; +%%%%%%%%%%%%%%%%%%%%%%%%%%% \ No newline at end of file
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/+implementations/d1_noneq_6.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/+sbp/+implementations/d1_noneq_6.m Mon Sep 12 12:53:02 2016 +0200 @@ -0,0 +1,148 @@ +function [D1,H,x,h] = d1_noneq_6(N,L) + +% L: Domain length +% N: Number of grid points +if(nargin < 2) + L = 1; +end + +if(N<12) + error('Operator requires at least 12 grid points'); +end + +% BP: Number of boundary points +% m: Number of nonequidistant spacings +% order: Accuracy of interior stencil +BP = 6; +m = 3; +order = 6; + +%%%% Non-equidistant grid points %%%%% +x0 = 0.0000000000000e+00; +x1 = 4.4090263368623e-01; +x2 = 1.2855984345073e+00; +x3 = 2.2638953951239e+00; +x4 = 3.2638953951239e+00; +x5 = 4.2638953951239e+00; +x6 = 5.2638953951239e+00; + +xb = sparse(m+1,1); +for i = 0:m + xb(i+1) = eval(['x' num2str(i)]); +end +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%% Compute h %%%%%%%%%% +h = L/(2*xb(end) + N-1-2*m); +%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%% Define grid %%%%%%%% +x = h*[xb; linspace(xb(end)+1,L/h-xb(end)-1,N-2*(m+1))'; L/h-flip(xb) ]; +%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%% Norm matrix %%%%%%%% +P = sparse(BP,1); +%#ok<*NASGU> +P0 = 1.3030223027124e-01; +P1 = 6.8851501587715e-01; +P2 = 9.5166202564389e-01; +P3 = 9.9103890475697e-01; +P4 = 1.0028757074552e+00; +P5 = 9.9950151111941e-01; + +for i = 0:BP-1 + P(i+1) = eval(['P' num2str(i)]); +end + +H = ones(N,1); +H(1:BP) = P; +H(end-BP+1:end) = flip(P); +H = spdiags(h*H,0,N,N); +%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%% Q matrix %%%%%%%%%%% + +% interior stencil +switch order + case 2 + d = [-1/2,0,1/2]; + case 4 + d = [1/12,-2/3,0,2/3,-1/12]; + case 6 + d = [-1/60,3/20,-3/4,0,3/4,-3/20,1/60]; + case 8 + d = [1/280,-4/105,1/5,-4/5,0,4/5,-1/5,4/105,-1/280]; + case 10 + d = [-1/1260,5/504,-5/84,5/21,-5/6,0,5/6,-5/21,5/84,-5/504,1/1260]; + case 12 + d = [1/5544,-1/385,1/56,-5/63,15/56,-6/7,0,6/7,-15/56,5/63,-1/56,1/385,-1/5544]; +end +d = repmat(d,N,1); +Q = spdiags(d,-order/2:order/2,N,N); + +% Boundaries +Q0_0 = -5.0000000000000e-01; +Q0_1 = 6.6042071945824e-01; +Q0_2 = -2.2104152954203e-01; +Q0_3 = 7.6243679810093e-02; +Q0_4 = -1.7298206716724e-02; +Q0_5 = 1.6753369904210e-03; +Q0_6 = 0.0000000000000e+00; +Q0_7 = 0.0000000000000e+00; +Q0_8 = 0.0000000000000e+00; +Q1_0 = -6.6042071945824e-01; +Q1_1 = 0.0000000000000e+00; +Q1_2 = 8.7352798702787e-01; +Q1_3 = -2.6581719253084e-01; +Q1_4 = 5.7458484948314e-02; +Q1_5 = -4.7485599871040e-03; +Q1_6 = 0.0000000000000e+00; +Q1_7 = 0.0000000000000e+00; +Q1_8 = 0.0000000000000e+00; +Q2_0 = 2.2104152954203e-01; +Q2_1 = -8.7352798702787e-01; +Q2_2 = 0.0000000000000e+00; +Q2_3 = 8.1707122038457e-01; +Q2_4 = -1.8881125503769e-01; +Q2_5 = 2.4226492138960e-02; +Q2_6 = 0.0000000000000e+00; +Q2_7 = 0.0000000000000e+00; +Q2_8 = 0.0000000000000e+00; +Q3_0 = -7.6243679810093e-02; +Q3_1 = 2.6581719253084e-01; +Q3_2 = -8.1707122038457e-01; +Q3_3 = 0.0000000000000e+00; +Q3_4 = 7.6798636652679e-01; +Q3_5 = -1.5715532552963e-01; +Q3_6 = 1.6666666666667e-02; +Q3_7 = 0.0000000000000e+00; +Q3_8 = 0.0000000000000e+00; +Q4_0 = 1.7298206716724e-02; +Q4_1 = -5.7458484948314e-02; +Q4_2 = 1.8881125503769e-01; +Q4_3 = -7.6798636652679e-01; +Q4_4 = 0.0000000000000e+00; +Q4_5 = 7.5266872305402e-01; +Q4_6 = -1.5000000000000e-01; +Q4_7 = 1.6666666666667e-02; +Q4_8 = 0.0000000000000e+00; +Q5_0 = -1.6753369904210e-03; +Q5_1 = 4.7485599871040e-03; +Q5_2 = -2.4226492138960e-02; +Q5_3 = 1.5715532552963e-01; +Q5_4 = -7.5266872305402e-01; +Q5_5 = 0.0000000000000e+00; +Q5_6 = 7.5000000000000e-01; +Q5_7 = -1.5000000000000e-01; +Q5_8 = 1.6666666666667e-02; +for i = 1:BP + for j = 1:BP + Q(i,j) = eval(['Q' num2str(i-1) '_' num2str(j-1)]); + Q(N+1-i,N+1-j) = -eval(['Q' num2str(i-1) '_' num2str(j-1)]); + end +end +%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%% Difference operator %% +D1 = H\Q; +%%%%%%%%%%%%%%%%%%%%%%%%%%% \ No newline at end of file
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/+implementations/d1_noneq_8.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/+sbp/+implementations/d1_noneq_8.m Mon Sep 12 12:53:02 2016 +0200 @@ -0,0 +1,194 @@ +function [D1,H,x,h] = d1_noneq_8(N,L) + +% L: Domain length +% N: Number of grid points +if(nargin < 2) + L = 1; +end + +if(N<16) + error('Operator requires at least 16 grid points'); +end + +% BP: Number of boundary points +% m: Number of nonequidistant spacings +% order: Accuracy of interior stencil +BP = 8; +m = 4; +order = 8; + +%%%% Non-equidistant grid points %%%%% +x0 = 0.0000000000000e+00; +x1 = 3.8118550247622e-01; +x2 = 1.1899550868338e+00; +x3 = 2.2476300175641e+00; +x4 = 3.3192851303204e+00; +x5 = 4.3192851303204e+00; +x6 = 5.3192851303204e+00; +x7 = 6.3192851303204e+00; +x8 = 7.3192851303204e+00; + +xb = sparse(m+1,1); +for i = 0:m + xb(i+1) = eval(['x' num2str(i)]); +end +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%% Compute h %%%%%%%%%% +h = L/(2*xb(end) + N-1-2*m); +%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%% Define grid %%%%%%%% +x = h*[xb; linspace(xb(end)+1,L/h-xb(end)-1,N-2*(m+1))'; L/h-flip(xb) ]; +%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%% Norm matrix %%%%%%%% +P = sparse(BP,1); +%#ok<*NASGU> +P0 = 1.0758368078310e-01; +P1 = 6.1909685107891e-01; +P2 = 9.6971176519117e-01; +P3 = 1.1023441350947e+00; +P4 = 1.0244688965833e+00; +P5 = 9.9533550116831e-01; +P6 = 1.0008236941028e+00; +P7 = 9.9992060631812e-01; + +for i = 0:BP-1 + P(i+1) = eval(['P' num2str(i)]); +end + +H = ones(N,1); +H(1:BP) = P; +H(end-BP+1:end) = flip(P); +H = spdiags(h*H,0,N,N); +%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%% Q matrix %%%%%%%%%%% + +% interior stencil +switch order + case 2 + d = [-1/2,0,1/2]; + case 4 + d = [1/12,-2/3,0,2/3,-1/12]; + case 6 + d = [-1/60,3/20,-3/4,0,3/4,-3/20,1/60]; + case 8 + d = [1/280,-4/105,1/5,-4/5,0,4/5,-1/5,4/105,-1/280]; + case 10 + d = [-1/1260,5/504,-5/84,5/21,-5/6,0,5/6,-5/21,5/84,-5/504,1/1260]; + case 12 + d = [1/5544,-1/385,1/56,-5/63,15/56,-6/7,0,6/7,-15/56,5/63,-1/56,1/385,-1/5544]; +end +d = repmat(d,N,1); +Q = spdiags(d,-order/2:order/2,N,N); + +% Boundaries +Q0_0 = -5.0000000000000e-01; +Q0_1 = 6.7284756079369e-01; +Q0_2 = -2.5969732837062e-01; +Q0_3 = 1.3519390385721e-01; +Q0_4 = -6.9678474730984e-02; +Q0_5 = 2.6434024071371e-02; +Q0_6 = -5.5992311465618e-03; +Q0_7 = 4.9954552590464e-04; +Q0_8 = 0.0000000000000e+00; +Q0_9 = 0.0000000000000e+00; +Q0_10 = 0.0000000000000e+00; +Q0_11 = 0.0000000000000e+00; +Q1_0 = -6.7284756079369e-01; +Q1_1 = 0.0000000000000e+00; +Q1_2 = 9.4074021172233e-01; +Q1_3 = -4.0511642426516e-01; +Q1_4 = 1.9369192209331e-01; +Q1_5 = -6.8638079843479e-02; +Q1_6 = 1.3146457241484e-02; +Q1_7 = -9.7652615479254e-04; +Q1_8 = 0.0000000000000e+00; +Q1_9 = 0.0000000000000e+00; +Q1_10 = 0.0000000000000e+00; +Q1_11 = 0.0000000000000e+00; +Q2_0 = 2.5969732837062e-01; +Q2_1 = -9.4074021172233e-01; +Q2_2 = 0.0000000000000e+00; +Q2_3 = 9.4316393361096e-01; +Q2_4 = -3.5728039257451e-01; +Q2_5 = 1.1266686855013e-01; +Q2_6 = -1.8334941452280e-02; +Q2_7 = 8.2741521740941e-04; +Q2_8 = 0.0000000000000e+00; +Q2_9 = 0.0000000000000e+00; +Q2_10 = 0.0000000000000e+00; +Q2_11 = 0.0000000000000e+00; +Q3_0 = -1.3519390385721e-01; +Q3_1 = 4.0511642426516e-01; +Q3_2 = -9.4316393361096e-01; +Q3_3 = 0.0000000000000e+00; +Q3_4 = 8.7694387866575e-01; +Q3_5 = -2.4698058719506e-01; +Q3_6 = 4.7291642094198e-02; +Q3_7 = -4.0135203618880e-03; +Q3_8 = 0.0000000000000e+00; +Q3_9 = 0.0000000000000e+00; +Q3_10 = 0.0000000000000e+00; +Q3_11 = 0.0000000000000e+00; +Q4_0 = 6.9678474730984e-02; +Q4_1 = -1.9369192209331e-01; +Q4_2 = 3.5728039257451e-01; +Q4_3 = -8.7694387866575e-01; +Q4_4 = 0.0000000000000e+00; +Q4_5 = 8.1123946853807e-01; +Q4_6 = -2.0267150541446e-01; +Q4_7 = 3.8680398901392e-02; +Q4_8 = -3.5714285714286e-03; +Q4_9 = 0.0000000000000e+00; +Q4_10 = 0.0000000000000e+00; +Q4_11 = 0.0000000000000e+00; +Q5_0 = -2.6434024071371e-02; +Q5_1 = 6.8638079843479e-02; +Q5_2 = -1.1266686855013e-01; +Q5_3 = 2.4698058719506e-01; +Q5_4 = -8.1123946853807e-01; +Q5_5 = 0.0000000000000e+00; +Q5_6 = 8.0108544742793e-01; +Q5_7 = -2.0088756283071e-01; +Q5_8 = 3.8095238095238e-02; +Q5_9 = -3.5714285714286e-03; +Q5_10 = 0.0000000000000e+00; +Q5_11 = 0.0000000000000e+00; +Q6_0 = 5.5992311465618e-03; +Q6_1 = -1.3146457241484e-02; +Q6_2 = 1.8334941452280e-02; +Q6_3 = -4.7291642094198e-02; +Q6_4 = 2.0267150541446e-01; +Q6_5 = -8.0108544742793e-01; +Q6_6 = 0.0000000000000e+00; +Q6_7 = 8.0039405922650e-01; +Q6_8 = -2.0000000000000e-01; +Q6_9 = 3.8095238095238e-02; +Q6_10 = -3.5714285714286e-03; +Q6_11 = 0.0000000000000e+00; +Q7_0 = -4.9954552590464e-04; +Q7_1 = 9.7652615479254e-04; +Q7_2 = -8.2741521740941e-04; +Q7_3 = 4.0135203618880e-03; +Q7_4 = -3.8680398901392e-02; +Q7_5 = 2.0088756283071e-01; +Q7_6 = -8.0039405922650e-01; +Q7_7 = 0.0000000000000e+00; +Q7_8 = 8.0000000000000e-01; +Q7_9 = -2.0000000000000e-01; +Q7_10 = 3.8095238095238e-02; +Q7_11 = -3.5714285714286e-03; +for i = 1:BP + for j = 1:BP + Q(i,j) = eval(['Q' num2str(i-1) '_' num2str(j-1)]); + Q(N+1-i,N+1-j) = -eval(['Q' num2str(i-1) '_' num2str(j-1)]); + end +end +%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%% Difference operator %% +D1 = H\Q; +%%%%%%%%%%%%%%%%%%%%%%%%%%% \ No newline at end of file
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/+implementations/d1_noneq_minimal_10.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/+sbp/+implementations/d1_noneq_minimal_10.m Mon Sep 12 12:53:02 2016 +0200 @@ -0,0 +1,202 @@ +function [D1,H,x,h] = d1_noneq_minimal_10(N,L) + +% L: Domain length +% N: Number of grid points +if(nargin < 2) + L = 1; +end + +if(N<16) + error('Operator requires at least 16 grid points'); +end + +% BP: Number of boundary points +% m: Number of nonequidistant spacings +% order: Accuracy of interior stencil +BP = 8; +m = 3; +order = 10; + +%%%% Non-equidistant grid points %%%%% +x0 = 0.0000000000000e+00; +x1 = 5.8556160757529e-01; +x2 = 1.7473267488572e+00; +x3 = 3.0000000000000e+00; +x4 = 4.0000000000000e+00; +x5 = 5.0000000000000e+00; +x6 = 6.0000000000000e+00; +x7 = 7.0000000000000e+00; +x8 = 8.0000000000000e+00; + +xb = sparse(m+1,1); +for i = 0:m + xb(i+1) = eval(['x' num2str(i)]); +end +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%% Compute h %%%%%%%%%% +h = L/(2*xb(end) + N-1-2*m); +%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%% Define grid %%%%%%%% +x = h*[xb; linspace(xb(end)+1,L/h-xb(end)-1,N-2*(m+1))'; L/h-flip(xb) ]; +%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%% Norm matrix %%%%%%%% +P = sparse(BP,1); +%#ok<*NASGU> +P0 = 1.6717213975289e-01; +P1 = 9.3675739171278e-01; +P2 = 1.3035532379753e+00; +P3 = 1.1188461804303e+00; +P4 = 9.6664345922660e-01; +P5 = 1.0083235564392e+00; +P6 = 9.9858767377362e-01; +P7 = 1.0001163606893e+00; + +for i = 0:BP-1 + P(i+1) = eval(['P' num2str(i)]); +end + +H = ones(N,1); +H(1:BP) = P; +H(end-BP+1:end) = flip(P); +H = spdiags(h*H,0,N,N); +%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%% Q matrix %%%%%%%%%%% + +% interior stencil +switch order + case 2 + d = [-1/2,0,1/2]; + case 4 + d = [1/12,-2/3,0,2/3,-1/12]; + case 6 + d = [-1/60,3/20,-3/4,0,3/4,-3/20,1/60]; + case 8 + d = [1/280,-4/105,1/5,-4/5,0,4/5,-1/5,4/105,-1/280]; + case 10 + d = [-1/1260,5/504,-5/84,5/21,-5/6,0,5/6,-5/21,5/84,-5/504,1/1260]; + case 12 + d = [1/5544,-1/385,1/56,-5/63,15/56,-6/7,0,6/7,-15/56,5/63,-1/56,1/385,-1/5544]; +end +d = repmat(d,N,1); +Q = spdiags(d,-order/2:order/2,N,N); + +% Boundaries +Q0_0 = -5.0000000000000e-01; +Q0_1 = 6.7349296966214e-01; +Q0_2 = -2.5186401896559e-01; +Q0_3 = 8.3431385420901e-02; +Q0_4 = 2.5480326895984e-02; +Q0_5 = -4.5992420658252e-02; +Q0_6 = 1.7526412909003e-02; +Q0_7 = -2.0746552641799e-03; +Q0_8 = 0.0000000000000e+00; +Q0_9 = 0.0000000000000e+00; +Q0_10 = 0.0000000000000e+00; +Q0_11 = 0.0000000000000e+00; +Q0_12 = 0.0000000000000e+00; +Q1_0 = -6.7349296966214e-01; +Q1_1 = 0.0000000000000e+00; +Q1_2 = 9.1982892384044e-01; +Q1_3 = -2.7262271754043e-01; +Q1_4 = -5.0992113348238e-02; +Q1_5 = 1.1814647281129e-01; +Q1_6 = -4.6693123378079e-02; +Q1_7 = 5.8255272771571e-03; +Q1_8 = 0.0000000000000e+00; +Q1_9 = 0.0000000000000e+00; +Q1_10 = 0.0000000000000e+00; +Q1_11 = 0.0000000000000e+00; +Q1_12 = 0.0000000000000e+00; +Q2_0 = 2.5186401896559e-01; +Q2_1 = -9.1982892384044e-01; +Q2_2 = 0.0000000000000e+00; +Q2_3 = 7.8566746772741e-01; +Q2_4 = -2.4097806629929e-02; +Q2_5 = -1.5312168858669e-01; +Q2_6 = 6.9451518963875e-02; +Q2_7 = -9.9345865998262e-03; +Q2_8 = 0.0000000000000e+00; +Q2_9 = 0.0000000000000e+00; +Q2_10 = 0.0000000000000e+00; +Q2_11 = 0.0000000000000e+00; +Q2_12 = 0.0000000000000e+00; +Q3_0 = -8.3431385420901e-02; +Q3_1 = 2.7262271754043e-01; +Q3_2 = -7.8566746772741e-01; +Q3_3 = 0.0000000000000e+00; +Q3_4 = 6.2047871210535e-01; +Q3_5 = 1.4776775176509e-02; +Q3_6 = -4.6889652372990e-02; +Q3_7 = 7.3166499053672e-03; +Q3_8 = 7.9365079365079e-04; +Q3_9 = 0.0000000000000e+00; +Q3_10 = 0.0000000000000e+00; +Q3_11 = 0.0000000000000e+00; +Q3_12 = 0.0000000000000e+00; +Q4_0 = -2.5480326895984e-02; +Q4_1 = 5.0992113348238e-02; +Q4_2 = 2.4097806629929e-02; +Q4_3 = -6.2047871210535e-01; +Q4_4 = 0.0000000000000e+00; +Q4_5 = 6.9425006383507e-01; +Q4_6 = -1.5686345740485e-01; +Q4_7 = 4.2609496719925e-02; +Q4_8 = -9.9206349206349e-03; +Q4_9 = 7.9365079365079e-04; +Q4_10 = 0.0000000000000e+00; +Q4_11 = 0.0000000000000e+00; +Q4_12 = 0.0000000000000e+00; +Q5_0 = 4.5992420658252e-02; +Q5_1 = -1.1814647281129e-01; +Q5_2 = 1.5312168858669e-01; +Q5_3 = -1.4776775176509e-02; +Q5_4 = -6.9425006383507e-01; +Q5_5 = 0.0000000000000e+00; +Q5_6 = 8.0719535654891e-01; +Q5_7 = -2.2953297936781e-01; +Q5_8 = 5.9523809523809e-02; +Q5_9 = -9.9206349206349e-03; +Q5_10 = 7.9365079365079e-04; +Q5_11 = 0.0000000000000e+00; +Q5_12 = 0.0000000000000e+00; +Q6_0 = -1.7526412909003e-02; +Q6_1 = 4.6693123378079e-02; +Q6_2 = -6.9451518963875e-02; +Q6_3 = 4.6889652372990e-02; +Q6_4 = 1.5686345740485e-01; +Q6_5 = -8.0719535654891e-01; +Q6_6 = 0.0000000000000e+00; +Q6_7 = 8.3142546796428e-01; +Q6_8 = -2.3809523809524e-01; +Q6_9 = 5.9523809523809e-02; +Q6_10 = -9.9206349206349e-03; +Q6_11 = 7.9365079365079e-04; +Q6_12 = 0.0000000000000e+00; +Q7_0 = 2.0746552641799e-03; +Q7_1 = -5.8255272771571e-03; +Q7_2 = 9.9345865998262e-03; +Q7_3 = -7.3166499053672e-03; +Q7_4 = -4.2609496719925e-02; +Q7_5 = 2.2953297936781e-01; +Q7_6 = -8.3142546796428e-01; +Q7_7 = 0.0000000000000e+00; +Q7_8 = 8.3333333333333e-01; +Q7_9 = -2.3809523809524e-01; +Q7_10 = 5.9523809523809e-02; +Q7_11 = -9.9206349206349e-03; +Q7_12 = 7.9365079365079e-04; +for i = 1:BP + for j = 1:BP + Q(i,j) = eval(['Q' num2str(i-1) '_' num2str(j-1)]); + Q(N+1-i,N+1-j) = -eval(['Q' num2str(i-1) '_' num2str(j-1)]); + end +end +%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%% Difference operator %% +D1 = H\Q; +%%%%%%%%%%%%%%%%%%%%%%%%%%% \ No newline at end of file
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/+implementations/d1_noneq_minimal_12.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/+sbp/+implementations/d1_noneq_minimal_12.m Mon Sep 12 12:53:02 2016 +0200 @@ -0,0 +1,262 @@ +function [D1,H,x,h] = d1_noneq_minimal_12(N,L) + +% L: Domain length +% N: Number of grid points +if(nargin < 2) + L = 1; +end + +if(N<20) + error('Operator requires at least 20 grid points'); +end + +% BP: Number of boundary points +% m: Number of nonequidistant spacings +% order: Accuracy of interior stencil +BP = 10; +m = 4; +order = 12; + +%%%% Non-equidistant grid points %%%%% +x0 = 0.0000000000000e+00; +x1 = 4.6552112904489e-01; +x2 = 1.4647984306493e+00; +x3 = 2.7620429464763e+00; +x4 = 4.0000000000000e+00; +x5 = 5.0000000000000e+00; +x6 = 6.0000000000000e+00; +x7 = 7.0000000000000e+00; +x8 = 8.0000000000000e+00; +x9 = 9.0000000000000e+00; +x10 = 1.0000000000000e+01; + +xb = sparse(m+1,1); +for i = 0:m + xb(i+1) = eval(['x' num2str(i)]); +end +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%% Compute h %%%%%%%%%% +h = L/(2*xb(end) + N-1-2*m); +%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%% Define grid %%%%%%%% +x = h*[xb; linspace(xb(end)+1,L/h-xb(end)-1,N-2*(m+1))'; L/h-flip(xb) ]; +%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%% Norm matrix %%%%%%%% +P = sparse(BP,1); +%#ok<*NASGU> +P0 = 1.3013597111750e-01; +P1 = 7.6146045079020e-01; +P2 = 1.1984222247012e+00; +P3 = 1.3340123109301e+00; +P4 = 1.0951811473364e+00; +P5 = 9.7569096377130e-01; +P6 = 1.0061945410831e+00; +P7 = 9.9874339446564e-01; +P8 = 1.0001702615573e+00; +P9 = 9.9998873424721e-01; + +for i = 0:BP-1 + P(i+1) = eval(['P' num2str(i)]); +end + +H = ones(N,1); +H(1:BP) = P; +H(end-BP+1:end) = flip(P); +H = spdiags(h*H,0,N,N); +%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%% Q matrix %%%%%%%%%%% + +% interior stencil +switch order + case 2 + d = [-1/2,0,1/2]; + case 4 + d = [1/12,-2/3,0,2/3,-1/12]; + case 6 + d = [-1/60,3/20,-3/4,0,3/4,-3/20,1/60]; + case 8 + d = [1/280,-4/105,1/5,-4/5,0,4/5,-1/5,4/105,-1/280]; + case 10 + d = [-1/1260,5/504,-5/84,5/21,-5/6,0,5/6,-5/21,5/84,-5/504,1/1260]; + case 12 + d = [1/5544,-1/385,1/56,-5/63,15/56,-6/7,0,6/7,-15/56,5/63,-1/56,1/385,-1/5544]; +end +d = repmat(d,N,1); +Q = spdiags(d,-order/2:order/2,N,N); + +% Boundaries +Q0_0 = -5.0000000000000e-01; +Q0_1 = 6.7603132599815e-01; +Q0_2 = -2.6781065957921e-01; +Q0_3 = 1.4050310470012e-01; +Q0_4 = -5.4072653004710e-02; +Q0_5 = -1.1876984028213e-02; +Q0_6 = 2.6300694680362e-02; +Q0_7 = -9.8077210531438e-03; +Q0_8 = 4.2848959311712e-04; +Q0_9 = 3.0440269352791e-04; +Q0_10 = 0.0000000000000e+00; +Q0_11 = 0.0000000000000e+00; +Q0_12 = 0.0000000000000e+00; +Q0_13 = 0.0000000000000e+00; +Q0_14 = 0.0000000000000e+00; +Q0_15 = 0.0000000000000e+00; +Q1_0 = -6.7603132599815e-01; +Q1_1 = 0.0000000000000e+00; +Q1_2 = 9.5204118058043e-01; +Q1_3 = -4.1306598236120e-01; +Q1_4 = 1.5442577883533e-01; +Q1_5 = 2.6535212157067e-02; +Q1_6 = -6.7869317213141e-02; +Q1_7 = 2.6431850942376e-02; +Q1_8 = -1.8383496124689e-03; +Q1_9 = -6.2904733024363e-04; +Q1_10 = 0.0000000000000e+00; +Q1_11 = 0.0000000000000e+00; +Q1_12 = 0.0000000000000e+00; +Q1_13 = 0.0000000000000e+00; +Q1_14 = 0.0000000000000e+00; +Q1_15 = 0.0000000000000e+00; +Q2_0 = 2.6781065957921e-01; +Q2_1 = -9.5204118058043e-01; +Q2_2 = 0.0000000000000e+00; +Q2_3 = 9.4424869445124e-01; +Q2_4 = -3.0369922793820e-01; +Q2_5 = -1.7036409572828e-02; +Q2_6 = 9.7546158402857e-02; +Q2_7 = -4.2534720340735e-02; +Q2_8 = 5.3471186513813e-03; +Q2_9 = 3.5890734751923e-04; +Q2_10 = 0.0000000000000e+00; +Q2_11 = 0.0000000000000e+00; +Q2_12 = 0.0000000000000e+00; +Q2_13 = 0.0000000000000e+00; +Q2_14 = 0.0000000000000e+00; +Q2_15 = 0.0000000000000e+00; +Q3_0 = -1.4050310470012e-01; +Q3_1 = 4.1306598236120e-01; +Q3_2 = -9.4424869445124e-01; +Q3_3 = 0.0000000000000e+00; +Q3_4 = 8.1369662782755e-01; +Q3_5 = -8.4027084126181e-02; +Q3_6 = -1.0721180825279e-01; +Q3_7 = 6.1098180874949e-02; +Q3_8 = -1.2618762739267e-02; +Q3_9 = 7.4866320589496e-04; +Q3_10 = 0.0000000000000e+00; +Q3_11 = 0.0000000000000e+00; +Q3_12 = 0.0000000000000e+00; +Q3_13 = 0.0000000000000e+00; +Q3_14 = 0.0000000000000e+00; +Q3_15 = 0.0000000000000e+00; +Q4_0 = 5.4072653004710e-02; +Q4_1 = -1.5442577883533e-01; +Q4_2 = 3.0369922793820e-01; +Q4_3 = -8.1369662782755e-01; +Q4_4 = 0.0000000000000e+00; +Q4_5 = 6.8140317057259e-01; +Q4_6 = -5.0090848997730e-02; +Q4_7 = -3.2156238350691e-02; +Q4_8 = 1.2270208460707e-02; +Q4_9 = -8.9539078453821e-04; +Q4_10 = -1.8037518037522e-04; +Q4_11 = 0.0000000000000e+00; +Q4_12 = 0.0000000000000e+00; +Q4_13 = 0.0000000000000e+00; +Q4_14 = 0.0000000000000e+00; +Q4_15 = 0.0000000000000e+00; +Q5_0 = 1.1876984028213e-02; +Q5_1 = -2.6535212157067e-02; +Q5_2 = 1.7036409572828e-02; +Q5_3 = 8.4027084126181e-02; +Q5_4 = -6.8140317057259e-01; +Q5_5 = 0.0000000000000e+00; +Q5_6 = 7.3535220394540e-01; +Q5_7 = -1.7565390898074e-01; +Q5_8 = 4.5853976429252e-02; +Q5_9 = -1.2971393808506e-02; +Q5_10 = 2.5974025974031e-03; +Q5_11 = -1.8037518037522e-04; +Q5_12 = 0.0000000000000e+00; +Q5_13 = 0.0000000000000e+00; +Q5_14 = 0.0000000000000e+00; +Q5_15 = 0.0000000000000e+00; +Q6_0 = -2.6300694680362e-02; +Q6_1 = 6.7869317213141e-02; +Q6_2 = -9.7546158402857e-02; +Q6_3 = 1.0721180825279e-01; +Q6_4 = 5.0090848997730e-02; +Q6_5 = -7.3535220394540e-01; +Q6_6 = 0.0000000000000e+00; +Q6_7 = 8.2185236816776e-01; +Q6_8 = -2.4842386107781e-01; +Q6_9 = 7.6038690915127e-02; +Q6_10 = -1.7857142857146e-02; +Q6_11 = 2.5974025974031e-03; +Q6_12 = -1.8037518037522e-04; +Q6_13 = 0.0000000000000e+00; +Q6_14 = 0.0000000000000e+00; +Q6_15 = 0.0000000000000e+00; +Q7_0 = 9.8077210531438e-03; +Q7_1 = -2.6431850942376e-02; +Q7_2 = 4.2534720340735e-02; +Q7_3 = -6.1098180874949e-02; +Q7_4 = 3.2156238350691e-02; +Q7_5 = 1.7565390898074e-01; +Q7_6 = -8.2185236816776e-01; +Q7_7 = 0.0000000000000e+00; +Q7_8 = 8.5207110387533e-01; +Q7_9 = -2.6676625654053e-01; +Q7_10 = 7.9365079365093e-02; +Q7_11 = -1.7857142857146e-02; +Q7_12 = 2.5974025974031e-03; +Q7_13 = -1.8037518037522e-04; +Q7_14 = 0.0000000000000e+00; +Q7_15 = 0.0000000000000e+00; +Q8_0 = -4.2848959311712e-04; +Q8_1 = 1.8383496124689e-03; +Q8_2 = -5.3471186513813e-03; +Q8_3 = 1.2618762739267e-02; +Q8_4 = -1.2270208460707e-02; +Q8_5 = -4.5853976429252e-02; +Q8_6 = 2.4842386107781e-01; +Q8_7 = -8.5207110387533e-01; +Q8_8 = 0.0000000000000e+00; +Q8_9 = 8.5702210251244e-01; +Q8_10 = -2.6785714285718e-01; +Q8_11 = 7.9365079365093e-02; +Q8_12 = -1.7857142857146e-02; +Q8_13 = 2.5974025974031e-03; +Q8_14 = -1.8037518037522e-04; +Q8_15 = 0.0000000000000e+00; +Q9_0 = -3.0440269352791e-04; +Q9_1 = 6.2904733024363e-04; +Q9_2 = -3.5890734751923e-04; +Q9_3 = -7.4866320589496e-04; +Q9_4 = 8.9539078453821e-04; +Q9_5 = 1.2971393808506e-02; +Q9_6 = -7.6038690915127e-02; +Q9_7 = 2.6676625654053e-01; +Q9_8 = -8.5702210251244e-01; +Q9_9 = 0.0000000000000e+00; +Q9_10 = 8.5714285714289e-01; +Q9_11 = -2.6785714285718e-01; +Q9_12 = 7.9365079365093e-02; +Q9_13 = -1.7857142857146e-02; +Q9_14 = 2.5974025974031e-03; +Q9_15 = -1.8037518037522e-04; +for i = 1:BP + for j = 1:BP + Q(i,j) = eval(['Q' num2str(i-1) '_' num2str(j-1)]); + Q(N+1-i,N+1-j) = -eval(['Q' num2str(i-1) '_' num2str(j-1)]); + end +end +%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%% Difference operator %% +D1 = H\Q; +%%%%%%%%%%%%%%%%%%%%%%%%%%% \ No newline at end of file
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/+implementations/d1_noneq_minimal_4.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/+sbp/+implementations/d1_noneq_minimal_4.m Mon Sep 12 12:53:02 2016 +0200 @@ -0,0 +1,103 @@ +function [D1,H,x,h] = d1_noneq_minimal_4(N,L) + +% L: Domain length +% N: Number of grid points +if(nargin < 2) + L = 1; +end + +if(N<6) + error('Operator requires at least 6 grid points'); +end + +% BP: Number of boundary points +% m: Number of nonequidistant spacings +% order: Accuracy of interior stencil +BP = 3; +m = 1; +order = 4; + +%%%% Non-equidistant grid points %%%%% +x0 = 0.0000000000000e+00; +x1 = 7.7122987842562e-01; +x2 = 1.7712298784256e+00; +x3 = 2.7712298784256e+00; + +xb = sparse(m+1,1); +for i = 0:m + xb(i+1) = eval(['x' num2str(i)]); +end +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%% Compute h %%%%%%%%%% +h = L/(2*xb(end) + N-1-2*m); +%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%% Define grid %%%%%%%% +x = h*[xb; linspace(xb(end)+1,L/h-xb(end)-1,N-2*(m+1))'; L/h-flip(xb) ]; +%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%% Norm matrix %%%%%%%% +P = sparse(BP,1); +%#ok<*NASGU> +P0 = 2.6864248295847e-01; +P1 = 1.0094667153500e+00; +P2 = 9.9312068011715e-01; + +for i = 0:BP-1 + P(i+1) = eval(['P' num2str(i)]); +end + +H = ones(N,1); +H(1:BP) = P; +H(end-BP+1:end) = flip(P); +H = spdiags(h*H,0,N,N); +%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%% Q matrix %%%%%%%%%%% + +% interior stencil +switch order + case 2 + d = [-1/2,0,1/2]; + case 4 + d = [1/12,-2/3,0,2/3,-1/12]; + case 6 + d = [-1/60,3/20,-3/4,0,3/4,-3/20,1/60]; + case 8 + d = [1/280,-4/105,1/5,-4/5,0,4/5,-1/5,4/105,-1/280]; + case 10 + d = [-1/1260,5/504,-5/84,5/21,-5/6,0,5/6,-5/21,5/84,-5/504,1/1260]; + case 12 + d = [1/5544,-1/385,1/56,-5/63,15/56,-6/7,0,6/7,-15/56,5/63,-1/56,1/385,-1/5544]; +end +d = repmat(d,N,1); +Q = spdiags(d,-order/2:order/2,N,N); + +% Boundaries +Q0_0 = -5.0000000000000e-01; +Q0_1 = 6.1697245625434e-01; +Q0_2 = -1.1697245625434e-01; +Q0_3 = 0.0000000000000e+00; +Q0_4 = 0.0000000000000e+00; +Q1_0 = -6.1697245625434e-01; +Q1_1 = 0.0000000000000e+00; +Q1_2 = 7.0030578958767e-01; +Q1_3 = -8.3333333333333e-02; +Q1_4 = 0.0000000000000e+00; +Q2_0 = 1.1697245625434e-01; +Q2_1 = -7.0030578958767e-01; +Q2_2 = 0.0000000000000e+00; +Q2_3 = 6.6666666666667e-01; +Q2_4 = -8.3333333333333e-02; +for i = 1:BP + for j = 1:BP + Q(i,j) = eval(['Q' num2str(i-1) '_' num2str(j-1)]); + Q(N+1-i,N+1-j) = -eval(['Q' num2str(i-1) '_' num2str(j-1)]); + end +end +%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%% Difference operator %% +D1 = H\Q; +%%%%%%%%%%%%%%%%%%%%%%%%%%% \ No newline at end of file
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/+implementations/d1_noneq_minimal_6.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/+sbp/+implementations/d1_noneq_minimal_6.m Mon Sep 12 12:53:02 2016 +0200 @@ -0,0 +1,132 @@ +function [D1,H,x,h] = d1_noneq_minimal_6(N,L) + +% L: Domain length +% N: Number of grid points +if(nargin < 2) + L = 1; +end + +if(N<10) + error('Operator requires at least 10 grid points'); +end + +% BP: Number of boundary points +% m: Number of nonequidistant spacings +% order: Accuracy of interior stencil +BP = 5; +m = 2; +order = 6; + +%%%% Non-equidistant grid points %%%%% +x0 = 0.0000000000000e+00; +x1 = 4.0842950991998e-01; +x2 = 1.1968523189207e+00; +x3 = 2.1968523189207e+00; +x4 = 3.1968523189207e+00; +x5 = 4.1968523189207e+00; + +xb = sparse(m+1,1); +for i = 0:m + xb(i+1) = eval(['x' num2str(i)]); +end +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%% Compute h %%%%%%%%%% +h = L/(2*xb(end) + N-1-2*m); +%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%% Define grid %%%%%%%% +x = h*[xb; linspace(xb(end)+1,L/h-xb(end)-1,N-2*(m+1))'; L/h-flip(xb) ]; +%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%% Norm matrix %%%%%%%% +P = sparse(BP,1); +%#ok<*NASGU> +P0 = 1.2740260779883e-01; +P1 = 6.1820981002054e-01; +P2 = 9.4308973897679e-01; +P3 = 1.0093019060199e+00; +P4 = 9.9884825610465e-01; + +for i = 0:BP-1 + P(i+1) = eval(['P' num2str(i)]); +end + +H = ones(N,1); +H(1:BP) = P; +H(end-BP+1:end) = flip(P); +H = spdiags(h*H,0,N,N); +%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%% Q matrix %%%%%%%%%%% + +% interior stencil +switch order + case 2 + d = [-1/2,0,1/2]; + case 4 + d = [1/12,-2/3,0,2/3,-1/12]; + case 6 + d = [-1/60,3/20,-3/4,0,3/4,-3/20,1/60]; + case 8 + d = [1/280,-4/105,1/5,-4/5,0,4/5,-1/5,4/105,-1/280]; + case 10 + d = [-1/1260,5/504,-5/84,5/21,-5/6,0,5/6,-5/21,5/84,-5/504,1/1260]; + case 12 + d = [1/5544,-1/385,1/56,-5/63,15/56,-6/7,0,6/7,-15/56,5/63,-1/56,1/385,-1/5544]; +end +d = repmat(d,N,1); +Q = spdiags(d,-order/2:order/2,N,N); + +% Boundaries +Q0_0 = -5.0000000000000e-01; +Q0_1 = 6.3217364546846e-01; +Q0_2 = -1.6411963429825e-01; +Q0_3 = 3.6495407984639e-02; +Q0_4 = -4.5494191548490e-03; +Q0_5 = 0.0000000000000e+00; +Q0_6 = 0.0000000000000e+00; +Q0_7 = 0.0000000000000e+00; +Q1_0 = -6.3217364546846e-01; +Q1_1 = 0.0000000000000e+00; +Q1_2 = 8.0515625504417e-01; +Q1_3 = -2.0755653563249e-01; +Q1_4 = 3.4573926056780e-02; +Q1_5 = 0.0000000000000e+00; +Q1_6 = 0.0000000000000e+00; +Q1_7 = 0.0000000000000e+00; +Q2_0 = 1.6411963429825e-01; +Q2_1 = -8.0515625504417e-01; +Q2_2 = 0.0000000000000e+00; +Q2_3 = 7.9402676057785e-01; +Q2_4 = -1.6965680649860e-01; +Q2_5 = 1.6666666666667e-02; +Q2_6 = 0.0000000000000e+00; +Q2_7 = 0.0000000000000e+00; +Q3_0 = -3.6495407984639e-02; +Q3_1 = 2.0755653563249e-01; +Q3_2 = -7.9402676057785e-01; +Q3_3 = 0.0000000000000e+00; +Q3_4 = 7.5629896626333e-01; +Q3_5 = -1.5000000000000e-01; +Q3_6 = 1.6666666666667e-02; +Q3_7 = 0.0000000000000e+00; +Q4_0 = 4.5494191548490e-03; +Q4_1 = -3.4573926056780e-02; +Q4_2 = 1.6965680649860e-01; +Q4_3 = -7.5629896626333e-01; +Q4_4 = 0.0000000000000e+00; +Q4_5 = 7.5000000000000e-01; +Q4_6 = -1.5000000000000e-01; +Q4_7 = 1.6666666666667e-02; +for i = 1:BP + for j = 1:BP + Q(i,j) = eval(['Q' num2str(i-1) '_' num2str(j-1)]); + Q(N+1-i,N+1-j) = -eval(['Q' num2str(i-1) '_' num2str(j-1)]); + end +end +%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%% Difference operator %% +D1 = H\Q; +%%%%%%%%%%%%%%%%%%%%%%%%%%% \ No newline at end of file
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/+implementations/d1_noneq_minimal_8.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/+sbp/+implementations/d1_noneq_minimal_8.m Mon Sep 12 12:53:02 2016 +0200 @@ -0,0 +1,154 @@ +function [D1,H,x,h] = d1_noneq_minimal_8(N,L) + +% L: Domain length +% N: Number of grid points +if(nargin < 2) + L = 1; +end + +if(N<12) + error('Operator requires at least 12 grid points'); +end + +% BP: Number of boundary points +% m: Number of nonequidistant spacings +% order: Accuracy of interior stencil +BP = 6; +m = 2; +order = 8; + +%%%% Non-equidistant grid points %%%%% +x0 = 0.0000000000000e+00; +x1 = 4.9439570885261e-01; +x2 = 1.4051531374839e+00; +x3 = 2.4051531374839e+00; +x4 = 3.4051531374839e+00; +x5 = 4.4051531374839e+00; +x6 = 5.4051531374839e+00; + +xb = sparse(m+1,1); +for i = 0:m + xb(i+1) = eval(['x' num2str(i)]); +end +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%% Compute h %%%%%%%%%% +h = L/(2*xb(end) + N-1-2*m); +%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%% Define grid %%%%%%%% +x = h*[xb; linspace(xb(end)+1,L/h-xb(end)-1,N-2*(m+1))'; L/h-flip(xb) ]; +%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%% Norm matrix %%%%%%%% +P = sparse(BP,1); +%#ok<*NASGU> +P0 = 1.4523997892351e-01; +P1 = 7.6864793350174e-01; +P2 = 9.9116487068535e-01; +P3 = 9.9992473335107e-01; +P4 = 1.0002097054636e+00; +P5 = 9.9996591555866e-01; + +for i = 0:BP-1 + P(i+1) = eval(['P' num2str(i)]); +end + +H = ones(N,1); +H(1:BP) = P; +H(end-BP+1:end) = flip(P); +H = spdiags(h*H,0,N,N); +%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%% Q matrix %%%%%%%%%%% + +% interior stencil +switch order + case 2 + d = [-1/2,0,1/2]; + case 4 + d = [1/12,-2/3,0,2/3,-1/12]; + case 6 + d = [-1/60,3/20,-3/4,0,3/4,-3/20,1/60]; + case 8 + d = [1/280,-4/105,1/5,-4/5,0,4/5,-1/5,4/105,-1/280]; + case 10 + d = [-1/1260,5/504,-5/84,5/21,-5/6,0,5/6,-5/21,5/84,-5/504,1/1260]; + case 12 + d = [1/5544,-1/385,1/56,-5/63,15/56,-6/7,0,6/7,-15/56,5/63,-1/56,1/385,-1/5544]; +end +d = repmat(d,N,1); +Q = spdiags(d,-order/2:order/2,N,N); + +% Boundaries +Q0_0 = -5.0000000000000e-01; +Q0_1 = 6.6697342753834e-01; +Q0_2 = -2.2919342278749e-01; +Q0_3 = 7.4283116457276e-02; +Q0_4 = -1.2020661178873e-02; +Q0_5 = -4.2460029252999e-05; +Q0_6 = 0.0000000000000e+00; +Q0_7 = 0.0000000000000e+00; +Q0_8 = 0.0000000000000e+00; +Q0_9 = 0.0000000000000e+00; +Q1_0 = -6.6697342753834e-01; +Q1_1 = 0.0000000000000e+00; +Q1_2 = 8.8241196934163e-01; +Q1_3 = -2.6653314104602e-01; +Q1_4 = 5.5302527504316e-02; +Q1_5 = -4.2079282615860e-03; +Q1_6 = 0.0000000000000e+00; +Q1_7 = 0.0000000000000e+00; +Q1_8 = 0.0000000000000e+00; +Q1_9 = 0.0000000000000e+00; +Q2_0 = 2.2919342278749e-01; +Q2_1 = -8.8241196934163e-01; +Q2_2 = 0.0000000000000e+00; +Q2_3 = 8.2904844081126e-01; +Q2_4 = -2.1156614214635e-01; +Q2_5 = 3.9307676460659e-02; +Q2_6 = -3.5714285714286e-03; +Q2_7 = 0.0000000000000e+00; +Q2_8 = 0.0000000000000e+00; +Q2_9 = 0.0000000000000e+00; +Q3_0 = -7.4283116457276e-02; +Q3_1 = 2.6653314104602e-01; +Q3_2 = -8.2904844081126e-01; +Q3_3 = 0.0000000000000e+00; +Q3_4 = 8.0305501223679e-01; +Q3_5 = -2.0078040553808e-01; +Q3_6 = 3.8095238095238e-02; +Q3_7 = -3.5714285714286e-03; +Q3_8 = 0.0000000000000e+00; +Q3_9 = 0.0000000000000e+00; +Q4_0 = 1.2020661178873e-02; +Q4_1 = -5.5302527504316e-02; +Q4_2 = 2.1156614214635e-01; +Q4_3 = -8.0305501223679e-01; +Q4_4 = 0.0000000000000e+00; +Q4_5 = 8.0024692689207e-01; +Q4_6 = -2.0000000000000e-01; +Q4_7 = 3.8095238095238e-02; +Q4_8 = -3.5714285714286e-03; +Q4_9 = 0.0000000000000e+00; +Q5_0 = 4.2460029252999e-05; +Q5_1 = 4.2079282615860e-03; +Q5_2 = -3.9307676460659e-02; +Q5_3 = 2.0078040553808e-01; +Q5_4 = -8.0024692689207e-01; +Q5_5 = 0.0000000000000e+00; +Q5_6 = 8.0000000000000e-01; +Q5_7 = -2.0000000000000e-01; +Q5_8 = 3.8095238095238e-02; +Q5_9 = -3.5714285714286e-03; +for i = 1:BP + for j = 1:BP + Q(i,j) = eval(['Q' num2str(i-1) '_' num2str(j-1)]); + Q(N+1-i,N+1-j) = -eval(['Q' num2str(i-1) '_' num2str(j-1)]); + end +end +%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%% Difference operator %% +D1 = H\Q; +%%%%%%%%%%%%%%%%%%%%%%%%%%% \ No newline at end of file
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/+implementations/d1_upwind_2.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/+sbp/+implementations/d1_upwind_2.m Mon Sep 12 12:53:02 2016 +0200 @@ -0,0 +1,35 @@ +function [H, HI, Dp, Dm, e_1, e_m] = d1_upwind_2(m,h) + + if(m<4) + error('Operator requires at least 4 grid points'); + end + + Hv=ones(m,1); + Hv(1:2)=[0.1e1/0.4e1; 0.5e1/0.4e1;]; + Hv(m-1:m)=rot90(Hv(1:2),2); + Hv = Hv*h; + H = spdiag(Hv,0); + HI = spdiag(1./Hv,0); + + q_diags = [0 1 2]; + q_stencil = [-3/2 +2 -1/2]; + Qp = stripeMatrix(q_stencil, q_diags,m); + + Q_U = [ + -0.1e1/0.4e1 0.5e1/0.4e1; + -0.1e1/0.4e1 -0.5e1/0.4e1; + ]; + + Qp(1:2,1:2)=Q_U; + Qp(m-1:m,m-1:m)=rot90(Q_U,2)'; %%% This is different from standard SBP + + Qm=-Qp'; + + e_1=sparse(m,1);e_1(1)=1; + e_m=sparse(m,1);e_m(m)=1; + + Dp=HI*(Qp-1/2*(e_1*e_1')+1/2*(e_m*e_m')) ; + + Dm=HI*(Qm-1/2*(e_1*e_1')+1/2*(e_m*e_m')) ; +end +
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/+implementations/d1_upwind_3.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/+sbp/+implementations/d1_upwind_3.m Mon Sep 12 12:53:02 2016 +0200 @@ -0,0 +1,37 @@ +function [H, HI, Dp, Dm, e_1, e_m] = d1_upwind_3(m,h) + + if(m<6) + error('Operator requires at least 6 grid points'); + end + + Hv = ones(m,1); + Hv(1:3) = [3/8; 7/6; 23/24]; + Hv(m-2:m) = rot90(Hv(1:3),2); + Hv = Hv*h; + H = spdiag(Hv,0); + HI = spdiag(1./Hv,0); + + 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'; + + e_1=sparse(m,1); + e_1(1)=1; + e_m=sparse(m,1); + e_m(m)=1; + + Dp=HI*(Qp-1/2*(e_1*e_1')+1/2*(e_m*e_m')) ; + + Dm=HI*(Qm-1/2*(e_1*e_1')+1/2*(e_m*e_m')) ; +end +
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/+implementations/d1_upwind_4.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/+sbp/+implementations/d1_upwind_4.m Mon Sep 12 12:53:02 2016 +0200 @@ -0,0 +1,36 @@ +function [H, HI, Dp, Dm, e_1, e_m] = d1_upwind_4(m,h) + + if(m<8) + error('Operator requires at least 8 grid points'); + end + + Hv=ones(m,1); + Hv(1:4)=[49/144 61/48 41/48 149/144]; + Hv(m-3:m)=rot90(Hv(1:4),2); + Hv = Hv*h; + H = spdiag(Hv,0); + HI = spdiag(1./Hv,0); + + q_diags = [-1, 0, 1, 2 3]; + q_stencil = [-1/4 -5/6 3/2 -1/2 1/12]; + Qp = stripeMatrix(q_stencil, q_diags,m); + + Q_U = [ + -0.1e1/0.48e2 0.205e3/0.288e3 -0.29e2/0.144e3 0.1e1/0.96e2; + -0.169e3/0.288e3 -0.11e2/0.48e2 0.33e2/0.32e2 -0.43e2/0.144e3; + 0.11e2/0.144e3 -0.13e2/0.32e2 -0.29e2/0.48e2 0.389e3/0.288e3; + 0.1e1/0.32e2 -0.11e2/0.144e3 -0.65e2/0.288e3 -0.13e2/0.16e2; + ]; + + Qp(1:4,1:4)=Q_U; + Qp(m-3:m,m-3:m)=rot90(Q_U,2)'; %%% This is different from standard SBP + + Qm=-Qp'; + + e_1=sparse(m,1);e_1(1)=1; + e_m=sparse(m,1);e_m(m)=1; + + Dp=HI*(Qp-1/2*(e_1*e_1')+1/2*(e_m*e_m')) ; + + Dm=HI*(Qm-1/2*(e_1*e_1')+1/2*(e_m*e_m')) ; +end
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/+implementations/d1_upwind_5.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/+sbp/+implementations/d1_upwind_5.m Mon Sep 12 12:53:02 2016 +0200 @@ -0,0 +1,36 @@ +function [H, HI, Dp, Dm, e_1, e_m] = d1_upwind_5(m,h) + + if(m<8) + error('Operator requires at least 8 grid points'); + end + + Hv=ones(m,1); + Hv(1:4)=[0.251e3/0.720e3; 0.299e3/0.240e3; 0.211e3/0.240e3; 0.739e3/0.720e3;]; + Hv(m-3:m)=rot90(Hv(1:4),2); + Hv = Hv*h; + H = spdiag(Hv,0); + HI = spdiag(1./Hv,0); + + q_diags = [-2 -1 0 1 2 3]; + q_stencil = [1/20 -1/2 -1/3 +1 -1/4 +1/30]; + Qp = stripeMatrix(q_stencil, q_diags,m); + + Q_U = [ + -0.1e1/0.120e3 0.941e3/0.1440e4 -0.47e2/0.360e3 -0.7e1/0.480e3; + -0.869e3/0.1440e4 -0.11e2/0.120e3 0.25e2/0.32e2 -0.43e2/0.360e3; + 0.29e2/0.360e3 -0.17e2/0.32e2 -0.29e2/0.120e3 0.1309e4/0.1440e4; + 0.1e1/0.32e2 -0.11e2/0.360e3 -0.661e3/0.1440e4 -0.13e2/0.40e2; + ]; + + Qp(1:4,1:4)=Q_U; + Qp(m-3:m,m-3:m)=rot90( Q_U(1:4,1:4) ,2 )'; %%% This is different from standard SBP + + Qm=-Qp'; + + e_1=sparse(m,1);e_1(1)=1; + e_m=sparse(m,1);e_m(m)=1; + + Dp=HI*(Qp-1/2*(e_1*e_1')+1/2*(e_m*e_m')) ; + + Dm=HI*(Qm-1/2*(e_1*e_1')+1/2*(e_m*e_m')) ; +end
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/+implementations/d1_upwind_6.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/+sbp/+implementations/d1_upwind_6.m Mon Sep 12 12:53:02 2016 +0200 @@ -0,0 +1,39 @@ +function [H, HI, Dp, Dm, e_1, e_m] = d1_upwind_6(m,h) + + if(m<12) + error('Operator requires at least 12 grid points'); + end + + Hv = ones(m,1); + Hv(1:6)=[0.13613e5/0.43200e5; 0.12049e5/0.8640e4 ; 0.535e3/0.864e3 ; 0.1079e4/0.864e3 ; 0.7841e4/0.8640e4 ; 0.43837e5/0.43200e5]; + Hv(m-5:m)=rot90(Hv(1:6),2); + Hv = Hv*h; + H = spdiag(Hv,0); + HI = spdiag(1./Hv,0); + + q_diags = [-2 -1 0 1 2 3 4]; + q_stencil = [1/30 -2/5 -7/12 4/3 -1/2 2/15 -1/60]; + Qp = stripeMatrix(q_stencil, q_diags,m); + + Q_U =[ + -0.265e3/0.128688e6 0.1146190567e10/0.1737288000e10 -0.1596619e7/0.18384000e8 -0.55265831e8/0.579096000e9 0.26269819e8/0.3474576000e10 0.2464501e7/0.144774000e9; + -0.1116490567e10/0.1737288000e10 -0.8839e4/0.214480e6 0.190538869e9/0.347457600e9 0.102705469e9/0.694915200e9 0.413741e6/0.9651600e7 -0.191689861e9/0.3474576000e10; + 0.1096619e7/0.18384000e8 -0.135385429e9/0.347457600e9 -0.61067e5/0.321720e6 0.45137333e8/0.57909600e8 -0.253641811e9/0.694915200e9 0.70665929e8/0.579096000e9; + 0.66965831e8/0.579096000e9 -0.208765789e9/0.694915200e9 -0.17623253e8/0.57909600e8 -0.18269e5/0.45960e5 0.410905829e9/0.347457600e9 -0.477953317e9/0.1158192000e10; + -0.49219819e8/0.3474576000e10 0.293299e6/0.9651600e7 0.26422771e8/0.694915200e9 -0.141938309e9/0.347457600e9 -0.346583e6/0.643440e6 0.2217185207e10/0.1737288000e10; + -0.2374501e7/0.144774000e9 0.142906261e9/0.3474576000e10 -0.3137129e7/0.579096000e9 -0.29884283e8/0.1158192000e10 -0.630168407e9/0.1737288000e10 -0.3559e4/0.6128e4; + ]; + + Qp(1:6,1:6)=Q_U; + Qp(m-5:m,m-5:m)=rot90(Q_U,2)'; %%% This is different from standard SBP + + Qm=-Qp'; + + e_1=sparse(m,1);e_1(1)=1; + e_m=sparse(m,1);e_m(m)=1; + + Dp=HI*(Qp-1/2*(e_1*e_1')+1/2*(e_m*e_m')) ; + + Dm=HI*(Qm-1/2*(e_1*e_1')+1/2*(e_m*e_m')) ; + +end
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/+implementations/d1_upwind_7.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/+sbp/+implementations/d1_upwind_7.m Mon Sep 12 12:53:02 2016 +0200 @@ -0,0 +1,40 @@ +function [H, HI, Dp, Dm, e_1, e_m] = d1_upwind_7(m,h) + + BP = 6; + if(m<2*BP) + error(['Operator requires at least ' num2str(2*BP) ' grid points']); + end + + Hv=ones(m,1); + Hv(1:6) = [0.19087e5/0.60480e5; 0.84199e5/0.60480e5; 0.18869e5/0.30240e5; 0.37621e5/0.30240e5; 0.55031e5/0.60480e5; 0.61343e5/0.60480e5; ]; + Hv(m-5:m)=rot90(Hv(1:6),2); + Hv = Hv*h; + H = spdiag(Hv,0); + HI = spdiag(1./Hv,0); + + q_diags = [-3 -2 -1 0 1 2 3 4]; + q_stencil = [-1/105 +1/10 -3/5 -1/4 +1 -3/10 +1/15 -1/140]; + Qp = stripeMatrix(q_stencil, q_diags,m); + + Q_U =[ + -0.265e3/0.300272e6 0.1587945773e10/0.2432203200e10 -0.1926361e7/0.25737600e8 -0.84398989e8/0.810734400e9 0.48781961e8/0.4864406400e10 0.3429119e7/0.202683600e9; + -0.1570125773e10/0.2432203200e10 -0.26517e5/0.1501360e7 0.240029831e9/0.486440640e9 0.202934303e9/0.972881280e9 0.118207e6/0.13512240e8 -0.231357719e9/0.4864406400e10; + 0.1626361e7/0.25737600e8 -0.206937767e9/0.486440640e9 -0.61067e5/0.750680e6 0.49602727e8/0.81073440e8 -0.43783933e8/0.194576256e9 0.51815011e8/0.810734400e9; + 0.91418989e8/0.810734400e9 -0.53314099e8/0.194576256e9 -0.33094279e8/0.81073440e8 -0.18269e5/0.107240e6 0.440626231e9/0.486440640e9 -0.365711063e9/0.1621468800e10; + -0.62551961e8/0.4864406400e10 0.799e3/0.35280e5 0.82588241e8/0.972881280e9 -0.279245719e9/0.486440640e9 -0.346583e6/0.1501360e7 0.2312302333e10/0.2432203200e10; + -0.3375119e7/0.202683600e9 0.202087559e9/0.4864406400e10 -0.11297731e8/0.810734400e9 0.61008503e8/0.1621468800e10 -0.1360092253e10/0.2432203200e10 -0.10677e5/0.42896e5; + ]; + + + Qp(1:6,1:6)=Q_U; + Qp(m-5:m,m-5:m)=rot90(Q_U,2)'; + + Qm=-Qp'; + + e_1=sparse(m,1);e_1(1)=1; + e_m=sparse(m,1);e_m(m)=1; + + Dp=HI*(Qp-1/2*(e_1*e_1')+1/2*(e_m*e_m')) ; + + Dm=HI*(Qm-1/2*(e_1*e_1')+1/2*(e_m*e_m')) ; +end
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/+implementations/d1_upwind_8.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/+sbp/+implementations/d1_upwind_8.m Mon Sep 12 12:53:02 2016 +0200 @@ -0,0 +1,43 @@ +function [H, HI, Dp, Dm, e_1, e_m] = d1_upwind_8(m,h) + + BP = 8; + if(m<2*BP) + error(['Operator requires at least ' num2str(2*BP) ' grid points']); + end + + Hv=ones(m,1); + Hv(1:8) = [0.7489399e7/0.25401600e8; 0.5537831e7/0.3628800e7; 0.103373e6/0.403200e6; 0.261259e6/0.145152e6; 0.298231e6/0.725760e6; 0.515917e6/0.403200e6; 0.3349159e7/0.3628800e7; 0.25639991e8/0.25401600e8]; + Hv(m-7:m)=rot90(Hv(1:8),2); + Hv=Hv*h; + + H = spdiag(Hv,0); + HI = spdiag(1./Hv,0); + + q_diags = [-3 -2 -1 0 1 2 3 4 5]; + q_stencil = [-1/168 +1/14 -1/2 -9/20 +5/4 -1/2 +1/6 -1/28 +1/280]; + Qp = stripeMatrix(q_stencil, q_diags,m); + + + Q_U =[ + -0.16683e5/0.63018560e8 0.29345822969987e14/0.43354248537600e14 -0.2734625426591e13/0.40644608004000e14 -0.113480208109603e15/0.780376473676800e15 -0.830250230261e12/0.26012549122560e14 0.2500519492033e13/0.32515686403200e14 0.2235718279643e13/0.390188236838400e15 -0.388481888477e12/0.26543417472000e14; + -0.29227665839987e14/0.43354248537600e14 -0.493793e6/0.63018560e8 0.8302717120817e13/0.26543417472000e14 0.3739408501537e13/0.9290196115200e13 0.2684481534461e13/0.13935294172800e14 -0.4450185662513e13/0.18580392230400e14 -0.1221838279381e13/0.37160784460800e14 0.90595000956023e14/0.1950941184192000e16; + 0.2505689537591e13/0.40644608004000e14 -0.7312922392817e13/0.26543417472000e14 -0.69332623e8/0.1323389760e10 0.10994933811709e14/0.18580392230400e14 -0.9270952411151e13/0.18580392230400e14 0.3191238635141e13/0.20644880256000e14 0.4442211176987e13/0.92901961152000e14 -0.940661365031e12/0.32515686403200e14; + 0.118016946570403e15/0.780376473676800e15 -0.4173878828737e13/0.9290196115200e13 -0.7990503962509e13/0.18580392230400e14 -0.207799621e9/0.1323389760e10 0.2044021560341e13/0.2477385630720e13 0.511197701761e12/0.18580392230400e14 0.1237681717213e13/0.13935294172800e14 -0.7784834666617e13/0.130062745612800e15; + 0.68609076271e11/0.2364777192960e13 -0.2235651762161e13/0.13935294172800e14 0.6527681584751e13/0.18580392230400e14 -0.1115980068821e13/0.2477385630720e13 -0.55386253e8/0.189055680e9 0.3208334350649e13/0.3716078446080e13 -0.407569013461e12/0.844563283200e12 0.136474842626653e15/0.780376473676800e15; + -0.2487637785013e13/0.32515686403200e14 0.4244231077313e13/0.18580392230400e14 -0.1550378843141e13/0.20644880256000e14 -0.5726967564961e13/0.18580392230400e14 -0.1017898941929e13/0.3716078446080e13 -0.526653889e9/0.1323389760e10 0.45241297077547e14/0.37160784460800e14 -0.2279608411897e13/0.5080576000500e13; + -0.2164019088443e13/0.390188236838400e15 0.1263196075861e13/0.37160784460800e14 -0.6600697610987e13/0.92901961152000e14 0.556610591687e12/0.13935294172800e14 0.926842346471e12/0.9290196115200e13 -0.18757693936747e14/0.37160784460800e14 -0.584765899e9/0.1323389760e10 0.204646287449e12/0.168431424000e12; + 0.387091928477e12/0.26543417472000e14 -0.90231551688023e14/0.1950941184192000e16 0.1032404418251e13/0.32515686403200e14 0.3502353445417e13/0.130062745612800e15 -0.15385068876253e14/0.780376473676800e15 0.262499068919e12/0.10161152001000e14 -0.867004691939e12/0.1852745664000e13 -0.85017967e8/0.189055680e9; + ]; + + Qp(1:8,1:8)=Q_U; + Qp(m-7:m,m-7:m)=rot90(Q_U,2)'; %%% This is different from standard SBP + + Qm=-Qp'; + + e_1=sparse(m,1);e_1(1)=1; + e_m=sparse(m,1);e_m(m)=1; + + Dp=HI*(Qp-1/2*(e_1*e_1')+1/2*(e_m*e_m')) ; + + Dm=HI*(Qm-1/2*(e_1*e_1')+1/2*(e_m*e_m')) ; +end
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/+implementations/d1_upwind_9.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/+sbp/+implementations/d1_upwind_9.m Mon Sep 12 12:53:02 2016 +0200 @@ -0,0 +1,43 @@ +function [H, HI, Dp, Dm, e_1, e_m] = d1_upwind_9(m,h) + + BP = 8; + if(m<2*BP) + error(['Operator requires at least ' num2str(2*BP) ' grid points']); + end + + Hv=ones(m,1); + Hv(1:8) = [0.1070017e7/0.3628800e7; 0.5537111e7/0.3628800e7; 0.103613e6/0.403200e6; 0.261115e6/0.145152e6; 0.298951e6/0.725760e6; 0.515677e6/0.403200e6; 0.3349879e7/0.3628800e7; 0.3662753e7/0.3628800e7;]; + Hv(m-7:m)=rot90(Hv(1:8),2); + Hv=Hv*h; + + H = spdiag(Hv,0); + HI = spdiag(1./Hv,0); + + q_diags = [-4 -3 -2 -1 0 1 2 3 4 5]; + q_stencil = [1/504 -1/42 +1/7 -2/3 -1/5 +1 -1/3 +2/21 -1/56 +1/630]; + Qp = stripeMatrix(q_stencil, q_diags,m); + + Q_U =[ + -0.5561e4/0.47263920e8 0.4186300102421e13/0.6193464076800e13 -0.377895002003e12/0.5806372572000e13 -0.16485548951749e14/0.111482353382400e15 -0.113245973003e12/0.3716078446080e13 0.355360297339e12/0.4645098057600e13 0.321012170669e12/0.55741176691200e14 -0.388397049437e12/0.26543417472000e14; + -0.4178798062421e13/0.6193464076800e13 -0.493793e6/0.141791760e9 0.725405227507e12/0.2413037952000e13 0.3904159533697e13/0.9290196115200e13 0.2483046570341e13/0.13935294172800e14 -0.4336328670953e13/0.18580392230400e14 -0.1258688487061e13/0.37160784460800e14 0.12931584852209e14/0.278705883456000e15; + 0.363359390003e12/0.5806372572000e13 -0.7539548734577e13/0.26543417472000e14 -0.69332623e8/0.2977626960e10 0.9994352248429e13/0.18580392230400e14 -0.8195655811631e13/0.18580392230400e14 0.7361486640463e13/0.61934640768000e14 0.5539855071347e13/0.92901961152000e14 -0.12898722943e11/0.422281641600e12; + 0.16773595838149e14/0.111482353382400e15 -0.372477950627e12/0.844563283200e12 -0.8659050093229e13/0.18580392230400e14 -0.207799621e9/0.2977626960e10 0.1734921317461e13/0.2477385630720e13 0.2530020015841e13/0.18580392230400e14 0.441856623253e12/0.13935294172800e14 -0.115132773073e12/0.2654341747200e13; + 0.108449122763e12/0.3716078446080e13 -0.2283566671541e13/0.13935294172800e14 0.6976424333231e13/0.18580392230400e14 -0.440819477447e12/0.825795210240e12 -0.55386253e8/0.425375280e9 0.2479572560009e13/0.3716078446080e13 -0.40258468963e11/0.120651897600e12 0.11808221047099e14/0.111482353382400e15; + -0.32231128289e11/0.422281641600e12 0.4244793299753e13/0.18580392230400e14 -0.5173673584463e13/0.61934640768000e14 -0.4848139955041e13/0.18580392230400e14 -0.1506045711689e13/0.3716078446080e13 -0.526653889e9/0.2977626960e10 0.36411368691307e14/0.37160784460800e14 -0.825434105779e12/0.2903186286000e13; + -0.316459841069e12/0.55741176691200e14 0.1277069729941e13/0.37160784460800e14 -0.6499182375347e13/0.92901961152000e14 0.355606625147e12/0.13935294172800e14 0.1519272420551e13/0.9290196115200e13 -0.2240079855137e13/0.3378253132800e13 -0.584765899e9/0.2977626960e10 0.2301241355533e13/0.2382101568000e13; + 0.387779289437e12/0.26543417472000e14 -0.12908508708209e14/0.278705883456000e15 0.147710908133e12/0.4645098057600e13 0.534025841911e12/0.18580392230400e14 -0.4119981443899e13/0.111482353382400e15 0.279819152779e12/0.2903186286000e13 -0.1510324515533e13/0.2382101568000e13 -0.85017967e8/0.425375280e9; + ]; + + + Qp(1:8,1:8)=Q_U; + Qp(m-7:m,m-7:m)=rot90(Q_U,2)'; %%% This is different from standard SBP + + Qm=-Qp'; + + e_1=sparse(m,1);e_1(1)=1; + e_m=sparse(m,1);e_m(m)=1; + + Dp=HI*(Qp-1/2*(e_1*e_1')+1/2*(e_m*e_m')) ; + + Dm=HI*(Qm-1/2*(e_1*e_1')+1/2*(e_m*e_m')) ; +end
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/+implementations/d2_10.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/+sbp/+implementations/d2_10.m Mon Sep 12 12:53:02 2016 +0200 @@ -0,0 +1,66 @@ +function [H, HI, D1, D2, e_1, e_m, M, Q, S_1, S_m] = d2_10(m,h) + + BP = 11; + if(m<2*BP) + error(['Operator requires at least ' num2str(2*BP) ' grid points']); + end + + H_U = [0.5261271563e10 / 0.18289152000e11 0 0 0 0 0 0 0 0 0 0; 0 0.2881040311e10 / 0.1828915200e10 0 0 0 0 0 0 0 0 0; 0 0 0.52175551e8 / 0.406425600e9 0 0 0 0 0 0 0 0; 0 0 0 0.11662993e8 / 0.6096384e7 0 0 0 0 0 0 0; 0 0 0 0 0.50124587e8 / 0.87091200e8 0 0 0 0 0 0; 0 0 0 0 0 0.50124587e8 / 0.72576000e8 0 0 0 0 0; 0 0 0 0 0 0 0.148333439e9 / 0.87091200e8 0 0 0 0; 0 0 0 0 0 0 0 0.63867949e8 / 0.152409600e9 0 0 0; 0 0 0 0 0 0 0 0 0.20608675e8 / 0.16257024e8 0 0; 0 0 0 0 0 0 0 0 0 0.1704508063e10 / 0.1828915200e10 0; 0 0 0 0 0 0 0 0 0 0 0.18425967263e11 / 0.18289152000e11;]; + + H=speye(m); + H(1:11,1:11)=H_U; + H(m-10:m,m-10:m)=rot90( H_U(1:11,1:11) ,2 ); + H=H*h; + HI=inv(H); + +% Q=-(-1/1260*diag(ones(m-5,1),5)+5/504*diag(ones(m-4,1),4)-5/84*diag(ones(m-3,1),3)+5/21*diag(ones(m-2,1),2)-5/6*diag(ones(m-1,1),1)+5/6*diag(ones(m-1,1),-1)-5/21*diag(ones(m-2,1),-2)+5/84*diag(ones(m-3,1),-3)-5/504*diag(ones(m-4,1),-4)+1/1260*diag(ones(m-5,1),-5)); + + diags = -5:5; + stencil = [-1/1260,5/504,-5/84,5/21,-5/6,0,5/6,-5/21,5/84,-5/504,1/1260]; + Q = stripeMatrix(stencil, diags, m); + + + + Q_U = [-0.1e1 / 0.2e1 0.2300876759589119e16 / 0.3395198177280000e16 -0.99808615498093e14 / 0.2263465451520000e16 -0.34957747037683e14 / 0.212199886080000e15 -0.709586095717e12 / 0.13473008640000e14 0.325330433051e12 / 0.6218311680000e13 0.27953548723573e14 / 0.485028311040000e15 0.2690678501e10 / 0.412439040000e12 -0.2397491025029e13 / 0.70733295360000e14 -0.9959492094287e13 / 0.1131732725760000e16 0.5242772857661e13 / 0.522338181120000e15; -0.2300876759589119e16 / 0.3395198177280000e16 0 0.3103439505511e13 / 0.16643128320000e14 0.2700334568377e13 / 0.5052378240000e13 0.50587599589937e14 / 0.242514155520000e15 -0.5570893587157e13 / 0.40419025920000e14 -0.1496329934863e13 / 0.8083805184000e13 -0.322512443237e12 / 0.12482346240000e14 0.2275340833763e13 / 0.23096586240000e14 0.22922115021893e14 / 0.848799544320000e15 -0.143e3 / 0.5000e4; 0.99808615498093e14 / 0.2263465451520000e16 -0.3103439505511e13 / 0.16643128320000e14 0 0.15053664233879e14 / 0.40419025920000e14 -0.9306441440587e13 / 0.32335220736000e14 -0.945459729233e12 / 0.13473008640000e14 0.956829267413e12 / 0.5774146560000e13 0.446866085903e12 / 0.56586636288000e14 -0.41109372242993e14 / 0.754488483840000e15 0.1e1 / 0.500e3 0.17e2 / 0.2500e4; 0.34957747037683e14 / 0.212199886080000e15 -0.2700334568377e13 / 0.5052378240000e13 -0.15053664233879e14 / 0.40419025920000e14 0 0.3899174751943e13 / 0.10104756480000e14 0.4691717443831e13 / 0.10104756480000e14 -0.58571891887e11 / 0.396264960000e12 0.100791910589e12 / 0.1040195520000e13 -0.425149181e9 / 0.29719872000e11 -0.2376515922259e13 / 0.30314269440000e14 0.36894656431e11 / 0.1036385280000e13; 0.709586095717e12 / 0.13473008640000e14 -0.50587599589937e14 / 0.242514155520000e15 0.9306441440587e13 / 0.32335220736000e14 -0.3899174751943e13 / 0.10104756480000e14 0 -0.4552305973e10 / 0.444165120000e12 0.4984940784247e13 / 0.11548293120000e14 -0.19410791e8 / 0.146764800e9 -0.2912773695913e13 / 0.40419025920000e14 0.127067639161e12 / 0.3233522073600e13 -0.89277540287e11 / 0.37309870080000e14; -0.325330433051e12 / 0.6218311680000e13 0.5570893587157e13 / 0.40419025920000e14 0.945459729233e12 / 0.13473008640000e14 -0.4691717443831e13 / 0.10104756480000e14 0.4552305973e10 / 0.444165120000e12 0 0.31722122083e11 / 0.84913920000e11 -0.887187251021e12 / 0.10104756480000e14 -0.1661755478749e13 / 0.26946017280000e14 0.1505713246249e13 / 0.13473008640000e14 -0.38859042469e11 / 0.1036385280000e13; -0.27953548723573e14 / 0.485028311040000e15 0.1496329934863e13 / 0.8083805184000e13 -0.956829267413e12 / 0.5774146560000e13 0.58571891887e11 / 0.396264960000e12 -0.4984940784247e13 / 0.11548293120000e14 -0.31722122083e11 / 0.84913920000e11 0 0.9357094407023e13 / 0.20209512960000e14 0.52602356173249e14 / 0.161676103680000e15 -0.1435252677707e13 / 0.17322439680000e14 -0.33048158431e11 / 0.3109155840000e13; -0.2690678501e10 / 0.412439040000e12 0.322512443237e12 / 0.12482346240000e14 -0.446866085903e12 / 0.56586636288000e14 -0.100791910589e12 / 0.1040195520000e13 0.19410791e8 / 0.146764800e9 0.887187251021e12 / 0.10104756480000e14 -0.9357094407023e13 / 0.20209512960000e14 0 0.70089734285659e14 / 0.141466590720000e15 -0.105938137621e12 / 0.471555302400e12 0.4358988450443e13 / 0.65292272640000e14; 0.2397491025029e13 / 0.70733295360000e14 -0.2275340833763e13 / 0.23096586240000e14 0.41109372242993e14 / 0.754488483840000e15 0.425149181e9 / 0.29719872000e11 0.2912773695913e13 / 0.40419025920000e14 0.1661755478749e13 / 0.26946017280000e14 -0.52602356173249e14 / 0.161676103680000e15 -0.70089734285659e14 / 0.141466590720000e15 0 0.314274398580227e15 / 0.377244241920000e15 -0.97822819709e11 / 0.487710720000e12; 0.9959492094287e13 / 0.1131732725760000e16 -0.22922115021893e14 / 0.848799544320000e15 -0.1e1 / 0.500e3 0.2376515922259e13 / 0.30314269440000e14 -0.127067639161e12 / 0.3233522073600e13 -0.1505713246249e13 / 0.13473008640000e14 0.1435252677707e13 / 0.17322439680000e14 0.105938137621e12 / 0.471555302400e12 -0.314274398580227e15 / 0.377244241920000e15 0 0.7519148725913e13 / 0.9327467520000e13; -0.5242772857661e13 / 0.522338181120000e15 0.143e3 / 0.5000e4 -0.17e2 / 0.2500e4 -0.36894656431e11 / 0.1036385280000e13 0.89277540287e11 / 0.37309870080000e14 0.38859042469e11 / 0.1036385280000e13 0.33048158431e11 / 0.3109155840000e13 -0.4358988450443e13 / 0.65292272640000e14 0.97822819709e11 / 0.487710720000e12 -0.7519148725913e13 / 0.9327467520000e13 0;]; + + Q(1:11,1:11)=Q_U; + Q(m-10:m,m-10:m)=rot90( -Q_U ,2 ); + + D1=H\Q; + + +% s18=-1.000000000000000; s19=0.195000000000000; % alpha 0.0605 + s18= -0.475000000000000; s19=0.110000000000000; % alpha 0.0350 + %s18=0;s19=0; + DS=sparse(m,m); + DS(1,1:9)=[0.49e2 / 0.20e2 - s18 - (7 * s19) -0.6e1 + 0.7e1 * s18 + (48 * s19) 0.15e2 / 0.2e1 - 0.21e2 * s18 - (140 * s19) -0.20e2 / 0.3e1 + 0.35e2 * s18 + (224 * s19) 0.15e2 / 0.4e1 - 0.35e2 * s18 - (210 * s19) -0.6e1 / 0.5e1 + 0.21e2 * s18 + (112 * s19) 0.1e1 / 0.6e1 - 0.7e1 * s18 - (28 * s19) s18 s19;]; + DS(m,m-8:m)=fliplr(DS(1,1:9)); + DS=DS/h; + + M_U = [0.12056593789671863908e1 -0.13378814169347239658e1 0.36847309286546532061e-2 0.15698288365600946515e0 -0.37472461482539197952e-2 -0.62491712449361657064e-2 -0.29164045872729581661e-1 0.54848184117832929161e-3 0.13613461413384884448e-1 -0.25059220258337808220e-2 -0.94113457993630916498e-3; -0.13378814169347239658e1 0.21749807117105597139e1 -0.12369059547124894597e0 -0.83712574037924152603e0 0.50065127254670973258e-1 0.81045853127317536361e-2 0.97405846039248226536e-1 -0.68942461520402214720e-3 -0.41326971493379188475e-1 0.75778529605774119402e-2 0.25800256160095691057e-2; 0.36847309286546532061e-2 -0.12369059547124894597e0 0.18361596652499065332e0 0.48289690013342693109e-1 -0.19719621435164680412e0 0.11406859029505842791e0 -0.29646295985488126964e-1 -0.16038463172861201306e-2 0.32879841528337653050e-2 -0.93242311589807387463e-3 0.12241332668787820533e-3; 0.15698288365600946515e0 -0.83712574037924152603e0 0.48289690013342693109e-1 0.12886524606662484673e1 -0.14403037739488789185e0 -0.44846291607489015475e0 -0.10598334599408054277e0 -0.15873275740355918053e-1 0.73988493386459608166e-1 -0.12508848749152899785e-1 -0.39290233894513005339e-2; -0.37472461482539197952e-2 0.50065127254670973258e-1 -0.19719621435164680412e0 -0.14403037739488789185e0 0.51482665719685186210e0 0.51199577887125103015e-1 -0.36233561810883077365e0 0.91356850268746392169e-1 0.24195916108052419451e-2 -0.18564214413731389338e-2 -0.70192677320704413827e-3; -0.62491712449361657064e-2 0.81045853127317536361e-2 0.11406859029505842791e0 -0.44846291607489015475e0 0.51199577887125103015e-1 0.68636003380365860083e0 -0.28358848290867614908e0 -0.13836006478253396528e0 0.76158070663111995297e-2 0.11447010307180005164e-1 -0.21349696610286552676e-2; -0.29164045872729581661e-1 0.97405846039248226536e-1 -0.29646295985488126964e-1 -0.10598334599408054277e0 -0.36233561810883077365e0 -0.28358848290867614908e0 0.15216081480839085990e1 -0.42653865162216293237e0 -0.42047484981879143123e0 0.19813359263872926304e-1 0.19221397241190103344e-1; 0.54848184117832929161e-3 -0.68942461520402214720e-3 -0.16038463172861201306e-2 -0.15873275740355918053e-1 0.91356850268746392169e-1 -0.13836006478253396528e0 -0.42653865162216293237e0 0.10656733504627815335e1 -0.66921872668484232217e0 0.12022033144141336599e0 -0.30157881394591483631e-1; 0.13613461413384884448e-1 -0.41326971493379188475e-1 0.32879841528337653050e-2 0.73988493386459608166e-1 0.24195916108052419451e-2 0.76158070663111995297e-2 -0.42047484981879143123e0 -0.66921872668484232217e0 0.24064247712949611684e1 -0.15150200315922263367e1 0.17373015320416595052e0; -0.25059220258337808220e-2 0.75778529605774119402e-2 -0.93242311589807387463e-3 -0.12508848749152899785e-1 -0.18564214413731389338e-2 0.11447010307180005164e-1 0.19813359263872926304e-1 0.12022033144141336599e0 -0.15150200315922263367e1 0.27682502485427255096e1 -0.15975407111468405444e1; -0.94113457993630916498e-3 0.25800256160095691057e-2 0.12241332668787820533e-3 -0.39290233894513005339e-2 -0.70192677320704413827e-3 -0.21349696610286552676e-2 0.19221397241190103344e-1 -0.30157881394591483631e-1 0.17373015320416595052e0 -0.15975407111468405444e1 0.29033627686681129471e1;]; + + +% M=-(1/3150)*diag(ones(m-5,1),5)+(5/1008)*diag(ones(m-4,1),4)-(5/126)*diag(ones(m-3,1),3)+(5/21)*diag(ones(m-2,1),2)-(5/3)*diag(ones(m-1,1),1)... +% -(1/3150)*diag(ones(m-5,1),-5)+(5/1008)*diag(ones(m-4,1),-4)-(5/126)*diag(ones(m-3,1),-3)+(5/21)*diag(ones(m-2,1),-2)-(5/3)*diag(ones(m-1,1),-1)... +% +(5269/1800)*diag(ones(m,1),0); + + diags = -5:5; + left_stencil = [-1/3150,5/1008,-5/126,5/21,-5/3]; + stencil = [left_stencil,5269/1800,fliplr(left_stencil)]; + M = stripeMatrix(stencil, diags, m); + + M(1:11,1:11)=M_U; + M(m-10:m,m-10:m)=rot90( M_U(1:11,1:11) ,2 ); + + D2=H\(-M/h+DS); + + e_1 = sparse(m,1); + e_1(1)= 1; + e_m = sparse(m,1); + e_m(end)= 1; + S_1 = -DS(1,:)'; + S_m = DS(end,:)'; + + Q = H*D1-(-(e_1*e_1') + (e_m*e_m')); + M = -(H*D2-(-e_1*S_1' + e_m*S_m')); +end \ No newline at end of file
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/+implementations/d2_12.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/+sbp/+implementations/d2_12.m Mon Sep 12 12:53:02 2016 +0200 @@ -0,0 +1,289 @@ +function [H, HI, D1, D2, e_1, e_m, M, Q, S_1, S_m] = d2_12(m,h) + +% D2 = D1*D1, wide! + +BP = 15; +if(m<2*BP) + error(['Operator requires at least ' num2str(2*BP) ' grid points']); +end + +H=speye(m,m); +H(1:15,1:15)=diag([2.880607858916397e-01,... + 1.560376162339675e+00,... + 2.403139445479289e-01,... + 1.531292896754208e+00,... + 1.245107365551116e+00,... + 2.403139445479289e-01,... + 1.218498444843265e+00,... + 1.730095305997005e+00,... + 2.403139445479289e-01,... + 8.526541262207157e-01,... + 1.839467231356713e+00,... + 2.403139445479289e-01,... + 1.350211172437031e+00,... + 9.139950953929686e-01,... + 1.008985635023947e+00]); + +H(m-14:m,m-14:m)=rot90(H(1:15,1:15),2); + +H=H*h; +HI = inv(H); + +diags = -6:6; +stencil = [1/5544,-1/385,1/56,-5/63,15/56,-6/7,0,6/7,-15/56,5/63,-1/56,1/385,-1/5544]; +D1 = stripeMatrix(stencil, diags, m); + + +D1(1, 1)= -1.735744761135539e+00; +D1(1 , 2 )= 2.307154400697361e+00; +D1(1, 3)= -8.049541548921420e-02; +D1(1 , 4)= -5.054323197649326e-01; +D1(1 , 5 )= -2.276940626773821e-01; +D1(1 , 6 )= -4.332046513157440e-03; +D1(1 , 7 )= 1.922516500571120e-01; +D1(1 , 8 )= 1.841426475531248e-01; +D1(1 , 9 )= 4.299540500353117e-02; +D1(1 , 10 )= -8.425321510779284e-02; +D1(1 , 11 )= -1.783432239793461e-01; +D1(1 , 12 )= -9.098340284317097e-02; +D1(1 , 13 )= 2.989603414709966e-01; +D1(1 , 14 )= -1.262666707971657e-01; +D1(1 , 15 )= 8.040673525575449e-03; +D1(2 , 1 )= -4.259233932680148e-01; +D1(2 , 3 )= 1.077970170802666e-01; +D1(2 , 4 )= 3.305658398446859e-01; +D1(2 , 5 )= 1.023936809322525e-01; +D1(2 , 6 )= 1.004615991085861e-02; +D1(2 , 7 )= -9.993439452786020e-02; +D1(2 , 8 )= -8.071677622127596e-02; +D1(2 , 9 )= -2.794842118590027e-02; +D1(2 , 10 )= 4.202296437592187e-02; +D1(2 , 11 )= 8.084986053360355e-02; +D1(2 , 12 )= 4.970793893896007e-02; +D1(2 , 13 )= -1.480838886705940e-01; +D1(2 , 14 )= 6.449962737470759e-02; +D1(2 , 15 )= -5.276215117611654e-03; +D1(3 , 1 )= 9.648866897889277e-02; +D1(3 , 2 )= -6.999339806925928e-01; +D1(3 , 4 )= 6.447106132171313e-01; +D1(3 , 5 )= 1.610341017868972e-01; +D1(3 , 6 )= -2.926101271261580e-01; +D1(3 , 7 )= 2.578035970538076e-02; +D1(3 , 8 )= -3.649479605631123e-02; +D1(3 , 9 )= 2.039707558852247e-01; +D1(3 , 10 )= -2.443704472345096e-02; +D1(3 , 11 )= -4.983260374057472e-02; +D1(3 , 12 )= -1.982796172639611e-01; +D1(3 , 13 )= 2.659121147554237e-01; +D1(3 , 14 )= -1.104398155224152e-01; +D1(3 , 15 )= 1.413137079651327e-02; +D1(4 , 1 )= 9.507993640872410e-02; +D1(4 , 2 )= -3.368441515472113e-01; +D1(4 , 3 )= -1.011778679849722e-01; +D1(4 , 5 )= 1.664700006607916e-01; +D1(4 , 6 )= 8.420689674052668e-02; +D1(4 , 7 )= 1.234483107384551e-01; +D1(4 , 8 )= 3.371285340885326e-02; +D1(4 , 9 )= -2.009043511216467e-02; +D1(4 , 10 )= -4.311340633236862e-02; +D1(4 , 11 )= -3.824719371220764e-02; +D1(4 , 12 )= -2.775022659375772e-03; +D1(4 , 13 )= 8.248678009703486e-02; +D1(4 , 14 )= -5.169933586327551e-02; +D1(4 , 15 )= 8.542635157189999e-03; +D1(5 , 1 )= 5.267797175762052e-02; +D1(5 , 2 )= -1.283203869171410e-01; +D1(5 , 3 )= -3.108064515385221e-02; +D1(5 , 4 )= -2.047328098663259e-01; +D1(5 , 6 )= 1.528377576445926e-02; +D1(5 , 7 )= 1.842140733907868e-01; +D1(5 , 8 )= 1.776491663357457e-01; +D1(5 , 9 )= 4.220032524144508e-02; +D1(5 , 10 )= -3.611067700750285e-02; +D1(5 , 11 )= -1.090730089234403e-01; +D1(5 , 12 )= -5.398262792345335e-02; +D1(5 , 13 )= 1.325672256468355e-01; +D1(5 , 14 )= -3.865175590539601e-02; +D1(5 , 15 )= -2.640626439781275e-03; +D1(6 , 1 )= 5.192760351242898e-03; +D1(6 , 2 )= -6.523045708997477e-02; +D1(6 , 3 )= 2.926101271261579e-01; +D1(6 , 4 )= -5.365707057867646e-01; +D1(6 , 5 )= -7.918783828195401e-02; +D1(6 , 7 )= 1.455199260610844e-01; +D1(6 , 8 )= 4.392627009892030e-01; +D1(6 , 9 )= -2.877704902282471e-01; +D1(6 , 10 )= 6.246304940524665e-02; +D1(6 , 11 )= -8.757523368284212e-03; +D1(6 , 12 )= 2.373907173856874e-01; +D1(6 , 13 )= -3.887671913712637e-01; +D1(6 , 14 )= 2.338336212010801e-01; +D1(6 , 15 )= -4.998869639321427e-02; +D1( 7 , 1 )= -4.544951340626429e-02; +D1( 7 , 2 )= 1.279732835762292e-01; +D1( 7 , 3 )= -5.084438112238577e-03; +D1( 7 , 4 )= -1.551380899582667e-01; +D1( 7 , 5 )= -1.882368423100825e-01; +D1( 7 , 6 )= -2.869964060279157e-02; +D1( 7 , 8 )= 1.501531969717210e-01; +D1( 7 , 9 )= 4.398683557974375e-02; +D1( 7 , 10 )= 9.034991722085359e-02; +D1( 7 , 11 )= 6.874263504449905e-02; +D1( 7 , 12 )= 1.191424140454980e-02; +D1( 7 , 13 )= -1.387149470006835e-01; +D1( 7, 14 )= 8.081158783540948e-02; +D1( 7 , 15 )= -1.260822624267884e-02; +D1( 8 , 1 )= -3.065974203065793e-02; +D1( 8 , 2 )= 7.279861004189266e-02; +D1( 8 , 3 )= 5.069205358435631e-03; +D1( 8 , 4 )= -2.983896481040582e-02; +D1( 8 , 5 )= -1.278497691554543e-01; +D1( 8 , 6 )= -6.101453024095747e-02; +D1( 8 , 7 )= -1.057522301598588e-01; +D1( 8 , 9 )= 3.518098475279482e-02; +D1( 8 , 10 )= 1.267951379582364e-01; +D1( 8 , 11 )= 1.709119775233402e-01; +D1( 8 , 12 )= 4.871305182138817e-02; +D1( 8 , 13 )= -1.381315738947210e-01; +D1( 8 , 14 )= 2.531339542383916e-02; +D1( 8 , 15 )= 8.464447412128264e-03; +D1( 9 , 1 )= -5.153795872455654e-02; +D1( 9 , 2 )= 1.814711596347261e-01; +D1( 9 , 3 )= -2.039707558852247e-01; +D1( 9 , 4 )= 1.280172927036423e-01; +D1( 9 , 5 )= -2.186470530689342e-01; +D1( 9 , 6 )= 2.877704902282471e-01; +D1( 9 , 7 )= -2.230327950727989e-01; +D1( 9 , 8 )= -2.532789210200124e-01; +D1( 9 , 10 )= -2.487018120584765e-02; +D1( 9 , 11 )= 5.656432879788119e-01; +D1( 9 , 12 )= -3.179024054582303e-01; +D1( 9 , 13 )= 3.080272260545759e-01; +D1( 9 , 14 )= -2.449533574878925e-01; +D1( 9 , 15 )= 6.726397132349360e-02; +D1(10 , 1 )= 2.846411764336633e-02; +D1(10 , 2 )= -7.690296670899374e-02; +D1(10 , 3 )= 6.887391299700927e-03; +D1(10 , 4 )= 7.742794040563218e-02; +D1(10 , 5 )= 5.273142829480713e-02; +D1(10 , 6 )= -1.760472544430208e-02; +D1(10 , 7 )= -1.291159336943500e-01; +D1(10 , 8 )= -2.572762697778848e-01; +D1(10 , 9 )= 7.009467453925059e-03; +D1(10 , 11 )= 1.983435406810274e-01; +D1(10 , 12 )= -3.844771590180474e-02; +D1(10 , 13 )= 2.943472385247488e-01; +D1(10 , 14 )= -1.771193581329739e-01; +D1(10 , 15 )= 3.146739090039766e-02; +D1(10 , 16 )= -2.115455432962849e-04; +D1(11 , 1 )= 2.792856995883971e-02; +D1(11 , 2 )= -6.858300759838749e-02; +D1(11 , 3 )= 6.510292419375574e-03; +D1(11 , 4 )= 3.183946691406334e-02; +D1(11 , 5 )= 7.382985925399284e-02; +D1(11 , 6 )= 1.144111158506918e-03; +D1(11 , 7 )= -4.553644254612264e-02; +D1(11 , 8 )= -1.607498111470597e-01; +D1(11 , 9 )= -7.389746738841917e-02; +D1(11 , 10 )= -9.193881548309495e-02; +D1(11 , 12 )= 4.858403641270599e-02; +D1(11 , 13 )= 2.953396945760745e-01; +D1(11 , 14 )= -1.897059300798801e-02; +D1(11 , 15 )= -2.681387584075025e-02; +D1(11 , 16 )= 1.412040700223218e-03; +D1(11 , 17 )= -9.805838195994568e-05; +D1(12 , 1 )= 1.090604649488924e-01; +D1(12 , 2 )= -3.227573129195589e-01; +D1(12 , 3 )= 1.982796172639611e-01; +D1(12 , 4 )= 1.768258806049677e-02; +D1(12 , 5 )= 2.796931645632894e-01; +D1(12 , 6 )= -2.373907173856874e-01; +D1(12 , 7 )= -6.041049615427440e-02; +D1(12 , 8 )= -3.507005074362792e-01; +D1(12 , 9 )= 3.179024054582303e-01; +D1(12 , 10 )= 1.364157359619944e-01; +D1(12 , 11 )= -3.718833008893085e-01; +D1(12 , 13 )= -1.473587211078091e-01; +D1(12 , 14 )= 5.107219886498376e-01; +D1(12 , 15 )= -1.500513994956780e-02; +D1(12 , 16 )= -7.430756001585824e-02; +D1(12 , 17 )= 1.080837236594302e-02; +D1(12 , 18 )= -7.505814143015984e-04; +D1(13 , 1 )= -6.378169035524298e-02; +D1(13 , 2 )= 1.711336527390002e-01; +D1(13 , 3 )= -4.732769992164881e-02; +D1(13 , 4 )= -9.354938176872968e-02; +D1(13 , 5 )= -1.222478620034153e-01; +D1(13 , 6 )= 6.919375218960795e-02; +D1(13 , 7 )= 1.251833421669687e-01; +D1(13 , 8 )= 1.769951193441043e-01; +D1(13 , 9 )= -5.482345223653074e-02; +D1(13 , 10 )= -1.858793591648383e-01; +D1(13 , 11 )= -4.023575729350775e-01; +D1(13 , 12 )= 2.622727189335804e-02; +D1(13 , 14 )= 4.511356466215911e-01; +D1(13 , 15 )= -9.724618589400275e-02; +D1(13 , 16 )= 5.877975311212341e-02; +D1(13 , 17 )= -1.322544445022777e-02; +D1(13 , 18 )= 1.923701010942221e-03; +D1(13 , 19 )= -1.335903479820987e-04; +D1(14 , 1 )= 3.979504551511218e-02; +D1(14 , 2 )= -1.101140274631495e-01; +D1(14 , 3 )= 2.903760407152547e-02; +D1(14 , 4 )= 8.661624791356937e-02; +D1(14 , 5 )= 5.265409651744463e-02; +D1(14 , 6 )= -6.148116129069339e-02; +D1(14 , 7 )= -1.077344885099467e-01; +D1(14 , 8 )= -4.791555974685060e-02; +D1(14 , 9 )= 6.440483965930399e-02; +D1(14 , 10 )= 1.652323434850750e-01; +D1(14 , 11 )= 3.817939983867793e-02; +D1(14 , 12 )= -1.342825757801646e-01; +D1(14 , 13 )= -6.664460164211102e-01; +D1(14 , 15 )= 8.751759953804069e-01; +D1(14 , 16 )= -2.930619039503475e-01; +D1(14 , 17 )= 8.683315672602888e-02; +D1(14 , 18 )= -1.953746026335650e-02; +D1(14 , 19 )= 2.841812401942763e-03; +D1(14 , 20 )= -1.973480834682474e-04; +D1(15 , 1 )= -2.295575530984041e-03; +D1(15 , 2 )= 8.159561455701054e-03; +D1(15 , 3 )= -3.365722305748102e-03; +D1(15 , 4 )= -1.296477975670818e-02; +D1(15 , 5 )= 3.258582992375954e-03; +D1(15 , 6 )= 1.190599786168119e-02; +D1(15 , 7 )= 1.522628621820923e-02; +D1(15 , 8 )= -1.451388426876270e-02; +D1(15 , 9 )= -1.602051576712872e-02; +D1(15 , 10 )= -2.659185598017704e-02; +D1(15 , 11 )= 4.888399224192811e-02; +D1(15 , 12 )= 3.573831226733737e-03; +D1(15 , 13 )= 1.301335540499094e-01; +D1(15 , 14 )= -7.927829095053140e-01; +D1(15 , 16 )= 8.495094750506673e-01; +D1(15 , 17 )= -2.654717109533336e-01; +D1(15 , 18 )= 7.865828472691364e-02; +D1(15 , 19 )= -1.769811406355557e-02; +D1(15 , 20 )= 2.574271136517173e-03; +D1(15 , 21 )= -1.787688289248037e-04; + + +D1(m-14:m,m-20:m)=rot90( -D1(1:15,1:21),2); +D1=D1/h; + + +% Wide 2nd derivative + +D2=D1*D1; + +e_1 = sparse(m,1); +e_1(1)= 1; +e_m = sparse(m,1); +e_m(end)= 1; + +S_1 = (e_1'*D1)'; +S_m = (e_m'*D1)'; + +Q = H*D1-(-(e_1*e_1') + (e_m*e_m')); +M = -(H*D2-(-e_1*S_1' + e_m*S_m')); +end \ No newline at end of file
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/+implementations/d2_2.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/+sbp/+implementations/d2_2.m Mon Sep 12 12:53:02 2016 +0200 @@ -0,0 +1,43 @@ +function [H, HI, D1, D2, e_1, e_m, M, Q, S_1, S_m] = d2_2(m,h) + + BP = 1; + if(m<2*BP) + error(['Operator requires at least ' num2str(2*BP) ' grid points']); + end + + e_1=sparse(m,1);e_1(1)=1; + e_m=sparse(m,1);e_m(m)=1; + + H=(speye(m,m));H(1,1)=0.5;H(m,m)=0.5; + H=h*H; + HI=inv(H); + + diags = -1:1; + stencil = [-1/2 0 1/2]; + D1 = stripeMatrix(stencil, diags, m); + + D1(1,1)=-1;D1(1,2)=1;D1(m,m-1)=-1;D1(m,m)=1; + D1(m,m-1)=-1;D1(m,m)=1; + D1=D1/h; + + Q=H*D1 + 1/2*(e_1*e_1') - 1/2*(e_m*e_m'); + + diags = -1:1; + stencil = [1 -2 1]; + D2 = stripeMatrix(stencil, diags, m); + + D2(1,1)=1;D2(1,2)=-2;D2(1,3)=1; + D2(m,m-2)=1;D2(m,m-1)=-2;D2(m,m)=1; + D2=D2/h^2; + + S_U=[-3/2, 2, -1/2]/h; + S_1=sparse(1,m); + S_1(1:3)=S_U; + S_m=sparse(1,m); + S_m(m-2:m)=fliplr(-S_U); + + + M=-H*D2-e_1*S_1+e_m*S_m; + S_1 = S_1'; + S_m = S_m'; +end \ No newline at end of file
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/+implementations/d2_4.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/+sbp/+implementations/d2_4.m Mon Sep 12 12:53:02 2016 +0200 @@ -0,0 +1,49 @@ +function [H, HI, D1, D2, e_1, e_m, M, Q, S_1, S_m] = d2_4(m,h) + + BP = 4; + if(m<2*BP) + error(['Operator requires at least ' num2str(2*BP) ' grid points']); + end + + e_1=sparse(m,1);e_1(1)=1; + e_m=sparse(m,1);e_m(m)=1; + + e=ones(m,1); + H=spdiags(e,0,m,m); + %H=speye(m,m); + + H(1:4,1:4)=diag([17/48 59/48 43/48 49/48]); + H(m-3:m,m-3:m)=rot90(diag([17/48 59/48 43/48 49/48]),2); + H=H*h; + HI=inv(H); + + + Q=spdiags([e -8*e 0*e 8*e -e], -2:2, m, m)/12; + %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)=rot90( -Q_U(1:4,1:4) ,2 ); + + D1=H\(Q-1/2*(e_1*e_1')+1/2*(e_m*e_m')) ; + + M=-spdiags([-e 16*e -30*e 16*e -e], -2:2, m, m)/12; + + %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)); + + 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;]; + M(1:4,1:4)=M_U; + + M(m-3:m,m-3:m)=rot90( M_U ,2 ); + M=M/h; + + S_U=[-0.11e2 / 0.6e1 3 -0.3e1 / 0.2e1 0.1e1 / 0.3e1;]/h; + S_1=sparse(sparse(1,m)); + S_1(1:4)=S_U; + S_m=sparse(sparse(1,m)); + S_m(m-3:m)=fliplr(-S_U); + + + D2=H\(-M-e_1*S_1+e_m*S_m); + S_1 = S_1'; + S_m = S_m'; +end \ No newline at end of file
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/+implementations/d2_6.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/+sbp/+implementations/d2_6.m Mon Sep 12 12:53:02 2016 +0200 @@ -0,0 +1,60 @@ +function [H, HI, D1, D2, e_1, e_m, M, Q, S_1, S_m] = d2_6(m,h) + + BP = 6; + if(m<2*BP) + error(['Operator requires at least ' num2str(2*BP) ' grid points']); + end + + e_1=sparse(m,1);e_1(1)=1; + e_m=sparse(m,1);e_m(m)=1; + + H=speye(m,m); + H(1:6,1:6)=diag([13649/43200,12013/8640,2711/4320,5359/4320,7877/8640, ... + 43801/43200]); + H(m-5:m,m-5:m)=rot90(diag([13649/43200,12013/8640, ... + 2711/4320,5359/4320,7877/8640,43801/43200]),2); + + H=H*h; + HI=inv(H); + + + % D1 har en fri parameter x1. + % Ett optimerat varde ger x1=0.70127127127127 = 331/472 + x1=0.70127127127127; + + diags = -3:3; + stencil = [-1/60,3/20,-3/4,0,3/4,-3/20,1/60]; + D1 = stripeMatrix(stencil, diags, m); + + D1(1:6,1:9)=[-21600/13649, 43200/13649*x1-7624/40947, -172800/13649*x1+ ... + 715489/81894, 259200/13649*x1-187917/13649, -172800/13649* ... + x1+735635/81894, 43200/13649*x1-89387/40947, 0, 0, 0; ... + -8640/12013*x1+7624/180195, 0, 86400/12013*x1-57139/12013, ... + -172800/12013*x1+745733/72078, 129600/12013*x1-91715/12013, ... + -34560/12013*x1+240569/120130, 0, 0, 0; 17280/2711*x1-715489/162660, -43200/2711*x1+57139/5422, 0, 86400/2711*x1-176839/8133, -86400/2711*x1+242111/10844, 25920/2711*x1-182261/27110, 0, 0, 0; -25920/5359*x1+187917/53590, 86400/5359*x1-745733/64308, -86400/5359*x1+176839/16077, 0, 43200/5359*x1-165041/32154, -17280/5359*x1+710473/321540, 72/5359, 0, 0; 34560/7877*x1-147127/47262, -129600/7877*x1+91715/7877, 172800/7877*x1-242111/15754, -86400/7877*x1+165041/23631, 0, 8640/7877*x1, -1296/7877, 144/7877, 0; -43200/43801*x1+89387/131403, 172800/43801*x1-240569/87602, -259200/43801*x1+182261/43801, 172800/43801*x1-710473/262806, -43200/43801*x1, 0, 32400/43801, -6480/43801, 720/43801]; + D1(m-5:m,m-8:m)=rot90( -D1(1:6,1:9),2); + D1=D1/h; + + Q=H*D1 + 1/2*(e_1*e_1') - 1/2*(e_m*e_m'); + + %D2=(2*diag(ones(m-3,1),3)-27*diag(ones(m-2,1),2)+270*diag(ones(m-1,1),1)+270*diag(ones(m-1,1),-1)-27*diag(ones(m-2,1),-2)+2*diag(ones(m-3,1),-3)-490*diag(ones(m,1),0))/180; + diags = -3:3; + stencil = 1/180*[2,-27,270,-490,270,-27,2]; + D2 = stripeMatrix(stencil, diags, m); + + D2(1:6,1:9)=[114170/40947, -438107/54596, 336409/40947, -276997/81894, 3747/13649, 21035/163788, 0, 0, 0;6173/5860, -2066/879, 3283/1758, -303/293, 2111/3516, -601/4395, 0, 0, 0;-52391/81330, 134603/32532, -21982/2711, 112915/16266, -46969/16266, 30409/54220, 0, 0, 0;68603/321540, -12423/10718, 112915/32154, -75934/16077, 53369/21436, -54899/160770, 48/5359, 0, 0;-7053/39385, 86551/94524, -46969/23631, 53369/15754, -87904/23631, 820271/472620, -1296/7877, 96/7877, 0;21035/525612, -24641/131403, 30409/87602, -54899/131403, 820271/525612, -117600/43801, 64800/43801, -6480/43801, 480/43801]; + D2(m-5:m,m-8:m)=rot90( D2(1:6,1:9) ,2 ); + + D2=D2/h^2; + + S_U=[-25/12, 4, -3, 4/3, -1/4]/h; + S_1=sparse(1,m); + S_1(1:5)=S_U; + S_m=sparse(1,m); + S_m(m-4:m)=fliplr(-S_U); + + + M=-H*D2-e_1*S_1+e_m*S_m; + S_1 = S_1'; + S_m = S_m'; +end \ No newline at end of file
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/+implementations/d2_8.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/+sbp/+implementations/d2_8.m Mon Sep 12 12:53:02 2016 +0200 @@ -0,0 +1,124 @@ +function [H, HI, D1, D2, e_1, e_m, M, Q, S_1, S_m] = d2_8(m,h) + + + BP = 8; + if(m<2*BP) + error(['Operator requires at least ' num2str(2*BP) ' grid points']); + end + + H=speye(m,m); + 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)=rot90(diag([1498139/5080320, 1107307/725760, 20761/80640, 1304999/725760, 299527/725760, 103097/80640, 670091/725760, 5127739/5080320]),2); + +% D1=-(1/280*diag(ones(m-4,1),4)-4/105*diag(ones(m-3,1),3)+1/5*diag(ones(m-2,1),2)-4/5*diag(ones(m-1,1),1)+4/5*diag(ones(m-1,1),-1)-1/5*diag(ones(m-2,1),-2)+4/105*diag(ones(m-3,1),-3)-1/280*diag(ones(m-4,1),-4)); + + diags = -4:4; + stencil = [1/280,-4/105,1/5,-4/5,0,4/5,-1/5,4/105,-1/280]; + D1 = stripeMatrix(stencil, diags, m); + + + %r68 = -1022551/30481920; + %r78 = 6445687/8709120; + %r67 = 1714837/4354560; + + %r67=0.58; + %r68=-0.08; + %r78=0.75; + + %r67=0.65; + %r68=-0.1; + %r78=0.75; + + %r67=0.9250; + %r68=-0.2; + %r78=0.775; + + %r67=0.65; + %r68=-0.105; + %r78=0.755; + + %%r67=0.649; + %%r68=-0.104; + %%r78=0.755; + + %r67=-0.48; + %r68=0.3; + %r78=0.67; + + %r67=0.5600; + %r68=-0.0733; + %r78=0.7500;/scr0/home/ken/VERY_FINE + + % min med 1/10 f?r D6 + %r67=0.62; + %r68=-0.1040; + %r78=0.7640; + + % Den nya optimerade, for att fungera i NS-dissipation + + r67=0.69789473684211; + r68=-0.12052631578947; + r78=0.75868421052632; + + + D1(1:8,1:12)=[-2540160/1498139, -142642467/5992556+50803200/1498139*r78+5080320/1498139*r67+25401600/1498139*r68, 705710031/5992556-228614400/1498139*r78-25401600/1498139*r67-121927680/1498139*r68, -3577778591/17977668+381024000/1498139*r78+50803200/1498139*r67+228614400/1498139*r68, 203718909/1498139-254016000/1498139*r78-50803200/1498139*r67-203212800/1498139*r68, -32111205/5992556+25401600/1498139*r67+76204800/1498139*r68, -652789417/17977668+76204800/1498139*r78-5080320/1498139*r67, 74517981/5992556-25401600/1498139*r78-5080320/1498139*r68, 0, 0, 0, 0;142642467/31004596-7257600/1107307*r78-725760/1107307*r67-3628800/1107307*r68, 0, -141502371/2214614+91445760/1107307*r78+10886400/1107307*r67+50803200/1107307*r68, 159673719/1107307-203212800/1107307*r78-29030400/1107307*r67-127008000/1107307*r68, -1477714693/13287684+152409600/1107307*r78+32659200/1107307*r67+127008000/1107307*r68, 11652351/2214614-17418240/1107307*r67-50803200/1107307*r68, 36069450/1107307-50803200/1107307*r78+3628800/1107307*r67, -536324953/46506894+17418240/1107307*r78+3628800/1107307*r68, 0, 0, 0, 0;-18095129/134148+3628800/20761*r78+403200/20761*r67+1935360/20761*r68, 47167457/124566-10160640/20761*r78-1209600/20761*r67-5644800/20761*r68, 0, -120219461/124566+25401600/20761*r78+4032000/20761*r67+16934400/20761*r68, 249289259/249132-25401600/20761*r78-6048000/20761*r67-22579200/20761*r68, -2611503/41522+3628800/20761*r67+10160640/20761*r68, -7149666/20761+10160640/20761*r78-806400/20761*r67, 37199165/290654-3628800/20761*r78-806400/20761*r68, 0, 0, 0, 0;3577778591/109619916-54432000/1304999*r78-7257600/1304999*r67-32659200/1304999*r68, -159673719/1304999+203212800/1304999*r78+29030400/1304999*r67+127008000/1304999*r68, 360658383/2609998-228614400/1304999*r78-36288000/1304999*r67-152409600/1304999*r68, 0, -424854441/5219996+127008000/1304999*r78+36288000/1304999*r67+127008000/1304999*r68, 22885113/2609998-29030400/1304999*r67-76204800/1304999*r68, 158096578/3914997-76204800/1304999*r78+7257600/1304999*r67, -296462325/18269986+29030400/1304999*r78+7257600/1304999*r68, 0, 0, 0, 0;-203718909/2096689+36288000/299527*r78+7257600/299527*r67+29030400/299527*r68, 1477714693/3594324-152409600/299527*r78-32659200/299527*r67-127008000/299527*r68, -747867777/1198108+228614400/299527*r78+54432000/299527*r67+203212800/299527*r68, 424854441/1198108-127008000/299527*r78-36288000/299527*r67-127008000/299527*r68, 0, -17380335/1198108+10886400/299527*r67+25401600/299527*r68, -67080435/1198108+25401600/299527*r78-3628800/299527*r67, 657798011/25160268-10886400/299527*r78-3628800/299527*r68, -2592/299527, 0, 0, 0;1529105/1237164-403200/103097*r67-1209600/103097*r68, -3884117/618582+1935360/103097*r67+5644800/103097*r68, 2611503/206194-3628800/103097*r67-10160640/103097*r68, -7628371/618582+3225600/103097*r67+8467200/103097*r68, 5793445/1237164-1209600/103097*r67-2822400/103097*r68, 0, 80640/103097*r67, 80640/103097*r68, 3072/103097, -288/103097, 0, 0;93255631/8041092-10886400/670091*r78+725760/670091*r67, -36069450/670091+50803200/670091*r78-3628800/670091*r67, 64346994/670091-91445760/670091*r78+7257600/670091*r67, -158096578/2010273+76204800/670091*r78-7257600/670091*r67, 67080435/2680364-25401600/670091*r78+3628800/670091*r67, -725760/670091*r67, 0, 725760/670091*r78, -145152/670091, 27648/670091, -2592/670091, 0;-3921999/1079524+25401600/5127739*r78+5080320/5127739*r68, 536324953/30766434-121927680/5127739*r78-25401600/5127739*r68, -334792485/10255478+228614400/5127739*r78+50803200/5127739*r68, 296462325/10255478-203212800/5127739*r78-50803200/5127739*r68, -657798011/61532868+76204800/5127739*r78+25401600/5127739*r68, -5080320/5127739*r68, -5080320/5127739*r78, 0, 4064256/5127739, -1016064/5127739, 193536/5127739, -18144/5127739]; + + + D1(m-7:m,m-11:m)=rot90( -D1(1:8,1:12),2); + + + D1=D1/h; + + %DD=-(1/280*diag(ones(m-4,1),4)-4/105*diag(ones(m-3,1),3)+1/5*diag(ones(m-2,1),2)-4/5*diag(ones(m-1,1),1)+4/5*diag(ones(m-1,1),-1)-1/5*diag(ones(m-2,1),-2)+4/105*diag(ones(m-3,1),-3)-1/280*diag(ones(m-4,1),-4)); + %DD(1:4,1:9)=1/280*[-761,2240,-3920,15680/3,-4900,3136,-3920/3,320,-35, + % -35,-446,980,-980,2450/3,-490,196,-140/3,5, + % 5,-80,-266,560,-350,560/3,-70,16,-5/3, + % -5/3,20,-140,-126,350,-140,140/3,-10,1]; +% D(m-7:m,m-11:m)=rot90( -D1(1:8,1:12),2); + +% D2=(-1/560*diag(ones(m-4,1),4)+8/315*diag(ones(m-3,1),3)-1/5*diag(ones(m-2,1),2)+8/5*diag(ones(m-1,1),1)+8/5*diag(ones(m-1,1),-1)-1/5*diag(ones(m-2,1),-2)+8/315*diag(ones(m-3,1),-3)-1/560*diag(ones(m-4,1),-4)-205/72*diag(ones(m,1),0)); + + diags = -4:4; + left_stencil = [-1/560,8/315,-1/5,8/5]; + stencil = [left_stencil,-205/72,fliplr(left_stencil)]; + D2 = stripeMatrix(stencil, diags, m); + + + D2(1:8,1:12)=[4870382994799/1358976868290, -893640087518/75498714905,926594825119/60398971924, -1315109406200/135897686829,39126983272/15099742981, 12344491342/75498714905, -451560522577/2717953736580, 0, 0, 0, 0, 0;333806012194/390619153855, -154646272029/111605472530, 1168338040/33481641759, 82699112501/133926567036, -171562838/11160547253, -28244698346/167408208795, 11904122576/167408208795, -2598164715/312495323084, 0, 0, 0, 0;7838984095/52731029988, 1168338040/5649753213, -88747895/144865467, 423587231/627750357, -43205598281/22599012852, 4876378562/1883251071, -5124426509/3766502142, 10496900965/39548272491, 0, 0, 0, 0;-94978241528/828644350023, 82699112501/157837019052, 1270761693/13153084921, -167389605005/118377764289, 48242560214/39459254763, -31673996013/52612339684, 43556319241/118377764289, -44430275135/552429566682, 0, 0, 0, 0;1455067816/21132528431, -171562838/3018932633, -43205598281/36227191596, 48242560214/9056797899, -52276055645/6037865266, 57521587238/9056797899, -80321706377/36227191596, 8078087158/21132528431, -1296/299527, 0, 0, 0;10881504334/327321118845, -28244698346/140280479505, 4876378562/9352031967, -10557998671/12469375956, 57521587238/28056095901, -278531401019/93520319670, 73790130002/46760159835, -137529995233/785570685228, 2048/103097, -144/103097, 0, 0;-135555328849/8509847458140, 11904122576/101307707835, -5124426509/13507694378, 43556319241/60784624701, -80321706377/81046166268, 73790130002/33769235945, -950494905688/303923123505, 239073018673/141830790969, -145152/670091, 18432/670091, -1296/670091, 0;0, -2598164715/206729925524, 10496900965/155047444143, -44430275135/310094888286, 425162482/2720130599, -137529995233/620189776572, 239073018673/155047444143, -144648000000/51682481381, 8128512/5127739, -1016064/5127739, 129024/5127739, -9072/5127739]; + + + + + D2(m-7:m,m-11:m)=rot90( D2(1:8,1:12) ,2 ); + + D2=D2/h^2; + + DS=sparse(m,m); + DS(1,1:7)=-[-4723/2100, 839/175, -157/35, 278/105, -103/140, -1/175, 6/175]; + + DS(m,m-6:m)=fliplr(-[-4723/2100, 839/175, -157/35, 278/105, -103/140, -1/175, 6/175]); + DS=DS/h; + + H=h*H; + HI=inv(H); + + %r1=D1*u-u_x;sqrt(r1'*r1)/m + %r2=D2*u-u_xx;sqrt(r2'*r2)/m + + %te=eig(D1); + %tm=max(abs(te)); + %plot(real(te),imag(te),'*'); + %grid; + %xlabel('Real part'); + %ylabel('Imaginary part'); + %title('Spectrum, minimal spectral radius'); + e_1 = sparse(m,1); + e_1(1)= 1; + e_m = sparse(m,1); + e_m(end)= 1; + S_1 = -DS(1,:)'; + S_m = DS(end,:)'; + + Q = H*D1-(-(e_1*e_1') + (e_m*e_m')); + M = -(H*D2-(-e_1*S_1' + e_m*S_m')); +end \ No newline at end of file
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/+implementations/d2_blocknorm_10.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/+sbp/+implementations/d2_blocknorm_10.m Mon Sep 12 12:53:02 2016 +0200 @@ -0,0 +1,71 @@ +function [H, HI, D1, D2, e_1, e_m, M, Q, S_1, S_m] = d2_blocknorm_10(m,h) + + BP = 9; + if(m<2*BP) + error(['Operator requires at least ' num2str(2*BP) ' grid points']); + end + + H_U=[0.428081020217e12 / 0.2633637888000e13 0.779032713983e12 / 0.2633637888000e13 -0.1187642619571e13 / 0.2633637888000e13 0.1642279196603e13 / 0.2633637888000e13 -0.339289243121e12 / 0.526727577600e12 0.1261055176253e13 / 0.2633637888000e13 -0.658216413073e12 / 0.2633637888000e13 0.33968779823e11 / 0.376233984000e12 -0.764998e6 / 0.40186125e8; 0.779032713983e12 / 0.2633637888000e13 0.317907052061e12 / 0.164602368000e12 -0.1082918052397e13 / 0.658409472000e12 0.176473501369e12 / 0.82301184000e11 -0.521625191587e12 / 0.263363788800e12 0.200523313337e12 / 0.164602368000e12 -0.279496000009e12 / 0.658409472000e12 -0.832e3 / 0.40186125e8 0.129794760887e12 / 0.2633637888000e13; -0.1187642619571e13 / 0.2633637888000e13 -0.1082918052397e13 / 0.658409472000e12 0.1304108863849e13 / 0.329204736000e12 -0.533093695961e12 / 0.131681894400e12 0.213949854133e12 / 0.52672757760e11 -0.1883976009151e13 / 0.658409472000e12 0.51084128e8 / 0.40186125e8 -0.92763684343e11 / 0.658409472000e12 -0.59058717923e11 / 0.526727577600e12; 0.1642279196603e13 / 0.2633637888000e13 0.176473501369e12 / 0.82301184000e11 -0.533093695961e12 / 0.131681894400e12 0.217677310051e12 / 0.32920473600e11 -0.1509120465127e13 / 0.263363788800e12 0.170839232e9 / 0.40186125e8 -0.1404096707137e13 / 0.658409472000e12 0.11789520859e11 / 0.32920473600e11 0.85652315431e11 / 0.526727577600e12; -0.339289243121e12 / 0.526727577600e12 -0.521625191587e12 / 0.263363788800e12 0.213949854133e12 / 0.52672757760e11 -0.1509120465127e13 / 0.263363788800e12 0.21849109e8 / 0.3214890e7 -0.1134422468377e13 / 0.263363788800e12 0.602448430967e12 / 0.263363788800e12 -0.4910542309e10 / 0.10534551552e11 -0.83039945231e11 / 0.526727577600e12; 0.1261055176253e13 / 0.2633637888000e13 0.200523313337e12 / 0.164602368000e12 -0.1883976009151e13 / 0.658409472000e12 0.170839232e9 / 0.40186125e8 -0.1134422468377e13 / 0.263363788800e12 0.681437038097e12 / 0.164602368000e12 -0.1108257453763e13 / 0.658409472000e12 0.31631872327e11 / 0.82301184000e11 0.37820115539e11 / 0.376233984000e12; -0.658216413073e12 / 0.2633637888000e13 -0.279496000009e12 / 0.658409472000e12 0.51084128e8 / 0.40186125e8 -0.1404096707137e13 / 0.658409472000e12 0.602448430967e12 / 0.263363788800e12 -0.1108257453763e13 / 0.658409472000e12 0.623491124887e12 / 0.329204736000e12 -0.146643738067e12 / 0.658409472000e12 -0.98874149197e11 / 0.2633637888000e13; 0.33968779823e11 / 0.376233984000e12 -0.832e3 / 0.40186125e8 -0.92763684343e11 / 0.658409472000e12 0.11789520859e11 / 0.32920473600e11 -0.4910542309e10 / 0.10534551552e11 0.31631872327e11 / 0.82301184000e11 -0.146643738067e12 / 0.658409472000e12 0.174599973347e12 / 0.164602368000e12 0.4625165773e10 / 0.526727577600e12; -0.764998e6 / 0.40186125e8 0.129794760887e12 / 0.2633637888000e13 -0.59058717923e11 / 0.526727577600e12 0.85652315431e11 / 0.526727577600e12 -0.83039945231e11 / 0.526727577600e12 0.37820115539e11 / 0.376233984000e12 -0.98874149197e11 / 0.2633637888000e13 0.4625165773e10 / 0.526727577600e12 0.525286231387e12 / 0.526727577600e12;]; + + + H=speye(m); + H(1:9,1:9)=H_U; + H(m-8:m,m-8:m)=rot90( H_U(1:9,1:9) ,2 ); + H=H*h; + HI=inv(H); + +% Q=1/1260*diag(ones(m-5,1),5)-5/504*diag(ones(m-4,1),4)+5/84*diag(ones(m-3,1),3)-5/21*diag(ones(m-2,1),2)+5/6*diag(ones(m-1,1),1)-5/6*diag(ones(m-1,1),-1)+5/21*diag(ones(m-2,1),-2)-5/84*diag(ones(m-3,1),-3)+5/504*diag(ones(m-4,1),-4)-1/1260*diag(ones(m-5,1),-5) ; + diags = -5:5; + stencil = [-1/1260,5/504,-5/84,5/21,-5/6,0,5/6,-5/21,5/84,-5/504,1/1260]; + Q = stripeMatrix(stencil, diags, m); + + Q_U = [-0.1e1 / 0.2e1 0.78249683e8 / 0.71442000e8 -0.28290472447e11 / 0.18289152000e11 0.4285528063e10 / 0.2032128000e10 -0.3924872557e10 / 0.1828915200e10 0.2856344621e10 / 0.1828915200e10 -0.1598284927e10 / 0.2032128000e10 0.4652402687e10 / 0.18289152000e11 -0.731623e6 / 0.17860500e8; -0.78249683e8 / 0.71442000e8 0 0.5351945471e10 / 0.2032128000e10 -0.4078428731e10 / 0.1143072000e10 0.4879509877e10 / 0.1219276800e10 -0.1273709579e10 / 0.381024000e9 0.7433128649e10 / 0.3657830400e10 -0.1239008e7 / 0.1488375e7 0.21251483e8 / 0.124416000e9; 0.28290472447e11 / 0.18289152000e11 -0.5351945471e10 / 0.2032128000e10 0 0.6701592799e10 / 0.2612736000e10 -0.57535927e8 / 0.17418240e8 0.3058732543e10 / 0.870912000e9 -0.28821953e8 / 0.10206000e8 0.1858901437e10 / 0.1219276800e10 -0.2363118211e10 / 0.6096384000e10; -0.4285528063e10 / 0.2032128000e10 0.4078428731e10 / 0.1143072000e10 -0.6701592799e10 / 0.2612736000e10 0 0.52016695e8 / 0.20901888e8 -0.3777923e7 / 0.1275750e7 0.123333949e9 / 0.41472000e8 -0.2256321727e10 / 0.1143072000e10 0.1058261459e10 / 0.1828915200e10; 0.3924872557e10 / 0.1828915200e10 -0.4879509877e10 / 0.1219276800e10 0.57535927e8 / 0.17418240e8 -0.52016695e8 / 0.20901888e8 0 0.125390297e9 / 0.58060800e8 -0.609569351e9 / 0.261273600e9 0.438488399e9 / 0.243855360e9 -0.14244569e8 / 0.24385536e8; -0.2856344621e10 / 0.1828915200e10 0.1273709579e10 / 0.381024000e9 -0.3058732543e10 / 0.870912000e9 0.3777923e7 / 0.1275750e7 -0.125390297e9 / 0.58060800e8 0 0.4624381729e10 / 0.2612736000e10 -0.484096919e9 / 0.381024000e9 0.2676438019e10 / 0.6096384000e10; 0.1598284927e10 / 0.2032128000e10 -0.7433128649e10 / 0.3657830400e10 0.28821953e8 / 0.10206000e8 -0.123333949e9 / 0.41472000e8 0.609569351e9 / 0.261273600e9 -0.4624381729e10 / 0.2612736000e10 0 0.21500967689e11 / 0.18289152000e11 -0.7199454721e10 / 0.18289152000e11; -0.4652402687e10 / 0.18289152000e11 0.1239008e7 / 0.1488375e7 -0.1858901437e10 / 0.1219276800e10 0.2256321727e10 / 0.1143072000e10 -0.438488399e9 / 0.243855360e9 0.484096919e9 / 0.381024000e9 -0.21500967689e11 / 0.18289152000e11 0 0.761653e6 / 0.882000e6; 0.731623e6 / 0.17860500e8 -0.21251483e8 / 0.124416000e9 0.2363118211e10 / 0.6096384000e10 -0.1058261459e10 / 0.1828915200e10 0.14244569e8 / 0.24385536e8 -0.2676438019e10 / 0.6096384000e10 0.7199454721e10 / 0.18289152000e11 -0.761653e6 / 0.882000e6 0;]; + + Q(1:9,1:9)=Q_U; + Q(m-8:m,m-8:m)=rot90( -Q_U(1:9,1:9) ,2 ); + + D1=H\Q; + + M_U =[0.3812926003e10 / 0.2438553600e10 -0.5433856529e10 / 0.1741824000e10 0.4187462879e10 / 0.1045094400e10 -0.65635105447e11 / 0.12192768000e11 0.1457682577e10 / 0.270950400e9 -0.27884016067e11 / 0.7315660800e10 0.22304839493e11 / 0.12192768000e11 -0.188132543e9 / 0.348364800e9 0.42711619e8 / 0.571536000e9; -0.5433885329e10 / 0.1741824000e10 0.23985229969e11 / 0.2286144000e10 -0.10208460799e11 / 0.571536000e9 0.8828370001e10 / 0.381024000e9 -0.12306735263e11 / 0.522547200e9 0.39313626089e11 / 0.2286144000e10 -0.4380200287e10 / 0.508032000e9 0.192498023e9 / 0.71442000e8 -0.14565232681e11 / 0.36578304000e11; 0.29313778073e11 / 0.7315660800e10 -0.10209211399e11 / 0.571536000e9 0.24157533391e11 / 0.653184000e9 -0.6561725111e10 / 0.130636800e9 0.26490755639e11 / 0.522547200e9 -0.352801289e9 / 0.9331200e7 0.401374423e9 / 0.20412000e8 -0.29541854057e11 / 0.4572288000e10 0.7396364989e10 / 0.7315660800e10; -0.65653163047e11 / 0.12192768000e11 0.8832999601e10 / 0.381024000e9 -0.6566554871e10 / 0.130636800e9 0.1575758731e10 / 0.21772800e8 -0.2571648133e10 / 0.34836480e8 0.556969019e9 / 0.10206000e8 -0.3139265911e10 / 0.108864000e9 0.165424529e9 / 0.16934400e8 -0.11623567549e11 / 0.7315660800e10; 0.1458632977e10 / 0.270950400e9 -0.86260417241e11 / 0.3657830400e10 0.3792749777e10 / 0.74649600e8 -0.2576699653e10 / 0.34836480e8 0.157840723e9 / 0.2041200e7 -0.29838889141e11 / 0.522547200e9 0.5142742211e10 / 0.174182400e9 -0.36792522023e11 / 0.3657830400e10 0.2438136689e10 / 0.1463132160e10; -0.27909676867e11 / 0.7315660800e10 0.39389053289e11 / 0.2286144000e10 -0.2478149663e10 / 0.65318400e8 0.559214069e9 / 0.10206000e8 -0.29914661941e11 / 0.522547200e9 0.2843819551e10 / 0.65318400e8 -0.14816015149e11 / 0.653184000e9 0.1677001673e10 / 0.228614400e9 -0.44441740171e11 / 0.36578304000e11; 0.3188985299e10 / 0.1741824000e10 -0.626864041e9 / 0.72576000e8 0.57539389e8 / 0.2916000e7 -0.3153500311e10 / 0.108864000e9 0.5162239811e10 / 0.174182400e9 -0.14840163949e11 / 0.653184000e9 0.419025709e9 / 0.31104000e8 -0.138945749e9 / 0.27216000e8 0.591880819e9 / 0.746496000e9; -0.1317440441e10 / 0.2438553600e10 0.192696473e9 / 0.71442000e8 -0.4230355151e10 / 0.653184000e9 0.165983249e9 / 0.16934400e8 -0.36905792423e11 / 0.3657830400e10 0.1679779433e10 / 0.228614400e9 -0.972870443e9 / 0.190512000e9 0.9129544111e10 / 0.2286144000e10 -0.13387742111e11 / 0.7315660800e10; 0.42721069e8 / 0.571536000e9 -0.14572922281e11 / 0.36578304000e11 0.7407199549e10 / 0.7315660800e10 -0.11649228349e11 / 0.7315660800e10 0.349038407e9 / 0.209018880e9 -0.44495912971e11 / 0.36578304000e11 0.29009849731e11 / 0.36578304000e11 -0.13387863071e11 / 0.7315660800e10 0.21585797479e11 / 0.7315660800e10;]; + + +% T=[-0.1e1 / 0.3150e4 0.5e1 / 0.1008e4 -0.5e1 / 0.126e3 0.5e1 / 0.21e2 -0.5e1 / 0.3e1 0.5269e4 / 0.1800e4 -0.5e1 / 0.3e1 0.5e1 / 0.21e2 -0.5e1 / 0.126e3 0.5e1 / 0.1008e4 -0.1e1 / 0.3150e4;]; +% M=(T(1)*diag(ones(m-5,1),5)+T(2)*diag(ones(m-4,1),4)+T(3)*diag(ones(m-3,1),3)+T(4)*diag(ones(m-2,1),2)+T(5)*diag(ones(m-1,1),1)+T(7)*diag(ones(m-1,1),-1)+T(8)*diag(ones(m-2,1),-2)+T(9)*diag(ones(m-3,1),-3)+T(10)*diag(ones(m-4,1),-4)+T(11)*diag(ones(m-5,1),-5)+T(6)*diag(ones(m,1),0)); + + diags = -5:5; + left_stencil = [-1/3150,5/1008,-5/126,5/21,-5/3]; + stencil = [left_stencil,5269/1800,fliplr(left_stencil)]; + M = stripeMatrix(stencil, diags, m); + + M(1:9,1:9)=M_U; + + M(m-8:m,m-8:m)=rot90( M_U ,2 ); + M=M/h; + + DS_U=[0.761e3 / 0.280e3 -8 14 -0.56e2 / 0.3e1 0.35e2 / 0.2e1 -0.56e2 / 0.5e1 0.14e2 / 0.3e1 -0.8e1 / 0.7e1 0.1e1 / 0.8e1;]; + DS=sparse(m,m); + DS(1,1:9)=DS_U; + DS(m,m-8:m)=fliplr(DS_U); + DS=DS/h; + + D2=H\(-M+DS); + + % Try adding AD to boundary D1=HI*(Q-D9'*D9) +% DD_9=sparse(m); +% d9=[-1 9 -36 84 -126 126 -84 36 -9 1];t9=sum(abs(d9));%d9=d9/t9; +% DD_9(1:1,1:10)=[d9]; +% DD_9(m:m,m-9:m)=[d9]; +% +% +% ADD=30*h/(t9)*DD_9'*DD_9; + + e_1 = sparse(m,1); + e_1(1)= 1; + e_m = sparse(m,1); + e_m(end)= 1; + S_1 = -DS(1,:)'; + S_m = DS(end,:)'; + + Q = H*D1-(-(e_1*e_1') + (e_m*e_m')); + M = -(H*D2-(-e_1*S_1' + e_m*S_m')); +end \ No newline at end of file
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/+implementations/d2_blocknorm_4.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/+sbp/+implementations/d2_blocknorm_4.m Mon Sep 12 12:53:02 2016 +0200 @@ -0,0 +1,66 @@ +function [H, HI, D1, D2, e_1, e_m, M, Q, S_1, S_m] = d2_blocknorm_4(m,h) + + BP = 4; + if(m<2*BP) + error(['Operator requires at least ' num2str(2*BP) ' grid points']); + end + + H_U=[0.751e3 / 0.3456e4 0.661e3 / 0.3456e4 -0.515e3 / 0.3456e4 0.5e1 / 0.128e3; 0.661e3 / 0.3456e4 0.1405e4 / 0.1152e4 -0.3e1 / 0.128e3 0.29e2 / 0.3456e4; -0.515e3 / 0.3456e4 -0.3e1 / 0.128e3 0.989e3 / 0.1152e4 0.149e3 / 0.3456e4; 0.5e1 / 0.128e3 0.29e2 / 0.3456e4 0.149e3 / 0.3456e4 0.3407e4 / 0.3456e4;]; + + + H=speye(m); + H(1:4,1:4)=H_U; + H(m-3:m,m-3:m)=rot90( H_U(1:4,1:4) ,2 ); + H=H*h; + HI=inv(H); + + e=ones(m,1); + Q=spdiags([e -8*e 0*e 8*e -e], -2:2, m, m)/12; +% 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.1e1 / 0.2e1 0.55e2 / 0.72e2 -0.47e2 / 0.144e3 0.1e1 / 0.16e2; -0.55e2 / 0.72e2 0 0.43e2 / 0.48e2 -0.19e2 / 0.144e3; 0.47e2 / 0.144e3 -0.43e2 / 0.48e2 0 0.47e2 / 0.72e2; -0.1e1 / 0.16e2 0.19e2 / 0.144e3 -0.47e2 / 0.72e2 0;]; + + Q(1:4,1:4)=Q_U; + Q(m-3:m,m-3:m)=rot90( -Q_U(1:4,1:4) ,2 ); + + D1=H\Q; + + M_U=[0.359e3 / 0.288e3 -0.443e3 / 0.288e3 0.97e2 / 0.288e3 -0.13e2 / 0.288e3; -0.51e2 / 0.32e2 0.325e3 / 0.96e2 -0.191e3 / 0.96e2 0.19e2 / 0.96e2; 0.43e2 / 0.96e2 -0.69e2 / 0.32e2 0.293e3 / 0.96e2 -0.137e3 / 0.96e2; -0.29e2 / 0.288e3 0.89e2 / 0.288e3 -0.427e3 / 0.288e3 0.727e3 / 0.288e3;]; + + + +% 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)); + M=-spdiags([-e 16*e -30*e 16*e -e], -2:2, m, m)/12; + + M(1:4,1:4)=M_U; + + M(m-3:m,m-3:m)=rot90( M_U ,2 ); + M=M/h; + + DS_U=[0.25e2 / 0.12e2 -4 3 -0.4e1 / 0.3e1 0.1e1 / 0.4e1;]; + DS=sparse(m,m); + DS(1,1:5)=DS_U; + DS(m,m-4:m)=fliplr(DS_U); + DS=DS/h; + + D2=H\(-M+DS); + +% d3=[-1 3 -3 1]; +% t3=sum(abs(d3)); +% DD_3(1:1,1:4)=[d3]; +% DD_3(m:m,m-3:m)=[d3]; + + % This works for wave eq. + % For studs interface in 1D no AD is needed. +% ADD=1*h/(t3)*DD_3'*DD_3; + + e_1 = sparse(m,1); + e_1(1)= 1; + e_m = sparse(m,1); + e_m(end)= 1; + S_1 = -DS(1,:)'; + S_m = DS(end,:)'; + + Q = H*D1-(-(e_1*e_1') + (e_m*e_m')); + M = -(H*D2-(-e_1*S_1' + e_m*S_m')); +end \ No newline at end of file
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/+implementations/d2_blocknorm_6.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/+sbp/+implementations/d2_blocknorm_6.m Mon Sep 12 12:53:02 2016 +0200 @@ -0,0 +1,70 @@ +function [H, HI, D1, D2, e_1, e_m, M, Q, S_1, S_m] = d2_blocknorm_6(m,h) + + BP = 6; + if(m<2*BP) + error(['Operator requires at least ' num2str(2*BP) ' grid points']); + end + + H_U=[0.8489084265971e13 / 0.45952647390720e14 0.24636450459943e14 / 0.98469958694400e14 -0.2796787072531e13 / 0.12308744836800e14 0.2793599068823e13 / 0.14360202309600e14 -0.66344569931569e14 / 0.689289710860800e15 0.3784697867191e13 / 0.137857942172160e15; 0.24636450459943e14 / 0.98469958694400e14 0.27815394775103e14 / 0.19693991738880e14 -0.445601472229e12 / 0.861612138576e12 0.3896159037731e13 / 0.17232242771520e14 -0.866505556741e12 / 0.27571588434432e14 -0.25625418493681e14 / 0.689289710860800e15; -0.2796787072531e13 / 0.12308744836800e14 -0.445601472229e12 / 0.861612138576e12 0.31409405327129e14 / 0.17232242771520e14 -0.1595539040819e13 / 0.3446448554304e13 0.2651608170899e13 / 0.17232242771520e14 0.1434714163381e13 / 0.43080606928800e14; 0.2793599068823e13 / 0.14360202309600e14 0.3896159037731e13 / 0.17232242771520e14 -0.1595539040819e13 / 0.3446448554304e13 0.6984350202787e13 / 0.5744080923840e13 -0.62662743973e11 / 0.861612138576e12 -0.435331581619e12 / 0.12308744836800e14; -0.66344569931569e14 / 0.689289710860800e15 -0.866505556741e12 / 0.27571588434432e14 0.2651608170899e13 / 0.17232242771520e14 -0.62662743973e11 / 0.861612138576e12 0.20320736807807e14 / 0.19693991738880e14 0.1368363924007e13 / 0.98469958694400e14; 0.3784697867191e13 / 0.137857942172160e15 -0.25625418493681e14 / 0.689289710860800e15 0.1434714163381e13 / 0.43080606928800e14 -0.435331581619e12 / 0.12308744836800e14 0.1368363924007e13 / 0.98469958694400e14 0.27414523542149e14 / 0.27571588434432e14;]; + + + H=speye(m); + H(1:6,1:6)=H_U; + H(m-5:m,m-5:m)=rot90( H_U(1:6,1:6) ,2 ); + H=H*h; + HI=inv(H); + + diags = -3:3; + stencil = [-1/60,3/20,-3/4,0,3/4,-3/20,1/60]; + Q = stripeMatrix(stencil, diags, m); + +% Q=(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)); + + Q_U = [-0.1e1 / 0.2e1 0.151864337282617e15 / 0.172322427715200e15 -0.251539972254817e15 / 0.344644855430400e15 0.61230525943549e14 / 0.114881618476800e15 -0.80987306509439e14 / 0.344644855430400e15 0.697178163343e12 / 0.13785794217216e14; -0.151864337282617e15 / 0.172322427715200e15 0 0.12350422095979e14 / 0.7658774565120e13 -0.78802251164141e14 / 0.68928971086080e14 0.4229407848431e13 / 0.7658774565120e13 -0.5372490790279e13 / 0.38293872825600e14; 0.251539972254817e15 / 0.344644855430400e15 -0.12350422095979e14 / 0.7658774565120e13 0 0.2217674201683e13 / 0.1723224277152e13 -0.13219134462287e14 / 0.22976323695360e14 0.19660399553981e14 / 0.114881618476800e15; -0.61230525943549e14 / 0.114881618476800e15 0.78802251164141e14 / 0.68928971086080e14 -0.2217674201683e13 / 0.1723224277152e13 0 0.62307836637379e14 / 0.68928971086080e14 -0.84068101764193e14 / 0.344644855430400e15; 0.80987306509439e14 / 0.344644855430400e15 -0.4229407848431e13 / 0.7658774565120e13 0.13219134462287e14 / 0.22976323695360e14 -0.62307836637379e14 / 0.68928971086080e14 0 0.44756810052211e14 / 0.57440809238400e14; -0.697178163343e12 / 0.13785794217216e14 0.5372490790279e13 / 0.38293872825600e14 -0.19660399553981e14 / 0.114881618476800e15 0.84068101764193e14 / 0.344644855430400e15 -0.44756810052211e14 / 0.57440809238400e14 0;]; + + Q(1:6,1:6)=Q_U; + Q(m-5:m,m-5:m)=rot90( -Q_U(1:6,1:6) ,2 ); + + D1=H\Q; + + M_U=[0.960901171090739e15 / 0.689289710860800e15 -0.502032138770899e15 / 0.229763236953600e15 0.493085196645929e15 / 0.344644855430400e15 -0.329491854944251e15 / 0.344644855430400e15 0.89541920186441e14 / 0.229763236953600e15 -0.50617198740721e14 / 0.689289710860800e15; -0.100483015499831e15 / 0.45952647390720e14 0.807564929223191e15 / 0.137857942172160e15 -0.415779274818991e15 / 0.68928971086080e14 0.80693719872887e14 / 0.22976323695360e14 -0.196663473955997e15 / 0.137857942172160e15 0.37943821632959e14 / 0.137857942172160e15; 0.99938177941669e14 / 0.68928971086080e14 -0.84419552767043e14 / 0.13785794217216e14 0.106922123424097e15 / 0.11488161847680e14 -0.223356054245897e15 / 0.34464485543040e14 0.157526160982357e15 / 0.68928971086080e14 -0.10062402380533e14 / 0.22976323695360e14; -0.68310884976863e14 / 0.68928971086080e14 0.17038649985979e14 / 0.4595264739072e13 -0.231397767539273e15 / 0.34464485543040e14 0.232669188399619e15 / 0.34464485543040e14 -0.1657930371065e13 / 0.510584971008e12 0.34774771016773e14 / 0.68928971086080e14; 0.18789143112277e14 / 0.45952647390720e14 -0.213895716727517e15 / 0.137857942172160e15 0.171024751153381e15 / 0.68928971086080e14 -0.8523669967037e13 / 0.2552924855040e13 0.485768751245399e15 / 0.137857942172160e15 -0.229158724354277e15 / 0.137857942172160e15; -0.51766014925489e14 / 0.689289710860800e15 0.202930494289627e15 / 0.689289710860800e15 -0.54332868549353e14 / 0.114881618476800e15 0.180479548146281e15 / 0.344644855430400e15 -0.1146942437956153e16 / 0.689289710860800e15 0.211001773091419e15 / 0.76587745651200e14;]; + + + +% M=-(2*diag(ones(m-3,1),3)-27*diag(ones(m-2,1),2)+270*diag(ones(m-1,1),1)+270*diag(ones(m-1,1),-1)-27*diag(ones(m-2,1),-2)+2*diag(ones(m-3,1),-3)-490*diag(ones(m,1),0))/180; + diags = -3:3; + stencil = -1/180*[2,-27,270,-490,270,-27,2]; + M = stripeMatrix(stencil, diags, m); + + M(1:6,1:6)=M_U; + + M(m-5:m,m-5:m)=rot90( M_U ,2 ); + M=M/h; + + DS_U=[0.137e3 / 0.60e2 -5 5 -0.10e2 / 0.3e1 0.5e1 / 0.4e1 -0.1e1 / 0.5e1;]; + DS=sparse(m,m); + DS(1,1:6)=DS_U; + DS(m,m-5:m)=fliplr(DS_U); + DS=DS/h; + + D2=H\(-M+DS); + +% d5=[-1 5 -10 10 -5 1]; +% t5=sum(abs(d5)); +% DD_5(1:1,1:6)=[d5]; +% DD_5(m:m,m-5:m)=[d5]; +% +% % This works for wave eq. +% % For studs interface in 1D no AD is needed. +% ADD=7*h/(t5)*DD_5'*DD_5; + + e_1 = sparse(m,1); + e_1(1)= 1; + e_m = sparse(m,1); + e_m(end)= 1; + S_1 = -DS(1,:)'; + S_m = DS(end,:)'; + + Q = H*D1-(-(e_1*e_1') + (e_m*e_m')); + M = -(H*D2-(-e_1*S_1' + e_m*S_m')); +end \ No newline at end of file
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/+implementations/d2_blocknorm_8.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/+sbp/+implementations/d2_blocknorm_8.m Mon Sep 12 12:53:02 2016 +0200 @@ -0,0 +1,73 @@ +function [H, HI, D1, D2, e_1, e_m, M, Q, S_1, S_m] = d2_blocknorm_8(m,h) + % Eighth order + + BP = 8; + if(m<2*BP) + error(['Operator requires at least ' num2str(2*BP) ' grid points']); + end + + e_1=sparse(m,1);e_1(1)=1; + e_m=sparse(m,1);e_m(m)=1; + + H_U=[ 0.704266523e9 / 0.4180377600e10 0.4579586639e10 / 0.16257024000e11 -0.3623870581e10 / 0.9754214400e10 0.12753127559e11 / 0.29262643200e11 -0.3687413731e10 / 0.9754214400e10 0.2169892891e10 / 0.9754214400e10 -0.13224544841e11 / 0.146313216000e12 0.4142047e7 / 0.199065600e9; + 0.4579586639e10 / 0.16257024000e11 0.36543258551e11 / 0.20901888000e11 -0.8235820121e10 / 0.6967296000e10 0.1800520829e10 / 0.1393459200e10 -0.3725834681e10 / 0.4180377600e10 0.2588501879e10 / 0.6967296000e10 -0.10477621e8 / 0.995328000e9 -0.6589395529e10 / 0.146313216000e12; + -0.3623870581e10 / 0.9754214400e10 -0.8235820121e10 / 0.6967296000e10 0.765685439e9 / 0.258048000e9 -0.3254203513e10 / 0.1393459200e10 0.2477267447e10 / 0.1393459200e10 -0.456533e6 / 0.491520e6 0.873043831e9 / 0.6967296000e10 0.4279558279e10 / 0.48771072000e11; + 0.12753127559e11 / 0.29262643200e11 0.1800520829e10 / 0.1393459200e10 -0.3254203513e10 / 0.1393459200e10 0.16428690611e11 / 0.4180377600e10 -0.460605929e9 / 0.199065600e9 0.1897042423e10 / 0.1393459200e10 -0.1151273401e10 / 0.4180377600e10 -0.65906413e8 / 0.650280960e9; + -0.3687413731e10 / 0.9754214400e10 -0.3725834681e10 / 0.4180377600e10 0.2477267447e10 / 0.1393459200e10 -0.460605929e9 / 0.199065600e9 0.11663916211e11 / 0.4180377600e10 -0.307273957e9 / 0.278691840e9 0.117995903e9 / 0.464486400e9 0.95035807e8 / 0.1170505728e10; + 0.2169892891e10 / 0.9754214400e10 0.2588501879e10 / 0.6967296000e10 -0.456533e6 / 0.491520e6 0.1897042423e10 / 0.1393459200e10 -0.307273957e9 / 0.278691840e9 0.17436823e8 / 0.10321920e8 -0.1274455129e10 / 0.6967296000e10 -0.338917493e9 / 0.9754214400e10; + -0.13224544841e11 / 0.146313216000e12 -0.10477621e8 / 0.995328000e9 0.873043831e9 / 0.6967296000e10 -0.1151273401e10 / 0.4180377600e10 0.117995903e9 / 0.464486400e9 -0.1274455129e10 / 0.6967296000e10 0.22041718711e11 / 0.20901888000e11 0.468461293e9 / 0.48771072000e11; + 0.4142047e7 / 0.199065600e9 -0.6589395529e10 / 0.146313216000e12 0.4279558279e10 / 0.48771072000e11 -0.65906413e8 / 0.650280960e9 0.95035807e8 / 0.1170505728e10 -0.338917493e9 / 0.9754214400e10 0.468461293e9 / 0.48771072000e11 0.20832744839e11 / 0.20901888000e11; + ]; + + + H=speye(m); + H(1:8,1:8)=H_U; + H(m-7:m,m-7:m)=rot90( H_U(1:8,1:8) ,2 ); + H=H*h; + HI=inv(H); + +% Q=-(1/280*diag(ones(m-4,1),4)-4/105*diag(ones(m-3,1),3)+1/5*diag(ones(m-2,1),2)-4/5*diag(ones(m-1,1),1)+4/5*diag(ones(m-1,1),-1)-1/5*diag(ones(m-2,1),-2)+4/105*diag(ones(m-3,1),-3)-1/280*diag(ones(m-4,1),-4)); + diags = -4:4; + stencil = [1/280,-4/105,1/5,-4/5,0,4/5,-1/5,4/105,-1/280]; + Q = stripeMatrix(stencil, diags, m); + + Q_U = [-0.1e1 / 0.2e1 0.16262381e8 / 0.15876000e8 -0.3770744693e10 / 0.3048192000e10 0.290431859e9 / 0.203212800e9 -0.363704879e9 / 0.304819200e9 0.206906927e9 / 0.304819200e9 -0.248883679e9 / 0.1016064000e10 0.2665637e7 / 0.62208000e8; -0.16262381e8 / 0.15876000e8 0 0.138589901e9 / 0.62208000e8 -0.31764881e8 / 0.12441600e8 0.461249e6 / 0.193536e6 -0.347232997e9 / 0.217728000e9 0.1788157e7 / 0.2488320e7 -0.5926349e7 / 0.37632000e8; 0.3770744693e10 / 0.3048192000e10 -0.138589901e9 / 0.62208000e8 0 0.11741773e8 / 0.5443200e7 -0.39109817e8 / 0.17418240e8 0.10216441e8 / 0.5376000e7 -0.245131109e9 / 0.217728000e9 0.92809903e8 / 0.304819200e9; -0.290431859e9 / 0.203212800e9 0.31764881e8 / 0.12441600e8 -0.11741773e8 / 0.5443200e7 0 0.4634999e7 / 0.2488320e7 -0.144219869e9 / 0.87091200e8 0.17445643e8 / 0.14515200e8 -0.38142949e8 / 0.101606400e9; 0.363704879e9 / 0.304819200e9 -0.461249e6 / 0.193536e6 0.39109817e8 / 0.17418240e8 -0.4634999e7 / 0.2488320e7 0 0.7992221e7 / 0.5443200e7 -0.817951e6 / 0.829440e6 0.4455517e7 / 0.13547520e8; -0.206906927e9 / 0.304819200e9 0.347232997e9 / 0.217728000e9 -0.10216441e8 / 0.5376000e7 0.144219869e9 / 0.87091200e8 -0.7992221e7 / 0.5443200e7 0 0.68487373e8 / 0.62208000e8 -0.1032638773e10 / 0.3048192000e10; 0.248883679e9 / 0.1016064000e10 -0.1788157e7 / 0.2488320e7 0.245131109e9 / 0.217728000e9 -0.17445643e8 / 0.14515200e8 0.817951e6 / 0.829440e6 -0.68487373e8 / 0.62208000e8 0 0.39529771e8 / 0.47628000e8; -0.2665637e7 / 0.62208000e8 0.5926349e7 / 0.37632000e8 -0.92809903e8 / 0.304819200e9 0.38142949e8 / 0.101606400e9 -0.4455517e7 / 0.13547520e8 0.1032638773e10 / 0.3048192000e10 -0.39529771e8 / 0.47628000e8 0;]; + + Q(1:8,1:8)=Q_U; + Q(m-7:m,m-7:m)=rot90( -Q_U(1:8,1:8) ,2 ); + + D1=H\Q; + + + M_U =[0.27667249117e11 / 0.18289152000e11 -0.17100791927e11 / 0.6096384000e10 0.6123596021e10 / 0.2032128000e10 -0.12420079921e11 / 0.3657830400e10 0.3352522937e10 / 0.1219276800e10 -0.3030351383e10 / 0.2032128000e10 0.8955233071e10 / 0.18289152000e11 -0.448917533e9 / 0.6096384000e10; -0.2443029521e10 / 0.870912000e9 0.3279926909e10 / 0.373248000e9 -0.150833107e9 / 0.11612160e8 0.2418903029e10 / 0.174182400e9 -0.1195687489e10 / 0.104509440e9 0.1864443097e10 / 0.290304000e9 -0.275412413e9 / 0.124416000e9 0.26267539e8 / 0.74649600e8; 0.875033123e9 / 0.290304000e9 -0.754432799e9 / 0.58060800e8 0.262316881e9 / 0.10752000e8 -0.1615952663e10 / 0.58060800e8 0.1304948581e10 / 0.58060800e8 -0.59605951e8 / 0.4608000e7 0.270029509e9 / 0.58060800e8 -0.225377137e9 / 0.290304000e9; -0.71086111e8 / 0.20901888e8 0.2425994741e10 / 0.174182400e9 -0.1622486807e10 / 0.58060800e8 0.735382895e9 / 0.20901888e8 -0.1016121419e10 / 0.34836480e8 0.190014817e9 / 0.11612160e8 -0.447155539e9 / 0.74649600e8 0.179406911e9 / 0.174182400e9; 0.480578879e9 / 0.174182400e9 -0.6018333509e10 / 0.522547200e9 0.1319413093e10 / 0.58060800e8 -0.205032463e9 / 0.6967296e7 0.551889007e9 / 0.20901888e8 -0.887809303e9 / 0.58060800e8 0.914606453e9 / 0.174182400e9 -0.67482881e8 / 0.74649600e8; -0.434493809e9 / 0.290304000e9 0.1878773977e10 / 0.290304000e9 -0.423185977e9 / 0.32256000e8 0.964538597e9 / 0.58060800e8 -0.894343447e9 / 0.58060800e8 0.345461491e9 / 0.32256000e8 -0.1288081307e10 / 0.290304000e9 0.199200163e9 / 0.290304000e9; 0.183060319e9 / 0.373248000e9 -0.276656573e9 / 0.124416000e9 0.54579137e8 / 0.11612160e8 -0.3169984837e10 / 0.522547200e9 0.184339633e9 / 0.34836480e8 -0.1289417627e10 / 0.290304000e9 0.1431981949e10 / 0.373248000e9 -0.307164061e9 / 0.174182400e9; -0.449332253e9 / 0.6096384000e10 0.1290053923e10 / 0.3657830400e10 -0.1588745239e10 / 0.2032128000e10 0.1267377593e10 / 0.1219276800e10 -0.3326650673e10 / 0.3657830400e10 0.1396036981e10 / 0.2032128000e10 -0.2150231371e10 / 0.1219276800e10 0.52544801501e11 / 0.18289152000e11;]; + +% M=-(-1/560*diag(ones(m-4,1),4)+8/315*diag(ones(m-3,1),3)-1/5*diag(ones(m-2,1),2)+8/5*diag(ones(m-1,1),1)+8/5*diag(ones(m-1,1),-1)-1/5*diag(ones(m-2,1),-2)+8/315*diag(ones(m-3,1),-3)-1/560*diag(ones(m-4,1),-4)-205/72*diag(ones(m,1),0)); + diags = -4:4; + left_stencil = [-1/560,8/315,-1/5,8/5]; + stencil = [left_stencil,-205/72,fliplr(left_stencil)]; + M = stripeMatrix(stencil, diags, m); + + M(1:8,1:8)=M_U; + + M(m-7:m,m-7:m)=rot90( M_U ,2 ); + M=M/h; + + % DS_U=[0.363e3 / 0.140e3 -7 0.21e2 / 0.2e1 -0.35e2 / 0.3e1 0.35e2 / 0.4e1 -0.21e2 / 0.5e1 0.7e1 / 0.6e1 -0.1e1 / 0.7e1;]; + % DS=sparse(m,m); + % DS(1,1:8)=DS_U; + % DS(m,m-7:m)=fliplr(DS_U); + % DS=DS/h; + + %D2=HI*(-M+DS); + + S_U=-[0.363e3 / 0.140e3 -7 0.21e2 / 0.2e1 -0.35e2 / 0.3e1 0.35e2 / 0.4e1 -0.21e2 / 0.5e1 0.7e1 / 0.6e1 -0.1e1 / 0.7e1;]/h; + S_1=sparse(1,m); + S_1(1:8)=S_U; + S_m=sparse(1,m); + S_m(m-7:m)=fliplr(-S_U); + + + D2=H\(-M - e_1*S_1+e_m*S_m); + S_1 = S_1'; + S_m = S_m'; +end \ No newline at end of file
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/+implementations/d2_variable_4.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/+sbp/+implementations/d2_variable_4.m Mon Sep 12 12:53:02 2016 +0200 @@ -0,0 +1,121 @@ +function [H, HI, D1, D2, e_l, e_r, d_l, d_r] = d2_variable_4(m,h) + + BP = 4; + if(m<2*BP) + error(['Operator requires at least ' num2str(2*BP) ' grid points']); + end + + N = m; + + H = spspeye(N); + H(1,1) = 17/48; H(2,2) = 59/48; H(3,3) = 43/48; H(4,4) = 49/48; + H(N,N) = 17/48; H(N-1,N-1) = 59/48; H(N-2,N-2) = 43/48; H(N-3,N-3) = 49/48; + H = h*H; + + HI = inv(H); + + H = sparse(H); + HI = sparse(HI); + + + S = sparse(N,N); + S(1,1:4) = 1/h*[(-11/6);3;(-3/2);1/3]; + S(N,N-3:N) = 1/h*[(-1/3);3/2;(-3);11/6]; + S = sparse(S); + + e_l = sparse(m,1); + e_l(1) = 1; + + e_r = sparse(m,1); + e_r(end) = 1; + + d_l = S(1,:)'; + d_r = S(end,:)'; + + e=ones(m,1); + Q=spdiags([e -8*e 0*e 8*e -e], -2:2, m, m)/12; + 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)=rot90( -Q_U(1:4,1:4) ,2 ); + + D1=HI*(Q-1/2*(e_l*e_l')+1/2*(e_r*e_r')) ; + + function D2 = D2_fun(c) + M = 78+(N-12)*5; + %h = 1/(N-1); + + + U = [48/(17)*(0.12e2 / 0.17e2 * c(1) + 0.59e2 / 0.192e3 * c(2) + 0.27010400129e11 / 0.345067064608e12 * c(3) + 0.69462376031e11 / 0.2070402387648e13 * c(4)) 48/(17)*(-0.59e2 / 0.68e2 * c(1) - 0.6025413881e10 / 0.21126554976e11 * c(3) - 0.537416663e9 / 0.7042184992e10 * c(4)) 48/(17)*(0.2e1 / 0.17e2 * c(1) - 0.59e2 / 0.192e3 * c(2) + 0.213318005e9 / 0.16049630912e11 * c(4) + 0.2083938599e10 / 0.8024815456e10 * c(3)) 48/(17)*(0.3e1 / 0.68e2 * c(1) - 0.1244724001e10 / 0.21126554976e11 * c(3) + 0.752806667e9 / 0.21126554976e11 * c(4)) 48/(17)*(0.49579087e8 / 0.10149031312e11 * c(3) - 0.49579087e8 / 0.10149031312e11 * c(4)) 48/(17)*(-c(4) / 0.784e3 + c(3) / 0.784e3);... + 48/(59)*(-0.59e2 / 0.68e2 * c(1) - 0.6025413881e10 / 0.21126554976e11 * c(3) - 0.537416663e9 / 0.7042184992e10 * c(4)) 48/(59)*(0.3481e4 / 0.3264e4 * c(1) + 0.9258282831623875e16 / 0.7669235228057664e16 * c(3) + 0.236024329996203e15 / 0.1278205871342944e16 * c(4)) 48/(59)*(-0.59e2 / 0.408e3 * c(1) - 0.29294615794607e14 / 0.29725717938208e14 * c(3) - 0.2944673881023e13 / 0.29725717938208e14 * c(4)) 48/(59)*(-0.59e2 / 0.1088e4 * c(1) + 0.260297319232891e15 / 0.2556411742685888e16 * c(3) - 0.60834186813841e14 / 0.1278205871342944e16 * c(4)) 48/(59)*(-0.1328188692663e13 / 0.37594290333616e14 * c(3) + 0.1328188692663e13 / 0.37594290333616e14 * c(4)) 48/(59)*(-0.8673e4 / 0.2904112e7 * c(3) + 0.8673e4 / 0.2904112e7 * c(4));... + 48/(43)*(0.2e1 / 0.17e2 * c(1) - 0.59e2 / 0.192e3 * c(2) + 0.213318005e9 / 0.16049630912e11 * c(4) + 0.2083938599e10 / 0.8024815456e10 * c(3)) 48/(43)*(-0.59e2 / 0.408e3 * c(1) - 0.29294615794607e14 / 0.29725717938208e14 * c(3) - 0.2944673881023e13 / 0.29725717938208e14 * c(4)) 48/(43)*(c(1) / 0.51e2 + 0.59e2 / 0.192e3 * c(2) + 0.13777050223300597e17 / 0.26218083221499456e17 * c(4) + 0.564461e6 / 0.13384296e8 * c(5) + 0.378288882302546512209e21 / 0.270764341349677687456e21 * c(3)) 48/(43)*(c(1) / 0.136e3 - 0.125059e6 / 0.743572e6 * c(5) - 0.4836340090442187227e19 / 0.5525802884687299744e19 * c(3) - 0.17220493277981e14 / 0.89177153814624e14 * c(4)) 48/(43)*(-0.10532412077335e14 / 0.42840005263888e14 * c(4) + 0.1613976761032884305e19 / 0.7963657098519931984e19 * c(3) + 0.564461e6 / 0.4461432e7 * c(5)) 48/(43)*(-0.960119e6 / 0.1280713392e10 * c(4) - 0.3391e4 / 0.6692148e7 * c(5) + 0.33235054191e11 / 0.26452850508784e14 * c(3));... + 48/(49)*(0.3e1 / 0.68e2 * c(1) - 0.1244724001e10 / 0.21126554976e11 * c(3) + 0.752806667e9 / 0.21126554976e11 * c(4)) 48/(49)*(-0.59e2 / 0.1088e4 * c(1) + 0.260297319232891e15 / 0.2556411742685888e16 * c(3) - 0.60834186813841e14 / 0.1278205871342944e16 * c(4)) 48/(49)*(c(1) / 0.136e3 - 0.125059e6 / 0.743572e6 * c(5) - 0.4836340090442187227e19 / 0.5525802884687299744e19 * c(3) - 0.17220493277981e14 / 0.89177153814624e14 * c(4)) 48/(49)*(0.3e1 / 0.1088e4 * c(1) + 0.507284006600757858213e21 / 0.475219048083107777984e21 * c(3) + 0.1869103e7 / 0.2230716e7 * c(5) + c(6) / 0.24e2 + 0.1950062198436997e16 / 0.3834617614028832e16 * c(4)) 48/(49)*(-0.4959271814984644613e19 / 0.20965546238960637264e20 * c(3) - c(6) / 0.6e1 - 0.15998714909649e14 / 0.37594290333616e14 * c(4) - 0.375177e6 / 0.743572e6 * c(5)) 48/(49)*(-0.368395e6 / 0.2230716e7 * c(5) + 0.752806667e9 / 0.539854092016e12 * c(3) + 0.1063649e7 / 0.8712336e7 * c(4) + c(6) / 0.8e1);... + 0.49579087e8 / 0.10149031312e11 * c(3) - 0.49579087e8 / 0.10149031312e11 * c(4) -0.1328188692663e13 / 0.37594290333616e14 * c(3) + 0.1328188692663e13 / 0.37594290333616e14 * c(4) -0.10532412077335e14 / 0.42840005263888e14 * c(4) + 0.1613976761032884305e19 / 0.7963657098519931984e19 * c(3) + 0.564461e6 / 0.4461432e7 * c(5) -0.4959271814984644613e19 / 0.20965546238960637264e20 * c(3) - c(6) / 0.6e1 - 0.15998714909649e14 / 0.37594290333616e14 * c(4) - 0.375177e6 / 0.743572e6 * c(5) 0.8386761355510099813e19 / 0.128413970713633903242e21 * c(3) + 0.2224717261773437e16 / 0.2763180339520776e16 * c(4) + 0.5e1 / 0.6e1 * c(6) + c(7) / 0.24e2 + 0.280535e6 / 0.371786e6 * c(5) -0.35039615e8 / 0.213452232e9 * c(4) - c(7) / 0.6e1 - 0.13091810925e11 / 0.13226425254392e14 * c(3) - 0.1118749e7 / 0.2230716e7 * c(5) - c(6) / 0.2e1;... + -c(4) / 0.784e3 + c(3) / 0.784e3 -0.8673e4 / 0.2904112e7 * c(3) + 0.8673e4 / 0.2904112e7 * c(4) -0.960119e6 / 0.1280713392e10 * c(4) - 0.3391e4 / 0.6692148e7 * c(5) + 0.33235054191e11 / 0.26452850508784e14 * c(3) -0.368395e6 / 0.2230716e7 * c(5) + 0.752806667e9 / 0.539854092016e12 * c(3) + 0.1063649e7 / 0.8712336e7 * c(4) + c(6) / 0.8e1 -0.35039615e8 / 0.213452232e9 * c(4) - c(7) / 0.6e1 - 0.13091810925e11 / 0.13226425254392e14 * c(3) - 0.1118749e7 / 0.2230716e7 * c(5) - c(6) / 0.2e1 0.3290636e7 / 0.80044587e8 * c(4) + 0.5580181e7 / 0.6692148e7 * c(5) + 0.5e1 / 0.6e1 * c(7) + c(8) / 0.24e2 + 0.660204843e9 / 0.13226425254392e14 * c(3) + 0.3e1 / 0.4e1 * c(6)]; + + + L = [c(N-7) / 0.24e2 + 0.5e1 / 0.6e1 * c(N-6) + 0.5580181e7 / 0.6692148e7 * c(N-4) + 0.4887707739997e13 / 0.119037827289528e15 * c(N-3) + 0.3e1 / 0.4e1 * c(N-5) + 0.660204843e9 / 0.13226425254392e14 * c(N-2) + 0.660204843e9 / 0.13226425254392e14 * c(N-1) -c(N-6) / 0.6e1 - 0.1618585929605e13 / 0.9919818940794e13 * c(N-3) - c(N-5) / 0.2e1 - 0.1118749e7 / 0.2230716e7 * c(N-4) - 0.13091810925e11 / 0.13226425254392e14 * c(N-2) - 0.13091810925e11 / 0.13226425254392e14 * c(N-1) -0.368395e6 / 0.2230716e7 * c(N-4) + c(N-5) / 0.8e1 + 0.48866620889e11 / 0.404890569012e12 * c(N-3) + 0.752806667e9 / 0.539854092016e12 * c(N-2) + 0.752806667e9 / 0.539854092016e12 * c(N-1) -0.3391e4 / 0.6692148e7 * c(N-4) - 0.238797444493e12 / 0.119037827289528e15 * c(N-3) + 0.33235054191e11 / 0.26452850508784e14 * c(N-2) + 0.33235054191e11 / 0.26452850508784e14 * c(N-1) -0.8673e4 / 0.2904112e7 * c(N-2) - 0.8673e4 / 0.2904112e7 * c(N-1) + 0.8673e4 / 0.1452056e7 * c(N-3) -c(N-3) / 0.392e3 + c(N-2) / 0.784e3 + c(N-1) / 0.784e3;... + -c(N-6) / 0.6e1 - 0.1618585929605e13 / 0.9919818940794e13 * c(N-3) - c(N-5) / 0.2e1 - 0.1118749e7 / 0.2230716e7 * c(N-4) - 0.13091810925e11 / 0.13226425254392e14 * c(N-2) - 0.13091810925e11 / 0.13226425254392e14 * c(N-1) c(N-6) / 0.24e2 + 0.5e1 / 0.6e1 * c(N-5) + 0.3896014498639e13 / 0.4959909470397e13 * c(N-3) + 0.8386761355510099813e19 / 0.128413970713633903242e21 * c(N-2) + 0.280535e6 / 0.371786e6 * c(N-4) + 0.3360696339136261875e19 / 0.171218627618178537656e21 * c(N-1) -c(N-5) / 0.6e1 - 0.4959271814984644613e19 / 0.20965546238960637264e20 * c(N-2) - 0.375177e6 / 0.743572e6 * c(N-4) - 0.13425842714e11 / 0.33740880751e11 * c(N-3) - 0.193247108773400725e18 / 0.6988515412986879088e19 * c(N-1) -0.365281640980e12 / 0.1653303156799e13 * c(N-3) + 0.564461e6 / 0.4461432e7 * c(N-4) + 0.1613976761032884305e19 / 0.7963657098519931984e19 * c(N-2) - 0.198407225513315475e18 / 0.7963657098519931984e19 * c(N-1) -0.1328188692663e13 / 0.37594290333616e14 * c(N-2) + 0.2226377963775e13 / 0.37594290333616e14 * c(N-1) - 0.8673e4 / 0.363014e6 * c(N-3) c(N-3) / 0.49e2 + 0.49579087e8 / 0.10149031312e11 * c(N-2) - 0.256702175e9 / 0.10149031312e11 * c(N-1);... + 48/(49)*(-0.368395e6 / 0.2230716e7 * c(N-4) + c(N-5) / 0.8e1 + 0.48866620889e11 / 0.404890569012e12 * c(N-3) + 0.752806667e9 / 0.539854092016e12 * c(N-2) + 0.752806667e9 / 0.539854092016e12 * c(N-1)) 48/(49)*(-c(N-5) / 0.6e1 - 0.4959271814984644613e19 / 0.20965546238960637264e20 * c(N-2) - 0.375177e6 / 0.743572e6 * c(N-4) - 0.13425842714e11 / 0.33740880751e11 * c(N-3) - 0.193247108773400725e18 / 0.6988515412986879088e19 * c(N-1)) 48/(49)*(c(N-5) / 0.24e2 + 0.1869103e7 / 0.2230716e7 * c(N-4) + 0.507284006600757858213e21 / 0.475219048083107777984e21 * c(N-2) + 0.3e1 / 0.1088e4 * c(N) + 0.31688435395e11 / 0.67481761502e11 * c(N-3) + 0.27769176016102795561e20 / 0.712828572124661666976e21 * c(N-1)) 48/(49)*(-0.125059e6 / 0.743572e6 * c(N-4) + c(N) / 0.136e3 - 0.23099342648e11 / 0.101222642253e12 * c(N-3) - 0.4836340090442187227e19 / 0.5525802884687299744e19 * c(N-2) + 0.193950157930938693e18 / 0.5525802884687299744e19 * c(N-1)) 48/(49)*(0.260297319232891e15 / 0.2556411742685888e16 * c(N-2) - 0.59e2 / 0.1088e4 * c(N) - 0.106641839640553e15 / 0.1278205871342944e16 * c(N-1) + 0.26019e5 / 0.726028e6 * c(N-3)) 48/(49)*(-0.1244724001e10 / 0.21126554976e11 * c(N-2) + 0.3e1 / 0.68e2 * c(N) + 0.752806667e9 / 0.21126554976e11 * c(N-1));... + 48/(43)*(-0.3391e4 / 0.6692148e7 * c(N-4) - 0.238797444493e12 / 0.119037827289528e15 * c(N-3) + 0.33235054191e11 / 0.26452850508784e14 * c(N-2) + 0.33235054191e11 / 0.26452850508784e14 * c(N-1)) 48/(43)*(-0.365281640980e12 / 0.1653303156799e13 * c(N-3) + 0.564461e6 / 0.4461432e7 * c(N-4) + 0.1613976761032884305e19 / 0.7963657098519931984e19 * c(N-2) - 0.198407225513315475e18 / 0.7963657098519931984e19 * c(N-1)) 48/(43)*(-0.125059e6 / 0.743572e6 * c(N-4) + c(N) / 0.136e3 - 0.23099342648e11 / 0.101222642253e12 * c(N-3) - 0.4836340090442187227e19 / 0.5525802884687299744e19 * c(N-2) + 0.193950157930938693e18 / 0.5525802884687299744e19 * c(N-1)) 48/(43)*(0.564461e6 / 0.13384296e8 * c(N-4) + 0.470299699916357e15 / 0.952302618316224e15 * c(N-3) + 0.550597048646198778781e21 / 0.1624586048098066124736e22 * c(N-1) + c(N) / 0.51e2 + 0.378288882302546512209e21 / 0.270764341349677687456e21 * c(N-2)) 48/(43)*(-0.59e2 / 0.408e3 * c(N) - 0.29294615794607e14 / 0.29725717938208e14 * c(N-2) - 0.2234477713167e13 / 0.29725717938208e14 * c(N-1) - 0.8673e4 / 0.363014e6 * c(N-3)) 48/(43)*(-0.59e2 / 0.3136e4 * c(N-3) - 0.13249937023e11 / 0.48148892736e11 * c(N-1) + 0.2e1 / 0.17e2 * c(N) + 0.2083938599e10 / 0.8024815456e10 * c(N-2));... + 48/(59)*(-0.8673e4 / 0.2904112e7 * c(N-2) - 0.8673e4 / 0.2904112e7 * c(N-1) + 0.8673e4 / 0.1452056e7 * c(N-3)) 48/(59)*(-0.1328188692663e13 / 0.37594290333616e14 * c(N-2) + 0.2226377963775e13 / 0.37594290333616e14 * c(N-1) - 0.8673e4 / 0.363014e6 * c(N-3)) 48/(59)*(0.260297319232891e15 / 0.2556411742685888e16 * c(N-2) - 0.59e2 / 0.1088e4 * c(N) - 0.106641839640553e15 / 0.1278205871342944e16 * c(N-1) + 0.26019e5 / 0.726028e6 * c(N-3)) 48/(59)*(-0.59e2 / 0.408e3 * c(N) - 0.29294615794607e14 / 0.29725717938208e14 * c(N-2) - 0.2234477713167e13 / 0.29725717938208e14 * c(N-1) - 0.8673e4 / 0.363014e6 * c(N-3)) 48/(59)*(0.9258282831623875e16 / 0.7669235228057664e16 * c(N-2) + 0.3481e4 / 0.3264e4 * c(N) + 0.228389721191751e15 / 0.1278205871342944e16 * c(N-1) + 0.8673e4 / 0.1452056e7 * c(N-3)) 48/(59)*(-0.6025413881e10 / 0.21126554976e11 * c(N-2) - 0.59e2 / 0.68e2 * c(N) - 0.537416663e9 / 0.7042184992e10 * c(N-1));... + 48/(17)*(-c(N-3) / 0.392e3 + c(N-2) / 0.784e3 + c(N-1) / 0.784e3) 48/(17)*(c(N-3) / 0.49e2 + 0.49579087e8 / 0.10149031312e11 * c(N-2) - 0.256702175e9 / 0.10149031312e11 * c(N-1)) 48/(17)*(-0.1244724001e10 / 0.21126554976e11 * c(N-2) + 0.3e1 / 0.68e2 * c(N) + 0.752806667e9 / 0.21126554976e11 * c(N-1)) 48/(17)*(-0.59e2 / 0.3136e4 * c(N-3) - 0.13249937023e11 / 0.48148892736e11 * c(N-1) + 0.2e1 / 0.17e2 * c(N) + 0.2083938599e10 / 0.8024815456e10 * c(N-2)) 48/(17)*(-0.6025413881e10 / 0.21126554976e11 * c(N-2) - 0.59e2 / 0.68e2 * c(N) - 0.537416663e9 / 0.7042184992e10 * c(N-1)) 48/(17)*(0.3e1 / 0.3136e4 * c(N-3) + 0.27010400129e11 / 0.345067064608e12 * c(N-2) + 0.234566387291e12 / 0.690134129216e12 * c(N-1) + 0.12e2 / 0.17e2 * c(N))]; + + + + R = sparse(M,1); + R(1:24) = reshape(U(1:4,:)',24,1); + R(25:30) = U(5,:); + R(31) = -c(5+1) / 0.6e1 + c(5) / 0.8e1 + c(5+2) / 0.8e1; + R(32:37) = U(6,:); + R(38:39) = [-c(6-1) / 0.6e1 - c(6+2) / 0.6e1 - c(6) / 0.2e1 - c(6+1) / 0.2e1;... + -c(6+1) / 0.6e1 + c(6) / 0.8e1 + c(6+2) / 0.8e1]; + + R(M-38:M-37) = [-c(N-6) / 0.6e1 + c(N-7) / 0.8e1 + c(N-5) / 0.8e1;... + -c(N-7) / 0.6e1 - c(N-4) / 0.6e1 - c(N-6) / 0.2e1 - c(N-5) / 0.2e1]; + R(M-36:M-31) = L(1,:); + R(M-30) = -c(N-5) / 0.6e1 + c(N-6) / 0.8e1 + c(N-4) / 0.8e1; + R(M-29:M-24) = L(2,:); + R(M-23:M) = reshape(L(3:6,:)',24,1); + + for i=7:N-6 + R(40+(i-7)*5:44+(i-7)*5) = [-c(i-1) / 0.6e1 + c(i-2) / 0.8e1 + c(i) / 0.8e1,... + -c(i-2) / 0.6e1 - c(i+1) / 0.6e1 - c(i-1) / 0.2e1 - c(i) / 0.2e1,... + c(i-2) / 0.24e2 + 0.5e1 / 0.6e1 * c(i-1) + 0.5e1 / 0.6e1 * c(i+1) + c(i+2) / 0.24e2 + 0.3e1 / 0.4e1 * c(i),... + -c(i-1) / 0.6e1 - c(i+2) / 0.6e1 - c(i) / 0.2e1 - c(i+1) / 0.2e1,... + -c(i+1) / 0.6e1 + c(i) / 0.8e1 + c(i+2) / 0.8e1]; + end + + R = R/h/h; + D2 = -R; + D2(1:4) = -48/17/h/h*[c(1)*(-11/6);c(1)*3;c(1)*(-3/2);c(1)*1/3] + D2(1:4); + D2(M-3:M) = -48/17/h/h*[c(N)*1/3;c(N)*(-3/2);c(N)*3;c(N)*(-11/6)] + D2(M-3:M); + + + +% BS = sparse(N,N); +% BS(1,1:4) = -c(1)*1/h*[(-11/6);3;(-3/2);1/3]; +% BS(N,N-3:N) = c(N)*1/h*[(-1/3);3/2;(-3);11/6]; +% BS = sparse(BS); + + % %%Row and column indices%% + M = 78+(N-12)*5; + rows = [kron([1;2;3;4],ones(6,1));... + 5*ones(7,1);... + 6*ones(8,1);... + kron((7:N-6)',ones(5,1));... + (N-5)*ones(8,1);... + (N-4)*ones(7,1);... + kron([N-3;N-2;N-1;N],ones(6,1))]; + + cols = sparse(M,1); + cols(1:24) = kron(ones(4,1),[1;2;3;4;5;6]); + cols(25:39) = [(1:7)';(1:8)']; + cols(M-23:M) = kron(ones(4,1),[N-5;N-4;N-3;N-2;N-1;N]); + cols(M-38:M-24) = [(N-7:N)';(N-6:N)']; + for i=7:N-6 + cols(40+(i-7)*5:44+(i-7)*5) = [i-2;i-1;i;i+1;i+2]; + end + D2 = sparse(rows,cols,D2); + end + D2 = @D2_fun; +end \ No newline at end of file
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/+implementations/d4_4.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/+sbp/+implementations/d4_4.m Mon Sep 12 12:53:02 2016 +0200 @@ -0,0 +1,170 @@ +function [H, HI, D1, D2, D3, D4, e_1, e_m, M, ... + M4,Q, Q3, S2_1, S2_m, S3_1, S3_m, S_1, S_m] = d4_4(m,h) + + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + %%% 4:de ordn. SBP Finita differens %%% + %%% operatorer framtagna av Ken Mattsson %%% + %%% %%% + %%% 6 randpunkter, diagonal norm %%% + %%% %%% + %%% Datum: 2013-11-11 %%% + %%% %%% + %%% %%% + %%% H (Normen) %%% + %%% D1 (approx f?rsta derivatan) %%% + %%% D2 (approx andra derivatan) %%% + %%% D3 (approx tredje derivatan) %%% + %%% D2 (approx fj?rde derivatan) %%% + %%% %%% + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + % M?ste ange antal punkter (m) och stegl?ngd (h) + % Notera att dessa opetratorer ?r framtagna f?r att anv?ndas n?r + % vi har 3de och 4de derivator i v?r PDE + % I annat fall anv?nd de "traditionella" som har noggrannare + % randsplutningar f?r D1 och D2 + + % Vi b?rjar med normen. Notera att alla SBP operatorer delar samma norm, + % vilket ?r n?dv?ndigt f?r stabilitet + + BP = 6; + if(m<2*BP) + error(['Operator requires at least ' num2str(2*BP) ' grid points']); + end + + H=speye(m,m); + H_U=[0.35809e5 / 0.100800e6 0 0 0 0 0; 0 0.13297e5 / 0.11200e5 0 0 0 0; 0 0 0.5701e4 / 0.5600e4 0 0 0; 0 0 0 0.45109e5 / 0.50400e5 0 0; 0 0 0 0 0.35191e5 / 0.33600e5 0; 0 0 0 0 0 0.33503e5 / 0.33600e5;]; + + H(1:6,1:6)=H_U; + H(m-5:m,m-5:m)=rot90(H_U,2); + H=H*h; + HI=inv(H); + + + % First derivative SBP operator, 1st order accurate at first 6 boundary points + +% q2=-1/12;q1=8/12; +% Q=q2*(diag(ones(m-2,1),2) - diag(ones(m-2,1),-2))+q1*(diag(ones(m-1,1),1)-diag(ones(m-1,1),-1)); + e=ones(m,1); + Q=spdiags([e -8*e 0*e 8*e -e], -2:2, m, m)/12; + + %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.526249e6 / 0.907200e6 -0.10819e5 / 0.777600e6 -0.50767e5 / 0.907200e6 -0.631e3 / 0.28800e5 0.91e2 / 0.7776e4; -0.526249e6 / 0.907200e6 0 0.1421209e7 / 0.2721600e7 0.16657e5 / 0.201600e6 -0.8467e4 / 0.453600e6 -0.33059e5 / 0.5443200e7; 0.10819e5 / 0.777600e6 -0.1421209e7 / 0.2721600e7 0 0.631187e6 / 0.1360800e7 0.400139e6 / 0.5443200e7 -0.8789e4 / 0.302400e6; 0.50767e5 / 0.907200e6 -0.16657e5 / 0.201600e6 -0.631187e6 / 0.1360800e7 0 0.496403e6 / 0.907200e6 -0.308533e6 / 0.5443200e7; 0.631e3 / 0.28800e5 0.8467e4 / 0.453600e6 -0.400139e6 / 0.5443200e7 -0.496403e6 / 0.907200e6 0 0.1805647e7 / 0.2721600e7; -0.91e2 / 0.7776e4 0.33059e5 / 0.5443200e7 0.8789e4 / 0.302400e6 0.308533e6 / 0.5443200e7 -0.1805647e7 / 0.2721600e7 0;]; + Q(1:6,1:6)=Q_U; + Q(m-5:m,m-5:m)=rot90( -Q_U ,2 ); + + e_1=sparse(m,1);e_1(1)=1; + e_m=sparse(m,1);e_m(m)=1; + + + D1=H\(Q-1/2*(e_1*e_1')+1/2*(e_m*e_m')) ; + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + + + % Second derivative, 1st order accurate at first 6 boundary points +% m2=1/12;m1=-16/12;m0=30/12; +% M=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); + %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)); + M=-spdiags([-e 16*e -30*e 16*e -e], -2:2, m, m)/12; + M_U=[0.2386127e7 / 0.2177280e7 -0.515449e6 / 0.453600e6 -0.10781e5 / 0.777600e6 0.61567e5 / 0.1360800e7 0.6817e4 / 0.403200e6 -0.1069e4 / 0.136080e6; -0.515449e6 / 0.453600e6 0.4756039e7 / 0.2177280e7 -0.1270009e7 / 0.1360800e7 -0.3751e4 / 0.28800e5 0.3067e4 / 0.680400e6 0.119459e6 / 0.10886400e8; -0.10781e5 / 0.777600e6 -0.1270009e7 / 0.1360800e7 0.111623e6 / 0.60480e5 -0.555587e6 / 0.680400e6 -0.551339e6 / 0.5443200e7 0.8789e4 / 0.453600e6; 0.61567e5 / 0.1360800e7 -0.3751e4 / 0.28800e5 -0.555587e6 / 0.680400e6 0.1025327e7 / 0.544320e6 -0.464003e6 / 0.453600e6 0.222133e6 / 0.5443200e7; 0.6817e4 / 0.403200e6 0.3067e4 / 0.680400e6 -0.551339e6 / 0.5443200e7 -0.464003e6 / 0.453600e6 0.5074159e7 / 0.2177280e7 -0.1784047e7 / 0.1360800e7; -0.1069e4 / 0.136080e6 0.119459e6 / 0.10886400e8 0.8789e4 / 0.453600e6 0.222133e6 / 0.5443200e7 -0.1784047e7 / 0.1360800e7 0.1812749e7 / 0.725760e6;]; + + M(1:6,1:6)=M_U; + + M(m-5:m,m-5:m)=rot90( M_U ,2 ); + M=M/h; + + 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=sparse(1,m); + + S_m(m-3:m)=fliplr(-S_U); + + D2=H\(-M-e_1*S_1+e_m*S_m); + + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + + + % Third derivative, 1st order accurate at first 6 boundary points + + q3=-1/8;q2=1;q1=-13/8; +% Q3=q3*(diag(ones(m-3,1),3)-diag(ones(m-3,1),-3))+q2*(diag(ones(m-2,1),2)-diag(ones(m-2,1),-2))+q1*(diag(ones(m-1,1),1)-diag(ones(m-1,1),-1)); + diags = -3:3; + stencil = [-q3,-q2,-q1,0,q1,q2,q3]; + Q3 = stripeMatrix(stencil, diags, m); + + %QQ3=(-1/8*diag(ones(m-3,1),3) + 1*diag(ones(m-2,1),2) - 13/8*diag(ones(m-1,1),1) +13/8*diag(ones(m-1,1),-1) -1*diag(ones(m-2,1),-2) + 1/8*diag(ones(m-3,1),-3)); + + + Q3_U = [0 -0.88471e5 / 0.67200e5 0.58139e5 / 0.33600e5 -0.1167e4 / 0.2800e4 -0.89e2 / 0.11200e5 0.7e1 / 0.640e3; 0.88471e5 / 0.67200e5 0 -0.43723e5 / 0.16800e5 0.46783e5 / 0.33600e5 -0.191e3 / 0.3200e4 -0.1567e4 / 0.33600e5; -0.58139e5 / 0.33600e5 0.43723e5 / 0.16800e5 0 -0.4049e4 / 0.2400e4 0.29083e5 / 0.33600e5 -0.71e2 / 0.1400e4; 0.1167e4 / 0.2800e4 -0.46783e5 / 0.33600e5 0.4049e4 / 0.2400e4 0 -0.8591e4 / 0.5600e4 0.10613e5 / 0.11200e5; 0.89e2 / 0.11200e5 0.191e3 / 0.3200e4 -0.29083e5 / 0.33600e5 0.8591e4 / 0.5600e4 0 -0.108271e6 / 0.67200e5; -0.7e1 / 0.640e3 0.1567e4 / 0.33600e5 0.71e2 / 0.1400e4 -0.10613e5 / 0.11200e5 0.108271e6 / 0.67200e5 0;]; + + Q3(1:6,1:6)=Q3_U; + Q3(m-5:m,m-5:m)=rot90( -Q3_U ,2 ); + Q3=Q3/h^2; + + + + S2_U=[2 -5 4 -1;]/h^2; + S2_1=sparse(1,m); + S2_1(1:4)=S2_U; + S2_m=sparse(1,m); + S2_m(m-3:m)=fliplr(S2_U); + + + + D3=H\(Q3 - e_1*S2_1 + e_m*S2_m +1/2*(S_1'*S_1) -1/2*(S_m'*S_m) ) ; + + % Fourth derivative, 0th order accurate at first 6 boundary points (still + % yield 4th order convergence if stable: for example u_tt=-u_xxxx + + 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); + diags = -3:3; + left_stencil = [m3,m2,m1]; + stencil = [left_stencil,m0,fliplr(left_stencil)]; + M4 = stripeMatrix(stencil, diags, m); + + %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.4596181e7 / 0.1814400e7 -0.10307743e8 / 0.1814400e7 0.160961e6 / 0.43200e5 -0.535019e6 / 0.907200e6 0.109057e6 / 0.1814400e7 -0.29273e5 / 0.604800e6; -0.10307743e8 / 0.1814400e7 0.8368543e7 / 0.604800e6 -0.9558943e7 / 0.907200e6 0.2177057e7 / 0.907200e6 -0.11351e5 / 0.86400e5 0.204257e6 / 0.1814400e7; 0.160961e6 / 0.43200e5 -0.9558943e7 / 0.907200e6 0.4938581e7 / 0.453600e6 -0.786473e6 / 0.151200e6 0.1141057e7 / 0.907200e6 -0.120619e6 / 0.907200e6; -0.535019e6 / 0.907200e6 0.2177057e7 / 0.907200e6 -0.786473e6 / 0.151200e6 0.3146581e7 / 0.453600e6 -0.4614143e7 / 0.907200e6 0.24587e5 / 0.14400e5; 0.109057e6 / 0.1814400e7 -0.11351e5 / 0.86400e5 0.1141057e7 / 0.907200e6 -0.4614143e7 / 0.907200e6 0.185709e6 / 0.22400e5 -0.11293343e8 / 0.1814400e7; -0.29273e5 / 0.604800e6 0.204257e6 / 0.1814400e7 -0.120619e6 / 0.907200e6 0.24587e5 / 0.14400e5 -0.11293343e8 / 0.1814400e7 0.16787381e8 / 0.1814400e7;]; + + M4(1:6,1:6)=M4_U; + + M4(m-5:m,m-5:m)=rot90( M4_U ,2 ); + M4=M4/h^3; + + S3_U=[-1 3 -3 1;]/h^3; + S3_1=sparse(1,m); + S3_1(1:4)=S3_U; + S3_m=sparse(1,m); + S3_m(m-3:m)=fliplr(-S3_U); + + D4=H\(M4-e_1*S3_1+e_m*S3_m + S_1'*S2_1-S_m'*S2_m); + + + % L=h*(m-1); + % + % x1=linspace(0,L,m)'; + % x2=x1.^2/fac(2); + % x3=x1.^3/fac(3); + % x4=x1.^4/fac(4); + % x5=x1.^5/fac(5); + % + % x0=x1.^0/fac(1); + + S_1 = S_1'; + S2_1 = S2_1'; + S3_1 = S3_1'; + S_m = S_m'; + S2_m = S2_m'; + S3_m = S3_m'; + + + +end
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/+implementations/d4_6.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/+sbp/+implementations/d4_6.m Mon Sep 12 12:53:02 2016 +0200 @@ -0,0 +1,168 @@ +function [H, HI, D1, D2, D3, D4, e_1, e_m, M, M4,Q, Q3,... + S2_1, S2_m, S3_1, S3_m, S_1, S_m] = d4_6(m,h) + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + %%% 4:de ordn. SBP Finita differens %%% + %%% operatorer framtagna av Ken Mattsson %%% + %%% %%% + %%% 6 randpunkter, diagonal norm %%% + %%% %%% + %%% Datum: 2013-11-11 %%% + %%% %%% + %%% %%% + %%% H (Normen) %%% + %%% D1 (approx f?rsta derivatan) %%% + %%% D2 (approx andra derivatan) %%% + %%% D3 (approx tredje derivatan) %%% + %%% D2 (approx fj?rde derivatan) %%% + %%% %%% + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + % M?ste ange antal punkter (m) och stegl?ngd (h) + % Notera att dessa opetratorer ?r framtagna f?r att anv?ndas n?r + % vi har 3de och 4de derivator i v?r PDE + % I annat fall anv?nd de "traditionella" som har noggrannare + % randsplutningar f?r D1 och D2 + + % Vi b?rjar med normen. Notera att alla SBP operatorer delar samma norm, + % vilket ?r n?dv?ndigt f?r stabilitet + + BP = 8; + if(m<2*BP) + error(['Operator requires at least ' num2str(2*BP) ' grid points']); + end + + H=speye(m,m); + H_U=[0.318365e6 / 0.1016064e7 0 0 0 0 0 0 0; 0 0.145979e6 / 0.103680e6 0 0 0 0 0 0; 0 0 0.139177e6 / 0.241920e6 0 0 0 0 0; 0 0 0 0.964969e6 / 0.725760e6 0 0 0 0; 0 0 0 0 0.593477e6 / 0.725760e6 0 0 0; 0 0 0 0 0 0.52009e5 / 0.48384e5 0 0; 0 0 0 0 0 0 0.141893e6 / 0.145152e6 0; 0 0 0 0 0 0 0 0.1019713e7 / 0.1016064e7;]; + + H(1:8,1:8)=H_U; + H(m-7:m,m-7:m)=rot90(H_U,2); + H=H*h; + HI=inv(H); + + + % First derivative SBP operator, 1st order accurate at first 6 boundary points + +% q3=1/60;q2=-3/20;q1=3/4; +% Q=q3*(diag(ones(m-3,1),3) - diag(ones(m-3,1),-3))+q2*(diag(ones(m-2,1),2) - diag(ones(m-2,1),-2))+q1*(diag(ones(m-1,1),1)-diag(ones(m-1,1),-1)); + diags = -3:3; + stencil = [-1/60,3/20,-3/4,0,3/4,-3/20,1/60]; + Q = stripeMatrix(stencil, diags, m); + + Q_U = [0 0.1547358409e10 / 0.2421619200e10 -0.422423e6 / 0.11211200e8 -0.1002751721e10 / 0.8717829120e10 -0.15605263e8 / 0.484323840e9 0.1023865e7 / 0.24216192e8 0.291943739e9 / 0.21794572800e11 -0.24659e5 / 0.2534400e7; -0.1547358409e10 / 0.2421619200e10 0 0.23031829e8 / 0.62899200e8 0.10784027e8 / 0.34594560e8 0.2859215e7 / 0.31135104e8 -0.45982103e8 / 0.345945600e9 -0.26681e5 / 0.1182720e7 0.538846039e9 / 0.21794572800e11; 0.422423e6 / 0.11211200e8 -0.23031829e8 / 0.62899200e8 0 0.28368209e8 / 0.69189120e8 -0.9693137e7 / 0.69189120e8 0.1289363e7 / 0.17740800e8 -0.39181e5 / 0.5491200e7 -0.168647e6 / 0.24216192e8; 0.1002751721e10 / 0.8717829120e10 -0.10784027e8 / 0.34594560e8 -0.28368209e8 / 0.69189120e8 0 0.5833151e7 / 0.10644480e8 0.4353179e7 / 0.69189120e8 0.2462459e7 / 0.155675520e9 -0.215471e6 / 0.10762752e8; 0.15605263e8 / 0.484323840e9 -0.2859215e7 / 0.31135104e8 0.9693137e7 / 0.69189120e8 -0.5833151e7 / 0.10644480e8 0 0.7521509e7 / 0.13837824e8 -0.1013231e7 / 0.11531520e8 0.103152839e9 / 0.8717829120e10; -0.1023865e7 / 0.24216192e8 0.45982103e8 / 0.345945600e9 -0.1289363e7 / 0.17740800e8 -0.4353179e7 / 0.69189120e8 -0.7521509e7 / 0.13837824e8 0 0.67795697e8 / 0.98841600e8 -0.17263733e8 / 0.151351200e9; -0.291943739e9 / 0.21794572800e11 0.26681e5 / 0.1182720e7 0.39181e5 / 0.5491200e7 -0.2462459e7 / 0.155675520e9 0.1013231e7 / 0.11531520e8 -0.67795697e8 / 0.98841600e8 0 0.1769933569e10 / 0.2421619200e10; 0.24659e5 / 0.2534400e7 -0.538846039e9 / 0.21794572800e11 0.168647e6 / 0.24216192e8 0.215471e6 / 0.10762752e8 -0.103152839e9 / 0.8717829120e10 0.17263733e8 / 0.151351200e9 -0.1769933569e10 / 0.2421619200e10 0;]; + + Q(1:8,1:8)=Q_U; + Q(m-7:m,m-7:m)=rot90( -Q_U ,2 ); + + e_1=sparse(m,1);e_1(1)=1; + e_m=sparse(m,1);e_m(m)=1; + + + D1=H\(Q-1/2*(e_1*e_1')+1/2*(e_m*e_m')) ; + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + + + % Second derivative, 1st order accurate at first 6 boundary points + m3=-1/90;m2=3/20;m1=-3/2;m0=49/18; + +% M=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); + diags = -3:3; + stencil = [m3,m2,m1,m0,m1,m2,m3]; + M = stripeMatrix(stencil, diags, m); + + M_U=[0.4347276223e10 / 0.3736212480e10 -0.1534657609e10 / 0.1210809600e10 0.68879e5 / 0.3057600e7 0.1092927401e10 / 0.13076743680e11 0.18145423e8 / 0.968647680e9 -0.1143817e7 / 0.60540480e8 -0.355447739e9 / 0.65383718400e11 0.56081e5 / 0.16473600e8; -0.1534657609e10 / 0.1210809600e10 0.42416226217e11 / 0.18681062400e11 -0.228654119e9 / 0.345945600e9 -0.12245627e8 / 0.34594560e8 -0.2995295e7 / 0.46702656e8 0.52836503e8 / 0.691891200e9 0.119351e6 / 0.12812800e8 -0.634102039e9 / 0.65383718400e11; 0.68879e5 / 0.3057600e7 -0.228654119e9 / 0.345945600e9 0.5399287e7 / 0.4193280e7 -0.24739409e8 / 0.34594560e8 0.7878737e7 / 0.69189120e8 -0.1917829e7 / 0.31449600e8 0.39727e5 / 0.3660800e7 0.10259e5 / 0.4656960e7; 0.1092927401e10 / 0.13076743680e11 -0.12245627e8 / 0.34594560e8 -0.24739409e8 / 0.34594560e8 0.7780367599e10 / 0.3736212480e10 -0.70085363e8 / 0.69189120e8 -0.500209e6 / 0.6289920e7 -0.311543e6 / 0.17962560e8 0.278191e6 / 0.21525504e8; 0.18145423e8 / 0.968647680e9 -0.2995295e7 / 0.46702656e8 0.7878737e7 / 0.69189120e8 -0.70085363e8 / 0.69189120e8 0.7116321131e10 / 0.3736212480e10 -0.545081e6 / 0.532224e6 0.811631e6 / 0.11531520e8 -0.84101639e8 / 0.13076743680e11; -0.1143817e7 / 0.60540480e8 0.52836503e8 / 0.691891200e9 -0.1917829e7 / 0.31449600e8 -0.500209e6 / 0.6289920e7 -0.545081e6 / 0.532224e6 0.324760747e9 / 0.138378240e9 -0.65995697e8 / 0.49420800e8 0.1469203e7 / 0.13759200e8; -0.355447739e9 / 0.65383718400e11 0.119351e6 / 0.12812800e8 0.39727e5 / 0.3660800e7 -0.311543e6 / 0.17962560e8 0.811631e6 / 0.11531520e8 -0.65995697e8 / 0.49420800e8 0.48284442317e11 / 0.18681062400e11 -0.1762877569e10 / 0.1210809600e10; 0.56081e5 / 0.16473600e8 -0.634102039e9 / 0.65383718400e11 0.10259e5 / 0.4656960e7 0.278191e6 / 0.21525504e8 -0.84101639e8 / 0.13076743680e11 0.1469203e7 / 0.13759200e8 -0.1762877569e10 / 0.1210809600e10 0.10117212851e11 / 0.3736212480e10;]; + + M(1:8,1:8)=M_U; + + M(m-7:m,m-7:m)=rot90( M_U ,2 ); + M=M/h; + + S_U=[-0.25e2 / 0.12e2 4 -3 0.4e1 / 0.3e1 -0.1e1 / 0.4e1;]/h; + S_1=sparse(1,m); + S_1(1:5)=S_U; + S_m=sparse(1,m); + + S_m(m-4:m)=fliplr(-S_U); + + D2=H\(-M-e_1*S_1+e_m*S_m); + + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + + + % Third derivative, 1st order accurate at first 6 boundary points + + q4=7/240;q3=-3/10;q2=169/120;q1=-61/30; +% Q3=q4*(diag(ones(m-4,1),4)-diag(ones(m-4,1),-4))+q3*(diag(ones(m-3,1),3)-diag(ones(m-3,1),-3))+q2*(diag(ones(m-2,1),2)-diag(ones(m-2,1),-2))+q1*(diag(ones(m-1,1),1)-diag(ones(m-1,1),-1)); + diags = -4:4; + stencil = [-q4,-q3,-q2,-q1,0,q1,q2,q3,q4]; + Q3 = stripeMatrix(stencil, diags, m); + %QQ3=(-1/8*diag(ones(m-3,1),3) + 1*diag(ones(m-2,1),2) - 13/8*diag(ones(m-1,1),1) +13/8*diag(ones(m-1,1),-1) -1*diag(ones(m-2,1),-2) + 1/8*diag(ones(m-3,1),-3)); + + + Q3_U = [0 -0.10882810591e11 / 0.5811886080e10 0.398713069e9 / 0.132088320e9 -0.1746657571e10 / 0.1162377216e10 0.56050639e8 / 0.145297152e9 -0.11473393e8 / 0.1162377216e10 -0.38062741e8 / 0.1452971520e10 0.30473e5 / 0.4392960e7; 0.10882810591e11 / 0.5811886080e10 0 -0.3720544343e10 / 0.830269440e9 0.767707019e9 / 0.207567360e9 -0.1047978301e10 / 0.830269440e9 0.1240729e7 / 0.14826240e8 0.6807397e7 / 0.55351296e8 -0.50022767e8 / 0.1452971520e10; -0.398713069e9 / 0.132088320e9 0.3720544343e10 / 0.830269440e9 0 -0.2870078009e10 / 0.830269440e9 0.74962049e8 / 0.29652480e8 -0.12944857e8 / 0.30750720e8 -0.17846623e8 / 0.103783680e9 0.68707591e8 / 0.1162377216e10; 0.1746657571e10 / 0.1162377216e10 -0.767707019e9 / 0.207567360e9 0.2870078009e10 / 0.830269440e9 0 -0.727867087e9 / 0.276756480e9 0.327603877e9 / 0.207567360e9 -0.175223717e9 / 0.830269440e9 0.1353613e7 / 0.726485760e9; -0.56050639e8 / 0.145297152e9 0.1047978301e10 / 0.830269440e9 -0.74962049e8 / 0.29652480e8 0.727867087e9 / 0.276756480e9 0 -0.1804641793e10 / 0.830269440e9 0.311038417e9 / 0.207567360e9 -0.1932566239e10 / 0.5811886080e10; 0.11473393e8 / 0.1162377216e10 -0.1240729e7 / 0.14826240e8 0.12944857e8 / 0.30750720e8 -0.327603877e9 / 0.207567360e9 0.1804641793e10 / 0.830269440e9 0 -0.1760949511e10 / 0.830269440e9 0.2105883973e10 / 0.1452971520e10; 0.38062741e8 / 0.1452971520e10 -0.6807397e7 / 0.55351296e8 0.17846623e8 / 0.103783680e9 0.175223717e9 / 0.830269440e9 -0.311038417e9 / 0.207567360e9 0.1760949511e10 / 0.830269440e9 0 -0.1081094773e10 / 0.528353280e9; -0.30473e5 / 0.4392960e7 0.50022767e8 / 0.1452971520e10 -0.68707591e8 / 0.1162377216e10 -0.1353613e7 / 0.726485760e9 0.1932566239e10 / 0.5811886080e10 -0.2105883973e10 / 0.1452971520e10 0.1081094773e10 / 0.528353280e9 0;]; + + Q3(1:8,1:8)=Q3_U; + Q3(m-7:m,m-7:m)=rot90( -Q3_U ,2 ); + Q3=Q3/h^2; + + + + S2_U=[0.35e2 / 0.12e2 -0.26e2 / 0.3e1 0.19e2 / 0.2e1 -0.14e2 / 0.3e1 0.11e2 / 0.12e2;]/h^2; + S2_1=sparse(1,m); + S2_1(1:5)=S2_U; + S2_m=sparse(1,m); + S2_m(m-4:m)=fliplr(S2_U); + + + + D3=H\(Q3 - e_1*S2_1 + e_m*S2_m +1/2*(S_1'*S_1) -1/2*(S_m'*S_m) ) ; + + % Fourth derivative, 0th order accurate at first 6 boundary points (still + % yield 4th order convergence if stable: for example u_tt=-u_xxxx + + m4=7/240;m3=-2/5;m2=169/60;m1=-122/15;m0=91/8; +% 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); + diags = -4:4; + left_stencil = [m4,m3,m2,m1]; + stencil = [left_stencil,m0,fliplr(left_stencil)]; + M4 = stripeMatrix(stencil, diags, m); + %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.40833734273e11 / 0.10761070320e11 -0.162181998421e12 / 0.16397821440e11 0.4696168417e10 / 0.521748864e9 -0.245714671483e12 / 0.68870850048e11 0.2185939219e10 / 0.2869618752e10 -0.15248255797e11 / 0.114784750080e12 0.345156907e9 / 0.12298366080e11 0.6388381e7 / 0.1093188096e10; -0.162181998421e12 / 0.16397821440e11 0.147281127041e12 / 0.5380535160e10 -0.3072614435609e13 / 0.114784750080e12 0.320122985851e12 / 0.28696187520e11 -0.768046031383e12 / 0.344354250240e12 0.7861605187e10 / 0.14348093760e11 -0.803762437e9 / 0.4251287040e10 0.167394281e9 / 0.86088562560e11; 0.4696168417e10 / 0.521748864e9 -0.3072614435609e13 / 0.114784750080e12 0.139712483333e12 / 0.4782697920e10 -0.1634124842747e13 / 0.114784750080e12 0.90855193447e11 / 0.28696187520e11 -0.26412188989e11 / 0.38261583360e11 0.668741173e9 / 0.1793511720e10 -0.132673781e9 / 0.2342545920e10; -0.245714671483e12 / 0.68870850048e11 0.320122985851e12 / 0.28696187520e11 -0.1634124842747e13 / 0.114784750080e12 0.437353997177e12 / 0.43044281280e11 -0.172873969321e12 / 0.38261583360e11 0.34759553483e11 / 0.28696187520e11 -0.98928859751e11 / 0.344354250240e12 0.295000207e9 / 0.3587023440e10; 0.2185939219e10 / 0.2869618752e10 -0.768046031383e12 / 0.344354250240e12 0.90855193447e11 / 0.28696187520e11 -0.172873969321e12 / 0.38261583360e11 0.126711914423e12 / 0.21522140640e11 -0.520477408939e12 / 0.114784750080e12 0.49581230003e11 / 0.28696187520e11 -0.99640101991e11 / 0.344354250240e12; -0.15248255797e11 / 0.114784750080e12 0.7861605187e10 / 0.14348093760e11 -0.26412188989e11 / 0.38261583360e11 0.34759553483e11 / 0.28696187520e11 -0.520477408939e12 / 0.114784750080e12 0.19422074929e11 / 0.2391348960e10 -0.772894368601e12 / 0.114784750080e12 0.10579712849e11 / 0.4099455360e10; 0.345156907e9 / 0.12298366080e11 -0.803762437e9 / 0.4251287040e10 0.668741173e9 / 0.1793511720e10 -0.98928859751e11 / 0.344354250240e12 0.49581230003e11 / 0.28696187520e11 -0.772894368601e12 / 0.114784750080e12 0.456715296239e12 / 0.43044281280e11 -0.915425403107e12 / 0.114784750080e12; 0.6388381e7 / 0.1093188096e10 0.167394281e9 / 0.86088562560e11 -0.132673781e9 / 0.2342545920e10 0.295000207e9 / 0.3587023440e10 -0.99640101991e11 / 0.344354250240e12 0.10579712849e11 / 0.4099455360e10 -0.915425403107e12 / 0.114784750080e12 0.488029542379e12 / 0.43044281280e11;]; + + M4(1:8,1:8)=M4_U; + + M4(m-7:m,m-7:m)=rot90( M4_U ,2 ); + M4=M4/h^3; + + S3_U=[-0.5e1 / 0.2e1 9 -12 7 -0.3e1 / 0.2e1;]/h^3; + S3_1=sparse(1,m); + S3_1(1:5)=S3_U; + S3_m=sparse(1,m); + S3_m(m-4:m)=fliplr(-S3_U); + + D4=H\(M4-e_1*S3_1+e_m*S3_m + S_1'*S2_1-S_m'*S2_m); + + +% L=h*(m-1); + + % x1=linspace(0,L,m)'; + % x2=x1.^2/fac(2); + % x3=x1.^3/fac(3); + % x4=x1.^4/fac(4); + % x5=x1.^5/fac(5); + + % x0=x1.^0/fac(1); + + S_1 = S_1'; + S2_1 = S2_1'; + S3_1 = S3_1'; + S_m = S_m'; + S2_m = S2_m'; + S3_m = S3_m'; + + +end
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/+implementations/d4_compatible_2.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/+sbp/+implementations/d4_compatible_2.m Mon Sep 12 12:53:02 2016 +0200 @@ -0,0 +1,161 @@ +function [H, HI, D1, D4, e_1, e_m, M4, Q, S2_1, S2_m,... + S3_1, S3_m, S_1, S_m] = d4_compatible_2(m,h) + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + %%% 4:de ordn. SBP Finita differens %%% + %%% operatorer framtagna av Ken Mattsson %%% + %%% %%% + %%% 6 randpunkter, diagonal norm %%% + %%% %%% + %%% Datum: 2013-11-11 %%% + %%% %%% + %%% %%% + %%% H (Normen) %%% + %%% D1 (approx f?rsta derivatan) %%% + %%% D2 (approx andra derivatan) %%% + %%% D3 (approx tredje derivatan) %%% + %%% D2 (approx fj?rde derivatan) %%% + %%% %%% + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + % M?ste ange antal punkter (m) och stegl?ngd (h) + % Notera att dessa opetratorer ?r framtagna f?r att anv?ndas n?r + % vi har 3de och 4de derivator i v?r PDE + % I annat fall anv?nd de "traditionella" som har noggrannare + % randsplutningar f?r D1 och D2 + + % Vi b?rjar med normen. Notera att alla SBP operatorer delar samma norm, + % vilket ?r n?dv?ndigt f?r stabilitet + + BP = 4; + if(m<2*BP) + error(['Operator requires at least ' num2str(2*BP) ' grid points']); + end + + H=speye(m,m);H(1,1)=1/2;H(m,m)=1/2; + + + H=H*h; + HI=inv(H); + + + % First derivative SBP operator, 1st order accurate at first 6 boundary points + + q1=1/2; +% Q=q1*(diag(ones(m-1,1),1)-diag(ones(m-1,1),-1)); + stencil = [-q1,0,q1]; + d = (length(stencil)-1)/2; + diags = -d:d; + Q = stripeMatrix(stencil, diags, m); + + %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)); + + + e_1=sparse(m,1);e_1(1)=1; + e_m=sparse(m,1);e_m(m)=1; + + + D1=H\(Q-1/2*(e_1*e_1')+1/2*(e_m*e_m')) ; + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + + + % Second derivative, 1st order accurate at first 6 boundary points +% m1=-1;m0=2; +% % M=m1*(diag(ones(m-1,1),1)+diag(ones(m-1,1),-1))+m0*diag(ones(m,1),0);M(1,1)=1;M(m,m)=1; +% stencil = [m2,m1,m0,m1,m2]; +% d = (length(stencil)-1)/2; +% diags = -d:d; +% M = stripeMatrix(stencil, diags, m); +% M=M/h; + + S_U=[-1 1]/h; + S_1=sparse(1,m); + S_1(1:2)=S_U; + S_m=sparse(1,m); + + S_m(m-1:m)=fliplr(-S_U); + +% D2=H\(-M-e_1*S_1+e_m*S_m); + + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + + + % Third derivative, 1st order accurate at first 6 boundary points + +% q2=1/2;q1=-1; +% % Q3=q2*(diag(ones(m-2,1),2)-diag(ones(m-2,1),-2))+q1*(diag(ones(m-1,1),1)-diag(ones(m-1,1),-1)); +% stencil = [-q2,-q1,0,q1,q2]; +% d = (length(stencil)-1)/2; +% diags = -d:d; +% Q3 = stripeMatrix(stencil, diags, m); + + %QQ3=(-1/8*diag(ones(m-3,1),3) + 1*diag(ones(m-2,1),2) - 13/8*diag(ones(m-1,1),1) +13/8*diag(ones(m-1,1),-1) -1*diag(ones(m-2,1),-2) + 1/8*diag(ones(m-3,1),-3)); + + +% Q3_U = [0 -0.2e1 / 0.5e1 0.3e1 / 0.10e2 0.1e1 / 0.10e2; 0.2e1 / 0.5e1 0 -0.7e1 / 0.10e2 0.3e1 / 0.10e2; -0.3e1 / 0.10e2 0.7e1 / 0.10e2 0 -0.9e1 / 0.10e2; -0.1e1 / 0.10e2 -0.3e1 / 0.10e2 0.9e1 / 0.10e2 0;]; +% Q3(1:4,1:4)=Q3_U; +% Q3(m-3:m,m-3:m)=rot90( -Q3_U ,2 ); +% Q3=Q3/h^2; + + + + S2_U=[1 -2 1;]/h^2; + S2_1=sparse(1,m); + S2_1(1:3)=S2_U; + S2_m=sparse(1,m); + S2_m(m-2:m)=fliplr(S2_U); + + + +% D3=H\(Q3 - e_1*S2_1 + e_m*S2_m +1/2*(S_1'*S_1) -1/2*(S_m'*S_m) ) ; + + % Fourth derivative, 0th order accurate at first 6 boundary points (still + % yield 4th order convergence if stable: for example u_tt=-u_xxxx + + m2=1;m1=-4;m0=6; + M4=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.4e1 / 0.5e1 -0.7e1 / 0.5e1 0.2e1 / 0.5e1 0.1e1 / 0.5e1; -0.7e1 / 0.5e1 0.16e2 / 0.5e1 -0.11e2 / 0.5e1 0.2e1 / 0.5e1; 0.2e1 / 0.5e1 -0.11e2 / 0.5e1 0.21e2 / 0.5e1 -0.17e2 / 0.5e1; 0.1e1 / 0.5e1 0.2e1 / 0.5e1 -0.17e2 / 0.5e1 0.29e2 / 0.5e1;]; + + M4(1:4,1:4)=M4_U; + + M4(m-3:m,m-3:m)=rot90( M4_U ,2 ); + M4=M4/h^3; + + S3_U=[-1 3 -3 1;]/h^3; + S3_1=sparse(1,m); + S3_1(1:4)=S3_U; + S3_m=sparse(1,m); + S3_m(m-3:m)=fliplr(-S3_U); + + D4=H\(M4-e_1*S3_1+e_m*S3_m + S_1'*S2_1-S_m'*S2_m); + + + + S_1 = S_1'; + S_m = S_m'; + S2_1 = S2_1'; + S2_m = S2_m'; + S3_1 = S3_1'; + S3_m = S3_m'; + + + + + % L=h*(m-1); + + % x1=linspace(0,L,m)'; + % x2=x1.^2/fac(2); + % x3=x1.^3/fac(3); + % x4=x1.^4/fac(4); + % x5=x1.^5/fac(5); + + % x0=x1.^0/fac(1); + + +end \ No newline at end of file
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/+implementations/d4_compatible_4.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/+sbp/+implementations/d4_compatible_4.m Mon Sep 12 12:53:02 2016 +0200 @@ -0,0 +1,163 @@ +function [H, HI, D1, D4, e_1, e_m, M4, Q, S2_1, S2_m,... + S3_1, S3_m, S_1, S_m] = d4_compatible_4(m,h) + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + %%% 4:de ordn. SBP Finita differens %%% + %%% operatorer framtagna av Ken Mattsson %%% + %%% %%% + %%% 6 randpunkter, diagonal norm %%% + %%% %%% + %%% Datum: 2013-11-11 %%% + %%% %%% + %%% %%% + %%% H (Normen) %%% + %%% D1 (approx f?rsta derivatan) %%% + %%% D2 (approx andra derivatan) %%% + %%% D3 (approx tredje derivatan) %%% + %%% D2 (approx fj?rde derivatan) %%% + %%% %%% + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + % M?ste ange antal punkter (m) och stegl?ngd (h) + % Notera att dessa opetratorer ?r framtagna f?r att anv?ndas n?r + % vi har 3de och 4de derivator i v?r PDE + % I annat fall anv?nd de "traditionella" som har noggrannare + % randsplutningar f?r D1 och D2 + + % Vi b?rjar med normen. Notera att alla SBP operatorer delar samma norm, + % vilket ?r n?dv?ndigt f?r stabilitet + + BP = 6; + if(m<2*BP) + error(['Operator requires at least ' num2str(2*BP) ' grid points']); + end + + H=speye(m,m); + H_U=[0.3e1 / 0.11e2 0 0 0 0 0; 0 0.2125516311e10 / 0.1311004640e10 0 0 0 0; 0 0 0.278735189e9 / 0.1966506960e10 0 0 0; 0 0 0 0.285925927e9 / 0.163875580e9 0 0; 0 0 0 0 0.1284335339e10 / 0.1966506960e10 0; 0 0 0 0 0 0.4194024163e10 / 0.3933013920e10;]; + H(1:6,1:6)=H_U; + H(m-5:m,m-5:m)=rot90(H_U,2); + H=H*h; + HI=inv(H); + + + % First derivative SBP operator, 1st order accurate at first 6 boundary points + + q2=-1/12;q1=8/12; +% Q=q2*(diag(ones(m-2,1),2) - diag(ones(m-2,1),-2))+q1*(diag(ones(m-1,1),1)-diag(ones(m-1,1),-1)); + stencil = [-q2,-q1,0,q1,q2]; + d = (length(stencil)-1)/2; + diags = -d:d; + Q = stripeMatrix(stencil, diags, m); + + %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.9e1 / 0.11e2 -0.9e1 / 0.22e2 0.1e1 / 0.11e2 0 0; -0.9e1 / 0.11e2 0 0.2595224893e10 / 0.2622009280e10 -0.151435707e9 / 0.327751160e9 0.1112665611e10 / 0.2622009280e10 -0.1290899e7 / 0.9639740e7; 0.9e1 / 0.22e2 -0.2595224893e10 / 0.2622009280e10 0 0.1468436423e10 / 0.983253480e9 -0.1194603401e10 / 0.983253480e9 0.72033031e8 / 0.238364480e9; -0.1e1 / 0.11e2 0.151435707e9 / 0.327751160e9 -0.1468436423e10 / 0.983253480e9 0 0.439819541e9 / 0.327751160e9 -0.215942641e9 / 0.983253480e9; 0 -0.1112665611e10 / 0.2622009280e10 0.1194603401e10 / 0.983253480e9 -0.439819541e9 / 0.327751160e9 0 0.1664113643e10 / 0.2622009280e10; 0 0.1290899e7 / 0.9639740e7 -0.72033031e8 / 0.238364480e9 0.215942641e9 / 0.983253480e9 -0.1664113643e10 / 0.2622009280e10 0;]; + Q(1:6,1:6)=Q_U; + Q(m-5:m,m-5:m)=rot90( -Q_U ,2 ); + + e_1=sparse(m,1);e_1(1)=1; + e_m=sparse(m,1);e_m(m)=1; + + + D1=H\(Q-1/2*(e_1*e_1')+1/2*(e_m*e_m')) ; + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + + + % % Second derivative, 1st order accurate at first 6 boundary points + % m2=1/12;m1=-16/12;m0=30/12; + % M=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); + % %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)); + % M_U=[0.2386127e7 / 0.2177280e7 -0.515449e6 / 0.453600e6 -0.10781e5 / 0.777600e6 0.61567e5 / 0.1360800e7 0.6817e4 / 0.403200e6 -0.1069e4 / 0.136080e6; -0.515449e6 / 0.453600e6 0.4756039e7 / 0.2177280e7 -0.1270009e7 / 0.1360800e7 -0.3751e4 / 0.28800e5 0.3067e4 / 0.680400e6 0.119459e6 / 0.10886400e8; -0.10781e5 / 0.777600e6 -0.1270009e7 / 0.1360800e7 0.111623e6 / 0.60480e5 -0.555587e6 / 0.680400e6 -0.551339e6 / 0.5443200e7 0.8789e4 / 0.453600e6; 0.61567e5 / 0.1360800e7 -0.3751e4 / 0.28800e5 -0.555587e6 / 0.680400e6 0.1025327e7 / 0.544320e6 -0.464003e6 / 0.453600e6 0.222133e6 / 0.5443200e7; 0.6817e4 / 0.403200e6 0.3067e4 / 0.680400e6 -0.551339e6 / 0.5443200e7 -0.464003e6 / 0.453600e6 0.5074159e7 / 0.2177280e7 -0.1784047e7 / 0.1360800e7; -0.1069e4 / 0.136080e6 0.119459e6 / 0.10886400e8 0.8789e4 / 0.453600e6 0.222133e6 / 0.5443200e7 -0.1784047e7 / 0.1360800e7 0.1812749e7 / 0.725760e6;]; + % + % M(1:6,1:6)=M_U; + % + % M(m-5:m,m-5: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=sparse(1,m); + S_1(1:4)=S_U; + S_m=sparse(1,m); + + S_m(m-3:m)=fliplr(-S_U); + + % D2=H\(-M-e_1*S_1+e_m*S_m); + + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + + + % Third derivative, 1st order accurate at first 6 boundary points + + % q3=-1/8;q2=1;q1=-13/8; + % Q3=q3*(diag(ones(m-3,1),3)-diag(ones(m-3,1),-3))+q2*(diag(ones(m-2,1),2)-diag(ones(m-2,1),-2))+q1*(diag(ones(m-1,1),1)-diag(ones(m-1,1),-1)); + % + % %QQ3=(-1/8*diag(ones(m-3,1),3) + 1*diag(ones(m-2,1),2) - 13/8*diag(ones(m-1,1),1) +13/8*diag(ones(m-1,1),-1) -1*diag(ones(m-2,1),-2) + 1/8*diag(ones(m-3,1),-3)); + % + % + % Q3_U = [0 -0.88471e5 / 0.67200e5 0.58139e5 / 0.33600e5 -0.1167e4 / 0.2800e4 -0.89e2 / 0.11200e5 0.7e1 / 0.640e3; 0.88471e5 / 0.67200e5 0 -0.43723e5 / 0.16800e5 0.46783e5 / 0.33600e5 -0.191e3 / 0.3200e4 -0.1567e4 / 0.33600e5; -0.58139e5 / 0.33600e5 0.43723e5 / 0.16800e5 0 -0.4049e4 / 0.2400e4 0.29083e5 / 0.33600e5 -0.71e2 / 0.1400e4; 0.1167e4 / 0.2800e4 -0.46783e5 / 0.33600e5 0.4049e4 / 0.2400e4 0 -0.8591e4 / 0.5600e4 0.10613e5 / 0.11200e5; 0.89e2 / 0.11200e5 0.191e3 / 0.3200e4 -0.29083e5 / 0.33600e5 0.8591e4 / 0.5600e4 0 -0.108271e6 / 0.67200e5; -0.7e1 / 0.640e3 0.1567e4 / 0.33600e5 0.71e2 / 0.1400e4 -0.10613e5 / 0.11200e5 0.108271e6 / 0.67200e5 0;]; + % + % Q3(1:6,1:6)=Q3_U; + % Q3(m-5:m,m-5:m)=flipud( fliplr( -Q3_U ) ); + % Q3=Q3/h^2; + + + + S2_U=[2 -5 4 -1;]/h^2; + S2_1=sparse(1,m); + S2_1(1:4)=S2_U; + S2_m=sparse(1,m); + S2_m(m-3:m)=fliplr(S2_U); + + + + %D3=H\(Q3 - e_1*S2_1 + e_m*S2_m +1/2*(S_1'*S_1) -1/2*(S_m'*S_m) ) ; + + % Fourth derivative, 0th order accurate at first 6 boundary points (still + % yield 4th order convergence if stable: for example u_tt=-u_xxxx + + 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); + + stencil = [m3,m2,m1,m0,m1,m2,m3]; + d = (length(stencil)-1)/2; + diags = -d:d; + M4 = stripeMatrix(stencil, diags, m); + + %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.227176919517319e15 / 0.94899692875680e14 -0.15262605263734e14 / 0.2965615402365e13 0.20205404771243e14 / 0.6778549491120e13 -0.3998303664097e13 / 0.23724923218920e14 0.1088305091927e13 / 0.94899692875680e14 -0.1686077077693e13 / 0.23724923218920e14; -0.15262605263734e14 / 0.2965615402365e13 0.280494781164181e15 / 0.23724923218920e14 -0.46417445546261e14 / 0.5931230804730e13 0.1705307929429e13 / 0.1694637372780e13 -0.553547394061e12 / 0.5931230804730e13 0.5615721694973e13 / 0.23724923218920e14; 0.20205404771243e14 / 0.6778549491120e13 -0.46417445546261e14 / 0.5931230804730e13 0.4135802350237e13 / 0.551742400440e12 -0.4140981465247e13 / 0.1078405600860e13 0.75538453067437e14 / 0.47449846437840e14 -0.4778134936391e13 / 0.11862461609460e14; -0.3998303664097e13 / 0.23724923218920e14 0.1705307929429e13 / 0.1694637372780e13 -0.4140981465247e13 / 0.1078405600860e13 0.20760974175677e14 / 0.2965615402365e13 -0.138330689701889e15 / 0.23724923218920e14 0.23711317526909e14 / 0.11862461609460e14; 0.1088305091927e13 / 0.94899692875680e14 -0.553547394061e12 / 0.5931230804730e13 0.75538453067437e14 / 0.47449846437840e14 -0.138330689701889e15 / 0.23724923218920e14 0.120223780251937e15 / 0.13557098982240e14 -0.151383731537477e15 / 0.23724923218920e14; -0.1686077077693e13 / 0.23724923218920e14 0.5615721694973e13 / 0.23724923218920e14 -0.4778134936391e13 / 0.11862461609460e14 0.23711317526909e14 / 0.11862461609460e14 -0.151383731537477e15 / 0.23724923218920e14 0.220304030094121e15 / 0.23724923218920e14;]; + + M4(1:6,1:6)=M4_U; + + M4(m-5:m,m-5:m)=rot90( M4_U ,2 ); + M4=M4/h^3; + + S3_U=[-1 3 -3 1;]/h^3; + S3_1=sparse(1,m); + S3_1(1:4)=S3_U; + S3_m=sparse(1,m); + S3_m(m-3:m)=fliplr(-S3_U); + + D4=H\(M4-e_1*S3_1+e_m*S3_m + S_1'*S2_1-S_m'*S2_m); + + S_1 = S_1'; + S_m = S_m'; + S2_1 = S2_1'; + S2_m = S2_m'; + S3_1 = S3_1'; + S3_m = S3_m'; + + % L=h*(m-1); + % + % x1=linspace(0,L,m)'; + % x2=x1.^2/fac(2); + % x3=x1.^3/fac(3); + % x4=x1.^4/fac(4); + % x5=x1.^5/fac(5); + % + % x0=x1.^0/fac(1); + +end
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/+implementations/d4_compatible_6.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/+sbp/+implementations/d4_compatible_6.m Mon Sep 12 12:53:02 2016 +0200 @@ -0,0 +1,161 @@ +function [H, HI, D1, D4, e_1, e_m, M4, Q, S2_1, S2_m,... + S3_1, S3_m, S_1, S_m] = d4_compatible_6(m,h) + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + %%% 4:de ordn. SBP Finita differens %%% + %%% operatorer framtagna av Ken Mattsson %%% + %%% %%% + %%% 6 randpunkter, diagonal norm %%% + %%% %%% + %%% Datum: 2013-11-11 %%% + %%% %%% + %%% %%% + %%% H (Normen) %%% + %%% D1 (approx f?rsta derivatan) %%% + %%% D2 (approx andra derivatan) %%% + %%% D3 (approx tredje derivatan) %%% + %%% D2 (approx fj?rde derivatan) %%% + %%% %%% + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + % M?ste ange antal punkter (m) och stegl?ngd (h) + % Notera att dessa opetratorer ?r framtagna f?r att anv?ndas n?r + % vi har 3de och 4de derivator i v?r PDE + % I annat fall anv?nd de "traditionella" som har noggrannare + % randsplutningar f?r D1 och D2 + + % Vi b?rjar med normen. Notera att alla SBP operatorer delar samma norm, + % vilket ?r n?dv?ndigt f?r stabilitet + + BP = 8; + if(m<2*BP) + error(['Operator requires at least ' num2str(2*BP) ' grid points']); + end + + H=speye(m,m); + H_U=[0.7493827e7 / 0.25401600e8 0 0 0 0 0 0 0; 0 0.5534051e7 / 0.3628800e7 0 0 0 0 0 0; 0 0 0.104561e6 / 0.403200e6 0 0 0 0 0; 0 0 0 0.260503e6 / 0.145152e6 0 0 0 0; 0 0 0 0 0.43237e5 / 0.103680e6 0 0 0; 0 0 0 0 0 0.514081e6 / 0.403200e6 0 0; 0 0 0 0 0 0 0.3356179e7 / 0.3628800e7 0; 0 0 0 0 0 0 0 0.25631027e8 / 0.25401600e8;]; + + H(1:8,1:8)=H_U; + H(m-7:m,m-7:m)=rot90(H_U,2); + H=H*h; + HI=inv(H); + + + % First derivative SBP operator, 3rd order accurate at first 8 boundary points + + q3=1/60;q2=-3/20;q1=3/4; +% Q=q3*(diag(ones(m-3,1),3) - diag(ones(m-3,1),-3))+q2*(diag(ones(m-2,1),2) - diag(ones(m-2,1),-2))+q1*(diag(ones(m-1,1),1)-diag(ones(m-1,1),-1)); + stencil = [-q3,-q2,-q1,0,q1,q2,q3]; + d = (length(stencil)-1)/2; + diags = -d:d; + Q = stripeMatrix(stencil, diags, m); + + Q_U = [0 0.26431903e8 / 0.43545600e8 0.39791489e8 / 0.152409600e9 -0.12747751e8 / 0.16934400e8 0.76099447e8 / 0.152409600e9 -0.1397443e7 / 0.12192768e8 0 0; -0.26431903e8 / 0.43545600e8 0 -0.13847476213e11 / 0.19559232000e11 0.35844843977e11 / 0.11735539200e11 -0.63413503537e11 / 0.23471078400e11 0.4764412871e10 / 0.3911846400e10 -0.1668252557e10 / 0.5867769600e10 0.842644697e9 / 0.29338848000e11; -0.39791489e8 / 0.152409600e9 0.13847476213e11 / 0.19559232000e11 0 -0.73834802771e11 / 0.23471078400e11 0.1802732209e10 / 0.325987200e9 -0.65514173e8 / 0.16299360e8 0.79341409141e11 / 0.58677696000e11 -0.1282384321e10 / 0.7823692800e10; 0.12747751e8 / 0.16934400e8 -0.35844843977e11 / 0.11735539200e11 0.73834802771e11 / 0.23471078400e11 0 -0.5274106087e10 / 0.1173553920e10 0.33743985841e11 / 0.5867769600e10 -0.6482602549e10 / 0.2607897600e10 0.1506017269e10 / 0.3911846400e10; -0.76099447e8 / 0.152409600e9 0.63413503537e11 / 0.23471078400e11 -0.1802732209e10 / 0.325987200e9 0.5274106087e10 / 0.1173553920e10 0 -0.7165829063e10 / 0.2607897600e10 0.23903110999e11 / 0.11735539200e11 -0.5346675911e10 / 0.11735539200e11; 0.1397443e7 / 0.12192768e8 -0.4764412871e10 / 0.3911846400e10 0.65514173e8 / 0.16299360e8 -0.33743985841e11 / 0.5867769600e10 0.7165829063e10 / 0.2607897600e10 0 -0.1060918223e10 / 0.11735539200e11 0.628353989e9 / 0.3911846400e10; 0 0.1668252557e10 / 0.5867769600e10 -0.79341409141e11 / 0.58677696000e11 0.6482602549e10 / 0.2607897600e10 -0.23903110999e11 / 0.11735539200e11 0.1060918223e10 / 0.11735539200e11 0 0.25889988599e11 / 0.39118464000e11; 0 -0.842644697e9 / 0.29338848000e11 0.1282384321e10 / 0.7823692800e10 -0.1506017269e10 / 0.3911846400e10 0.5346675911e10 / 0.11735539200e11 -0.628353989e9 / 0.3911846400e10 -0.25889988599e11 / 0.39118464000e11 0;]; + + Q(1:8,1:8)=Q_U; + Q(m-7:m,m-7:m)=rot90( -Q_U ,2 ); + + e_1=sparse(m,1);e_1(1)=1; + e_m=sparse(m,1);e_m(m)=1; + + + D1=H\(Q-1/2*(e_1*e_1')+1/2*(e_m*e_m')) ; + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + + + % Second derivative, 1st order accurate at first 6 boundary points + % m3=-1/90;m2=3/20;m1=-3/2;m0=49/18; + % + % M=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); + % M_U=[0.4347276223e10 / 0.3736212480e10 -0.1534657609e10 / 0.1210809600e10 0.68879e5 / 0.3057600e7 0.1092927401e10 / 0.13076743680e11 0.18145423e8 / 0.968647680e9 -0.1143817e7 / 0.60540480e8 -0.355447739e9 / 0.65383718400e11 0.56081e5 / 0.16473600e8; -0.1534657609e10 / 0.1210809600e10 0.42416226217e11 / 0.18681062400e11 -0.228654119e9 / 0.345945600e9 -0.12245627e8 / 0.34594560e8 -0.2995295e7 / 0.46702656e8 0.52836503e8 / 0.691891200e9 0.119351e6 / 0.12812800e8 -0.634102039e9 / 0.65383718400e11; 0.68879e5 / 0.3057600e7 -0.228654119e9 / 0.345945600e9 0.5399287e7 / 0.4193280e7 -0.24739409e8 / 0.34594560e8 0.7878737e7 / 0.69189120e8 -0.1917829e7 / 0.31449600e8 0.39727e5 / 0.3660800e7 0.10259e5 / 0.4656960e7; 0.1092927401e10 / 0.13076743680e11 -0.12245627e8 / 0.34594560e8 -0.24739409e8 / 0.34594560e8 0.7780367599e10 / 0.3736212480e10 -0.70085363e8 / 0.69189120e8 -0.500209e6 / 0.6289920e7 -0.311543e6 / 0.17962560e8 0.278191e6 / 0.21525504e8; 0.18145423e8 / 0.968647680e9 -0.2995295e7 / 0.46702656e8 0.7878737e7 / 0.69189120e8 -0.70085363e8 / 0.69189120e8 0.7116321131e10 / 0.3736212480e10 -0.545081e6 / 0.532224e6 0.811631e6 / 0.11531520e8 -0.84101639e8 / 0.13076743680e11; -0.1143817e7 / 0.60540480e8 0.52836503e8 / 0.691891200e9 -0.1917829e7 / 0.31449600e8 -0.500209e6 / 0.6289920e7 -0.545081e6 / 0.532224e6 0.324760747e9 / 0.138378240e9 -0.65995697e8 / 0.49420800e8 0.1469203e7 / 0.13759200e8; -0.355447739e9 / 0.65383718400e11 0.119351e6 / 0.12812800e8 0.39727e5 / 0.3660800e7 -0.311543e6 / 0.17962560e8 0.811631e6 / 0.11531520e8 -0.65995697e8 / 0.49420800e8 0.48284442317e11 / 0.18681062400e11 -0.1762877569e10 / 0.1210809600e10; 0.56081e5 / 0.16473600e8 -0.634102039e9 / 0.65383718400e11 0.10259e5 / 0.4656960e7 0.278191e6 / 0.21525504e8 -0.84101639e8 / 0.13076743680e11 0.1469203e7 / 0.13759200e8 -0.1762877569e10 / 0.1210809600e10 0.10117212851e11 / 0.3736212480e10;]; + % + % M(1:8,1:8)=M_U; + % + % M(m-7:m,m-7:m)=flipud( fliplr( M_U ) ); + % M=M/h; + + S_U=[-0.12700800e8 / 0.7493827e7 0.185023321e9 / 0.89925924e8 0.39791489e8 / 0.44962962e8 -0.38243253e8 / 0.14987654e8 0.76099447e8 / 0.44962962e8 -0.34936075e8 / 0.89925924e8;]/h; + S_1=sparse(1,m); + S_1(1:6)=S_U; + S_m=sparse(1,m); + + S_m(m-5:m)=fliplr(-S_U); + + %D2=H\(-M-e_1*S_1+e_m*S_m); + + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + + + % Third derivative, 1st order accurate at first 6 boundary points + + % q4=7/240;q3=-3/10;q2=169/120;q1=-61/30; + % Q3=q4*(diag(ones(m-4,1),4)-diag(ones(m-4,1),-4))+q3*(diag(ones(m-3,1),3)-diag(ones(m-3,1),-3))+q2*(diag(ones(m-2,1),2)-diag(ones(m-2,1),-2))+q1*(diag(ones(m-1,1),1)-diag(ones(m-1,1),-1)); + % + % %QQ3=(-1/8*diag(ones(m-3,1),3) + 1*diag(ones(m-2,1),2) - 13/8*diag(ones(m-1,1),1) +13/8*diag(ones(m-1,1),-1) -1*diag(ones(m-2,1),-2) + 1/8*diag(ones(m-3,1),-3)); + % + % + % Q3_U = [0 -0.10882810591e11 / 0.5811886080e10 0.398713069e9 / 0.132088320e9 -0.1746657571e10 / 0.1162377216e10 0.56050639e8 / 0.145297152e9 -0.11473393e8 / 0.1162377216e10 -0.38062741e8 / 0.1452971520e10 0.30473e5 / 0.4392960e7; 0.10882810591e11 / 0.5811886080e10 0 -0.3720544343e10 / 0.830269440e9 0.767707019e9 / 0.207567360e9 -0.1047978301e10 / 0.830269440e9 0.1240729e7 / 0.14826240e8 0.6807397e7 / 0.55351296e8 -0.50022767e8 / 0.1452971520e10; -0.398713069e9 / 0.132088320e9 0.3720544343e10 / 0.830269440e9 0 -0.2870078009e10 / 0.830269440e9 0.74962049e8 / 0.29652480e8 -0.12944857e8 / 0.30750720e8 -0.17846623e8 / 0.103783680e9 0.68707591e8 / 0.1162377216e10; 0.1746657571e10 / 0.1162377216e10 -0.767707019e9 / 0.207567360e9 0.2870078009e10 / 0.830269440e9 0 -0.727867087e9 / 0.276756480e9 0.327603877e9 / 0.207567360e9 -0.175223717e9 / 0.830269440e9 0.1353613e7 / 0.726485760e9; -0.56050639e8 / 0.145297152e9 0.1047978301e10 / 0.830269440e9 -0.74962049e8 / 0.29652480e8 0.727867087e9 / 0.276756480e9 0 -0.1804641793e10 / 0.830269440e9 0.311038417e9 / 0.207567360e9 -0.1932566239e10 / 0.5811886080e10; 0.11473393e8 / 0.1162377216e10 -0.1240729e7 / 0.14826240e8 0.12944857e8 / 0.30750720e8 -0.327603877e9 / 0.207567360e9 0.1804641793e10 / 0.830269440e9 0 -0.1760949511e10 / 0.830269440e9 0.2105883973e10 / 0.1452971520e10; 0.38062741e8 / 0.1452971520e10 -0.6807397e7 / 0.55351296e8 0.17846623e8 / 0.103783680e9 0.175223717e9 / 0.830269440e9 -0.311038417e9 / 0.207567360e9 0.1760949511e10 / 0.830269440e9 0 -0.1081094773e10 / 0.528353280e9; -0.30473e5 / 0.4392960e7 0.50022767e8 / 0.1452971520e10 -0.68707591e8 / 0.1162377216e10 -0.1353613e7 / 0.726485760e9 0.1932566239e10 / 0.5811886080e10 -0.2105883973e10 / 0.1452971520e10 0.1081094773e10 / 0.528353280e9 0;]; + % + % Q3(1:8,1:8)=Q3_U; + % Q3(m-7:m,m-7:m)=flipud( fliplr( -Q3_U ) ); + % Q3=Q3/h^2; + % + % + % + S2_U=[0.35e2 / 0.12e2 -0.26e2 / 0.3e1 0.19e2 / 0.2e1 -0.14e2 / 0.3e1 0.11e2 / 0.12e2;]/h^2; + S2_1=sparse(1,m); + S2_1(1:5)=S2_U; + S2_m=sparse(1,m); + S2_m(m-4:m)=fliplr(S2_U); + % + % + % + % D3=H\(Q3 - e_1*S2_1 + e_m*S2_m +1/2*(S_1'*S_1) -1/2*(S_m'*S_m) ) ; + + % Fourth derivative, 0th order accurate at first 6 boundary points (still + % yield 4th order convergence if stable: for example u_tt=-u_xxxx + + m4=7/240;m3=-2/5;m2=169/60;m1=-122/15;m0=91/8; +% 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); + stencil = [m4,m3,m2,m1,m0,m1,m2,m3,m4]; + d = (length(stencil)-1)/2; + diags = -d:d; + M4 = stripeMatrix(stencil, diags, m); + + + M4_U=[0.600485868980522851e18 / 0.274825314114120000e18 -0.1421010223681841e16 / 0.348984525859200e15 0.38908412970187e14 / 0.1586293299360000e16 0.10224077451922837e17 / 0.2243471951952000e16 -0.7577302712815639e16 / 0.1744922629296000e16 0.138091642084013e15 / 0.59351109840000e14 -0.3775041725375197e16 / 0.4486943903904000e16 0.9907210230881393e16 / 0.61072292025360000e17; -0.1421010223681841e16 / 0.348984525859200e15 0.3985852497808703e16 / 0.407903991264000e15 -0.90048788923861e14 / 0.15579666333000e14 -0.4312795866499e13 / 0.997098645312e12 0.4414634708891947e16 / 0.448694390390400e15 -0.886174803100459e15 / 0.99709864531200e14 0.4333e4 / 0.1000e4 -0.13800578064893047e17 / 0.15704303663664000e17; 0.38908412970187e14 / 0.1586293299360000e16 -0.90048788923861e14 / 0.15579666333000e14 0.2071682582321887e16 / 0.113306664240000e15 -0.769471337294003e15 / 0.41545776888000e14 0.112191585452033e15 / 0.166183107552000e15 0.7204491902193671e16 / 0.623186653320000e15 -0.24847093554379e14 / 0.3115933266600e13 0.943854037768721e15 / 0.545288321655000e15; 0.10224077451922837e17 / 0.2243471951952000e16 -0.4312795866499e13 / 0.997098645312e12 -0.769471337294003e15 / 0.41545776888000e14 0.3086874339649421e16 / 0.81580798252800e14 -0.396009005312111e15 / 0.16618310755200e14 0.348854811893087e15 / 0.249274661328000e15 0.895954627955053e15 / 0.224347195195200e15 -0.184881685054543e15 / 0.166183107552000e15; -0.7577302712815639e16 / 0.1744922629296000e16 0.4414634708891947e16 / 0.448694390390400e15 0.112191585452033e15 / 0.166183107552000e15 -0.396009005312111e15 / 0.16618310755200e14 0.3774861828677557e16 / 0.112173597597600e15 -0.5693689108983593e16 / 0.249274661328000e15 0.803944126167107e15 / 0.99709864531200e14 -0.19547569411550791e17 / 0.15704303663664000e17; 0.138091642084013e15 / 0.59351109840000e14 -0.886174803100459e15 / 0.99709864531200e14 0.7204491902193671e16 / 0.623186653320000e15 0.348854811893087e15 / 0.249274661328000e15 -0.5693689108983593e16 / 0.249274661328000e15 0.73965842628398389e17 / 0.2492746613280000e16 -0.2184472662036043e16 / 0.124637330664000e15 0.46667e5 / 0.10000e5; -0.3775041725375197e16 / 0.4486943903904000e16 0.4333e4 / 0.1000e4 -0.24847093554379e14 / 0.3115933266600e13 0.895954627955053e15 / 0.224347195195200e15 0.803944126167107e15 / 0.99709864531200e14 -0.2184472662036043e16 / 0.124637330664000e15 0.37593640125444199e17 / 0.2243471951952000e16 -0.37e2 / 0.4e1; 0.9907210230881393e16 / 0.61072292025360000e17 -0.13800578064893047e17 / 0.15704303663664000e17 0.943854037768721e15 / 0.545288321655000e15 -0.184881685054543e15 / 0.166183107552000e15 -0.19547569411550791e17 / 0.15704303663664000e17 0.46667e5 / 0.10000e5 -0.37e2 / 0.4e1 0.12766926490502478779e20 / 0.1099301256456480000e19;]; + + M4(1:8,1:8)=M4_U; + + M4(m-7:m,m-7:m)=rot90( M4_U ,2 ); + M4=M4/h^3; + + S3_U=[-0.5e1 / 0.2e1 9 -12 7 -0.3e1 / 0.2e1;]/h^3; + S3_1=sparse(1,m); + S3_1(1:5)=S3_U; + S3_m=sparse(1,m); + S3_m(m-4:m)=fliplr(-S3_U); + + D4=H\(M4-e_1*S3_1+e_m*S3_m + S_1'*S2_1-S_m'*S2_m); + + S_1 = S_1'; + S_m = S_m'; + S2_1 = S2_1'; + S2_m = S2_m'; + S3_1 = S3_1'; + S3_m = S3_m'; + + % L=h*(m-1); + + % x1=linspace(0,L,m)'; + % x2=x1.^2/fac(2); + % x3=x1.^3/fac(3); + % x4=x1.^4/fac(4); + % x5=x1.^5/fac(5); + + % x0=x1.^0/fac(1); + +end
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/+implementations/d4_compatible_halfvariable_2.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/+sbp/+implementations/d4_compatible_halfvariable_2.m Mon Sep 12 12:53:02 2016 +0200 @@ -0,0 +1,179 @@ +% Returns D2 as a function handle +function [H, HI, D1, D2, D3, D4, e_1, e_m, M4, Q, S2_1,... + S2_m, S3_1, S3_m, S_1, S_m] = d4_compatible_halfvariable_2(m,h) + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + %%% 4:de ordn. SBP Finita differens %%% + %%% operatorer framtagna av Ken Mattsson %%% + %%% %%% + %%% 6 randpunkter, diagonal norm %%% + %%% %%% + %%% Datum: 2013-11-11 %%% + %%% %%% + %%% %%% + %%% H (Normen) %%% + %%% D1 (approx f?rsta derivatan) %%% + %%% D2 (approx andra derivatan) %%% + %%% D3 (approx tredje derivatan) %%% + %%% D2 (approx fj?rde derivatan) %%% + %%% %%% + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + % M?ste ange antal punkter (m) och stegl?ngd (h) + % Notera att dessa opetratorer ?r framtagna f?r att anv?ndas n?r + % vi har 3de och 4de derivator i v?r PDE + % I annat fall anv?nd de "traditionella" som har noggrannare + % randsplutningar f?r D1 och D2 + + % Vi b?rjar med normen. Notera att alla SBP operatorer delar samma norm, + % vilket ?r n?dv?ndigt f?r stabilitet + + BP = 4; + if(m<2*BP) + error(['Operator requires at least ' num2str(2*BP) ' grid points']); + end + + H=speye(m,m);H(1,1)=1/2;H(m,m)=1/2; + + + H=H*h; + HI=inv(H); + + + % First derivative SBP operator, 1st order accurate at first 6 boundary points + + q1=1/2; +% Q=q1*(diag(ones(m-1,1),1)-diag(ones(m-1,1),-1)); + stencil = [-q1,0,q1]; + d = (length(stencil)-1)/2; + diags = -d:d; + Q = stripeMatrix(stencil, diags, m); + + %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)); + + + e_1=sparse(m,1);e_1(1)=1; + e_m=sparse(m,1);e_m(m)=1; + + + D1=HI*(Q-1/2*(e_1*e_1')+1/2*(e_m*e_m')) ; + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + + + % Second derivative, 1st order accurate at first boundary points + + % below for constant coefficients + % m1=-1;m0=2; + % M=m1*(diag(ones(m-1,1),1)+diag(ones(m-1,1),-1))+m0*diag(ones(m,1),0);M(1,1)=1;M(m,m)=1; + % M=M/h; + %D2=HI*(-M-e_1*S_1+e_m*S_m); + + % Below for variable coefficients + % Require a vector c with the koeffients + + S_U=[-3/2 2 -1/2]/h; + S_1=sparse(1,m); + S_1(1:3)=S_U; + S_m=sparse(1,m); + S_m(m-2:m)=fliplr(-S_U); + + S_1 = S_1'; + S_m = S_m'; + + M=sparse(m,m); + e_1 = sparse(e_1); + e_m = sparse(e_m); + S_1 = sparse(S_1); + S_m = sparse(S_m); + + scheme_width = 3; + scheme_radius = (scheme_width-1)/2; + r = (1+scheme_radius):(m-scheme_radius); + + function D2 = D2_fun(c) + + Mm1 = -c(r-1)/2 - c(r)/2; + M0 = c(r-1)/2 + c(r) + c(r+1)/2; + Mp1 = -c(r)/2 - c(r+1)/2; + + M(r,:) = spdiags([Mm1 M0 Mp1],0:2*scheme_radius,length(r),m); + + + M(1:2,1:2)=[c(1)/2 + c(2)/2 -c(1)/2 - c(2)/2; -c(1)/2 - c(2)/2 c(1)/2 + c(2) + c(3)/2;]; + M(m-1:m,m-1:m)=[c(m-2)/2 + c(m-1) + c(m)/2 -c(m-1)/2 - c(m)/2; -c(m-1)/2 - c(m)/2 c(m-1)/2 + c(m)/2;]; + M=M/h; + + D2=HI*(-M-c(1)*e_1*S_1'+c(m)*e_m*S_m'); + end + D2 = @D2_fun; + + + + + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + + + % Third derivative, 1st order accurate at first 6 boundary points + + q2=1/2;q1=-1; +% Q3=q2*(diag(ones(m-2,1),2)-diag(ones(m-2,1),-2))+q1*(diag(ones(m-1,1),1)-diag(ones(m-1,1),-1)); + stencil = [-q2,-q1,0,q1,q2]; + d = (length(stencil)-1)/2; + diags = -d:d; + Q3 = stripeMatrix(stencil, diags, m); + + %QQ3=(-1/8*diag(ones(m-3,1),3) + 1*diag(ones(m-2,1),2) - 13/8*diag(ones(m-1,1),1) +13/8*diag(ones(m-1,1),-1) -1*diag(ones(m-2,1),-2) + 1/8*diag(ones(m-3,1),-3)); + + + Q3_U = [0 -0.13e2 / 0.16e2 0.7e1 / 0.8e1 -0.1e1 / 0.16e2; 0.13e2 / 0.16e2 0 -0.23e2 / 0.16e2 0.5e1 / 0.8e1; -0.7e1 / 0.8e1 0.23e2 / 0.16e2 0 -0.17e2 / 0.16e2; 0.1e1 / 0.16e2 -0.5e1 / 0.8e1 0.17e2 / 0.16e2 0;]; + Q3(1:4,1:4)=Q3_U; + Q3(m-3:m,m-3:m)=rot90( -Q3_U ,2 ); + Q3=Q3/h^2; + + + + S2_U=[1 -2 1;]/h^2; + S2_1=sparse(1,m); + S2_1(1:3)=S2_U; + S2_m=sparse(1,m); + S2_m(m-2:m)=fliplr(S2_U); + S2_1 = S2_1'; + S2_m = S2_m'; + + + + D3=HI*(Q3 - e_1*S2_1' + e_m*S2_m' +1/2*(S_1*S_1') -1/2*(S_m*S_m') ) ; + + % Fourth derivative, 0th order accurate at first 6 boundary points (still + % yield 4th order convergence if stable: for example u_tt=-u_xxxx + + m2=1;m1=-4;m0=6; +% M4=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); + stencil = [m2,m1,m0,m1,m2]; + d = (length(stencil)-1)/2; + diags = -d:d; + M4 = stripeMatrix(stencil, diags, m); + + %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.13e2 / 0.10e2 -0.12e2 / 0.5e1 0.9e1 / 0.10e2 0.1e1 / 0.5e1; -0.12e2 / 0.5e1 0.26e2 / 0.5e1 -0.16e2 / 0.5e1 0.2e1 / 0.5e1; 0.9e1 / 0.10e2 -0.16e2 / 0.5e1 0.47e2 / 0.10e2 -0.17e2 / 0.5e1; 0.1e1 / 0.5e1 0.2e1 / 0.5e1 -0.17e2 / 0.5e1 0.29e2 / 0.5e1;]; + + + M4(1:4,1:4)=M4_U; + + M4(m-3:m,m-3:m)=rot90( M4_U ,2 ); + M4=M4/h^3; + + S3_U=[-1 3 -3 1;]/h^3; + S3_1=sparse(1,m); + S3_1(1:4)=S3_U; + S3_m=sparse(1,m); + S3_m(m-3:m)=fliplr(-S3_U); + S3_1 = S3_1'; + S3_m = S3_m'; + + D4=HI*(M4-e_1*S3_1'+e_m*S3_m' + S_1*S2_1'-S_m*S2_m'); +end
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/+implementations/d4_compatible_halfvariable_4.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/+sbp/+implementations/d4_compatible_halfvariable_4.m Mon Sep 12 12:53:02 2016 +0200 @@ -0,0 +1,167 @@ +function [H, HI, D2, D4, e_1, e_m, M4, S2_1, S2_m, S3_1,... + S3_m, S_1, S_m] = d4_compatible_halfvariable_4(m,h) + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + %%% 4:de ordn. SBP Finita differens %%% + %%% %%% + %%% H (Normen) %%% + %%% D1=H^(-1)Q (approx f?rsta derivatan) %%% + %%% D2 (approx andra derivatan) %%% + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + + %m=20; %problemstorlek + %h=1/(m-1); + %h=1; + + BP = 6; + if(m<2*BP) + error(['Operator requires at least ' num2str(2*BP) ' grid points']); + end + +% c=ones(m,1); + + + H=speye(m,m); + H(1:4,1:4)=diag([17/48 59/48 43/48 49/48]); + H(m-3:m,m-3:m)=rot90(diag([17/48 59/48 43/48 49/48]),2); + H=H*h; + HI=inv(H); + HI = sparse(HI); + + + +% 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)); + e=ones(m,1); +% Q=spdiags([e -8*e 0*e 8*e -e], -2:2, m, m)/12; +% 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)=rot90( -Q_U(1:4,1:4) ,2 ); + + e_1=sparse(m,1);e_1(1)=1; + e_m=sparse(m,1);e_m(m)=1; + +% D1=HI*(Q-1/2*(e_1*e_1')+1/2*(e_m*e_m')) ; + + 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;]; +% 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)); + M=-spdiags([-e 16*e -30*e 16*e -e], -2:2, m, m)/12; + + M(1:4,1:4)=M_U; + + M(m-3:m,m-3:m)=rot90( M_U ,2 ); + M=M/h; + + 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=sparse(1,m); + S_m(m-3:m)=fliplr(-S_U); + S_1 = S_1'; + S_m = S_m'; + + + M=sparse(m,m); + e_1 = sparse(e_1); + e_m = sparse(e_m); + S_1 = sparse(S_1); + S_m = sparse(S_m); + + + scheme_width = 5; + scheme_radius = (scheme_width-1)/2; + r = (1+scheme_radius):(m-scheme_radius); + + function D2 = D2_fun(c) + + % ALTERNATIVES %%%%%%%%%%%%% + % for i=4:m-3 + % M(i,i-2:i+2)=[-c(i-1) / 0.6e1 + c(i-2) / 0.8e1 + c(i) / 0.8e1 -c(i-2) / 0.6e1 - c(i+1) / 0.6e1 - c(i-1) / 0.2e1 - c(i) / 0.2e1 c(i-2) / 0.24e2 + 0.5e1 / 0.6e1 * c(i-1) + 0.5e1 / 0.6e1 * c(i+1) + c(i+2) / 0.24e2 + 0.3e1 / 0.4e1 * c(i) -c(i-1) / 0.6e1 - c(i+2) / 0.6e1 - c(i) / 0.2e1 - c(i+1) / 0.2e1 -c(i+1) / 0.6e1 + c(i) / 0.8e1 + c(i+2) / 0.8e1;]; + % end + %%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % for i=4:m-3 + % M(i,i-2:i+2)= [ + % c(i-2) / 0.8e1 - c(i-1) / 0.6e1 + c(i) / 0.8e1 , + % -c(i-2) / 0.6e1 - c(i-1) / 0.2e1 - c(i) / 0.2e1 - c(i+1) / 0.6e1 , + % c(i-2) / 2.4e1 + c(i-1) / 1.2e0 + c(i) * 0.3/0.4 + c(i+1) / 1.2e0 + c(i+2) / 2.4e1 , + % -c(i-1) / 0.6e1 - c(i) / 0.2e1 - c(i+1) / 0.2e1 - c(i+2) / 0.6e1 , + % c(i) / 0.8e1 - c(i+1) / 0.6e1 + c(i+2) / 0.8e1 , + % ]; + % end + %%%%%%%%%%%%%%%%%%%%%%%%%%%%% + Mm2 = c(r-2) / 0.8e1 - c(r-1) / 0.6e1 + c(r) / 0.8e1 ; + Mm1 = -c(r-2) / 0.6e1 - c(r-1) / 0.2e1 - c(r) / 0.2e1 - c(r+1) / 0.6e1 ; + M0 = c(r-2) / 2.4e1 + c(r-1) / 1.2e0 + c(r) * 0.3/0.4 + c(r+1) / 1.2e0 + c(r+2) / 2.4e1; + Mp1 = -c(r-1) / 0.6e1 - c(r) / 0.2e1 - c(r+1) / 0.2e1 - c(r+2) / 0.6e1; + Mp2 = c(r) / 0.8e1 - c(r+1) / 0.6e1 + c(r+2) / 0.8e1; + % printSize(Mm2); + % scheme_radius + % m + M(r,:) = spdiags([Mm2 Mm1 M0 Mp1 Mp2],0:2*scheme_radius,length(r),m); + % M(r,:) = spdiags([Mm2 Mm1 M0 Mp1 Mp2],(-2:2)+scheme_radius,M(r,:)); % This is slower + %%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % %% Somthing is wrong here!! + % Mm2 = c(r-2) / 0.8e1 - c(r-1) / 0.6e1 + c(r) / 0.8e1 ; + % Mm1 = -c(r-2) / 0.6e1 - c(r-1) / 0.2e1 - c(r) / 0.2e1 - c(r+1) / 0.6e1 ; + % M0 = c(r-2) / 2.4e1 + c(r-1) / 1.2e0 + c(r) * 0.3/0.4 + c(r+1) / 1.2e0 + c(r+2) / 2.4e1; + % Mp1 = -c(r-1) / 0.6e1 - c(r) / 0.2e1 - c(r+1) / 0.2e1 - c(r+2) / 0.6e1; + % Mp2 = c(r) / 0.8e1 - c(r+1) / 0.6e1 + c(r+2) / 0.8e1; + % % printSize(M_diag_ind); + % % Mdiags = [Mm2 Mm1 M0 Mp1 Mp2]; + % % printSize(Mdiags); + % M(M_diag_ind) = [Mm2 Mm1 M0 Mp1 Mp2]; % This is slightly faster + %%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % Kan man skriva det som en multiplikation av en 3-dim matris? + %%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + + + + M(1:6,1:6)=[0.12e2 / 0.17e2 * c(1) + 0.59e2 / 0.192e3 * c(2) + 0.27010400129e11 / 0.345067064608e12 * c(3) + 0.69462376031e11 / 0.2070402387648e13 * c(4) -0.59e2 / 0.68e2 * c(1) - 0.6025413881e10 / 0.21126554976e11 * c(3) - 0.537416663e9 / 0.7042184992e10 * c(4) 0.2e1 / 0.17e2 * c(1) - 0.59e2 / 0.192e3 * c(2) + 0.213318005e9 / 0.16049630912e11 * c(4) + 0.2083938599e10 / 0.8024815456e10 * c(3) 0.3e1 / 0.68e2 * c(1) - 0.1244724001e10 / 0.21126554976e11 * c(3) + 0.752806667e9 / 0.21126554976e11 * c(4) 0.49579087e8 / 0.10149031312e11 * c(3) - 0.49579087e8 / 0.10149031312e11 * c(4) -c(4) / 0.784e3 + c(3) / 0.784e3; -0.59e2 / 0.68e2 * c(1) - 0.6025413881e10 / 0.21126554976e11 * c(3) - 0.537416663e9 / 0.7042184992e10 * c(4) 0.3481e4 / 0.3264e4 * c(1) + 0.9258282831623875e16 / 0.7669235228057664e16 * c(3) + 0.236024329996203e15 / 0.1278205871342944e16 * c(4) -0.59e2 / 0.408e3 * c(1) - 0.29294615794607e14 / 0.29725717938208e14 * c(3) - 0.2944673881023e13 / 0.29725717938208e14 * c(4) -0.59e2 / 0.1088e4 * c(1) + 0.260297319232891e15 / 0.2556411742685888e16 * c(3) - 0.60834186813841e14 / 0.1278205871342944e16 * c(4) -0.1328188692663e13 / 0.37594290333616e14 * c(3) + 0.1328188692663e13 / 0.37594290333616e14 * c(4) -0.8673e4 / 0.2904112e7 * c(3) + 0.8673e4 / 0.2904112e7 * c(4); 0.2e1 / 0.17e2 * c(1) - 0.59e2 / 0.192e3 * c(2) + 0.213318005e9 / 0.16049630912e11 * c(4) + 0.2083938599e10 / 0.8024815456e10 * c(3) -0.59e2 / 0.408e3 * c(1) - 0.29294615794607e14 / 0.29725717938208e14 * c(3) - 0.2944673881023e13 / 0.29725717938208e14 * c(4) c(1) / 0.51e2 + 0.59e2 / 0.192e3 * c(2) + 0.13777050223300597e17 / 0.26218083221499456e17 * c(4) + 0.564461e6 / 0.13384296e8 * c(5) + 0.378288882302546512209e21 / 0.270764341349677687456e21 * c(3) c(1) / 0.136e3 - 0.125059e6 / 0.743572e6 * c(5) - 0.4836340090442187227e19 / 0.5525802884687299744e19 * c(3) - 0.17220493277981e14 / 0.89177153814624e14 * c(4) -0.10532412077335e14 / 0.42840005263888e14 * c(4) + 0.1613976761032884305e19 / 0.7963657098519931984e19 * c(3) + 0.564461e6 / 0.4461432e7 * c(5) -0.960119e6 / 0.1280713392e10 * c(4) - 0.3391e4 / 0.6692148e7 * c(5) + 0.33235054191e11 / 0.26452850508784e14 * c(3); 0.3e1 / 0.68e2 * c(1) - 0.1244724001e10 / 0.21126554976e11 * c(3) + 0.752806667e9 / 0.21126554976e11 * c(4) -0.59e2 / 0.1088e4 * c(1) + 0.260297319232891e15 / 0.2556411742685888e16 * c(3) - 0.60834186813841e14 / 0.1278205871342944e16 * c(4) c(1) / 0.136e3 - 0.125059e6 / 0.743572e6 * c(5) - 0.4836340090442187227e19 / 0.5525802884687299744e19 * c(3) - 0.17220493277981e14 / 0.89177153814624e14 * c(4) 0.3e1 / 0.1088e4 * c(1) + 0.507284006600757858213e21 / 0.475219048083107777984e21 * c(3) + 0.1869103e7 / 0.2230716e7 * c(5) + c(6) / 0.24e2 + 0.1950062198436997e16 / 0.3834617614028832e16 * c(4) -0.4959271814984644613e19 / 0.20965546238960637264e20 * c(3) - c(6) / 0.6e1 - 0.15998714909649e14 / 0.37594290333616e14 * c(4) - 0.375177e6 / 0.743572e6 * c(5) -0.368395e6 / 0.2230716e7 * c(5) + 0.752806667e9 / 0.539854092016e12 * c(3) + 0.1063649e7 / 0.8712336e7 * c(4) + c(6) / 0.8e1; 0.49579087e8 / 0.10149031312e11 * c(3) - 0.49579087e8 / 0.10149031312e11 * c(4) -0.1328188692663e13 / 0.37594290333616e14 * c(3) + 0.1328188692663e13 / 0.37594290333616e14 * c(4) -0.10532412077335e14 / 0.42840005263888e14 * c(4) + 0.1613976761032884305e19 / 0.7963657098519931984e19 * c(3) + 0.564461e6 / 0.4461432e7 * c(5) -0.4959271814984644613e19 / 0.20965546238960637264e20 * c(3) - c(6) / 0.6e1 - 0.15998714909649e14 / 0.37594290333616e14 * c(4) - 0.375177e6 / 0.743572e6 * c(5) 0.8386761355510099813e19 / 0.128413970713633903242e21 * c(3) + 0.2224717261773437e16 / 0.2763180339520776e16 * c(4) + 0.5e1 / 0.6e1 * c(6) + c(7) / 0.24e2 + 0.280535e6 / 0.371786e6 * c(5) -0.35039615e8 / 0.213452232e9 * c(4) - c(7) / 0.6e1 - 0.13091810925e11 / 0.13226425254392e14 * c(3) - 0.1118749e7 / 0.2230716e7 * c(5) - c(6) / 0.2e1; -c(4) / 0.784e3 + c(3) / 0.784e3 -0.8673e4 / 0.2904112e7 * c(3) + 0.8673e4 / 0.2904112e7 * c(4) -0.960119e6 / 0.1280713392e10 * c(4) - 0.3391e4 / 0.6692148e7 * c(5) + 0.33235054191e11 / 0.26452850508784e14 * c(3) -0.368395e6 / 0.2230716e7 * c(5) + 0.752806667e9 / 0.539854092016e12 * c(3) + 0.1063649e7 / 0.8712336e7 * c(4) + c(6) / 0.8e1 -0.35039615e8 / 0.213452232e9 * c(4) - c(7) / 0.6e1 - 0.13091810925e11 / 0.13226425254392e14 * c(3) - 0.1118749e7 / 0.2230716e7 * c(5) - c(6) / 0.2e1 0.3290636e7 / 0.80044587e8 * c(4) + 0.5580181e7 / 0.6692148e7 * c(5) + 0.5e1 / 0.6e1 * c(7) + c(8) / 0.24e2 + 0.660204843e9 / 0.13226425254392e14 * c(3) + 0.3e1 / 0.4e1 * c(6);]; + + M(m-5:m,m-5:m)=[c(m-7) / 0.24e2 + 0.5e1 / 0.6e1 * c(m-6) + 0.5580181e7 / 0.6692148e7 * c(m-4) + 0.4887707739997e13 / 0.119037827289528e15 * c(m-3) + 0.3e1 / 0.4e1 * c(m-5) + 0.660204843e9 / 0.13226425254392e14 * c(m-2) + 0.660204843e9 / 0.13226425254392e14 * c(m-1) -c(m-6) / 0.6e1 - 0.1618585929605e13 / 0.9919818940794e13 * c(m-3) - c(m-5) / 0.2e1 - 0.1118749e7 / 0.2230716e7 * c(m-4) - 0.13091810925e11 / 0.13226425254392e14 * c(m-2) - 0.13091810925e11 / 0.13226425254392e14 * c(m-1) -0.368395e6 / 0.2230716e7 * c(m-4) + c(m-5) / 0.8e1 + 0.48866620889e11 / 0.404890569012e12 * c(m-3) + 0.752806667e9 / 0.539854092016e12 * c(m-2) + 0.752806667e9 / 0.539854092016e12 * c(m-1) -0.3391e4 / 0.6692148e7 * c(m-4) - 0.238797444493e12 / 0.119037827289528e15 * c(m-3) + 0.33235054191e11 / 0.26452850508784e14 * c(m-2) + 0.33235054191e11 / 0.26452850508784e14 * c(m-1) -0.8673e4 / 0.2904112e7 * c(m-2) - 0.8673e4 / 0.2904112e7 * c(m-1) + 0.8673e4 / 0.1452056e7 * c(m-3) -c(m-3) / 0.392e3 + c(m-2) / 0.784e3 + c(m-1) / 0.784e3; -c(m-6) / 0.6e1 - 0.1618585929605e13 / 0.9919818940794e13 * c(m-3) - c(m-5) / 0.2e1 - 0.1118749e7 / 0.2230716e7 * c(m-4) - 0.13091810925e11 / 0.13226425254392e14 * c(m-2) - 0.13091810925e11 / 0.13226425254392e14 * c(m-1) c(m-6) / 0.24e2 + 0.5e1 / 0.6e1 * c(m-5) + 0.3896014498639e13 / 0.4959909470397e13 * c(m-3) + 0.8386761355510099813e19 / 0.128413970713633903242e21 * c(m-2) + 0.280535e6 / 0.371786e6 * c(m-4) + 0.3360696339136261875e19 / 0.171218627618178537656e21 * c(m-1) -c(m-5) / 0.6e1 - 0.4959271814984644613e19 / 0.20965546238960637264e20 * c(m-2) - 0.375177e6 / 0.743572e6 * c(m-4) - 0.13425842714e11 / 0.33740880751e11 * c(m-3) - 0.193247108773400725e18 / 0.6988515412986879088e19 * c(m-1) -0.365281640980e12 / 0.1653303156799e13 * c(m-3) + 0.564461e6 / 0.4461432e7 * c(m-4) + 0.1613976761032884305e19 / 0.7963657098519931984e19 * c(m-2) - 0.198407225513315475e18 / 0.7963657098519931984e19 * c(m-1) -0.1328188692663e13 / 0.37594290333616e14 * c(m-2) + 0.2226377963775e13 / 0.37594290333616e14 * c(m-1) - 0.8673e4 / 0.363014e6 * c(m-3) c(m-3) / 0.49e2 + 0.49579087e8 / 0.10149031312e11 * c(m-2) - 0.256702175e9 / 0.10149031312e11 * c(m-1); -0.368395e6 / 0.2230716e7 * c(m-4) + c(m-5) / 0.8e1 + 0.48866620889e11 / 0.404890569012e12 * c(m-3) + 0.752806667e9 / 0.539854092016e12 * c(m-2) + 0.752806667e9 / 0.539854092016e12 * c(m-1) -c(m-5) / 0.6e1 - 0.4959271814984644613e19 / 0.20965546238960637264e20 * c(m-2) - 0.375177e6 / 0.743572e6 * c(m-4) - 0.13425842714e11 / 0.33740880751e11 * c(m-3) - 0.193247108773400725e18 / 0.6988515412986879088e19 * c(m-1) c(m-5) / 0.24e2 + 0.1869103e7 / 0.2230716e7 * c(m-4) + 0.507284006600757858213e21 / 0.475219048083107777984e21 * c(m-2) + 0.3e1 / 0.1088e4 * c(m) + 0.31688435395e11 / 0.67481761502e11 * c(m-3) + 0.27769176016102795561e20 / 0.712828572124661666976e21 * c(m-1) -0.125059e6 / 0.743572e6 * c(m-4) + c(m) / 0.136e3 - 0.23099342648e11 / 0.101222642253e12 * c(m-3) - 0.4836340090442187227e19 / 0.5525802884687299744e19 * c(m-2) + 0.193950157930938693e18 / 0.5525802884687299744e19 * c(m-1) 0.260297319232891e15 / 0.2556411742685888e16 * c(m-2) - 0.59e2 / 0.1088e4 * c(m) - 0.106641839640553e15 / 0.1278205871342944e16 * c(m-1) + 0.26019e5 / 0.726028e6 * c(m-3) -0.1244724001e10 / 0.21126554976e11 * c(m-2) + 0.3e1 / 0.68e2 * c(m) + 0.752806667e9 / 0.21126554976e11 * c(m-1); -0.3391e4 / 0.6692148e7 * c(m-4) - 0.238797444493e12 / 0.119037827289528e15 * c(m-3) + 0.33235054191e11 / 0.26452850508784e14 * c(m-2) + 0.33235054191e11 / 0.26452850508784e14 * c(m-1) -0.365281640980e12 / 0.1653303156799e13 * c(m-3) + 0.564461e6 / 0.4461432e7 * c(m-4) + 0.1613976761032884305e19 / 0.7963657098519931984e19 * c(m-2) - 0.198407225513315475e18 / 0.7963657098519931984e19 * c(m-1) -0.125059e6 / 0.743572e6 * c(m-4) + c(m) / 0.136e3 - 0.23099342648e11 / 0.101222642253e12 * c(m-3) - 0.4836340090442187227e19 / 0.5525802884687299744e19 * c(m-2) + 0.193950157930938693e18 / 0.5525802884687299744e19 * c(m-1) 0.564461e6 / 0.13384296e8 * c(m-4) + 0.470299699916357e15 / 0.952302618316224e15 * c(m-3) + 0.550597048646198778781e21 / 0.1624586048098066124736e22 * c(m-1) + c(m) / 0.51e2 + 0.378288882302546512209e21 / 0.270764341349677687456e21 * c(m-2) -0.59e2 / 0.408e3 * c(m) - 0.29294615794607e14 / 0.29725717938208e14 * c(m-2) - 0.2234477713167e13 / 0.29725717938208e14 * c(m-1) - 0.8673e4 / 0.363014e6 * c(m-3) -0.59e2 / 0.3136e4 * c(m-3) - 0.13249937023e11 / 0.48148892736e11 * c(m-1) + 0.2e1 / 0.17e2 * c(m) + 0.2083938599e10 / 0.8024815456e10 * c(m-2); -0.8673e4 / 0.2904112e7 * c(m-2) - 0.8673e4 / 0.2904112e7 * c(m-1) + 0.8673e4 / 0.1452056e7 * c(m-3) -0.1328188692663e13 / 0.37594290333616e14 * c(m-2) + 0.2226377963775e13 / 0.37594290333616e14 * c(m-1) - 0.8673e4 / 0.363014e6 * c(m-3) 0.260297319232891e15 / 0.2556411742685888e16 * c(m-2) - 0.59e2 / 0.1088e4 * c(m) - 0.106641839640553e15 / 0.1278205871342944e16 * c(m-1) + 0.26019e5 / 0.726028e6 * c(m-3) -0.59e2 / 0.408e3 * c(m) - 0.29294615794607e14 / 0.29725717938208e14 * c(m-2) - 0.2234477713167e13 / 0.29725717938208e14 * c(m-1) - 0.8673e4 / 0.363014e6 * c(m-3) 0.9258282831623875e16 / 0.7669235228057664e16 * c(m-2) + 0.3481e4 / 0.3264e4 * c(m) + 0.228389721191751e15 / 0.1278205871342944e16 * c(m-1) + 0.8673e4 / 0.1452056e7 * c(m-3) -0.6025413881e10 / 0.21126554976e11 * c(m-2) - 0.59e2 / 0.68e2 * c(m) - 0.537416663e9 / 0.7042184992e10 * c(m-1); -c(m-3) / 0.392e3 + c(m-2) / 0.784e3 + c(m-1) / 0.784e3 c(m-3) / 0.49e2 + 0.49579087e8 / 0.10149031312e11 * c(m-2) - 0.256702175e9 / 0.10149031312e11 * c(m-1) -0.1244724001e10 / 0.21126554976e11 * c(m-2) + 0.3e1 / 0.68e2 * c(m) + 0.752806667e9 / 0.21126554976e11 * c(m-1) -0.59e2 / 0.3136e4 * c(m-3) - 0.13249937023e11 / 0.48148892736e11 * c(m-1) + 0.2e1 / 0.17e2 * c(m) + 0.2083938599e10 / 0.8024815456e10 * c(m-2) -0.6025413881e10 / 0.21126554976e11 * c(m-2) - 0.59e2 / 0.68e2 * c(m) - 0.537416663e9 / 0.7042184992e10 * c(m-1) 0.3e1 / 0.3136e4 * c(m-3) + 0.27010400129e11 / 0.345067064608e12 * c(m-2) + 0.234566387291e12 / 0.690134129216e12 * c(m-1) + 0.12e2 / 0.17e2 * c(m);]; + + M=M/h; + D2=HI*(-M-c(1)*e_1*S_1'+c(m)*e_m*S_m'); + end + D2 = @D2_fun; + + + S2_U=[2 -5 4 -1;]/h^2; + S2_1=sparse(1,m); + S2_1(1:4)=S2_U; + S2_m=sparse(1,m); + S2_m(m-3:m)=fliplr(S2_U); + S2_1 = S2_1'; + S2_m = S2_m'; + + 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); + stencil = [m3,m2,m1,m0,m1,m2,m3]; + d = (length(stencil)-1)/2; + diags = -d:d; + M4 = stripeMatrix(stencil, diags, m); + + %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.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;]; + + M4(1:6,1:6)=M4_U; + + M4(m-5:m,m-5:m)=rot90( M4_U ,2 ); + M4=M4/h^3; + + S3_U=[-1 3 -3 1;]/h^3; + S3_1=sparse(1,m); + S3_1(1:4)=S3_U; + S3_m=sparse(1,m); + S3_m(m-3:m)=fliplr(-S3_U); + S3_1 = S3_1'; + S3_m = S3_m'; + + D4=HI*(M4-e_1*S3_1'+e_m*S3_m' + S_1*S2_1'-S_m*S2_m'); + + + + + +end
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/+implementations/d4_compatible_halfvariable_6.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/+sbp/+implementations/d4_compatible_halfvariable_6.m Mon Sep 12 12:53:02 2016 +0200 @@ -0,0 +1,170 @@ +function [H, HI, D2, D4, e_1, e_m, M4, S2_1, S2_m, S3_1,... + S3_m, S_1, S_m] = d4_compatible_halfvariable_6(m,h) + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + %%% 6:te ordn. SBP Finita differens %%% + %%% operatorer med diagonal norm %%% + %%% Extension to variable koeff %%% + %%% %%% + %%% H (Normen) %%% + %%% D1=H^(-1)Q (approx f?rsta derivatan) %%% + %%% D2 (approx andra derivatan) %%% + %%% D2=HI*(R+C*D*S %%% + %%% %%% + %%% R=-D1'*H*C*D1-RR %%% + %%% %%% + %%% RR ?r dissipation) %%% + %%% Dissipationen uppbyggd av D4: %%% + %%% DI=D4*B*H*D4 %%% + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + + %m=10; %problemstorlek + %h=1/(m-1); + + % Variable koefficicients are stored in vector: c, size m, + % with the unknown stored as c(1), c(2), ..., c_m + % x=1:h:m*h;x=x'; + % c=x.^0; + + BP = 8; + if(m<2*BP) + error(['Operator requires at least ' num2str(2*BP) ' grid points']); + end + + + H=speye(m,m); + H(1:6,1:6)=diag([13649/43200,12013/8640,2711/4320,5359/4320,7877/8640, ... + 43801/43200]); + H(m-5:m,m-5:m)=rot90(diag([13649/43200,12013/8640, ... + 2711/4320,5359/4320,7877/8640,43801/43200]),2); + + +% x1=0.70127127127127; + + +% 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)); +% +% +% +% D1(1:6,1:9)=[-21600/13649, 43200/13649*x1-7624/40947, -172800/13649*x1+ ... +% 715489/81894, 259200/13649*x1-187917/13649, -172800/13649* ... +% x1+735635/81894, 43200/13649*x1-89387/40947, 0, 0, 0; ... +% -8640/12013*x1+7624/180195, 0, 86400/12013*x1-57139/12013, ... +% -172800/12013*x1+745733/72078, 129600/12013*x1-91715/12013, ... +% -34560/12013*x1+240569/120130, 0, 0, 0; ... +% 17280/2711*x1-715489/162660, -43200/2711*x1+57139/5422, 0, ... +% 86400/2711*x1-176839/8133, -86400/2711*x1+242111/10844, ... +% 25920/2711*x1-182261/27110, 0, 0, 0; ... +% -25920/5359*x1+187917/53590, 86400/5359*x1-745733/64308, ... +% -86400/5359*x1+176839/16077, 0, 43200/5359*x1-165041/32154, ... +% -17280/5359*x1+710473/321540, 72/5359, 0, 0; ... +% 34560/7877*x1-147127/47262, -129600/7877*x1+91715/7877, ... +% 172800/7877*x1-242111/15754, -86400/7877*x1+165041/23631, ... +% 0, 8640/7877*x1, -1296/7877, 144/7877, 0; ... +% -43200/43801*x1+89387/131403, 172800/43801*x1-240569/87602,... +% -259200/43801*x1+182261/43801, 172800/43801*x1-710473/262806, ... +% -43200/43801*x1, 0, 32400/43801, -6480/43801, 720/43801]; +% D1(m-5:m,m-8:m)=rot90( -D1(1:6,1:9),2); +% D1=D1/h; + + e_1=sparse(m,1);e_1(1)=1; + e_m=sparse(m,1);e_m(m)=1; + + S_U=[-25/12, 4, -3, 4/3, -1/4]/h; + S_1=sparse(1,m); + S_1(1:5)=S_U; + S_m=sparse(1,m); + S_m(m-4:m)=fliplr(-S_U); + S_1 = S_1'; + S_m = S_m'; + + + + %DS=sparse(m,m); + %DS(1,1:5)=-[-25/12, 4, -3, 4/3, -1/4]; + %DS(m,m-4:m)=fliplr(-[-25/12, 4, -3, 4/3, -1/4]); + %DS=diag(c)*DS/h; + + + H=h*H; + HI=inv(H); + + + M=sparse(m,m); + e_1 = sparse(e_1); + e_m = sparse(e_m); + S_1 = sparse(S_1); + S_m = sparse(S_m); + + scheme_width = 7; + scheme_radius = (scheme_width-1)/2; + r = (1+scheme_radius):(m-scheme_radius); + + function D2 = D2_fun(c) + + Mm3 = c(r-2) / 0.40e2 + c(r-1) / 0.40e2 - 0.11e2 / 0.360e3 * c(r-3) - 0.11e2 / 0.360e3 * c(r); + Mm2 = c(r-3) / 0.20e2 - 0.3e1 / 0.10e2 * c(r-1) + c(r+1) / 0.20e2 + 0.7e1 / 0.40e2 * c(r) + 0.7e1 / 0.40e2 * c(r-2); + Mm1 = -c(r-3) / 0.40e2 - 0.3e1 / 0.10e2 * c(r-2) - 0.3e1 / 0.10e2 * c(r+1) - c(r+2) / 0.40e2 - 0.17e2 / 0.40e2 * c(r) - 0.17e2 / 0.40e2 * c(r-1); + M0 = c(r-3) / 0.180e3 + c(r-2) / 0.8e1 + 0.19e2 / 0.20e2 * c(r-1) + 0.19e2 / 0.20e2 * c(r+1) + c(r+2) / 0.8e1 + c(r+3) / 0.180e3 + 0.101e3 / 0.180e3 * c(r); + Mp1 = -c(r-2) / 0.40e2 - 0.3e1 / 0.10e2 * c(r-1) - 0.3e1 / 0.10e2 * c(r+2) - c(r+3) / 0.40e2 - 0.17e2 / 0.40e2 * c(r) - 0.17e2 / 0.40e2 * c(r+1); + Mp2 = c(r-1) / 0.20e2 - 0.3e1 / 0.10e2 * c(r+1) + c(r+3) / 0.20e2 + 0.7e1 / 0.40e2 * c(r) + 0.7e1 / 0.40e2 * c(r+2); + Mp3 = c(r+1) / 0.40e2 + c(r+2) / 0.40e2 - 0.11e2 / 0.360e3 * c(r) - 0.11e2 / 0.360e3 * c(r+3); + + M(r,:) = spdiags([Mm3 Mm2 Mm1 M0 Mp1 Mp2 Mp3],0:2*scheme_radius,length(r),m); + + + M(1:9,1:9)=[0.7912667594695582093926295e0 * c(1) + 0.2968472090638000742888467e0 * c(2) + 0.3185519088796429015220016e-2 * c(3) + 0.1632404042590951953384672e-1 * c(4) + 0.3160302244094415087693968e-1 * c(5) + 0.3167964748016105299646518e-1 * c(6) + 0.3148577733947253920469418e-1 * c(7) -0.1016689339350338144430605e1 * c(1) - 0.2845627370491611369031341e-1 * c(3) - 0.4128029838349298819825156e-1 * c(4) - 0.1392281451620140507549866e0 * c(5) - 0.1195777325611201766551392e0 * c(6) - 0.1194267756529333410855186e0 * c(7) 0.7075642937243715046279337e-1 * c(1) - 0.1845476106024151050283847e0 * c(2) - 0.4364163147111892346990101e-1 * c(4) + 0.2432367907207732460874765e0 * c(5) + 0.1582127073537215443965653e0 * c(6) + 0.1602348578364786307613271e0 * c(7) 0.2251991532891353212689574e0 * c(1) - 0.1662748711097054895317080e0 * c(2) + 0.2710530961648671297733465e-1 * c(3) - 0.1916646185968439909125616e0 * c(5) - 0.7684117160199014594442072e-1 * c(6) - 0.8219586949831697575883635e-1 * c(7) -0.5224403464202056316702078e-1 * c(1) + 0.4440063948509876221050939e-1 * c(2) - 0.1023976547309387874453988e-2 * c(3) + 0.7403484645316174090533193e-1 * c(4) + 0.1241625568998496895352046e-1 * c(6) + 0.7188652847892601282652228e-1 * c(5) + 0.1379362997104735503447960e-1 * c(7) -0.1828896813877197352675410e-1 * c(1) + 0.9574633163221758060736592e-2 * c(2) - 0.8105784530576404277872603e-3 * c(3) - 0.7348845587775519698437916e-2 * c(4) + 0.1063601949723906997026904e-1 * c(5) - 0.1315967038382618382356495e-1 * c(6) - 0.2117936478838753524581943e-1 * c(7) 0.1911888563316170927411831e-2 * c(4) - 0.4068130355529149936100229e-1 * c(5) + 0.1319674981073749167009902e-1 * c(6) + 0.2557266518123783676349144e-1 * c(7) 0.1559652871136785763960685e-1 * c(5) - 0.6486184157331537899459796e-2 * c(6) - 0.9110344554036319740147054e-2 * c(7) 0.5593983696629863059347067e-3 * c(6) - 0.1384822535100796372263822e-2 * c(5) + 0.8254241654378100663291154e-3 * c(7); -0.1016689339350338144430605e1 * c(1) - 0.2845627370491611369031341e-1 * c(3) - 0.4128029838349298819825156e-1 * c(4) - 0.1392281451620140507549866e0 * c(5) - 0.1195777325611201766551392e0 * c(6) - 0.1194267756529333410855186e0 * c(7) 0.1306332157111667628555907e1 * c(1) + 0.2542001760457345743492403e0 * c(3) + 0.1043897828092562609502636e0 * c(4) + 0.6672328021032112950919876e0 * c(5) + 0.4681819359722749441073885e0 * c(6) + 0.4676415410195836920069412e0 * c(7) -0.9091410269992464604926176e-1 * c(1) + 0.1103611313171476425250639e0 * c(4) - 0.1290397544997518887000350e1 * c(5) - 0.6639605248735044787146222e0 * c(6) - 0.6615974464005206184151509e0 * c(7) -0.2893557395653431666593814e0 * c(1) - 0.2421320004064592721552708e0 * c(3) + 0.1187670255028031027693374e1 * c(5) + 0.3956598149904136332753521e0 * c(6) + 0.3860048921755800000681479e0 * c(7) 0.6712774475803763988977355e-1 * c(1) + 0.9147192682075630179962131e-2 * c(3) - 0.1872196143003808021730728e0 * c(4) - 0.1319358558853174530078498e0 * c(6) - 0.4871575736811911887376923e0 * c(5) - 0.1047516312275448138054418e0 * c(7) 0.2349927974590068869356781e-1 * c(1) + 0.7240905383565181316381731e-2 * c(3) + 0.1858378996391679448655070e-1 * c(4) - 0.9289616133938676174345208e-1 * c(5) + 0.1223513270418807666970488e0 * c(6) + 0.1113520320436295033894092e0 * c(7) -0.4834791406446907590553793e-2 * c(4) + 0.2310683832687820403062715e0 * c(5) - 0.1080774142196007991746827e0 * c(6) - 0.1181561776427343335410349e0 * c(7) -0.8368141434403455353724691e-1 * c(5) + 0.4093499466767054661591066e-1 * c(6) + 0.4274641967636400692133626e-1 * c(7) -0.3576545132696983143406173e-2 * c(6) + 0.7389399124121078682094445e-2 * c(5) - 0.3812853991424095538688273e-2 * c(7); 0.7075642937243715046279337e-1 * c(1) - 0.1845476106024151050283847e0 * c(2) - 0.4364163147111892346990101e-1 * c(4) + 0.2432367907207732460874765e0 * c(5) + 0.1582127073537215443965653e0 * c(6) + 0.1602348578364786307613271e0 * c(7) -0.9091410269992464604926176e-1 * c(1) + 0.1103611313171476425250639e0 * c(4) - 0.1290397544997518887000350e1 * c(5) - 0.6639605248735044787146222e0 * c(6) - 0.6615974464005206184151509e0 * c(7) 0.6327161147136873807796515e-2 * c(1) + 0.1147318200715868527529827e0 * c(2) + 0.1166740554279680007487795e0 * c(4) + 0.2766610808285444037240703e1 * c(5) + 0.1070920689960817104203947e1 * c(6) + 0.1013161391032973057171717e1 * c(7) 0.2013769413884797246646959e-1 * c(1) + 0.1033717994630886401730470e0 * c(2) - 0.2913221621151742724258117e1 * c(5) - 0.8755807343482262259774782e0 * c(6) - 0.6909957183488812426508351e0 * c(7) -0.4671751091575462868310238e-2 * c(1) - 0.2760353365637712827793337e-1 * c(2) - 0.1979290298620869974478871e0 * c(4) + 0.5402985338373433052255418e0 * c(6) + 0.1239177593031911077924537e1 * c(5) + 0.2628038050247358227280031e0 * c(7) -0.1635430866921887819487473e-2 * c(1) - 0.5952475275883259619711594e-2 * c(2) + 0.1964682777744275219350831e-1 * c(4) + 0.3236640012639046600590714e0 * c(5) - 0.4659516693228870973898560e0 * c(6) - 0.2217272720941736859420432e0 * c(7) -0.5111353189352474549563559e-2 * c(4) - 0.5355878163774754346032096e0 * c(5) + 0.3328335104489738933610597e0 * c(6) + 0.2078656591178540157917135e0 * c(7) 0.1824328174134289562208038e0 * c(5) - 0.1059816030196818445908057e0 * c(6) - 0.7645121439374711162999809e-1 * c(7) 0.9209089963443799485648361e-2 * c(6) - 0.1591502818872493167091475e-1 * c(5) + 0.6705938225281132185266388e-2 * c(7); 0.2251991532891353212689574e0 * c(1) - 0.1662748711097054895317080e0 * c(2) + 0.2710530961648671297733465e-1 * c(3) - 0.1916646185968439909125616e0 * c(5) - 0.7684117160199014594442072e-1 * c(6) - 0.8219586949831697575883635e-1 * c(7) -0.2893557395653431666593814e0 * c(1) - 0.2421320004064592721552708e0 * c(3) + 0.1187670255028031027693374e1 * c(5) + 0.3956598149904136332753521e0 * c(6) + 0.3860048921755800000681479e0 * c(7) 0.2013769413884797246646959e-1 * c(1) + 0.1033717994630886401730470e0 * c(2) - 0.2913221621151742724258117e1 * c(5) - 0.8755807343482262259774782e0 * c(6) - 0.6909957183488812426508351e0 * c(7) 0.6409299775987186986730499e-1 * c(1) + 0.9313657638804699948929701e-1 * c(2) + 0.2306367624634749229113646e0 * c(3) + 0.3689440308283716620260816e1 * c(5) + 0.1190550338687608873798462e1 * c(6) + 0.5912479546888856519443605e0 * c(7) -0.1486895819265604128572498e-1 * c(1) - 0.2487040599390160764166412e-1 * c(2) - 0.8712928907711754187084757e-2 * c(3) - 0.1263507837371824205693950e1 * c(6) - 0.3058317397843997326920898e0 * c(7) - 0.1470691926045802954795783e1 * c(5) -0.5205147429855955657625694e-2 * c(1) - 0.5363098747528542488971874e-2 * c(2) - 0.6897142765790609546343709e-2 * c(3) - 0.7857524521667450101721993e0 * c(5) + 0.2291148005423734600066709e0 * c(7) + 0.9977064356292750529201981e0 * c(6) 0.6697297488067662265210608e0 * c(5) - 0.5013247356072127938999311e0 * c(6) - 0.1795161243106645437322408e0 * c(7) -0.2022909060111751565150958e0 * c(5) + 0.1453421858063658498587377e0 * c(6) + 0.5694872020480930665635812e-1 * c(7) -0.1200429618441003833696998e-1 * c(6) - 0.4776915669385923841535432e-2 * c(7) + 0.1678121185379596217850541e-1 * c(5); -0.5224403464202056316702078e-1 * c(1) + 0.4440063948509876221050939e-1 * c(2) - 0.1023976547309387874453988e-2 * c(3) + 0.7403484645316174090533193e-1 * c(4) + 0.1241625568998496895352046e-1 * c(6) + 0.7188652847892601282652228e-1 * c(5) + 0.1379362997104735503447960e-1 * c(7) 0.6712774475803763988977355e-1 * c(1) + 0.9147192682075630179962131e-2 * c(3) - 0.1872196143003808021730728e0 * c(4) - 0.1319358558853174530078498e0 * c(6) - 0.4871575736811911887376923e0 * c(5) - 0.1047516312275448138054418e0 * c(7) -0.4671751091575462868310238e-2 * c(1) - 0.2760353365637712827793337e-1 * c(2) - 0.1979290298620869974478871e0 * c(4) + 0.5402985338373433052255418e0 * c(6) + 0.1239177593031911077924537e1 * c(5) + 0.2628038050247358227280031e0 * c(7) -0.1486895819265604128572498e-1 * c(1) - 0.2487040599390160764166412e-1 * c(2) - 0.8712928907711754187084757e-2 * c(3) - 0.1263507837371824205693950e1 * c(6) - 0.3058317397843997326920898e0 * c(7) - 0.1470691926045802954795783e1 * c(5) 0.3449455095910233625229891e-2 * c(1) + 0.6641183499427826101618457e-2 * c(2) + 0.3291545083271862858501887e-3 * c(3) + 0.3357721707576477199985656e0 * c(4) + 0.2096413329579026439044119e1 * c(6) + 0.2317323204183126854954203e0 * c(7) + 0.6107825764368264576481962e-2 * c(8) + 0.7109125850683376695640722e0 * c(5) 0.1207544072304193806052558e-2 * c(1) + 0.1432116665752147607469646e-2 * c(2) + 0.2605582646183255957264249e-3 * c(3) - 0.3332941113251635390801278e-1 * c(4) - 0.2808241697385532683612407e0 * c(7) - 0.2720908083525083608370563e-1 * c(8) + 0.1045865435682921987447929e0 * c(5) - 0.1348436986667115543203552e1 * c(6) 0.8671038084174692625075159e-2 * c(4) + 0.1736073411355428563685818e0 * c(6) + 0.5331362125287625412555844e-1 * c(8) - 0.2424935262404526301801157e0 * c(5) + 0.1569015257678588270609004e0 * c(7) -0.8631683980217122275970376e-1 * c(6) + 0.2698842360470999243492629e-1 * c(7) + 0.8098194147715651085292754e-1 * c(5) - 0.3276463639080639163926118e-1 * c(8) 0.7462059484530855073291365e-2 * c(6) - 0.8121640361668678949573496e-3 * c(7) + 0.5522702088127090209264064e-3 * c(8) - 0.7202165657176696199260422e-2 * c(5); -0.1828896813877197352675410e-1 * c(1) + 0.9574633163221758060736592e-2 * c(2) - 0.8105784530576404277872603e-3 * c(3) - 0.7348845587775519698437916e-2 * c(4) + 0.1063601949723906997026904e-1 * c(5) - 0.1315967038382618382356495e-1 * c(6) - 0.2117936478838753524581943e-1 * c(7) 0.2349927974590068869356781e-1 * c(1) + 0.7240905383565181316381731e-2 * c(3) + 0.1858378996391679448655070e-1 * c(4) - 0.9289616133938676174345208e-1 * c(5) + 0.1223513270418807666970488e0 * c(6) + 0.1113520320436295033894092e0 * c(7) -0.1635430866921887819487473e-2 * c(1) - 0.5952475275883259619711594e-2 * c(2) + 0.1964682777744275219350831e-1 * c(4) + 0.3236640012639046600590714e0 * c(5) - 0.4659516693228870973898560e0 * c(6) - 0.2217272720941736859420432e0 * c(7) -0.5205147429855955657625694e-2 * c(1) - 0.5363098747528542488971874e-2 * c(2) - 0.6897142765790609546343709e-2 * c(3) - 0.7857524521667450101721993e0 * c(5) + 0.2291148005423734600066709e0 * c(7) + 0.9977064356292750529201981e0 * c(6) 0.1207544072304193806052558e-2 * c(1) + 0.1432116665752147607469646e-2 * c(2) + 0.2605582646183255957264249e-3 * c(3) - 0.3332941113251635390801278e-1 * c(4) - 0.2808241697385532683612407e0 * c(7) - 0.2720908083525083608370563e-1 * c(8) + 0.1045865435682921987447929e0 * c(5) - 0.1348436986667115543203552e1 * c(6) 0.4227226173449345042468960e-3 * c(1) + 0.3088241944378964404772302e-3 * c(2) + 0.2062575706647430620228133e-3 * c(3) + 0.3308343404200968256656458e-2 * c(4) + 0.5828047016405001815804837e0 * c(5) + 0.8054174220366215473556835e0 * c(7) + 0.1338363233410033443348225e0 * c(8) + 0.5555555555555555555555556e-2 * c(9) + 0.1190362071861893051132274e1 * c(6) -0.8607044252686413302647675e-3 * c(4) - 0.1748074708673904989293256e0 * c(5) - 0.3132544850115050165022338e0 * c(8) - 0.2500000000000000000000000e-1 * c(9) - 0.3169166305310429271303167e0 * c(7) - 0.6691607091647929161078591e0 * c(6) 0.3354661791693352108660900e-1 * c(5) - 0.3343620022386971405018586e0 * c(7) + 0.5000000000000000000000000e-1 * c(9) + 0.2169790609807602750804271e0 * c(6) + 0.1838363233410033443348225e0 * c(8) 0.2912518476823004642951502e-1 * c(7) + 0.2279091916474916391629437e-1 * c(8) - 0.3068985997518740530511593e-1 * c(6) - 0.1781799513347360596249022e-2 * c(5) - 0.3055555555555555555555556e-1 * c(9); 0.1911888563316170927411831e-2 * c(4) - 0.4068130355529149936100229e-1 * c(5) + 0.1319674981073749167009902e-1 * c(6) + 0.2557266518123783676349144e-1 * c(7) -0.4834791406446907590553793e-2 * c(4) + 0.2310683832687820403062715e0 * c(5) - 0.1080774142196007991746827e0 * c(6) - 0.1181561776427343335410349e0 * c(7) -0.5111353189352474549563559e-2 * c(4) - 0.5355878163774754346032096e0 * c(5) + 0.3328335104489738933610597e0 * c(6) + 0.2078656591178540157917135e0 * c(7) 0.6697297488067662265210608e0 * c(5) - 0.5013247356072127938999311e0 * c(6) - 0.1795161243106645437322408e0 * c(7) 0.8671038084174692625075159e-2 * c(4) + 0.1736073411355428563685818e0 * c(6) + 0.5331362125287625412555844e-1 * c(8) - 0.2424935262404526301801157e0 * c(5) + 0.1569015257678588270609004e0 * c(7) -0.8607044252686413302647675e-3 * c(4) - 0.1748074708673904989293256e0 * c(5) - 0.3132544850115050165022338e0 * c(8) - 0.2500000000000000000000000e-1 * c(9) - 0.3169166305310429271303167e0 * c(7) - 0.6691607091647929161078591e0 * c(6) 0.2239223735771599178951297e-3 * c(4) + 0.1275437785430956673825710e0 * c(5) + 0.1011699483929608164601067e1 * c(6) + 0.9698817275172575247533506e0 * c(8) + 0.1250000000000000000000000e0 * c(9) + 0.5555555555555555555555556e-2 * c(10) + 0.4823177543031281500117826e0 * c(7) -0.3784113973033012949863031e-1 * c(5) - 0.2997556885134827361576001e0 * c(6) - 0.3000000000000000000000000e0 * c(9) - 0.2500000000000000000000000e-1 * c(10) - 0.3991486867446821178415359e0 * c(7) - 0.4382544850115050165022338e0 * c(8) 0.4698146218022683933926520e-1 * c(6) - 0.2966863787471237458744416e0 * c(8) + 0.5000000000000000000000000e-1 * c(10) + 0.1716355704146006481727960e0 * c(7) + 0.3069346152296258362380356e-2 * c(5) + 0.1750000000000000000000000e0 * c(9); 0.1559652871136785763960685e-1 * c(5) - 0.6486184157331537899459796e-2 * c(6) - 0.9110344554036319740147054e-2 * c(7) -0.8368141434403455353724691e-1 * c(5) + 0.4093499466767054661591066e-1 * c(6) + 0.4274641967636400692133626e-1 * c(7) 0.1824328174134289562208038e0 * c(5) - 0.1059816030196818445908057e0 * c(6) - 0.7645121439374711162999809e-1 * c(7) -0.2022909060111751565150958e0 * c(5) + 0.1453421858063658498587377e0 * c(6) + 0.5694872020480930665635812e-1 * c(7) -0.8631683980217122275970376e-1 * c(6) + 0.2698842360470999243492629e-1 * c(7) + 0.8098194147715651085292754e-1 * c(5) - 0.3276463639080639163926118e-1 * c(8) 0.3354661791693352108660900e-1 * c(5) - 0.3343620022386971405018586e0 * c(7) + 0.5000000000000000000000000e-1 * c(9) + 0.2169790609807602750804271e0 * c(6) + 0.1838363233410033443348225e0 * c(8) -0.3784113973033012949863031e-1 * c(5) - 0.2997556885134827361576001e0 * c(6) - 0.3000000000000000000000000e0 * c(9) - 0.2500000000000000000000000e-1 * c(10) - 0.3991486867446821178415359e0 * c(7) - 0.4382544850115050165022338e0 * c(8) 0.1230328942716804455358698e-1 * c(5) + 0.1183647529645898332481833e0 * c(6) + 0.9410511898227943334189628e0 * c(7) + 0.9500000000000000000000000e0 * c(9) + 0.1250000000000000000000000e0 * c(10) + 0.5555555555555555555555556e-2 * c(11) + 0.5699474344521144554459336e0 * c(8) -0.2308067892671916339568942e-1 * c(6) - 0.2986625053775149497180439e0 * c(7) - 0.3000000000000000000000000e0 * c(10) - 0.2500000000000000000000000e-1 * c(11) - 0.1047734860515050802561078e-2 * c(5) - 0.4272090808352508360837056e0 * c(8) - 0.4250000000000000000000000e0 * c(9); 0.5593983696629863059347067e-3 * c(6) - 0.1384822535100796372263822e-2 * c(5) + 0.8254241654378100663291154e-3 * c(7) -0.3576545132696983143406173e-2 * c(6) + 0.7389399124121078682094445e-2 * c(5) - 0.3812853991424095538688273e-2 * c(7) 0.9209089963443799485648361e-2 * c(6) - 0.1591502818872493167091475e-1 * c(5) + 0.6705938225281132185266388e-2 * c(7) -0.1200429618441003833696998e-1 * c(6) - 0.4776915669385923841535432e-2 * c(7) + 0.1678121185379596217850541e-1 * c(5) 0.7462059484530855073291365e-2 * c(6) - 0.8121640361668678949573496e-3 * c(7) + 0.5522702088127090209264064e-3 * c(8) - 0.7202165657176696199260422e-2 * c(5) 0.2912518476823004642951502e-1 * c(7) + 0.2279091916474916391629437e-1 * c(8) - 0.3068985997518740530511593e-1 * c(6) - 0.1781799513347360596249022e-2 * c(5) - 0.3055555555555555555555556e-1 * c(9) 0.4698146218022683933926520e-1 * c(6) - 0.2966863787471237458744416e0 * c(8) + 0.5000000000000000000000000e-1 * c(10) + 0.1716355704146006481727960e0 * c(7) + 0.3069346152296258362380356e-2 * c(5) + 0.1750000000000000000000000e0 * c(9) -0.2308067892671916339568942e-1 * c(6) - 0.2986625053775149497180439e0 * c(7) - 0.3000000000000000000000000e0 * c(10) - 0.2500000000000000000000000e-1 * c(11) - 0.1047734860515050802561078e-2 * c(5) - 0.4272090808352508360837056e0 * c(8) - 0.4250000000000000000000000e0 * c(9) 0.5139370221149109977041877e-2 * c(6) + 0.1247723215009422001393184e0 * c(7) + 0.9505522702088127090209264e0 * c(8) + 0.9500000000000000000000000e0 * c(10) + 0.1250000000000000000000000e0 * c(11) + 0.5555555555555555555555556e-2 * c(12) + 0.9159362465153641826887659e-4 * c(5) + 0.5611111111111111111111111e0 * c(9);]; + + M(m-8:m,m-8:m)=[0.5555555555555555555555556e-2 * c(m-11) + 0.1250000000000000000000000e0 * c(m-10) + 0.9500000000000000000000000e0 * c(m-9) + 0.9505522702088127090209264e0 * c(m-7) + 0.1247205076844361998744053e0 * c(m-6) + 0.5139370221149109977041877e-2 * c(m-5) + 0.5611111111111111111111111e0 * c(m-8) + 0.1434074411575366831819799e-3 * c(m-4) -0.2500000000000000000000000e-1 * c(m-10) - 0.3000000000000000000000000e0 * c(m-9) - 0.2980649679116425253322056e0 * c(m-6) - 0.2308067892671916339568942e-1 * c(m-5) - 0.4250000000000000000000000e0 * c(m-8) - 0.4272090808352508360837056e0 * c(m-7) - 0.1645272326387475188399322e-2 * c(m-4) 0.5000000000000000000000000e-1 * c(m-9) - 0.2966863787471237458744416e0 * c(m-7) + 0.4698146218022683933926520e-1 * c(m-5) + 0.1750000000000000000000000e0 * c(m-8) + 0.1700291833903489463825077e0 * c(m-6) + 0.4675733176547960152668626e-2 * c(m-4) 0.2279091916474916391629437e-1 * c(m-7) + 0.3097763128598982561225538e-1 * c(m-6) - 0.3055555555555555555555556e-1 * c(m-8) - 0.3068985997518740530511593e-1 * c(m-5) - 0.3634246031107139778989373e-2 * c(m-4) 0.5522702088127090209264064e-3 * c(m-7) - 0.3265435411305071914756373e-2 * c(m-6) + 0.7462059484530855073291365e-2 * c(m-5) - 0.4748894282038492179461399e-2 * c(m-4) 0.6272075574042975468177820e-3 * c(m-6) - 0.1200429618441003833696998e-1 * c(m-5) + 0.1137708862700574079015220e-1 * c(m-4) 0.9209089963443799485648361e-2 * c(m-5) - 0.3129629392354775191148163e-3 * c(m-6) - 0.8896127024208321966533544e-2 * c(m-4) -0.3576545132696983143406173e-2 * c(m-5) + 0.4335019854436220306755673e-3 * c(m-6) + 0.3143043147253361112730605e-2 * c(m-4) 0.5593983696629863059347067e-3 * c(m-5) - 0.1446656414398166805849327e-3 * c(m-6) - 0.4147327282231696253497740e-3 * c(m-4); -0.2500000000000000000000000e-1 * c(m-10) - 0.3000000000000000000000000e0 * c(m-9) - 0.2980649679116425253322056e0 * c(m-6) - 0.2308067892671916339568942e-1 * c(m-5) - 0.4250000000000000000000000e0 * c(m-8) - 0.4272090808352508360837056e0 * c(m-7) - 0.1645272326387475188399322e-2 * c(m-4) 0.5555555555555555555555556e-2 * c(m-10) + 0.1250000000000000000000000e0 * c(m-9) + 0.9500000000000000000000000e0 * c(m-8) + 0.9341601509609901526962449e0 * c(m-6) + 0.1183647529645898332481833e0 * c(m-5) + 0.1919432828897222527630486e-1 * c(m-4) + 0.5699474344521144554459336e0 * c(m-7) -0.2500000000000000000000000e-1 * c(m-9) - 0.3000000000000000000000000e0 * c(m-8) - 0.2997556885134827361576001e0 * c(m-5) - 0.5636663150858098975790317e-1 * c(m-4) - 0.4382544850115050165022338e0 * c(m-7) - 0.3806231949664312575822630e0 * c(m-6) 0.5000000000000000000000000e-1 * c(m-8) - 0.3557251496099816106154206e0 * c(m-6) + 0.5490976528821799120017102e-1 * c(m-4) + 0.1838363233410033443348225e0 * c(m-7) + 0.2169790609807602750804271e0 * c(m-5) 0.5528052133944605740009217e-1 * c(m-6) - 0.8631683980217122275970376e-1 * c(m-5) - 0.3276463639080639163926118e-1 * c(m-7) + 0.5268984374242044588776166e-1 * c(m-4) -0.5373770512016897565958305e-2 * c(m-6) + 0.1453421858063658498587377e0 * c(m-5) - 0.1399684152943489522927794e0 * c(m-4) -0.1059816030196818445908057e0 * c(m-5) + 0.1014880675788250237247178e0 * c(m-4) + 0.4493535440856820866087846e-2 * c(m-6) 0.4093499466767054661591066e-1 * c(m-5) - 0.3471075437892810033585296e-1 * c(m-4) - 0.6224240288742446280057699e-2 * c(m-6) -0.6486184157331537899459796e-2 * c(m-5) + 0.4409068609809831485979484e-2 * c(m-4) + 0.2077115547521706413480312e-2 * c(m-6); 0.5000000000000000000000000e-1 * c(m-9) - 0.2966863787471237458744416e0 * c(m-7) + 0.4698146218022683933926520e-1 * c(m-5) + 0.1750000000000000000000000e0 * c(m-8) + 0.1700291833903489463825077e0 * c(m-6) + 0.4675733176547960152668626e-2 * c(m-4) -0.2500000000000000000000000e-1 * c(m-9) - 0.3000000000000000000000000e0 * c(m-8) - 0.2997556885134827361576001e0 * c(m-5) - 0.5636663150858098975790317e-1 * c(m-4) - 0.4382544850115050165022338e0 * c(m-7) - 0.3806231949664312575822630e0 * c(m-6) 0.5555555555555555555555556e-2 * c(m-9) + 0.1250000000000000000000000e0 * c(m-8) + 0.9698817275172575247533506e0 * c(m-7) + 0.1011699483929608164601067e1 * c(m-5) + 0.1773466968705924819112984e0 * c(m-4) + 0.2239223735771599178951297e-3 * c(m-3) + 0.4325148359756313354830552e0 * c(m-6) -0.2500000000000000000000000e-1 * c(m-8) - 0.3132544850115050165022338e0 * c(m-7) - 0.2322389872063761557916742e0 * c(m-4) - 0.8607044252686413302647675e-3 * c(m-3) - 0.2594851141920572702679681e0 * c(m-6) - 0.6691607091647929161078591e0 * c(m-5) 0.5331362125287625412555844e-1 * c(m-7) + 0.1736073411355428563685818e0 * c(m-5) + 0.8671038084174692625075159e-2 * c(m-3) + 0.8084259844422177692569663e-1 * c(m-6) - 0.1664345989168155800449120e0 * c(m-4) -0.5013247356072127938999311e0 * c(m-5) + 0.5021853752328231128475915e0 * c(m-4) - 0.1197175073672143005877150e-1 * c(m-6) 0.3328335104489738933610597e0 * c(m-5) - 0.3179803804558436283847901e0 * c(m-4) - 0.5111353189352474549563559e-2 * c(m-3) - 0.9741776803777790426705996e-2 * c(m-6) -0.1080774142196007991746827e0 * c(m-5) + 0.9941834083648937298100811e-1 * c(m-4) - 0.4834791406446907590553793e-2 * c(m-3) + 0.1349386478955833378422842e-1 * c(m-6) 0.1319674981073749167009902e-1 * c(m-5) - 0.1060554802883657391328704e-1 * c(m-4) + 0.1911888563316170927411831e-2 * c(m-3) - 0.4503090345217088684223814e-2 * c(m-6); 0.2279091916474916391629437e-1 * c(m-7) + 0.3097763128598982561225538e-1 * c(m-6) - 0.3055555555555555555555556e-1 * c(m-8) - 0.3068985997518740530511593e-1 * c(m-5) - 0.3634246031107139778989373e-2 * c(m-4) 0.5000000000000000000000000e-1 * c(m-8) - 0.3557251496099816106154206e0 * c(m-6) + 0.5490976528821799120017102e-1 * c(m-4) + 0.1838363233410033443348225e0 * c(m-7) + 0.2169790609807602750804271e0 * c(m-5) -0.2500000000000000000000000e-1 * c(m-8) - 0.3132544850115050165022338e0 * c(m-7) - 0.2322389872063761557916742e0 * c(m-4) - 0.8607044252686413302647675e-3 * c(m-3) - 0.2594851141920572702679681e0 * c(m-6) - 0.6691607091647929161078591e0 * c(m-5) 0.5555555555555555555555556e-2 * c(m-8) + 0.1338363233410033443348225e0 * c(m-7) + 0.7391887916719206077121040e0 * c(m-6) + 0.6490333320052011212240632e0 * c(m-4) + 0.3308343404200968256656458e-2 * c(m-3) + 0.2062575706647430620228133e-3 * c(m-2) + 0.3088241944378964404772302e-3 * c(m-1) + 0.4227226173449345042468960e-3 * c(m) + 0.1190362071861893051132274e1 * c(m-5) -0.2720908083525083608370563e-1 * c(m-7) - 0.1931148612480615118957263e0 * c(m-6) - 0.3332941113251635390801278e-1 * c(m-3) + 0.2605582646183255957264249e-3 * c(m-2) + 0.1432116665752147607469646e-2 * c(m-1) + 0.1207544072304193806052558e-2 * c(m) - 0.1348436986667115543203552e1 * c(m-5) + 0.1687723507780044227927853e-1 * c(m-4) 0.3590669644811151307464697e-1 * c(m-6) - 0.5925443480724830632401754e0 * c(m-4) - 0.6897142765790609546343709e-2 * c(m-2) - 0.5363098747528542488971874e-2 * c(m-1) - 0.5205147429855955657625694e-2 * c(m) + 0.9977064356292750529201981e0 * c(m-5) 0.7272438906214475928744770e-1 * c(m-4) + 0.1964682777744275219350831e-1 * c(m-3) - 0.5952475275883259619711594e-2 * c(m-1) - 0.1635430866921887819487473e-2 * c(m) + 0.2921234010758621482958052e-1 * c(m-6) - 0.4659516693228870973898560e0 * c(m-5) 0.5891947149681041048896399e-1 * c(m-4) + 0.1858378996391679448655070e-1 * c(m-3) + 0.7240905383565181316381731e-2 * c(m-2) + 0.2349927974590068869356781e-1 * c(m) - 0.4046360079256766884300687e-1 * c(m-6) + 0.1223513270418807666970488e0 * c(m-5) -0.2404661162020836566908542e-1 * c(m-4) - 0.7348845587775519698437916e-2 * c(m-3) - 0.8105784530576404277872603e-3 * c(m-2) + 0.9574633163221758060736592e-2 * c(m-1) - 0.1828896813877197352675410e-1 * c(m) + 0.1350326632905990039353503e-1 * c(m-6) - 0.1315967038382618382356495e-1 * c(m-5); 0.5522702088127090209264064e-3 * c(m-7) - 0.3265435411305071914756373e-2 * c(m-6) + 0.7462059484530855073291365e-2 * c(m-5) - 0.4748894282038492179461399e-2 * c(m-4) 0.5528052133944605740009217e-1 * c(m-6) - 0.8631683980217122275970376e-1 * c(m-5) - 0.3276463639080639163926118e-1 * c(m-7) + 0.5268984374242044588776166e-1 * c(m-4) 0.5331362125287625412555844e-1 * c(m-7) + 0.1736073411355428563685818e0 * c(m-5) + 0.8671038084174692625075159e-2 * c(m-3) + 0.8084259844422177692569663e-1 * c(m-6) - 0.1664345989168155800449120e0 * c(m-4) -0.2720908083525083608370563e-1 * c(m-7) - 0.1931148612480615118957263e0 * c(m-6) - 0.3332941113251635390801278e-1 * c(m-3) + 0.2605582646183255957264249e-3 * c(m-2) + 0.1432116665752147607469646e-2 * c(m-1) + 0.1207544072304193806052558e-2 * c(m) - 0.1348436986667115543203552e1 * c(m-5) + 0.1687723507780044227927853e-1 * c(m-4) 0.6107825764368264576481962e-2 * c(m-7) + 0.1155752633643216628010304e0 * c(m-6) + 0.2096413329579026439044119e1 * c(m-5) + 0.3357721707576477199985656e0 * c(m-3) + 0.3291545083271862858501887e-3 * c(m-2) + 0.6641183499427826101618457e-2 * c(m-1) + 0.3449455095910233625229891e-2 * c(m) + 0.8270696421223286922584620e0 * c(m-4) -0.4995827370863505253765970e-1 * c(m-6) - 0.1263507837371824205693950e1 * c(m-5) - 0.8712928907711754187084757e-2 * c(m-2) - 0.2487040599390160764166412e-1 * c(m-1) - 0.1486895819265604128572498e-1 * c(m) - 0.1726565392121567634950213e1 * c(m-4) 0.5402985338373433052255418e0 * c(m-5) - 0.1979290298620869974478871e0 * c(m-3) - 0.2760353365637712827793337e-1 * c(m-1) - 0.4671751091575462868310238e-2 * c(m) - 0.6952587985456154591014641e-1 * c(m-6) + 0.1571507277911208446562686e1 * c(m-4) -0.1319358558853174530078498e0 * c(m-5) - 0.1872196143003808021730728e0 * c(m-3) + 0.9147192682075630179962131e-2 * c(m-2) + 0.6712774475803763988977355e-1 * c(m) + 0.9630407686703666967100804e-1 * c(m-6) - 0.6882132817757726722141421e0 * c(m-4) 0.1241625568998496895352046e-1 * c(m-5) + 0.7403484645316174090533193e-1 * c(m-3) - 0.1023976547309387874453988e-2 * c(m-2) + 0.4440063948509876221050939e-1 * c(m-1) - 0.5224403464202056316702078e-1 * c(m) - 0.3213800979246298453953842e-1 * c(m-6) + 0.1178181682424363524005403e0 * c(m-4); 0.6272075574042975468177820e-3 * c(m-6) - 0.1200429618441003833696998e-1 * c(m-5) + 0.1137708862700574079015220e-1 * c(m-4) -0.5373770512016897565958305e-2 * c(m-6) + 0.1453421858063658498587377e0 * c(m-5) - 0.1399684152943489522927794e0 * c(m-4) -0.5013247356072127938999311e0 * c(m-5) + 0.5021853752328231128475915e0 * c(m-4) - 0.1197175073672143005877150e-1 * c(m-6) 0.3590669644811151307464697e-1 * c(m-6) - 0.5925443480724830632401754e0 * c(m-4) - 0.6897142765790609546343709e-2 * c(m-2) - 0.5363098747528542488971874e-2 * c(m-1) - 0.5205147429855955657625694e-2 * c(m) + 0.9977064356292750529201981e0 * c(m-5) -0.4995827370863505253765970e-1 * c(m-6) - 0.1263507837371824205693950e1 * c(m-5) - 0.8712928907711754187084757e-2 * c(m-2) - 0.2487040599390160764166412e-1 * c(m-1) - 0.1486895819265604128572498e-1 * c(m) - 0.1726565392121567634950213e1 * c(m-4) 0.2760393423824887721078848e-1 * c(m-6) + 0.1190550338687608873798462e1 * c(m-5) + 0.4253084328734353394994388e1 * c(m-4) + 0.2306367624634749229113646e0 * c(m-2) + 0.9313657638804699948929701e-1 * c(m-1) + 0.6409299775987186986730499e-1 * c(m) -0.8755807343482262259774782e0 * c(m-5) - 0.3645285178085761821545207e1 * c(m-4) + 0.1033717994630886401730470e0 * c(m-1) + 0.2013769413884797246646959e-1 * c(m) + 0.4106783858513785463625543e-1 * c(m-6) 0.3956598149904136332753521e0 * c(m-5) + 0.1630560443616104907615866e1 * c(m-4) - 0.2421320004064592721552708e0 * c(m-2) - 0.2893557395653431666593814e0 * c(m) - 0.5688529641249387985434413e-1 * c(m-6) -0.7684117160199014594442072e-1 * c(m-5) - 0.2928439026361256842196229e0 * c(m-4) + 0.2710530961648671297733465e-1 * c(m-2) - 0.1662748711097054895317080e0 * c(m-1) + 0.2251991532891353212689574e0 * c(m) + 0.1898341454096471754822498e-1 * c(m-6); 0.9209089963443799485648361e-2 * c(m-5) - 0.3129629392354775191148163e-3 * c(m-6) - 0.8896127024208321966533544e-2 * c(m-4) -0.1059816030196818445908057e0 * c(m-5) + 0.1014880675788250237247178e0 * c(m-4) + 0.4493535440856820866087846e-2 * c(m-6) 0.3328335104489738933610597e0 * c(m-5) - 0.3179803804558436283847901e0 * c(m-4) - 0.5111353189352474549563559e-2 * c(m-3) - 0.9741776803777790426705996e-2 * c(m-6) 0.7272438906214475928744770e-1 * c(m-4) + 0.1964682777744275219350831e-1 * c(m-3) - 0.5952475275883259619711594e-2 * c(m-1) - 0.1635430866921887819487473e-2 * c(m) + 0.2921234010758621482958052e-1 * c(m-6) - 0.4659516693228870973898560e0 * c(m-5) 0.5402985338373433052255418e0 * c(m-5) - 0.1979290298620869974478871e0 * c(m-3) - 0.2760353365637712827793337e-1 * c(m-1) - 0.4671751091575462868310238e-2 * c(m) - 0.6952587985456154591014641e-1 * c(m-6) + 0.1571507277911208446562686e1 * c(m-4) -0.8755807343482262259774782e0 * c(m-5) - 0.3645285178085761821545207e1 * c(m-4) + 0.1033717994630886401730470e0 * c(m-1) + 0.2013769413884797246646959e-1 * c(m) + 0.4106783858513785463625543e-1 * c(m-6) 0.1070920689960817104203947e1 * c(m-5) + 0.3717418466925056542408153e1 * c(m-4) + 0.1166740554279680007487795e0 * c(m-3) + 0.1147318200715868527529827e0 * c(m-1) + 0.6327161147136873807796515e-2 * c(m) + 0.6235373239336055200426697e-1 * c(m-6) -0.6639605248735044787146222e0 * c(m-5) - 0.1865625445986772763641423e1 * c(m-4) + 0.1103611313171476425250639e0 * c(m-3) - 0.9091410269992464604926176e-1 * c(m) - 0.8636954541126674177407762e-1 * c(m-6) 0.1582127073537215443965653e0 * c(m-5) + 0.3746489300753517635549495e0 * c(m-4) - 0.4364163147111892346990101e-1 * c(m-3) - 0.1845476106024151050283847e0 * c(m-1) + 0.7075642937243715046279337e-1 * c(m) + 0.2882271848190011329385407e-1 * c(m-6); -0.3576545132696983143406173e-2 * c(m-5) + 0.4335019854436220306755673e-3 * c(m-6) + 0.3143043147253361112730605e-2 * c(m-4) 0.4093499466767054661591066e-1 * c(m-5) - 0.3471075437892810033585296e-1 * c(m-4) - 0.6224240288742446280057699e-2 * c(m-6) -0.1080774142196007991746827e0 * c(m-5) + 0.9941834083648937298100811e-1 * c(m-4) - 0.4834791406446907590553793e-2 * c(m-3) + 0.1349386478955833378422842e-1 * c(m-6) 0.5891947149681041048896399e-1 * c(m-4) + 0.1858378996391679448655070e-1 * c(m-3) + 0.7240905383565181316381731e-2 * c(m-2) + 0.2349927974590068869356781e-1 * c(m) - 0.4046360079256766884300687e-1 * c(m-6) + 0.1223513270418807666970488e0 * c(m-5) -0.1319358558853174530078498e0 * c(m-5) - 0.1872196143003808021730728e0 * c(m-3) + 0.9147192682075630179962131e-2 * c(m-2) + 0.6712774475803763988977355e-1 * c(m) + 0.9630407686703666967100804e-1 * c(m-6) - 0.6882132817757726722141421e0 * c(m-4) 0.3956598149904136332753521e0 * c(m-5) + 0.1630560443616104907615866e1 * c(m-4) - 0.2421320004064592721552708e0 * c(m-2) - 0.2893557395653431666593814e0 * c(m) - 0.5688529641249387985434413e-1 * c(m-6) -0.6639605248735044787146222e0 * c(m-5) - 0.1865625445986772763641423e1 * c(m-4) + 0.1103611313171476425250639e0 * c(m-3) - 0.9091410269992464604926176e-1 * c(m) - 0.8636954541126674177407762e-1 * c(m-6) 0.4681819359722749441073885e0 * c(m-5) + 0.1015239189167790053447110e1 * c(m-4) + 0.1043897828092562609502636e0 * c(m-3) + 0.2542001760457345743492403e0 * c(m-2) + 0.1306332157111667628555907e1 * c(m) + 0.1196351539550049336518187e0 * c(m-6) -0.1195777325611201766551392e0 * c(m-5) - 0.2187310061229745694542609e0 * c(m-4) - 0.4128029838349298819825156e-1 * c(m-3) - 0.2845627370491611369031341e-1 * c(m-2) - 0.1016689339350338144430605e1 * c(m) - 0.3992391469197282238624438e-1 * c(m-6); 0.5593983696629863059347067e-3 * c(m-5) - 0.1446656414398166805849327e-3 * c(m-6) - 0.4147327282231696253497740e-3 * c(m-4) -0.6486184157331537899459796e-2 * c(m-5) + 0.4409068609809831485979484e-2 * c(m-4) + 0.2077115547521706413480312e-2 * c(m-6) 0.1319674981073749167009902e-1 * c(m-5) - 0.1060554802883657391328704e-1 * c(m-4) + 0.1911888563316170927411831e-2 * c(m-3) - 0.4503090345217088684223814e-2 * c(m-6) -0.2404661162020836566908542e-1 * c(m-4) - 0.7348845587775519698437916e-2 * c(m-3) - 0.8105784530576404277872603e-3 * c(m-2) + 0.9574633163221758060736592e-2 * c(m-1) - 0.1828896813877197352675410e-1 * c(m) + 0.1350326632905990039353503e-1 * c(m-6) - 0.1315967038382618382356495e-1 * c(m-5) 0.1241625568998496895352046e-1 * c(m-5) + 0.7403484645316174090533193e-1 * c(m-3) - 0.1023976547309387874453988e-2 * c(m-2) + 0.4440063948509876221050939e-1 * c(m-1) - 0.5224403464202056316702078e-1 * c(m) - 0.3213800979246298453953842e-1 * c(m-6) + 0.1178181682424363524005403e0 * c(m-4) -0.7684117160199014594442072e-1 * c(m-5) - 0.2928439026361256842196229e0 * c(m-4) + 0.2710530961648671297733465e-1 * c(m-2) - 0.1662748711097054895317080e0 * c(m-1) + 0.2251991532891353212689574e0 * c(m) + 0.1898341454096471754822498e-1 * c(m-6) 0.1582127073537215443965653e0 * c(m-5) + 0.3746489300753517635549495e0 * c(m-4) - 0.4364163147111892346990101e-1 * c(m-3) - 0.1845476106024151050283847e0 * c(m-1) + 0.7075642937243715046279337e-1 * c(m) + 0.2882271848190011329385407e-1 * c(m-6) -0.1195777325611201766551392e0 * c(m-5) - 0.2187310061229745694542609e0 * c(m-4) - 0.4128029838349298819825156e-1 * c(m-3) - 0.2845627370491611369031341e-1 * c(m-2) - 0.1016689339350338144430605e1 * c(m) - 0.3992391469197282238624438e-1 * c(m-6) 0.3167964748016105299646518e-1 * c(m-5) + 0.4976563420877041544013670e-1 * c(m-4) + 0.1632404042590951953384672e-1 * c(m-3) + 0.3185519088796429015220016e-2 * c(m-2) + 0.2968472090638000742888467e0 * c(m-1) + 0.7912667594695582093926295e0 * c(m) + 0.1332316557164627464149716e-1 * c(m-6);]; + + M(5,10)=M(10,5); + M(m-4,m-9)=M(m-9,m-4); + + M=M/h; + + D2=HI*(-M-diag(c)*e_1*S_1'+diag(c)*e_m*S_m'); + end + D2 = @D2_fun; + + S2_U=[0.35e2 / 0.12e2 -0.26e2 / 0.3e1 0.19e2 / 0.2e1 -0.14e2 / 0.3e1 0.11e2 / 0.12e2;]/h^2; + S2_1=sparse(1,m); + S2_1(1:5)=S2_U; + S2_m=sparse(1,m); + S2_m(m-4:m)=fliplr(S2_U); + S2_1 = S2_1'; + S2_m = S2_m'; + + + + + + % Fourth derivative, 1th order accurate at first 8 boundary points (still + % yield 5th order convergence if stable: for example u_tt=-u_xxxx + + m4=7/240;m3=-2/5;m2=169/60;m1=-122/15;m0=91/8; +% 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); + stencil = [m4,m3,m2,m1,m0,m1,m2,m3,m4]; + d = (length(stencil)-1)/2; + diags = -d:d; + M4 = stripeMatrix(stencil, diags, m); + + %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.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; -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; 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; -0.1104821700277e13 / 0.306001238400e12 0.28938615291031e14 / 0.2570410402560e13 -0.9117069604217e13 / 0.642602600640e12 0.5029150721885e13 / 0.514082080512e12 -0.5209119714341e13 / 0.1285205201280e13 0.12235427457469e14 / 0.12852052012800e14 -0.13731270505e11 / 0.64260260064e11 0.2933596129e10 / 0.40800165120e11; 0.1355771086763e13 / 0.1836007430400e13 -0.146167361863e12 / 0.71400288960e11 0.632177582849e12 / 0.233673672960e12 -0.5209119714341e13 / 0.1285205201280e13 0.14871726798559e14 / 0.2570410402560e13 -0.7504337615347e13 / 0.1606506501600e13 0.310830296467e12 / 0.171360693504e12 -0.55284274391e11 / 0.183600743040e12; -0.27818686453e11 / 0.459001857600e12 0.2793470836571e13 / 0.12852052012800e14 -0.1057776382577e13 / 0.6426026006400e13 0.12235427457469e14 / 0.12852052012800e14 -0.7504337615347e13 / 0.1606506501600e13 0.106318657014853e15 / 0.12852052012800e14 -0.14432772918527e14 / 0.2142008668800e13 0.58102695589e11 / 0.22666758400e11; -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; 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;]; + + M4(1:8,1:8)=M4_U; + + M4(m-7:m,m-7:m)=rot90( M4_U ,2 ); + M4=M4/h^3; + + S3_U=[-0.5e1 / 0.2e1 9 -12 7 -0.3e1 / 0.2e1;]/h^3; + S3_1=sparse(1,m); + S3_1(1:5)=S3_U; + S3_m=sparse(1,m); + S3_m(m-4:m)=fliplr(-S3_U); + S3_1 = S3_1'; + S3_m = S3_m'; + + D4=HI*(M4-e_1*S3_1'+e_m*S3_m' + S_1*S2_1'-S_m*S2_m'); + +end
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/BlockNorm.m --- a/+sbp/BlockNorm.m Mon Sep 12 11:14:00 2016 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,55 +0,0 @@ -classdef BlockNorm < sbp.OpSet - properties - norms % Struct containing norm matrices such as H,Q, M - boundary % Struct contanging vectors for boundry point approximations - derivatives % Struct containging differentiation operators - borrowing % Struct with borrowing limits for different norm matrices - m % Number of grid points. - h % Step size - end - - - - methods - function obj = BlockNorm(m,h,order) - - if order == 4 - [H, HI, D1, D2, e_1, e_m, M,Q S_1, S_m] = sbp.blocknorm4(m,h); - elseif order == 6 - [H, HI, D1, D2, e_1, e_m, M,Q S_1, S_m] = sbp.blocknorm6(m,h); - elseif order == 8 - [H, HI, D1, D2, e_1, e_m, M,Q S_1, S_m] = sbp.blocknorm8(m,h); - elseif order == 10 - [H, HI, D1, D2, e_1, e_m, M,Q S_1, S_m] = sbp.blocknorm10(m,h); - else - error('Invalid operator order %d.',order); - end - - obj.h = h; - obj.m = m; - - obj.norms.H = H; - obj.norms.HI = HI; - obj.norms.Q = Q; - obj.norms.M = M; - - obj.boundary.e_1 = e_1; - obj.boundary.S_1 = S_1; - - obj.boundary.e_m = e_m; - obj.boundary.S_m = S_m; - - obj.derivatives.D1 = D1; - obj.derivatives.D2 = D2; - end - end - - methods (Static) - function lambda = smallestGrid(obj) - error('Not implmented') - end - end - - - -end \ No newline at end of file
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/D1Nonequidistant.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/+sbp/D1Nonequidistant.m Mon Sep 12 12:53:02 2016 +0200 @@ -0,0 +1,94 @@ +classdef D1Nonequidistant < sbp.OpSet + properties + D1 % SBP operator approximating first derivative + H % Norm matrix + HI % H^-1 + Q % Skew-symmetric matrix + e_l % Left boundary operator + e_r % Right boundary operator + m % Number of grid points. + h % Step size + x % grid + borrowing % Struct with borrowing limits for different norm matrices + end + + methods + function obj = D1Nonequidistant(m,lim,order,option) + + default_arg('option','Accurate'); + % 'Accurate' operators are optimized for accuracy + % 'Minimal' operators have the smallest possible boundary + % closure + + x_l = lim{1}; + x_r = lim{2}; + L = x_r-x_l; + + switch option + + case {'Accurate','accurate','A'} + + if order == 4 + [obj.D1,obj.H,obj.x,obj.h] = ... + sbp.implementations.d1_noneq_4(m,L); + elseif order == 6 + [obj.D1,obj.H,obj.x,obj.h] = ... + sbp.implementations.d1_noneq_6(m,L); + elseif order == 8 + [obj.D1,obj.H,obj.x,obj.h] = ... + sbp.implementations.d1_noneq_8(m,L); + elseif order == 10 + [obj.D1,obj.H,obj.x,obj.h] = ... + sbp.implementations.d1_noneq_10(m,L); + elseif order == 12 + [obj.D1,obj.H,obj.x,obj.h] = ... + sbp.implementations.d1_noneq_12(m,L); + else + error('Invalid operator order %d.',order); + end + + case {'Minimal','minimal','M'} + + if order == 4 + [obj.D1,obj.H,obj.x,obj.h] = ... + sbp.implementations.d1_noneq_minimal_4(m,L); + elseif order == 6 + [obj.D1,obj.H,obj.x,obj.h] = ... + sbp.implementations.d1_noneq_minimal_6(m,L); + elseif order == 8 + [obj.D1,obj.H,obj.x,obj.h] = ... + sbp.implementations.d1_noneq_minimal_8(m,L); + elseif order == 10 + [obj.D1,obj.H,obj.x,obj.h] = ... + sbp.implementations.d1_noneq_minimal_10(m,L); + elseif order == 12 + [obj.D1,obj.H,obj.x,obj.h] = ... + sbp.implementations.d1_noneq_minimal_12(m,L); + else + error('Invalid operator order %d.',order); + end + + end + + obj.x = obj.x + x_l; + + obj.e_l = sparse(m,1); + obj.e_r = sparse(m,1); + obj.e_l(1) = 1; + obj.e_r(m) = 1; + + obj.HI = inv(obj.H); + obj.Q = obj.H*obj.D1 - obj.e_r*obj.e_r' + obj.e_l*obj.e_l'; + + obj.borrowing = []; + + end + end + + +end + + + + +
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/D1Upwind.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/+sbp/D1Upwind.m Mon Sep 12 12:53:02 2016 +0200 @@ -0,0 +1,65 @@ +classdef D1Upwind < sbp.OpSet + properties + D1 % SBP operator approximating first derivative + H % Norm matrix + HI % H^-1 + Q % Skew-symmetric matrix + e_l % Left boundary operator + e_r % Right boundary operator + m % Number of grid points. + h % Step size + x % grid + borrowing % Struct with borrowing limits for different norm matrices + end + + methods + function obj = D1Upwind(m,lim,order) + + x_l = lim{1}; + x_r = lim{2}; + L = x_r-x_l; + obj.h = L/(m-1); + obj.x = linspace(x_l,x_r,m)'; + + switch order + case 2 + [obj.H, obj.HI, obj.Dp, obj.Dm, obj.e_l, obj.e_r] = ... + sbp.implementations.d1_upwind_2(m,obj.h); + case 3 + [obj.H, obj.HI, obj.Dp, obj.Dm, obj.e_l, obj.e_r] = ... + sbp.implementations.d1_upwind_3(m,obj.h); + case 4 + [obj.H, obj.HI, obj.Dp, obj.Dm, obj.e_l, obj.e_r] = ... + sbp.implementations.d1_upwind_4(m,obj.h); + case 5 + [obj.H, obj.HI, obj.Dp, obj.Dm, obj.e_l, obj.e_r] = ... + sbp.implementations.d1_upwind_5(m,obj.h); + case 6 + [obj.H, obj.HI, obj.Dp, obj.Dm, obj.e_l, obj.e_r] = ... + sbp.implementations.d1_upwind_6(m,obj.h); + case 7 + [obj.H, obj.HI, obj.Dp, obj.Dm, obj.e_l, obj.e_r] = ... + sbp.implementations.d1_upwind_7(m,obj.h); + case 8 + [obj.H, obj.HI, obj.Dp, obj.Dm, obj.e_l, obj.e_r] = ... + sbp.implementations.d1_upwind_8(m,obj.h); + case 9 + [obj.H, obj.HI, obj.Dp, obj.Dm, obj.e_l, obj.e_r] = ... + sbp.implementations.d1_upwind_9(m,obj.h); + otherwise + error('Invalid operator order %d.',order); + end + + obj.m = m; + obj.borrowing = []; + + end + end + + +end + + + + +
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/D2BlockNorm.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/+sbp/D2BlockNorm.m Mon Sep 12 12:53:02 2016 +0200 @@ -0,0 +1,57 @@ +classdef D2BlockNorm < sbp.OpSet + properties + D1 % SBP operator approximating first derivative + H % Norm matrix + HI % H^-1 + Q % Skew-symmetric matrix + e_l % Left boundary operator + e_r % Right boundary operator + D2 % SBP operator for second derivative + M % Norm matrix, second derivative + d1_l % Left boundary first derivative + d1_r % Right boundary first derivative + m % Number of grid points. + h % Step size + x % grid + borrowing % Struct with borrowing limits for different norm matrices + end + + + + methods + function obj = D2BlockNorm(m,lim,order) + + x_l = lim{1}; + x_r = lim{2}; + L = x_r-x_l; + obj.h = L/(m-1); + obj.x = linspace(x_l,x_r,m)'; + + if order == 4 + [obj.H, obj.HI, obj.D1, obj.D2, obj.e_l,... + obj.e_r, obj.M, obj.Q, obj.d1_l, obj.d1_r] = ... + sbp.implementations.d2_blocknorm_4(m,obj.h); + elseif order == 6 + [obj.H, obj.HI, obj.D1, obj.D2, obj.e_l,... + obj.e_r, obj.M, obj.Q, obj.d1_l, obj.d1_r] = ... + sbp.implementations.d2_blocknorm_6(m,obj.h); + elseif order == 8 + [obj.H, obj.HI, obj.D1, obj.D2, obj.e_l,... + obj.e_r, obj.M, obj.Q, obj.d1_l, obj.d1_r] = ... + sbp.implementations.d2_blocknorm_8(m,obj.h); + elseif order == 10 + [obj.H, obj.HI, obj.D1, obj.D2, obj.e_l,... + obj.e_r, obj.M, obj.Q, obj.d1_l, obj.d1_r] = ... + sbp.implementations.d2_blocknorm_10(m,obj.h); + else + error('Invalid operator order %d.',order); + end + + obj.m = m; + + end + end + + + +end \ No newline at end of file
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/D2Standard.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/+sbp/D2Standard.m Mon Sep 12 12:53:02 2016 +0200 @@ -0,0 +1,76 @@ +classdef D2Standard < sbp.OpSet + properties + D1 % SBP operator approximating first derivative + H % Norm matrix + HI % H^-1 + Q % Skew-symmetric matrix + e_l % Left boundary operator + e_r % Right boundary operator + D2 % SBP operator for second derivative + M % Norm matrix, second derivative + d1_l % Left boundary first derivative + d1_r % Right boundary first derivative + m % Number of grid points. + h % Step size + x % grid + borrowing % Struct with borrowing limits for different norm matrices + + end + + methods + function obj = D2Standard(m,lim,order) + + x_l = lim{1}; + x_r = lim{2}; + L = x_r-x_l; + obj.h = L/(m-1); + obj.x = linspace(x_l,x_r,m)'; + + if order == 2 + [obj.H, obj.HI, obj.D1, obj.D2, obj.e_l,... + obj.e_r, obj.M, obj.Q, obj.d1_l, obj.d1_r] =... + sbp.implementations.d2_2(m,obj.h); + obj.borrowing.M.S = 0.4000; + elseif order == 4 + [obj.H, obj.HI, obj.D1, obj.D2, obj.e_l,... + obj.e_r, obj.M, obj.Q, obj.d1_l, obj.d1_r] =... + sbp.implementations.d2_4(m,obj.h); + obj.borrowing.M.S = 0.2508; + elseif order == 6 + [obj.H, obj.HI, obj.D1, obj.D2, obj.e_l,... + obj.e_r, obj.M, obj.Q, obj.d1_l, obj.d1_r] =... + sbp.implementations.d2_6(m,obj.h); + obj.borrowing.M.S = 0.1878; + elseif order == 8 + [obj.H, obj.HI, obj.D1, obj.D2, obj.e_l,... + obj.e_r, obj.M, obj.Q, obj.d1_l, obj.d1_r] =... + sbp.implementations.d2_8(m,obj.h); + obj.borrowing.M.S = 0.0015; + elseif order == 10 + [obj.H, obj.HI, obj.D1, obj.D2, obj.e_l,... + obj.e_r, obj.M, obj.Q, obj.d1_l, obj.d1_r] =... + sbp.implementations.d2_10(m,obj.h); + obj.borrowing.M.S = 0.0351; + elseif order == 12 + [obj.H, obj.HI, obj.D1, obj.D2, obj.e_l,... + obj.e_r, obj.M, obj.Q, obj.d1_l, obj.d1_r] =... + sbp.implementations.d2_12(m,obj.h); + obj.borrowing.M.S = []; % Need to compute! + warning('D2=D1*D1 (wide stencil).'); + warning('The borrowing constant has not been computed.') + else + error('Invalid operator order %d.',order); + end + + obj.m = m; + + end + end + + +end + + + + +
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/D2Variable.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/+sbp/D2Variable.m Mon Sep 12 12:53:02 2016 +0200 @@ -0,0 +1,49 @@ +classdef D2Variable < sbp.OpSet + properties + D1 % SBP operator approximating first derivative + H % Norm matrix + HI % H^-1 + Q % Skew-symmetric matrix + e_l % Left boundary operator + e_r % Right boundary operator + D2 % SBP operator for second derivative + M % Norm matrix, second derivative + d1_l % Left boundary first derivative + d1_r % Right boundary first derivative + m % Number of grid points. + h % Step size + x % grid + borrowing % Struct with borrowing limits for different norm matrices + end + + methods + function obj = D2Variable(m,lim,order) + + x_l = lim{1}; + x_r = lim{2}; + L = x_r-x_l; + obj.h = L/(m-1); + obj.x = linspace(x_l,x_r,m)'; + + switch order + case 4 + [obj.H, obj.HI, obj.D1, obj.D2, obj.e_l,... + obj.e_r, obj.d1_l, obj.d1_r] = ... + sbp.implementations.d2_variable_4(m,obj.h); + obj.borrowing.M.S = 0.2505765857; + otherwise + error('Invalid operator order %d.',order); + end + + obj.m = m; + obj.M = []; + + end + end + +end + + + + +
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/D4Compatible.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/+sbp/D4Compatible.m Mon Sep 12 12:53:02 2016 +0200 @@ -0,0 +1,75 @@ +classdef D4Compatible < sbp.OpSet + properties + D1 % SBP operator approximating first derivative + H % Norm matrix + HI % H^-1 + Q % Skew-symmetric matrix + e_l % Left boundary operator + e_r % Right boundary operator + D2 % SBP operator for second derivative + M % Norm matrix, second derivative + d1_l % Left boundary first derivative + d1_r % Right boundary first derivative + D3 % SBP operator for third derivative + Q3 % Skew-symmetric matrix in third derivative + d2_l % Left boundary second derivative + d2_r % Right boundary second derivative + D4 % SBP operator for fourth derivative + M4 % Norm matrix, fourth derivative + d3_l % Left boundary third derivative + d3_r % Right boundary third derivative + m % Number of grid points. + h % Step size + x % grid + borrowing % Struct with borrowing limits for different norm matrices + end + + + + methods + function obj = D4Compatible(m,lim,order) + + + x_l = lim{1}; + x_r = lim{2}; + L = x_r-x_l; + obj.h = L/(m-1); + obj.x = linspace(x_l,x_r,m)'; + + if order == 2 + [obj.H, obj.HI, obj.D1, obj.D4, obj.e_l, obj.e_r, obj.M4,... + obj.Q, obj.d2_l, obj.d2_r, obj.d3_l, obj.d3_r,... + obj.d1_l, obj.d1_r] =... + sbp.implementations.d4_compatible_2(m,obj.h); + obj.borrowing.N.S2 = 0.7500; + obj.borrowing.N.S3 = 0.3000; + elseif order == 4 + [obj.H, obj.HI, obj.D1, obj.D4, obj.e_l, obj.e_r, obj.M4,... + obj.Q, obj.d2_l, obj.d2_r, obj.d3_l, obj.d3_r,... + obj.d1_l, obj.d1_r] =... + sbp.implementations.d4_compatible_4(m,obj.h); + obj.borrowing.N.S2 = 0.4210; + obj.borrowing.N.S3 = 0.7080; + elseif order == 6 + [obj.H, obj.HI, obj.D1, obj.D4, obj.e_l, obj.e_r, obj.M4,... + obj.Q, obj.d2_l, obj.d2_r, obj.d3_l, obj.d3_r,... + obj.d1_l, obj.d1_r] =... + sbp.implementations.d4_compatible_6(m,obj.h); + obj.borrowing.N.S2 = 0.06925; + obj.borrowing.N.S3 = 0.05128; + else + error('Invalid operator order.'); + end + + obj.m = m; + + obj.D2 = []; + obj.D3 = []; + + + end + end + + + +end \ No newline at end of file
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/D4CompatibleVariable.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/+sbp/D4CompatibleVariable.m Mon Sep 12 12:53:02 2016 +0200 @@ -0,0 +1,74 @@ +classdef D4CompatibleVariable < sbp.OpSet + properties + D1 % SBP operator approximating first derivative + H % Norm matrix + HI % H^-1 + Q % Skew-symmetric matrix + e_l % Left boundary operator + e_r % Right boundary operator + D2 % SBP operator for second derivative + M % Norm matrix, second derivative + d1_l % Left boundary first derivative + d1_r % Right boundary first derivative + D3 % SBP operator for third derivative + Q3 % Skew-symmetric matrix in third derivative + d2_l % Left boundary second derivative + d2_r % Right boundary second derivative + D4 % SBP operator for fourth derivative + M4 % Norm matrix, fourth derivative + d3_l % Left boundary third derivative + d3_r % Right boundary third derivative + m % Number of grid points. + h % Step size + x % grid + borrowing % Struct with borrowing limits for different norm matrices + end + + + + methods + function obj = D4CompatibleVariable(m,lim,order) + + x_l = lim{1}; + x_r = lim{2}; + L = x_r-x_l; + obj.h = L/(m-1); + obj.x = linspace(x_l,x_r,m)'; + + if order == 2 + [obj.H, obj.HI, ~, obj.D2, ~, obj.D4, obj.e_l, obj.e_r,... + obj.M4, ~, obj.d2_l, obj.d2_r, obj.d3_l,... + obj.d3_r, obj.d1_l, obj.d1_r] =... + sbp.implementations.d4_compatible_halfvariable_2(m,obj.h); + obj.borrowing.N.S2 = 1.2500; + obj.borrowing.N.S3 = 0.4000; + elseif order == 4 + [obj.H, obj.HI, obj.D2, obj.D4, obj.e_l, obj.e_r, obj.M4,... + obj.d2_l, obj.d2_r, obj.d3_l, obj.d3_r, obj.d1_l,... + obj.d1_r] =... + sbp.implementations.d4_compatible_halfvariable_4(m,obj.h); + obj.borrowing.N.S2 = 0.5055; + obj.borrowing.N.S3 = 0.9290; + elseif order == 6 + [obj.H, obj.HI, obj.D2, obj.D4, obj.e_l, obj.e_r, obj.M4,... + obj.d2_l, obj.d2_r, obj.d3_l, obj.d3_r, obj.d1_l,... + obj.d1_r] =... + sbp.implementations.d4_compatible_halfvariable_6(m,obj.h); + obj.borrowing.N.S2 = 0.3259; + obj.borrowing.N.S3 = 0.1580; + else + error('Invalid operator order.'); + end + + obj.m = m; + + obj.D1 = []; + obj.D3 = []; + + + end + end + + + +end \ No newline at end of file
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/D4Standard.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/+sbp/D4Standard.m Mon Sep 12 12:53:02 2016 +0200 @@ -0,0 +1,62 @@ +classdef D4Standard < sbp.OpSet + properties + D1 % SBP operator approximating first derivative + H % Norm matrix + HI % H^-1 + Q % Skew-symmetric matrix + e_l % Left boundary operator + e_r % Right boundary operator + D2 % SBP operator for second derivative + M % Norm matrix, second derivative + d1_l % Left boundary first derivative + d1_r % Right boundary first derivative + D3 % SBP operator for third derivative + Q3 % Skew-symmetric matrix in third derivative + d2_l % Left boundary second derivative + d2_r % Right boundary second derivative + D4 % SBP operator for fourth derivative + M4 % Norm matrix, fourth derivative + d3_l % Left boundary third derivative + d3_r % Right boundary third derivative + m % Number of grid points. + h % Step size + x % grid + borrowing % Struct with borrowing limits for different norm matrices + end + + + + methods + function obj = D4Standard(m,lim,order) + + x_l = lim{1}; + x_r = lim{2}; + L = x_r-x_l; + obj.h = L/(m-1); + obj.x = linspace(x_l,x_r,m)'; + + if order == 4 + [obj.H, obj.HI, obj.D1, obj.D2, obj.D3, obj.D4,... + obj.e_l, obj.e_r, obj.M, obj.M4, obj.Q, obj.Q3, obj.d2_l,... + obj.d2_r, obj.d3_l, obj.d3_r, obj.d1_l, obj.d1_r] = ... + sbp.implementations.d4_4(m,obj.h); + obj.borrowing.N.S2 = 0.5485; + obj.borrowing.N.S3 = 1.0882; + elseif order == 6 + [obj.H, obj.HI, obj.D1, obj.D2, obj.D3, obj.D4,... + obj.e_l, obj.e_r, obj.M, obj.M4, obj.Q, obj.Q3, obj.d2_l,... + obj.d2_r, obj.d3_l, obj.d3_r, obj.d1_l, obj.d1_r] = ... + sbp.implementations.d4_6(m,obj.h); + obj.borrowing.N.S2 = 0.3227; + obj.borrowing.N.S3 = 0.1568; + else + error('Invalid operator order %d.',order); + end + + obj.m = m; + + end + end + + +end \ No newline at end of file
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/Higher.m --- a/+sbp/Higher.m Mon Sep 12 11:14:00 2016 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,64 +0,0 @@ -classdef Higher < sbp.OpSet - properties - norms % Struct containing norm matrices such as H,Q, M - boundary % Struct contanging vectors for boundry point approximations - derivatives % Struct containging differentiation operators - borrowing % Struct with borrowing limits for different norm matrices - m % Number of grid points. - h % Step size - end - - - - methods - function obj = Higher(m,h,order) - - if order == 4 - [H, HI, D1, D2, D3, D4, e_1, e_m, M, M4,Q, Q3, S2_1, S2_m, S3_1, S3_m, S_1, S_m] = sbp.higher4(m,h); - obj.borrowing.N.S2 = 0.5485; - obj.borrowing.N.S3 = 1.0882; - elseif order == 6 - [H, HI, D1, D2, D3, D4, e_1, e_m, M, M4,Q, Q3, S2_1, S2_m, S3_1, S3_m, S_1, S_m] = sbp.higher6(m,h); - obj.borrowing.N.S2 = 0.3227; - obj.borrowing.N.S3 = 0.1568; - else - error('Invalid operator order %d.',order); - end - - obj.h = h; - obj.m = m; - - obj.norms.H = H; - obj.norms.HI = HI; - obj.norms.Q = Q; - obj.norms.M = M; - obj.norms.Q3 = Q3; - obj.norms.N = M4; - - obj.boundary.e_1 = e_1; - obj.boundary.S_1 = S_1; - obj.boundary.S2_1 = S2_1; - obj.boundary.S3_1 = S3_1; - - obj.boundary.e_m = e_m; - obj.boundary.S_m = S_m; - obj.boundary.S2_m = S2_m; - obj.boundary.S3_m = S3_m; - - obj.derivatives.D1 = D1; - obj.derivatives.D2 = D2; - obj.derivatives.D3 = D3; - obj.derivatives.D4 = D4; - - end - end - - methods (Static) - function lambda = smallestGrid(obj) - error('Not implmented') - end - end - - - -end \ No newline at end of file
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/HigherCompatible.m --- a/+sbp/HigherCompatible.m Mon Sep 12 11:14:00 2016 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,64 +0,0 @@ -classdef HigherCompatible < sbp.OpSet - properties - norms % Struct containing norm matrices such as H,Q, M - boundary % Struct contanging vectors for boundry point approximations - derivatives % Struct containging differentiation operators - borrowing % Struct with borrowing limits for different norm matrices - m % Number of grid points. - h % Step size - end - - - - methods - function obj = HigherCompatible(m,h,order) - - if order == 2 - [H, HI, D1, D4, e_1, e_m, M4, Q, S2_1, S2_m, S3_1, S3_m, S_1, S_m] = sbp.higher_compatible2(m,h); - obj.borrowing.N.S2 = 0.7500; - obj.borrowing.N.S3 = 0.3000; - elseif order == 4 - [H, HI, D1, D4, e_1, e_m, M4, Q, S2_1, S2_m, S3_1, S3_m, S_1, S_m] = sbp.higher_compatible4(m,h); - obj.borrowing.N.S2 = 0.4210; - obj.borrowing.N.S3 = 0.7080; - elseif order == 6 - [H, HI, D1, D4, e_1, e_m, M4, Q, S2_1, S2_m, S3_1, S3_m, S_1, S_m] = sbp.higher_compatible6(m,h); - obj.borrowing.N.S2 = 0.06925; - obj.borrowing.N.S3 = 0.05128; - else - error('Invalid operator order.'); - end - - obj.h = h; - obj.m = m; - - obj.norms.H = H; - obj.norms.HI = HI; - obj.norms.Q = Q; - obj.norms.N = M4; - - obj.boundary.e_1 = e_1; - obj.boundary.S_1 = S_1; - obj.boundary.S2_1 = S2_1; - obj.boundary.S3_1 = S3_1; - - obj.boundary.e_m = e_m; - obj.boundary.S_m = S_m; - obj.boundary.S2_m = S2_m; - obj.boundary.S3_m = S3_m; - - obj.derivatives.D1 = D1; - obj.derivatives.D4 = D4; - - end - end - - methods (Static) - function lambda = smallestGrid(obj) - error('Not implmented') - end - end - - - -end \ No newline at end of file
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/HigherCompatibleVariable.m --- a/+sbp/HigherCompatibleVariable.m Mon Sep 12 11:14:00 2016 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,63 +0,0 @@ -classdef HigherCompatibleVariable < sbp.OpSet - properties - norms % Struct containing norm matrices such as H,Q, M - boundary % Struct contanging vectors for boundry point approximations - derivatives % Struct containging differentiation operators - borrowing % Struct with borrowing limits for different norm matrices - m % Number of grid points. - h % Step size - end - - - - methods - function obj = HigherCompatibleVariable(m,h,order) - - if order == 2 - [H, HI, D1, D2, D3, D4, e_1, e_m, M4, Q, S2_1, S2_m, S3_1, S3_m, S_1, S_m] = sbp.higher2_compatible_halfvariable(m,h); - obj.borrowing.N.S2 = 1.2500; - obj.borrowing.N.S3 = 0.4000; - elseif order == 4 - [H, HI, D2, D4, e_1, e_m, M4, S2_1, S2_m, S3_1, S3_m, S_1, S_m] = sbp.higher4_compatible_halfvariable(m,h); - obj.borrowing.N.S2 = 0.5055; - obj.borrowing.N.S3 = 0.9290; - elseif order == 6 - [H, HI, D2, D4, e_1, e_m, M4, S2_1, S2_m, S3_1, S3_m, S_1, S_m] = sbp.higher6_compatible_halfvariable(m,h); - obj.borrowing.N.S2 = 0.3259; - obj.borrowing.N.S3 = 0.1580; - else - error('Invalid operator order.'); - end - - obj.h = h; - obj.m = m; - - obj.norms.H = H; - obj.norms.HI = HI; - obj.norms.N = M4; - - obj.boundary.e_1 = e_1; - obj.boundary.S_1 = S_1; - obj.boundary.S2_1 = S2_1; - obj.boundary.S3_1 = S3_1; - - obj.boundary.e_m = e_m; - obj.boundary.S_m = S_m; - obj.boundary.S2_m = S2_m; - obj.boundary.S3_m = S3_m; - - obj.derivatives.D2 = D2; - obj.derivatives.D4 = D4; - - end - end - - methods (Static) - function lambda = smallestGrid(obj) - error('Not implmented') - end - end - - - -end \ No newline at end of file
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/HigherPeriodic.m --- a/+sbp/HigherPeriodic.m Mon Sep 12 11:14:00 2016 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,65 +0,0 @@ -classdef HigherPeriodic < sbp.OpSet - properties - norms % Struct containing norm matrices such as H,Q, M - boundary % Struct contanging vectors for boundry point approximations - derivatives % Struct containging differentiation operators - borrowing % Struct with borrowing limits for different norm matrices - m % Number of grid points. - h % Step size - end - - - - methods - function obj = HigherCompatible(m,h,order) - - if order == 2 - [H, HI, D1, D4, e_1, e_m, M4, Q, S2_1, S2_m, S3_1, S3_m, S_1, S_m] = sbp.higher2_compatible(m,h); - obj.borrowing.N.S2 = 0.7500; - obj.borrowing.N.S3 = 0.3000; - elseif order == 4 - - [H, HI, D1, D4, e_1, e_m, M4, Q, S2_1, S2_m, S3_1, S3_m, S_1, S_m] = sbp.higher4_compatible(m,h); - obj.borrowing.N.S2 = 0.4210; - obj.borrowing.N.S3 = 0.7080; - elseif order == 6 - [H, HI, D1, D4, e_1, e_m, M4, Q, S2_1, S2_m, S3_1, S3_m, S_1, S_m] = sbp.higher6_compatible(m,h); - obj.borrowing.N.S2 = 0.06925; - obj.borrowing.N.S3 = 0.05128; - else - error('Invalid operator order.'); - end - - obj.h = h; - obj.m = m; - - obj.norms.H = H; - obj.norms.HI = HI; - obj.norms.Q = Q; - obj.norms.N = M4; - - obj.boundary.e_1 = e_1; - obj.boundary.S_1 = S_1; - obj.boundary.S2_1 = S2_1; - obj.boundary.S3_1 = S3_1; - - obj.boundary.e_m = e_m; - obj.boundary.S_m = S_m; - obj.boundary.S2_m = S2_m; - obj.boundary.S3_m = S3_m; - - obj.derivatives.D1 = D1; - obj.derivatives.D4 = D4; - - end - end - - methods (Static) - function lambda = smallestGrid(obj) - error('Not implmented') - end - end - - - -end \ No newline at end of file
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/OpSet.m --- a/+sbp/OpSet.m Mon Sep 12 11:14:00 2016 +0200 +++ b/+sbp/OpSet.m Mon Sep 12 12:53:02 2016 +0200 @@ -1,18 +1,9 @@ classdef (Abstract) OpSet properties (Abstract) - norms % Struct containing norm matrices such as H,Q, M - boundary % Struct contanging vectors for boundry point approximations - derivatives % Struct containging differentiation operators borrowing % Struct with borrowing limits for different norm matrices m % Number of grid points. h % Step size + x % Grid end - methods (Abstract) - - end - - methods (Abstract, Static) - lambda = smallestGrid() - end end \ No newline at end of file
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/Ordinary.m --- a/+sbp/Ordinary.m Mon Sep 12 11:14:00 2016 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,63 +0,0 @@ -classdef Ordinary < sbp.OpSet - properties - norms % Struct containing norm matrices such as H,Q, M - boundary % Struct contanging vectors for boundry point approximations - derivatives % Struct containging differentiation operators - borrowing % Struct with borrowing limits for different norm matrices - m % Number of grid points. - h % Step size - end - - methods - function obj = Ordinary(m,h,order) - - if order == 2 - [H, HI, D1, D2, e_1, e_m, M,Q S_1, S_m] = sbp.ordinary2(m,h); - obj.borrowing.M.S = 0.4000; - elseif order == 4 - [H, HI, D1, D2, e_1, e_m, M,Q S_1, S_m] = sbp.ordinary4(m,h); - obj.borrowing.M.S = 0.2508; - elseif order == 6 - [H, HI, D1, D2, e_1, e_m, M,Q S_1, S_m] = sbp.ordinary6(m,h); - obj.borrowing.M.S = 0.1878; - elseif order == 8 - [H, HI, D1, D2, e_1, e_m, M,Q S_1, S_m] = sbp.ordinary8(m,h); - obj.borrowing.M.S = 0.0015; - elseif order == 10 - [H, HI, D1, D2, e_1, e_m, M,Q S_1, S_m] = sbp.ordinary10(m,h); - obj.borrowing.M.S = 0.0351; - else - error('Invalid operator order %d.',order); - end - - obj.h = h; - obj.m = m; - - obj.norms.H = H; - obj.norms.HI = HI; - obj.norms.Q = Q; - obj.norms.M = M; - - obj.boundary.e_1 = e_1; - obj.boundary.S_1 = S_1; - - obj.boundary.e_m = e_m; - obj.boundary.S_m = S_m; - - obj.derivatives.D1 = D1; - obj.derivatives.D2 = D2; - - end - end - - methods (Static) - function lambda = smallestGrid(obj) - error('Not implmented') - end - end -end - - - - -
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/Upwind.m --- a/+sbp/Upwind.m Mon Sep 12 11:14:00 2016 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,59 +0,0 @@ -classdef Upwind < sbp.OpSet - properties - norms % Struct containing norm matrices such as H,Q, M - boundary % Struct contanging vectors for boundry point approximations - derivatives % Struct containging differentiation operators - borrowing % Struct with borrowing limits for different norm matrices - m % Number of grid points. - h % Step size - end - - methods - function obj = Upwind(m,h,order) - - switch order - case 2 - [H, HI, Dp, Dm, e_1, e_m] = sbp.upwind2(m,h); - case 3 - [H, HI, Dp, Dm, e_1, e_m] = sbp.upwind3(m,h); - case 4 - [H, HI, Dp, Dm, e_1, e_m] = sbp.upwind4(m,h); - case 5 - [H, HI, Dp, Dm, e_1, e_m] = sbp.upwind5(m,h); - case 6 - [H, HI, Dp, Dm, e_1, e_m] = sbp.upwind6(m,h); - case 7 - [H, HI, Dp, Dm, e_1, e_m] = sbp.upwind7(m,h); - case 8 - [H, HI, Dp, Dm, e_1, e_m] = sbp.upwind8(m,h); - case 9 - [H, HI, Dp, Dm, e_1, e_m] = sbp.upwind9(m,h); - otherwise - error('Invalid operator order %d.',order); - end - - obj.h = h; - obj.m = m; - - obj.norms.H = H; - obj.norms.HI = HI; - - obj.boundary.e_1 = e_1; - obj.boundary.e_m = e_m; - - obj.derivatives.Dp = Dp; - obj.derivatives.Dm = Dm; - end - end - - methods (Static) - function lambda = smallestGrid(obj) - error('Not implmented') - end - end -end - - - - -
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/Variable.m --- a/+sbp/Variable.m Mon Sep 12 11:14:00 2016 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,52 +0,0 @@ -classdef Variable < sbp.OpSet - properties - norms % Struct containing norm matrices such as H,Q, M - boundary % Struct contanging vectors for boundry point approximations - derivatives % Struct containging differentiation operators - borrowing % Struct with borrowing limits for different norm matrices - m % Number of grid points. - h % Step size - end - - methods - function obj = Variable(m,h,order) - - switch order - case 4 - [H, HI, D1, D2, e_1, e_m, S_1, S_m] = sbp.variable4(m,h); - obj.borrowing.M.S = 0.2505765857; - otherwise - error('Invalid operator order %d.',order); - end - - obj.h = h; - obj.m = m; - - obj.norms.H = H; - obj.norms.HI = HI; - % obj.norms.Q = Q; - % obj.norms.M = M; - - obj.boundary.e_1 = e_1; - obj.boundary.S_1 = S_1; - - obj.boundary.e_m = e_m; - obj.boundary.S_m = S_m; - - obj.derivatives.D1 = D1; - obj.derivatives.D2 = D2; - - end - end - - methods (Static) - function lambda = smallestGrid(obj) - error('Not implmented') - end - end -end - - - - -
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/blocknorm10.m --- a/+sbp/blocknorm10.m Mon Sep 12 11:14:00 2016 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,57 +0,0 @@ -function [H, HI, D1, D2, e_1, e_m, M,Q S_1, S_m] = blocknorm10(m,h) - H_U=[0.428081020217e12 / 0.2633637888000e13 0.779032713983e12 / 0.2633637888000e13 -0.1187642619571e13 / 0.2633637888000e13 0.1642279196603e13 / 0.2633637888000e13 -0.339289243121e12 / 0.526727577600e12 0.1261055176253e13 / 0.2633637888000e13 -0.658216413073e12 / 0.2633637888000e13 0.33968779823e11 / 0.376233984000e12 -0.764998e6 / 0.40186125e8; 0.779032713983e12 / 0.2633637888000e13 0.317907052061e12 / 0.164602368000e12 -0.1082918052397e13 / 0.658409472000e12 0.176473501369e12 / 0.82301184000e11 -0.521625191587e12 / 0.263363788800e12 0.200523313337e12 / 0.164602368000e12 -0.279496000009e12 / 0.658409472000e12 -0.832e3 / 0.40186125e8 0.129794760887e12 / 0.2633637888000e13; -0.1187642619571e13 / 0.2633637888000e13 -0.1082918052397e13 / 0.658409472000e12 0.1304108863849e13 / 0.329204736000e12 -0.533093695961e12 / 0.131681894400e12 0.213949854133e12 / 0.52672757760e11 -0.1883976009151e13 / 0.658409472000e12 0.51084128e8 / 0.40186125e8 -0.92763684343e11 / 0.658409472000e12 -0.59058717923e11 / 0.526727577600e12; 0.1642279196603e13 / 0.2633637888000e13 0.176473501369e12 / 0.82301184000e11 -0.533093695961e12 / 0.131681894400e12 0.217677310051e12 / 0.32920473600e11 -0.1509120465127e13 / 0.263363788800e12 0.170839232e9 / 0.40186125e8 -0.1404096707137e13 / 0.658409472000e12 0.11789520859e11 / 0.32920473600e11 0.85652315431e11 / 0.526727577600e12; -0.339289243121e12 / 0.526727577600e12 -0.521625191587e12 / 0.263363788800e12 0.213949854133e12 / 0.52672757760e11 -0.1509120465127e13 / 0.263363788800e12 0.21849109e8 / 0.3214890e7 -0.1134422468377e13 / 0.263363788800e12 0.602448430967e12 / 0.263363788800e12 -0.4910542309e10 / 0.10534551552e11 -0.83039945231e11 / 0.526727577600e12; 0.1261055176253e13 / 0.2633637888000e13 0.200523313337e12 / 0.164602368000e12 -0.1883976009151e13 / 0.658409472000e12 0.170839232e9 / 0.40186125e8 -0.1134422468377e13 / 0.263363788800e12 0.681437038097e12 / 0.164602368000e12 -0.1108257453763e13 / 0.658409472000e12 0.31631872327e11 / 0.82301184000e11 0.37820115539e11 / 0.376233984000e12; -0.658216413073e12 / 0.2633637888000e13 -0.279496000009e12 / 0.658409472000e12 0.51084128e8 / 0.40186125e8 -0.1404096707137e13 / 0.658409472000e12 0.602448430967e12 / 0.263363788800e12 -0.1108257453763e13 / 0.658409472000e12 0.623491124887e12 / 0.329204736000e12 -0.146643738067e12 / 0.658409472000e12 -0.98874149197e11 / 0.2633637888000e13; 0.33968779823e11 / 0.376233984000e12 -0.832e3 / 0.40186125e8 -0.92763684343e11 / 0.658409472000e12 0.11789520859e11 / 0.32920473600e11 -0.4910542309e10 / 0.10534551552e11 0.31631872327e11 / 0.82301184000e11 -0.146643738067e12 / 0.658409472000e12 0.174599973347e12 / 0.164602368000e12 0.4625165773e10 / 0.526727577600e12; -0.764998e6 / 0.40186125e8 0.129794760887e12 / 0.2633637888000e13 -0.59058717923e11 / 0.526727577600e12 0.85652315431e11 / 0.526727577600e12 -0.83039945231e11 / 0.526727577600e12 0.37820115539e11 / 0.376233984000e12 -0.98874149197e11 / 0.2633637888000e13 0.4625165773e10 / 0.526727577600e12 0.525286231387e12 / 0.526727577600e12;]; - - - H=eye(m); - H(1:9,1:9)=H_U; - H(m-8:m,m-8:m)=flipud( fliplr(H_U(1:9,1:9) ) ); - H=H*h; - HI=inv(H); - - Q=1/1260*diag(ones(m-5,1),5)-5/504*diag(ones(m-4,1),4)+5/84*diag(ones(m-3,1),3)-5/21*diag(ones(m-2,1),2)+5/6*diag(ones(m-1,1),1)-5/6*diag(ones(m-1,1),-1)+5/21*diag(ones(m-2,1),-2)-5/84*diag(ones(m-3,1),-3)+5/504*diag(ones(m-4,1),-4)-1/1260*diag(ones(m-5,1),-5) ; - - Q_U = [-0.1e1 / 0.2e1 0.78249683e8 / 0.71442000e8 -0.28290472447e11 / 0.18289152000e11 0.4285528063e10 / 0.2032128000e10 -0.3924872557e10 / 0.1828915200e10 0.2856344621e10 / 0.1828915200e10 -0.1598284927e10 / 0.2032128000e10 0.4652402687e10 / 0.18289152000e11 -0.731623e6 / 0.17860500e8; -0.78249683e8 / 0.71442000e8 0 0.5351945471e10 / 0.2032128000e10 -0.4078428731e10 / 0.1143072000e10 0.4879509877e10 / 0.1219276800e10 -0.1273709579e10 / 0.381024000e9 0.7433128649e10 / 0.3657830400e10 -0.1239008e7 / 0.1488375e7 0.21251483e8 / 0.124416000e9; 0.28290472447e11 / 0.18289152000e11 -0.5351945471e10 / 0.2032128000e10 0 0.6701592799e10 / 0.2612736000e10 -0.57535927e8 / 0.17418240e8 0.3058732543e10 / 0.870912000e9 -0.28821953e8 / 0.10206000e8 0.1858901437e10 / 0.1219276800e10 -0.2363118211e10 / 0.6096384000e10; -0.4285528063e10 / 0.2032128000e10 0.4078428731e10 / 0.1143072000e10 -0.6701592799e10 / 0.2612736000e10 0 0.52016695e8 / 0.20901888e8 -0.3777923e7 / 0.1275750e7 0.123333949e9 / 0.41472000e8 -0.2256321727e10 / 0.1143072000e10 0.1058261459e10 / 0.1828915200e10; 0.3924872557e10 / 0.1828915200e10 -0.4879509877e10 / 0.1219276800e10 0.57535927e8 / 0.17418240e8 -0.52016695e8 / 0.20901888e8 0 0.125390297e9 / 0.58060800e8 -0.609569351e9 / 0.261273600e9 0.438488399e9 / 0.243855360e9 -0.14244569e8 / 0.24385536e8; -0.2856344621e10 / 0.1828915200e10 0.1273709579e10 / 0.381024000e9 -0.3058732543e10 / 0.870912000e9 0.3777923e7 / 0.1275750e7 -0.125390297e9 / 0.58060800e8 0 0.4624381729e10 / 0.2612736000e10 -0.484096919e9 / 0.381024000e9 0.2676438019e10 / 0.6096384000e10; 0.1598284927e10 / 0.2032128000e10 -0.7433128649e10 / 0.3657830400e10 0.28821953e8 / 0.10206000e8 -0.123333949e9 / 0.41472000e8 0.609569351e9 / 0.261273600e9 -0.4624381729e10 / 0.2612736000e10 0 0.21500967689e11 / 0.18289152000e11 -0.7199454721e10 / 0.18289152000e11; -0.4652402687e10 / 0.18289152000e11 0.1239008e7 / 0.1488375e7 -0.1858901437e10 / 0.1219276800e10 0.2256321727e10 / 0.1143072000e10 -0.438488399e9 / 0.243855360e9 0.484096919e9 / 0.381024000e9 -0.21500967689e11 / 0.18289152000e11 0 0.761653e6 / 0.882000e6; 0.731623e6 / 0.17860500e8 -0.21251483e8 / 0.124416000e9 0.2363118211e10 / 0.6096384000e10 -0.1058261459e10 / 0.1828915200e10 0.14244569e8 / 0.24385536e8 -0.2676438019e10 / 0.6096384000e10 0.7199454721e10 / 0.18289152000e11 -0.761653e6 / 0.882000e6 0;]; - - Q(1:9,1:9)=Q_U; - Q(m-8:m,m-8:m)=flipud( fliplr(-Q_U(1:9,1:9) ) ); - - D1=HI*Q; - - M_U =[0.3812926003e10 / 0.2438553600e10 -0.5433856529e10 / 0.1741824000e10 0.4187462879e10 / 0.1045094400e10 -0.65635105447e11 / 0.12192768000e11 0.1457682577e10 / 0.270950400e9 -0.27884016067e11 / 0.7315660800e10 0.22304839493e11 / 0.12192768000e11 -0.188132543e9 / 0.348364800e9 0.42711619e8 / 0.571536000e9; -0.5433885329e10 / 0.1741824000e10 0.23985229969e11 / 0.2286144000e10 -0.10208460799e11 / 0.571536000e9 0.8828370001e10 / 0.381024000e9 -0.12306735263e11 / 0.522547200e9 0.39313626089e11 / 0.2286144000e10 -0.4380200287e10 / 0.508032000e9 0.192498023e9 / 0.71442000e8 -0.14565232681e11 / 0.36578304000e11; 0.29313778073e11 / 0.7315660800e10 -0.10209211399e11 / 0.571536000e9 0.24157533391e11 / 0.653184000e9 -0.6561725111e10 / 0.130636800e9 0.26490755639e11 / 0.522547200e9 -0.352801289e9 / 0.9331200e7 0.401374423e9 / 0.20412000e8 -0.29541854057e11 / 0.4572288000e10 0.7396364989e10 / 0.7315660800e10; -0.65653163047e11 / 0.12192768000e11 0.8832999601e10 / 0.381024000e9 -0.6566554871e10 / 0.130636800e9 0.1575758731e10 / 0.21772800e8 -0.2571648133e10 / 0.34836480e8 0.556969019e9 / 0.10206000e8 -0.3139265911e10 / 0.108864000e9 0.165424529e9 / 0.16934400e8 -0.11623567549e11 / 0.7315660800e10; 0.1458632977e10 / 0.270950400e9 -0.86260417241e11 / 0.3657830400e10 0.3792749777e10 / 0.74649600e8 -0.2576699653e10 / 0.34836480e8 0.157840723e9 / 0.2041200e7 -0.29838889141e11 / 0.522547200e9 0.5142742211e10 / 0.174182400e9 -0.36792522023e11 / 0.3657830400e10 0.2438136689e10 / 0.1463132160e10; -0.27909676867e11 / 0.7315660800e10 0.39389053289e11 / 0.2286144000e10 -0.2478149663e10 / 0.65318400e8 0.559214069e9 / 0.10206000e8 -0.29914661941e11 / 0.522547200e9 0.2843819551e10 / 0.65318400e8 -0.14816015149e11 / 0.653184000e9 0.1677001673e10 / 0.228614400e9 -0.44441740171e11 / 0.36578304000e11; 0.3188985299e10 / 0.1741824000e10 -0.626864041e9 / 0.72576000e8 0.57539389e8 / 0.2916000e7 -0.3153500311e10 / 0.108864000e9 0.5162239811e10 / 0.174182400e9 -0.14840163949e11 / 0.653184000e9 0.419025709e9 / 0.31104000e8 -0.138945749e9 / 0.27216000e8 0.591880819e9 / 0.746496000e9; -0.1317440441e10 / 0.2438553600e10 0.192696473e9 / 0.71442000e8 -0.4230355151e10 / 0.653184000e9 0.165983249e9 / 0.16934400e8 -0.36905792423e11 / 0.3657830400e10 0.1679779433e10 / 0.228614400e9 -0.972870443e9 / 0.190512000e9 0.9129544111e10 / 0.2286144000e10 -0.13387742111e11 / 0.7315660800e10; 0.42721069e8 / 0.571536000e9 -0.14572922281e11 / 0.36578304000e11 0.7407199549e10 / 0.7315660800e10 -0.11649228349e11 / 0.7315660800e10 0.349038407e9 / 0.209018880e9 -0.44495912971e11 / 0.36578304000e11 0.29009849731e11 / 0.36578304000e11 -0.13387863071e11 / 0.7315660800e10 0.21585797479e11 / 0.7315660800e10;]; - - - T=[-0.1e1 / 0.3150e4 0.5e1 / 0.1008e4 -0.5e1 / 0.126e3 0.5e1 / 0.21e2 -0.5e1 / 0.3e1 0.5269e4 / 0.1800e4 -0.5e1 / 0.3e1 0.5e1 / 0.21e2 -0.5e1 / 0.126e3 0.5e1 / 0.1008e4 -0.1e1 / 0.3150e4;]; - M=(T(1)*diag(ones(m-5,1),5)+T(2)*diag(ones(m-4,1),4)+T(3)*diag(ones(m-3,1),3)+T(4)*diag(ones(m-2,1),2)+T(5)*diag(ones(m-1,1),1)+T(7)*diag(ones(m-1,1),-1)+T(8)*diag(ones(m-2,1),-2)+T(9)*diag(ones(m-3,1),-3)+T(10)*diag(ones(m-4,1),-4)+T(11)*diag(ones(m-5,1),-5)+T(6)*diag(ones(m,1),0)); - - M(1:9,1:9)=M_U; - - M(m-8:m,m-8:m)=flipud( fliplr( M_U ) ); - M=M/h; - - DS_U=[0.761e3 / 0.280e3 -8 14 -0.56e2 / 0.3e1 0.35e2 / 0.2e1 -0.56e2 / 0.5e1 0.14e2 / 0.3e1 -0.8e1 / 0.7e1 0.1e1 / 0.8e1;]; - DS=zeros(m,m); - DS(1,1:9)=DS_U; - DS(m,m-8:m)=fliplr(DS_U); - DS=DS/h; - - D2=HI*(-M+DS); - - % Try adding AD to boundary D1=HI*(Q-D9'*D9) - DD_9=zeros(m); - d9=[-1 9 -36 84 -126 126 -84 36 -9 1];t9=sum(abs(d9));%d9=d9/t9; - DD_9(1:1,1:10)=[d9]; - DD_9(m:m,m-9:m)=[d9]; - - - ADD=30*h/(t9)*DD_9'*DD_9; - - e_1 = zeros(m,1); - e_1(1)= 1; - e_m = zeros(m,1); - e_m(end)= 1; - S_1 = -DS(1,:)'; - S_m = DS(end,:)'; - - Q = H*D1-(-e_1*e_1' + e_m*e_m'); - M = -(H*D2-(-e_1*S_1' + e_m*S_m')); -end \ No newline at end of file
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/blocknorm4.m --- a/+sbp/blocknorm4.m Mon Sep 12 11:14:00 2016 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,57 +0,0 @@ -function [H, HI, D1, D2, e_1, e_m, M,Q S_1, S_m] = blocknorm4(m,h) - H_U=[0.751e3 / 0.3456e4 0.661e3 / 0.3456e4 -0.515e3 / 0.3456e4 0.5e1 / 0.128e3; 0.661e3 / 0.3456e4 0.1405e4 / 0.1152e4 -0.3e1 / 0.128e3 0.29e2 / 0.3456e4; -0.515e3 / 0.3456e4 -0.3e1 / 0.128e3 0.989e3 / 0.1152e4 0.149e3 / 0.3456e4; 0.5e1 / 0.128e3 0.29e2 / 0.3456e4 0.149e3 / 0.3456e4 0.3407e4 / 0.3456e4;]; - - - H=eye(m); - H(1:4,1:4)=H_U; - H(m-3:m,m-3:m)=flipud( fliplr(H_U(1:4,1:4) ) ); - H=H*h; - HI=inv(H); - - 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.1e1 / 0.2e1 0.55e2 / 0.72e2 -0.47e2 / 0.144e3 0.1e1 / 0.16e2; -0.55e2 / 0.72e2 0 0.43e2 / 0.48e2 -0.19e2 / 0.144e3; 0.47e2 / 0.144e3 -0.43e2 / 0.48e2 0 0.47e2 / 0.72e2; -0.1e1 / 0.16e2 0.19e2 / 0.144e3 -0.47e2 / 0.72e2 0;]; - - Q(1:4,1:4)=Q_U; - Q(m-3:m,m-3:m)=flipud( fliplr(-Q_U(1:4,1:4) ) ); - - D1=HI*Q; - - M_U=[0.359e3 / 0.288e3 -0.443e3 / 0.288e3 0.97e2 / 0.288e3 -0.13e2 / 0.288e3; -0.51e2 / 0.32e2 0.325e3 / 0.96e2 -0.191e3 / 0.96e2 0.19e2 / 0.96e2; 0.43e2 / 0.96e2 -0.69e2 / 0.32e2 0.293e3 / 0.96e2 -0.137e3 / 0.96e2; -0.29e2 / 0.288e3 0.89e2 / 0.288e3 -0.427e3 / 0.288e3 0.727e3 / 0.288e3;]; - - - - 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)); - - M(1:4,1:4)=M_U; - - M(m-3:m,m-3:m)=flipud( fliplr( M_U ) ); - M=M/h; - - DS_U=[0.25e2 / 0.12e2 -4 3 -0.4e1 / 0.3e1 0.1e1 / 0.4e1;]; - DS=zeros(m,m); - DS(1,1:5)=DS_U; - DS(m,m-4:m)=fliplr(DS_U); - DS=DS/h; - - D2=HI*(-M+DS); - - d3=[-1 3 -3 1]; - t3=sum(abs(d3)); - DD_3(1:1,1:4)=[d3]; - DD_3(m:m,m-3:m)=[d3]; - - % This works for wave eq. - % For studs interface in 1D no AD is needed. - ADD=1*h/(t3)*DD_3'*DD_3; - - e_1 = zeros(m,1); - e_1(1)= 1; - e_m = zeros(m,1); - e_m(end)= 1; - S_1 = -DS(1,:)'; - S_m = DS(end,:)'; - - Q = H*D1-(-e_1*e_1' + e_m*e_m'); - M = -(H*D2-(-e_1*S_1' + e_m*S_m')); -end \ No newline at end of file
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/blocknorm6.m --- a/+sbp/blocknorm6.m Mon Sep 12 11:14:00 2016 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,57 +0,0 @@ -function [H, HI, D1, D2, e_1, e_m, M,Q S_1, S_m] = blocknorm6(m,h) - H_U=[0.8489084265971e13 / 0.45952647390720e14 0.24636450459943e14 / 0.98469958694400e14 -0.2796787072531e13 / 0.12308744836800e14 0.2793599068823e13 / 0.14360202309600e14 -0.66344569931569e14 / 0.689289710860800e15 0.3784697867191e13 / 0.137857942172160e15; 0.24636450459943e14 / 0.98469958694400e14 0.27815394775103e14 / 0.19693991738880e14 -0.445601472229e12 / 0.861612138576e12 0.3896159037731e13 / 0.17232242771520e14 -0.866505556741e12 / 0.27571588434432e14 -0.25625418493681e14 / 0.689289710860800e15; -0.2796787072531e13 / 0.12308744836800e14 -0.445601472229e12 / 0.861612138576e12 0.31409405327129e14 / 0.17232242771520e14 -0.1595539040819e13 / 0.3446448554304e13 0.2651608170899e13 / 0.17232242771520e14 0.1434714163381e13 / 0.43080606928800e14; 0.2793599068823e13 / 0.14360202309600e14 0.3896159037731e13 / 0.17232242771520e14 -0.1595539040819e13 / 0.3446448554304e13 0.6984350202787e13 / 0.5744080923840e13 -0.62662743973e11 / 0.861612138576e12 -0.435331581619e12 / 0.12308744836800e14; -0.66344569931569e14 / 0.689289710860800e15 -0.866505556741e12 / 0.27571588434432e14 0.2651608170899e13 / 0.17232242771520e14 -0.62662743973e11 / 0.861612138576e12 0.20320736807807e14 / 0.19693991738880e14 0.1368363924007e13 / 0.98469958694400e14; 0.3784697867191e13 / 0.137857942172160e15 -0.25625418493681e14 / 0.689289710860800e15 0.1434714163381e13 / 0.43080606928800e14 -0.435331581619e12 / 0.12308744836800e14 0.1368363924007e13 / 0.98469958694400e14 0.27414523542149e14 / 0.27571588434432e14;]; - - - H=eye(m); - H(1:6,1:6)=H_U; - H(m-5:m,m-5:m)=flipud( fliplr(H_U(1:6,1:6) ) ); - H=H*h; - HI=inv(H); - - Q=(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)); - - Q_U = [-0.1e1 / 0.2e1 0.151864337282617e15 / 0.172322427715200e15 -0.251539972254817e15 / 0.344644855430400e15 0.61230525943549e14 / 0.114881618476800e15 -0.80987306509439e14 / 0.344644855430400e15 0.697178163343e12 / 0.13785794217216e14; -0.151864337282617e15 / 0.172322427715200e15 0 0.12350422095979e14 / 0.7658774565120e13 -0.78802251164141e14 / 0.68928971086080e14 0.4229407848431e13 / 0.7658774565120e13 -0.5372490790279e13 / 0.38293872825600e14; 0.251539972254817e15 / 0.344644855430400e15 -0.12350422095979e14 / 0.7658774565120e13 0 0.2217674201683e13 / 0.1723224277152e13 -0.13219134462287e14 / 0.22976323695360e14 0.19660399553981e14 / 0.114881618476800e15; -0.61230525943549e14 / 0.114881618476800e15 0.78802251164141e14 / 0.68928971086080e14 -0.2217674201683e13 / 0.1723224277152e13 0 0.62307836637379e14 / 0.68928971086080e14 -0.84068101764193e14 / 0.344644855430400e15; 0.80987306509439e14 / 0.344644855430400e15 -0.4229407848431e13 / 0.7658774565120e13 0.13219134462287e14 / 0.22976323695360e14 -0.62307836637379e14 / 0.68928971086080e14 0 0.44756810052211e14 / 0.57440809238400e14; -0.697178163343e12 / 0.13785794217216e14 0.5372490790279e13 / 0.38293872825600e14 -0.19660399553981e14 / 0.114881618476800e15 0.84068101764193e14 / 0.344644855430400e15 -0.44756810052211e14 / 0.57440809238400e14 0;]; - - Q(1:6,1:6)=Q_U; - Q(m-5:m,m-5:m)=flipud( fliplr(-Q_U(1:6,1:6) ) ); - - D1=HI*Q; - - M_U=[0.960901171090739e15 / 0.689289710860800e15 -0.502032138770899e15 / 0.229763236953600e15 0.493085196645929e15 / 0.344644855430400e15 -0.329491854944251e15 / 0.344644855430400e15 0.89541920186441e14 / 0.229763236953600e15 -0.50617198740721e14 / 0.689289710860800e15; -0.100483015499831e15 / 0.45952647390720e14 0.807564929223191e15 / 0.137857942172160e15 -0.415779274818991e15 / 0.68928971086080e14 0.80693719872887e14 / 0.22976323695360e14 -0.196663473955997e15 / 0.137857942172160e15 0.37943821632959e14 / 0.137857942172160e15; 0.99938177941669e14 / 0.68928971086080e14 -0.84419552767043e14 / 0.13785794217216e14 0.106922123424097e15 / 0.11488161847680e14 -0.223356054245897e15 / 0.34464485543040e14 0.157526160982357e15 / 0.68928971086080e14 -0.10062402380533e14 / 0.22976323695360e14; -0.68310884976863e14 / 0.68928971086080e14 0.17038649985979e14 / 0.4595264739072e13 -0.231397767539273e15 / 0.34464485543040e14 0.232669188399619e15 / 0.34464485543040e14 -0.1657930371065e13 / 0.510584971008e12 0.34774771016773e14 / 0.68928971086080e14; 0.18789143112277e14 / 0.45952647390720e14 -0.213895716727517e15 / 0.137857942172160e15 0.171024751153381e15 / 0.68928971086080e14 -0.8523669967037e13 / 0.2552924855040e13 0.485768751245399e15 / 0.137857942172160e15 -0.229158724354277e15 / 0.137857942172160e15; -0.51766014925489e14 / 0.689289710860800e15 0.202930494289627e15 / 0.689289710860800e15 -0.54332868549353e14 / 0.114881618476800e15 0.180479548146281e15 / 0.344644855430400e15 -0.1146942437956153e16 / 0.689289710860800e15 0.211001773091419e15 / 0.76587745651200e14;]; - - - - M=-(2*diag(ones(m-3,1),3)-27*diag(ones(m-2,1),2)+270*diag(ones(m-1,1),1)+270*diag(ones(m-1,1),-1)-27*diag(ones(m-2,1),-2)+2*diag(ones(m-3,1),-3)-490*diag(ones(m,1),0))/180; - - M(1:6,1:6)=M_U; - - M(m-5:m,m-5:m)=flipud( fliplr( M_U ) ); - M=M/h; - - DS_U=[0.137e3 / 0.60e2 -5 5 -0.10e2 / 0.3e1 0.5e1 / 0.4e1 -0.1e1 / 0.5e1;]; - DS=zeros(m,m); - DS(1,1:6)=DS_U; - DS(m,m-5:m)=fliplr(DS_U); - DS=DS/h; - - D2=HI*(-M+DS); - - d5=[-1 5 -10 10 -5 1]; - t5=sum(abs(d5)); - DD_5(1:1,1:6)=[d5]; - DD_5(m:m,m-5:m)=[d5]; - - % This works for wave eq. - % For studs interface in 1D no AD is needed. - ADD=7*h/(t5)*DD_5'*DD_5; - - e_1 = zeros(m,1); - e_1(1)= 1; - e_m = zeros(m,1); - e_m(end)= 1; - S_1 = -DS(1,:)'; - S_m = DS(end,:)'; - - Q = H*D1-(-e_1*e_1' + e_m*e_m'); - M = -(H*D2-(-e_1*S_1' + e_m*S_m')); -end \ No newline at end of file
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/blocknorm8.m --- a/+sbp/blocknorm8.m Mon Sep 12 11:14:00 2016 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,60 +0,0 @@ -function [H, HI, D1, D2, e_1, e_m, M,Q S_1, S_m] = blocknorm8(m,h) - % Eigth order - e_1=zeros(m,1);e_1(1)=1; - e_m=zeros(m,1);e_m(m)=1; - - H_U=[ 0.704266523e9 / 0.4180377600e10 0.4579586639e10 / 0.16257024000e11 -0.3623870581e10 / 0.9754214400e10 0.12753127559e11 / 0.29262643200e11 -0.3687413731e10 / 0.9754214400e10 0.2169892891e10 / 0.9754214400e10 -0.13224544841e11 / 0.146313216000e12 0.4142047e7 / 0.199065600e9; - 0.4579586639e10 / 0.16257024000e11 0.36543258551e11 / 0.20901888000e11 -0.8235820121e10 / 0.6967296000e10 0.1800520829e10 / 0.1393459200e10 -0.3725834681e10 / 0.4180377600e10 0.2588501879e10 / 0.6967296000e10 -0.10477621e8 / 0.995328000e9 -0.6589395529e10 / 0.146313216000e12; - -0.3623870581e10 / 0.9754214400e10 -0.8235820121e10 / 0.6967296000e10 0.765685439e9 / 0.258048000e9 -0.3254203513e10 / 0.1393459200e10 0.2477267447e10 / 0.1393459200e10 -0.456533e6 / 0.491520e6 0.873043831e9 / 0.6967296000e10 0.4279558279e10 / 0.48771072000e11; - 0.12753127559e11 / 0.29262643200e11 0.1800520829e10 / 0.1393459200e10 -0.3254203513e10 / 0.1393459200e10 0.16428690611e11 / 0.4180377600e10 -0.460605929e9 / 0.199065600e9 0.1897042423e10 / 0.1393459200e10 -0.1151273401e10 / 0.4180377600e10 -0.65906413e8 / 0.650280960e9; - -0.3687413731e10 / 0.9754214400e10 -0.3725834681e10 / 0.4180377600e10 0.2477267447e10 / 0.1393459200e10 -0.460605929e9 / 0.199065600e9 0.11663916211e11 / 0.4180377600e10 -0.307273957e9 / 0.278691840e9 0.117995903e9 / 0.464486400e9 0.95035807e8 / 0.1170505728e10; - 0.2169892891e10 / 0.9754214400e10 0.2588501879e10 / 0.6967296000e10 -0.456533e6 / 0.491520e6 0.1897042423e10 / 0.1393459200e10 -0.307273957e9 / 0.278691840e9 0.17436823e8 / 0.10321920e8 -0.1274455129e10 / 0.6967296000e10 -0.338917493e9 / 0.9754214400e10; - -0.13224544841e11 / 0.146313216000e12 -0.10477621e8 / 0.995328000e9 0.873043831e9 / 0.6967296000e10 -0.1151273401e10 / 0.4180377600e10 0.117995903e9 / 0.464486400e9 -0.1274455129e10 / 0.6967296000e10 0.22041718711e11 / 0.20901888000e11 0.468461293e9 / 0.48771072000e11; - 0.4142047e7 / 0.199065600e9 -0.6589395529e10 / 0.146313216000e12 0.4279558279e10 / 0.48771072000e11 -0.65906413e8 / 0.650280960e9 0.95035807e8 / 0.1170505728e10 -0.338917493e9 / 0.9754214400e10 0.468461293e9 / 0.48771072000e11 0.20832744839e11 / 0.20901888000e11; - ]; - - - H=eye(m); - H(1:8,1:8)=H_U; - H(m-7:m,m-7:m)=rot90( H_U(1:8,1:8) ,2 ); - H=H*h; - HI=inv(H); - - Q=-(1/280*diag(ones(m-4,1),4)-4/105*diag(ones(m-3,1),3)+1/5*diag(ones(m-2,1),2)-4/5*diag(ones(m-1,1),1)+4/5*diag(ones(m-1,1),-1)-1/5*diag(ones(m-2,1),-2)+4/105*diag(ones(m-3,1),-3)-1/280*diag(ones(m-4,1),-4)); - - - Q_U = [-0.1e1 / 0.2e1 0.16262381e8 / 0.15876000e8 -0.3770744693e10 / 0.3048192000e10 0.290431859e9 / 0.203212800e9 -0.363704879e9 / 0.304819200e9 0.206906927e9 / 0.304819200e9 -0.248883679e9 / 0.1016064000e10 0.2665637e7 / 0.62208000e8; -0.16262381e8 / 0.15876000e8 0 0.138589901e9 / 0.62208000e8 -0.31764881e8 / 0.12441600e8 0.461249e6 / 0.193536e6 -0.347232997e9 / 0.217728000e9 0.1788157e7 / 0.2488320e7 -0.5926349e7 / 0.37632000e8; 0.3770744693e10 / 0.3048192000e10 -0.138589901e9 / 0.62208000e8 0 0.11741773e8 / 0.5443200e7 -0.39109817e8 / 0.17418240e8 0.10216441e8 / 0.5376000e7 -0.245131109e9 / 0.217728000e9 0.92809903e8 / 0.304819200e9; -0.290431859e9 / 0.203212800e9 0.31764881e8 / 0.12441600e8 -0.11741773e8 / 0.5443200e7 0 0.4634999e7 / 0.2488320e7 -0.144219869e9 / 0.87091200e8 0.17445643e8 / 0.14515200e8 -0.38142949e8 / 0.101606400e9; 0.363704879e9 / 0.304819200e9 -0.461249e6 / 0.193536e6 0.39109817e8 / 0.17418240e8 -0.4634999e7 / 0.2488320e7 0 0.7992221e7 / 0.5443200e7 -0.817951e6 / 0.829440e6 0.4455517e7 / 0.13547520e8; -0.206906927e9 / 0.304819200e9 0.347232997e9 / 0.217728000e9 -0.10216441e8 / 0.5376000e7 0.144219869e9 / 0.87091200e8 -0.7992221e7 / 0.5443200e7 0 0.68487373e8 / 0.62208000e8 -0.1032638773e10 / 0.3048192000e10; 0.248883679e9 / 0.1016064000e10 -0.1788157e7 / 0.2488320e7 0.245131109e9 / 0.217728000e9 -0.17445643e8 / 0.14515200e8 0.817951e6 / 0.829440e6 -0.68487373e8 / 0.62208000e8 0 0.39529771e8 / 0.47628000e8; -0.2665637e7 / 0.62208000e8 0.5926349e7 / 0.37632000e8 -0.92809903e8 / 0.304819200e9 0.38142949e8 / 0.101606400e9 -0.4455517e7 / 0.13547520e8 0.1032638773e10 / 0.3048192000e10 -0.39529771e8 / 0.47628000e8 0;]; - - Q(1:8,1:8)=Q_U; - Q(m-7:m,m-7:m)=rot90( -Q_U(1:8,1:8) ,2 ); - - D1=HI*Q; - - - M_U =[0.27667249117e11 / 0.18289152000e11 -0.17100791927e11 / 0.6096384000e10 0.6123596021e10 / 0.2032128000e10 -0.12420079921e11 / 0.3657830400e10 0.3352522937e10 / 0.1219276800e10 -0.3030351383e10 / 0.2032128000e10 0.8955233071e10 / 0.18289152000e11 -0.448917533e9 / 0.6096384000e10; -0.2443029521e10 / 0.870912000e9 0.3279926909e10 / 0.373248000e9 -0.150833107e9 / 0.11612160e8 0.2418903029e10 / 0.174182400e9 -0.1195687489e10 / 0.104509440e9 0.1864443097e10 / 0.290304000e9 -0.275412413e9 / 0.124416000e9 0.26267539e8 / 0.74649600e8; 0.875033123e9 / 0.290304000e9 -0.754432799e9 / 0.58060800e8 0.262316881e9 / 0.10752000e8 -0.1615952663e10 / 0.58060800e8 0.1304948581e10 / 0.58060800e8 -0.59605951e8 / 0.4608000e7 0.270029509e9 / 0.58060800e8 -0.225377137e9 / 0.290304000e9; -0.71086111e8 / 0.20901888e8 0.2425994741e10 / 0.174182400e9 -0.1622486807e10 / 0.58060800e8 0.735382895e9 / 0.20901888e8 -0.1016121419e10 / 0.34836480e8 0.190014817e9 / 0.11612160e8 -0.447155539e9 / 0.74649600e8 0.179406911e9 / 0.174182400e9; 0.480578879e9 / 0.174182400e9 -0.6018333509e10 / 0.522547200e9 0.1319413093e10 / 0.58060800e8 -0.205032463e9 / 0.6967296e7 0.551889007e9 / 0.20901888e8 -0.887809303e9 / 0.58060800e8 0.914606453e9 / 0.174182400e9 -0.67482881e8 / 0.74649600e8; -0.434493809e9 / 0.290304000e9 0.1878773977e10 / 0.290304000e9 -0.423185977e9 / 0.32256000e8 0.964538597e9 / 0.58060800e8 -0.894343447e9 / 0.58060800e8 0.345461491e9 / 0.32256000e8 -0.1288081307e10 / 0.290304000e9 0.199200163e9 / 0.290304000e9; 0.183060319e9 / 0.373248000e9 -0.276656573e9 / 0.124416000e9 0.54579137e8 / 0.11612160e8 -0.3169984837e10 / 0.522547200e9 0.184339633e9 / 0.34836480e8 -0.1289417627e10 / 0.290304000e9 0.1431981949e10 / 0.373248000e9 -0.307164061e9 / 0.174182400e9; -0.449332253e9 / 0.6096384000e10 0.1290053923e10 / 0.3657830400e10 -0.1588745239e10 / 0.2032128000e10 0.1267377593e10 / 0.1219276800e10 -0.3326650673e10 / 0.3657830400e10 0.1396036981e10 / 0.2032128000e10 -0.2150231371e10 / 0.1219276800e10 0.52544801501e11 / 0.18289152000e11;]; - - M=-(-1/560*diag(ones(m-4,1),4)+8/315*diag(ones(m-3,1),3)-1/5*diag(ones(m-2,1),2)+8/5*diag(ones(m-1,1),1)+8/5*diag(ones(m-1,1),-1)-1/5*diag(ones(m-2,1),-2)+8/315*diag(ones(m-3,1),-3)-1/560*diag(ones(m-4,1),-4)-205/72*diag(ones(m,1),0)); - M(1:8,1:8)=M_U; - - M(m-7:m,m-7:m)=rot90( M_U ,2 ); - M=M/h; - - % DS_U=[0.363e3 / 0.140e3 -7 0.21e2 / 0.2e1 -0.35e2 / 0.3e1 0.35e2 / 0.4e1 -0.21e2 / 0.5e1 0.7e1 / 0.6e1 -0.1e1 / 0.7e1;]; - % DS=zeros(m,m); - % DS(1,1:8)=DS_U; - % DS(m,m-7:m)=fliplr(DS_U); - % DS=DS/h; - - %D2=HI*(-M+DS); - - S_U=-[0.363e3 / 0.140e3 -7 0.21e2 / 0.2e1 -0.35e2 / 0.3e1 0.35e2 / 0.4e1 -0.21e2 / 0.5e1 0.7e1 / 0.6e1 -0.1e1 / 0.7e1;]/h; - S_1=zeros(1,m); - S_1(1:8)=S_U; - S_m=zeros(1,m); - S_m(m-7:m)=fliplr(-S_U); - - - D2=HI*(-M - e_1*S_1+e_m*S_m); - S_1 = S_1'; - S_m = S_m'; -end \ No newline at end of file
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/higher2_compatible_halfvariable.m --- a/+sbp/higher2_compatible_halfvariable.m Mon Sep 12 11:14:00 2016 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,161 +0,0 @@ -% Returns D2 as a function handle -function [H, HI, D1, D2, D3, D4, e_1, e_m, M4, Q, S2_1, S2_m, S3_1, S3_m, S_1, S_m] = higher2_compatible_halfvariable(m,h) - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - %%% 4:de ordn. SBP Finita differens %%% - %%% operatorer framtagna av Ken Mattsson %%% - %%% %%% - %%% 6 randpunkter, diagonal norm %%% - %%% %%% - %%% Datum: 2013-11-11 %%% - %%% %%% - %%% %%% - %%% H (Normen) %%% - %%% D1 (approx f?rsta derivatan) %%% - %%% D2 (approx andra derivatan) %%% - %%% D3 (approx tredje derivatan) %%% - %%% D2 (approx fj?rde derivatan) %%% - %%% %%% - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - % M?ste ange antal punkter (m) och stegl?ngd (h) - % Notera att dessa opetratorer ?r framtagna f?r att anv?ndas n?r - % vi har 3de och 4de derivator i v?r PDE - % I annat fall anv?nd de "traditionella" som har noggrannare - % randsplutningar f?r D1 och D2 - - % Vi b?rjar med normen. Notera att alla SBP operatorer delar samma norm, - % vilket ?r n?dv?ndigt f?r stabilitet - - H=diag(ones(m,1),0);H(1,1)=1/2;H(m,m)=1/2; - - - H=H*h; - HI=inv(H); - - - % First derivative SBP operator, 1st order accurate at first 6 boundary points - - q1=1/2; - Q=q1*(diag(ones(m-1,1),1)-diag(ones(m-1,1),-1)); - - %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)); - - - 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') ; - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - - - % Second derivative, 1st order accurate at first boundary points - - %% below for constant coefficients - % m1=-1;m0=2; - % M=m1*(diag(ones(m-1,1),1)+diag(ones(m-1,1),-1))+m0*diag(ones(m,1),0);M(1,1)=1;M(m,m)=1; - % M=M/h; - %D2=HI*(-M-e_1*S_1+e_m*S_m); - - %% Below for variable coefficients - %% Require a vector c with the koeffients - - S_U=[-3/2 2 -1/2]/h; - S_1=zeros(1,m); - S_1(1:3)=S_U; - S_m=zeros(1,m); - S_m(m-2:m)=fliplr(-S_U); - - S_1 = S_1'; - S_m = S_m'; - - M=sparse(m,m); - e_1 = sparse(e_1); - e_m = sparse(e_m); - S_1 = sparse(S_1); - S_m = sparse(S_m); - - scheme_width = 3; - scheme_radius = (scheme_width-1)/2; - r = (1+scheme_radius):(m-scheme_radius); - - function D2 = D2_fun(c) - - Mm1 = -c(r-1)/2 - c(r)/2; - M0 = c(r-1)/2 + c(r) + c(r+1)/2; - Mp1 = -c(r)/2 - c(r+1)/2; - - M(r,:) = spdiags([Mm1 M0 Mp1],0:2*scheme_radius,length(r),m); - - - M(1:2,1:2)=[c(1)/2 + c(2)/2 -c(1)/2 - c(2)/2; -c(1)/2 - c(2)/2 c(1)/2 + c(2) + c(3)/2;]; - M(m-1:m,m-1:m)=[c(m-2)/2 + c(m-1) + c(m)/2 -c(m-1)/2 - c(m)/2; -c(m-1)/2 - c(m)/2 c(m-1)/2 + c(m)/2;]; - M=M/h; - - D2=HI*(-M-c(1)*e_1*S_1'+c(m)*e_m*S_m'); - end - D2 = @D2_fun; - - - - - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - - - % Third derivative, 1st order accurate at first 6 boundary points - - q2=1/2;q1=-1; - Q3=q2*(diag(ones(m-2,1),2)-diag(ones(m-2,1),-2))+q1*(diag(ones(m-1,1),1)-diag(ones(m-1,1),-1)); - - %QQ3=(-1/8*diag(ones(m-3,1),3) + 1*diag(ones(m-2,1),2) - 13/8*diag(ones(m-1,1),1) +13/8*diag(ones(m-1,1),-1) -1*diag(ones(m-2,1),-2) + 1/8*diag(ones(m-3,1),-3)); - - - Q3_U = [0 -0.13e2 / 0.16e2 0.7e1 / 0.8e1 -0.1e1 / 0.16e2; 0.13e2 / 0.16e2 0 -0.23e2 / 0.16e2 0.5e1 / 0.8e1; -0.7e1 / 0.8e1 0.23e2 / 0.16e2 0 -0.17e2 / 0.16e2; 0.1e1 / 0.16e2 -0.5e1 / 0.8e1 0.17e2 / 0.16e2 0;]; - Q3(1:4,1:4)=Q3_U; - Q3(m-3:m,m-3:m)=flipud( fliplr( -Q3_U ) ); - Q3=Q3/h^2; - - - - S2_U=[1 -2 1;]/h^2; - S2_1=zeros(1,m); - S2_1(1:3)=S2_U; - S2_m=zeros(1,m); - S2_m(m-2:m)=fliplr(S2_U); - S2_1 = S2_1'; - S2_m = S2_m'; - - - - D3=HI*(Q3 - e_1*S2_1' + e_m*S2_m' +1/2*S_1*S_1' -1/2*S_m*S_m' ) ; - - % Fourth derivative, 0th order accurate at first 6 boundary points (still - % yield 4th order convergence if stable: for example u_tt=-u_xxxx - - m2=1;m1=-4;m0=6; - M4=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.13e2 / 0.10e2 -0.12e2 / 0.5e1 0.9e1 / 0.10e2 0.1e1 / 0.5e1; -0.12e2 / 0.5e1 0.26e2 / 0.5e1 -0.16e2 / 0.5e1 0.2e1 / 0.5e1; 0.9e1 / 0.10e2 -0.16e2 / 0.5e1 0.47e2 / 0.10e2 -0.17e2 / 0.5e1; 0.1e1 / 0.5e1 0.2e1 / 0.5e1 -0.17e2 / 0.5e1 0.29e2 / 0.5e1;]; - - - 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); - S3_1 = S3_1'; - S3_m = S3_m'; - - D4=HI*(M4-e_1*S3_1'+e_m*S3_m' + S_1*S2_1'-S_m*S2_m'); -end
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/higher4.m --- a/+sbp/higher4.m Mon Sep 12 11:14:00 2016 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,154 +0,0 @@ -function [H, HI, D1, D2, D3, D4, e_1, e_m, M, M4,Q, Q3, S2_1, S2_m, S3_1, S3_m, S_1, S_m] = higher4(m,h) - - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - %%% 4:de ordn. SBP Finita differens %%% - %%% operatorer framtagna av Ken Mattsson %%% - %%% %%% - %%% 6 randpunkter, diagonal norm %%% - %%% %%% - %%% Datum: 2013-11-11 %%% - %%% %%% - %%% %%% - %%% H (Normen) %%% - %%% D1 (approx f?rsta derivatan) %%% - %%% D2 (approx andra derivatan) %%% - %%% D3 (approx tredje derivatan) %%% - %%% D2 (approx fj?rde derivatan) %%% - %%% %%% - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - % M?ste ange antal punkter (m) och stegl?ngd (h) - % Notera att dessa opetratorer ?r framtagna f?r att anv?ndas n?r - % vi har 3de och 4de derivator i v?r PDE - % I annat fall anv?nd de "traditionella" som har noggrannare - % randsplutningar f?r D1 och D2 - - % Vi b?rjar med normen. Notera att alla SBP operatorer delar samma norm, - % vilket ?r n?dv?ndigt f?r stabilitet - - H=diag(ones(m,1),0); - H_U=[0.35809e5 / 0.100800e6 0 0 0 0 0; 0 0.13297e5 / 0.11200e5 0 0 0 0; 0 0 0.5701e4 / 0.5600e4 0 0 0; 0 0 0 0.45109e5 / 0.50400e5 0 0; 0 0 0 0 0.35191e5 / 0.33600e5 0; 0 0 0 0 0 0.33503e5 / 0.33600e5;]; - - H(1:6,1:6)=H_U; - H(m-5:m,m-5:m)=fliplr(flipud(H_U)); - H=H*h; - HI=inv(H); - - - % First derivative SBP operator, 1st order accurate at first 6 boundary points - - q2=-1/12;q1=8/12; - Q=q2*(diag(ones(m-2,1),2) - diag(ones(m-2,1),-2))+q1*(diag(ones(m-1,1),1)-diag(ones(m-1,1),-1)); - - %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.526249e6 / 0.907200e6 -0.10819e5 / 0.777600e6 -0.50767e5 / 0.907200e6 -0.631e3 / 0.28800e5 0.91e2 / 0.7776e4; -0.526249e6 / 0.907200e6 0 0.1421209e7 / 0.2721600e7 0.16657e5 / 0.201600e6 -0.8467e4 / 0.453600e6 -0.33059e5 / 0.5443200e7; 0.10819e5 / 0.777600e6 -0.1421209e7 / 0.2721600e7 0 0.631187e6 / 0.1360800e7 0.400139e6 / 0.5443200e7 -0.8789e4 / 0.302400e6; 0.50767e5 / 0.907200e6 -0.16657e5 / 0.201600e6 -0.631187e6 / 0.1360800e7 0 0.496403e6 / 0.907200e6 -0.308533e6 / 0.5443200e7; 0.631e3 / 0.28800e5 0.8467e4 / 0.453600e6 -0.400139e6 / 0.5443200e7 -0.496403e6 / 0.907200e6 0 0.1805647e7 / 0.2721600e7; -0.91e2 / 0.7776e4 0.33059e5 / 0.5443200e7 0.8789e4 / 0.302400e6 0.308533e6 / 0.5443200e7 -0.1805647e7 / 0.2721600e7 0;]; - Q(1:6,1:6)=Q_U; - Q(m-5:m,m-5:m)=flipud( fliplr( -Q_U ) ); - - 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') ; - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - - - % Second derivative, 1st order accurate at first 6 boundary points - m2=1/12;m1=-16/12;m0=30/12; - M=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); - %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)); - M_U=[0.2386127e7 / 0.2177280e7 -0.515449e6 / 0.453600e6 -0.10781e5 / 0.777600e6 0.61567e5 / 0.1360800e7 0.6817e4 / 0.403200e6 -0.1069e4 / 0.136080e6; -0.515449e6 / 0.453600e6 0.4756039e7 / 0.2177280e7 -0.1270009e7 / 0.1360800e7 -0.3751e4 / 0.28800e5 0.3067e4 / 0.680400e6 0.119459e6 / 0.10886400e8; -0.10781e5 / 0.777600e6 -0.1270009e7 / 0.1360800e7 0.111623e6 / 0.60480e5 -0.555587e6 / 0.680400e6 -0.551339e6 / 0.5443200e7 0.8789e4 / 0.453600e6; 0.61567e5 / 0.1360800e7 -0.3751e4 / 0.28800e5 -0.555587e6 / 0.680400e6 0.1025327e7 / 0.544320e6 -0.464003e6 / 0.453600e6 0.222133e6 / 0.5443200e7; 0.6817e4 / 0.403200e6 0.3067e4 / 0.680400e6 -0.551339e6 / 0.5443200e7 -0.464003e6 / 0.453600e6 0.5074159e7 / 0.2177280e7 -0.1784047e7 / 0.1360800e7; -0.1069e4 / 0.136080e6 0.119459e6 / 0.10886400e8 0.8789e4 / 0.453600e6 0.222133e6 / 0.5443200e7 -0.1784047e7 / 0.1360800e7 0.1812749e7 / 0.725760e6;]; - - M(1:6,1:6)=M_U; - - M(m-5:m,m-5: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); - - D2=HI*(-M-e_1*S_1+e_m*S_m); - - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - - - % Third derivative, 1st order accurate at first 6 boundary points - - q3=-1/8;q2=1;q1=-13/8; - Q3=q3*(diag(ones(m-3,1),3)-diag(ones(m-3,1),-3))+q2*(diag(ones(m-2,1),2)-diag(ones(m-2,1),-2))+q1*(diag(ones(m-1,1),1)-diag(ones(m-1,1),-1)); - - %QQ3=(-1/8*diag(ones(m-3,1),3) + 1*diag(ones(m-2,1),2) - 13/8*diag(ones(m-1,1),1) +13/8*diag(ones(m-1,1),-1) -1*diag(ones(m-2,1),-2) + 1/8*diag(ones(m-3,1),-3)); - - - Q3_U = [0 -0.88471e5 / 0.67200e5 0.58139e5 / 0.33600e5 -0.1167e4 / 0.2800e4 -0.89e2 / 0.11200e5 0.7e1 / 0.640e3; 0.88471e5 / 0.67200e5 0 -0.43723e5 / 0.16800e5 0.46783e5 / 0.33600e5 -0.191e3 / 0.3200e4 -0.1567e4 / 0.33600e5; -0.58139e5 / 0.33600e5 0.43723e5 / 0.16800e5 0 -0.4049e4 / 0.2400e4 0.29083e5 / 0.33600e5 -0.71e2 / 0.1400e4; 0.1167e4 / 0.2800e4 -0.46783e5 / 0.33600e5 0.4049e4 / 0.2400e4 0 -0.8591e4 / 0.5600e4 0.10613e5 / 0.11200e5; 0.89e2 / 0.11200e5 0.191e3 / 0.3200e4 -0.29083e5 / 0.33600e5 0.8591e4 / 0.5600e4 0 -0.108271e6 / 0.67200e5; -0.7e1 / 0.640e3 0.1567e4 / 0.33600e5 0.71e2 / 0.1400e4 -0.10613e5 / 0.11200e5 0.108271e6 / 0.67200e5 0;]; - - Q3(1:6,1:6)=Q3_U; - Q3(m-5:m,m-5:m)=flipud( fliplr( -Q3_U ) ); - Q3=Q3/h^2; - - - - 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); - - - - D3=HI*(Q3 - e_1*S2_1 + e_m*S2_m +1/2*S_1'*S_1 -1/2*S_m'*S_m ) ; - - % Fourth derivative, 0th order accurate at first 6 boundary points (still - % yield 4th order convergence if stable: for example u_tt=-u_xxxx - - 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.4596181e7 / 0.1814400e7 -0.10307743e8 / 0.1814400e7 0.160961e6 / 0.43200e5 -0.535019e6 / 0.907200e6 0.109057e6 / 0.1814400e7 -0.29273e5 / 0.604800e6; -0.10307743e8 / 0.1814400e7 0.8368543e7 / 0.604800e6 -0.9558943e7 / 0.907200e6 0.2177057e7 / 0.907200e6 -0.11351e5 / 0.86400e5 0.204257e6 / 0.1814400e7; 0.160961e6 / 0.43200e5 -0.9558943e7 / 0.907200e6 0.4938581e7 / 0.453600e6 -0.786473e6 / 0.151200e6 0.1141057e7 / 0.907200e6 -0.120619e6 / 0.907200e6; -0.535019e6 / 0.907200e6 0.2177057e7 / 0.907200e6 -0.786473e6 / 0.151200e6 0.3146581e7 / 0.453600e6 -0.4614143e7 / 0.907200e6 0.24587e5 / 0.14400e5; 0.109057e6 / 0.1814400e7 -0.11351e5 / 0.86400e5 0.1141057e7 / 0.907200e6 -0.4614143e7 / 0.907200e6 0.185709e6 / 0.22400e5 -0.11293343e8 / 0.1814400e7; -0.29273e5 / 0.604800e6 0.204257e6 / 0.1814400e7 -0.120619e6 / 0.907200e6 0.24587e5 / 0.14400e5 -0.11293343e8 / 0.1814400e7 0.16787381e8 / 0.1814400e7;]; - - M4(1:6,1:6)=M4_U; - - M4(m-5:m,m-5: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); - - - % L=h*(m-1); - % - % x1=linspace(0,L,m)'; - % x2=x1.^2/fac(2); - % x3=x1.^3/fac(3); - % x4=x1.^4/fac(4); - % x5=x1.^5/fac(5); - % - % x0=x1.^0/fac(1); - - S_1 = S_1'; - S2_1 = S2_1'; - S3_1 = S3_1'; - S_m = S_m'; - S2_m = S2_m'; - S3_m = S3_m'; - - - -end
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/higher4_compatible_halfvariable.m --- a/+sbp/higher4_compatible_halfvariable.m Mon Sep 12 11:14:00 2016 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,154 +0,0 @@ -function [H, HI, D2, D4, e_1, e_m, M4, S2_1, S2_m, S3_1, S3_m, S_1, S_m] = higher4_compatible_halfvariable(m,h) - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - %%% 4:de ordn. SBP Finita differens %%% - %%% %%% - %%% H (Normen) %%% - %%% D1=H^(-1)Q (approx f?rsta derivatan) %%% - %%% D2 (approx andra derivatan) %%% - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - - %m=20; %problemstorlek - %h=1/(m-1); - %h=1; - - c=ones(m,1); - - - 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); - HI = sparse(HI); - - - - 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') ; - - 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;]; - 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)); - - M(1:4,1:4)=M_U; - - 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); - S_1 = S_1'; - S_m = S_m'; - - - M=sparse(m,m); - e_1 = sparse(e_1); - e_m = sparse(e_m); - S_1 = sparse(S_1); - S_m = sparse(S_m); - - - scheme_width = 5; - scheme_radius = (scheme_width-1)/2; - r = (1+scheme_radius):(m-scheme_radius); - - function D2 = D2_fun(c) - - %% ALTERNATIVES %%%%%%%%%%%%% - % for i=4:m-3 - % M(i,i-2:i+2)=[-c(i-1) / 0.6e1 + c(i-2) / 0.8e1 + c(i) / 0.8e1 -c(i-2) / 0.6e1 - c(i+1) / 0.6e1 - c(i-1) / 0.2e1 - c(i) / 0.2e1 c(i-2) / 0.24e2 + 0.5e1 / 0.6e1 * c(i-1) + 0.5e1 / 0.6e1 * c(i+1) + c(i+2) / 0.24e2 + 0.3e1 / 0.4e1 * c(i) -c(i-1) / 0.6e1 - c(i+2) / 0.6e1 - c(i) / 0.2e1 - c(i+1) / 0.2e1 -c(i+1) / 0.6e1 + c(i) / 0.8e1 + c(i+2) / 0.8e1;]; - % end - %%%%%%%%%%%%%%%%%%%%%%%%%%%%% - % for i=4:m-3 - % M(i,i-2:i+2)= [ - % c(i-2) / 0.8e1 - c(i-1) / 0.6e1 + c(i) / 0.8e1 , - % -c(i-2) / 0.6e1 - c(i-1) / 0.2e1 - c(i) / 0.2e1 - c(i+1) / 0.6e1 , - % c(i-2) / 2.4e1 + c(i-1) / 1.2e0 + c(i) * 0.3/0.4 + c(i+1) / 1.2e0 + c(i+2) / 2.4e1 , - % -c(i-1) / 0.6e1 - c(i) / 0.2e1 - c(i+1) / 0.2e1 - c(i+2) / 0.6e1 , - % c(i) / 0.8e1 - c(i+1) / 0.6e1 + c(i+2) / 0.8e1 , - % ]; - % end - %%%%%%%%%%%%%%%%%%%%%%%%%%%%% - Mm2 = c(r-2) / 0.8e1 - c(r-1) / 0.6e1 + c(r) / 0.8e1 ; - Mm1 = -c(r-2) / 0.6e1 - c(r-1) / 0.2e1 - c(r) / 0.2e1 - c(r+1) / 0.6e1 ; - M0 = c(r-2) / 2.4e1 + c(r-1) / 1.2e0 + c(r) * 0.3/0.4 + c(r+1) / 1.2e0 + c(r+2) / 2.4e1; - Mp1 = -c(r-1) / 0.6e1 - c(r) / 0.2e1 - c(r+1) / 0.2e1 - c(r+2) / 0.6e1; - Mp2 = c(r) / 0.8e1 - c(r+1) / 0.6e1 + c(r+2) / 0.8e1; - % printSize(Mm2); - % scheme_radius - % m - M(r,:) = spdiags([Mm2 Mm1 M0 Mp1 Mp2],0:2*scheme_radius,length(r),m); - % M(r,:) = spdiags([Mm2 Mm1 M0 Mp1 Mp2],(-2:2)+scheme_radius,M(r,:)); % This is slower - %%%%%%%%%%%%%%%%%%%%%%%%%%%%% - % %% Somthing is wrong here!! - % Mm2 = c(r-2) / 0.8e1 - c(r-1) / 0.6e1 + c(r) / 0.8e1 ; - % Mm1 = -c(r-2) / 0.6e1 - c(r-1) / 0.2e1 - c(r) / 0.2e1 - c(r+1) / 0.6e1 ; - % M0 = c(r-2) / 2.4e1 + c(r-1) / 1.2e0 + c(r) * 0.3/0.4 + c(r+1) / 1.2e0 + c(r+2) / 2.4e1; - % Mp1 = -c(r-1) / 0.6e1 - c(r) / 0.2e1 - c(r+1) / 0.2e1 - c(r+2) / 0.6e1; - % Mp2 = c(r) / 0.8e1 - c(r+1) / 0.6e1 + c(r+2) / 0.8e1; - % % printSize(M_diag_ind); - % % Mdiags = [Mm2 Mm1 M0 Mp1 Mp2]; - % % printSize(Mdiags); - % M(M_diag_ind) = [Mm2 Mm1 M0 Mp1 Mp2]; % This is slightly faster - %%%%%%%%%%%%%%%%%%%%%%%%%%%%% - % Kan man skriva det som en multiplikation av en 3-dim matris? - %%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - - - - M(1:6,1:6)=[0.12e2 / 0.17e2 * c(1) + 0.59e2 / 0.192e3 * c(2) + 0.27010400129e11 / 0.345067064608e12 * c(3) + 0.69462376031e11 / 0.2070402387648e13 * c(4) -0.59e2 / 0.68e2 * c(1) - 0.6025413881e10 / 0.21126554976e11 * c(3) - 0.537416663e9 / 0.7042184992e10 * c(4) 0.2e1 / 0.17e2 * c(1) - 0.59e2 / 0.192e3 * c(2) + 0.213318005e9 / 0.16049630912e11 * c(4) + 0.2083938599e10 / 0.8024815456e10 * c(3) 0.3e1 / 0.68e2 * c(1) - 0.1244724001e10 / 0.21126554976e11 * c(3) + 0.752806667e9 / 0.21126554976e11 * c(4) 0.49579087e8 / 0.10149031312e11 * c(3) - 0.49579087e8 / 0.10149031312e11 * c(4) -c(4) / 0.784e3 + c(3) / 0.784e3; -0.59e2 / 0.68e2 * c(1) - 0.6025413881e10 / 0.21126554976e11 * c(3) - 0.537416663e9 / 0.7042184992e10 * c(4) 0.3481e4 / 0.3264e4 * c(1) + 0.9258282831623875e16 / 0.7669235228057664e16 * c(3) + 0.236024329996203e15 / 0.1278205871342944e16 * c(4) -0.59e2 / 0.408e3 * c(1) - 0.29294615794607e14 / 0.29725717938208e14 * c(3) - 0.2944673881023e13 / 0.29725717938208e14 * c(4) -0.59e2 / 0.1088e4 * c(1) + 0.260297319232891e15 / 0.2556411742685888e16 * c(3) - 0.60834186813841e14 / 0.1278205871342944e16 * c(4) -0.1328188692663e13 / 0.37594290333616e14 * c(3) + 0.1328188692663e13 / 0.37594290333616e14 * c(4) -0.8673e4 / 0.2904112e7 * c(3) + 0.8673e4 / 0.2904112e7 * c(4); 0.2e1 / 0.17e2 * c(1) - 0.59e2 / 0.192e3 * c(2) + 0.213318005e9 / 0.16049630912e11 * c(4) + 0.2083938599e10 / 0.8024815456e10 * c(3) -0.59e2 / 0.408e3 * c(1) - 0.29294615794607e14 / 0.29725717938208e14 * c(3) - 0.2944673881023e13 / 0.29725717938208e14 * c(4) c(1) / 0.51e2 + 0.59e2 / 0.192e3 * c(2) + 0.13777050223300597e17 / 0.26218083221499456e17 * c(4) + 0.564461e6 / 0.13384296e8 * c(5) + 0.378288882302546512209e21 / 0.270764341349677687456e21 * c(3) c(1) / 0.136e3 - 0.125059e6 / 0.743572e6 * c(5) - 0.4836340090442187227e19 / 0.5525802884687299744e19 * c(3) - 0.17220493277981e14 / 0.89177153814624e14 * c(4) -0.10532412077335e14 / 0.42840005263888e14 * c(4) + 0.1613976761032884305e19 / 0.7963657098519931984e19 * c(3) + 0.564461e6 / 0.4461432e7 * c(5) -0.960119e6 / 0.1280713392e10 * c(4) - 0.3391e4 / 0.6692148e7 * c(5) + 0.33235054191e11 / 0.26452850508784e14 * c(3); 0.3e1 / 0.68e2 * c(1) - 0.1244724001e10 / 0.21126554976e11 * c(3) + 0.752806667e9 / 0.21126554976e11 * c(4) -0.59e2 / 0.1088e4 * c(1) + 0.260297319232891e15 / 0.2556411742685888e16 * c(3) - 0.60834186813841e14 / 0.1278205871342944e16 * c(4) c(1) / 0.136e3 - 0.125059e6 / 0.743572e6 * c(5) - 0.4836340090442187227e19 / 0.5525802884687299744e19 * c(3) - 0.17220493277981e14 / 0.89177153814624e14 * c(4) 0.3e1 / 0.1088e4 * c(1) + 0.507284006600757858213e21 / 0.475219048083107777984e21 * c(3) + 0.1869103e7 / 0.2230716e7 * c(5) + c(6) / 0.24e2 + 0.1950062198436997e16 / 0.3834617614028832e16 * c(4) -0.4959271814984644613e19 / 0.20965546238960637264e20 * c(3) - c(6) / 0.6e1 - 0.15998714909649e14 / 0.37594290333616e14 * c(4) - 0.375177e6 / 0.743572e6 * c(5) -0.368395e6 / 0.2230716e7 * c(5) + 0.752806667e9 / 0.539854092016e12 * c(3) + 0.1063649e7 / 0.8712336e7 * c(4) + c(6) / 0.8e1; 0.49579087e8 / 0.10149031312e11 * c(3) - 0.49579087e8 / 0.10149031312e11 * c(4) -0.1328188692663e13 / 0.37594290333616e14 * c(3) + 0.1328188692663e13 / 0.37594290333616e14 * c(4) -0.10532412077335e14 / 0.42840005263888e14 * c(4) + 0.1613976761032884305e19 / 0.7963657098519931984e19 * c(3) + 0.564461e6 / 0.4461432e7 * c(5) -0.4959271814984644613e19 / 0.20965546238960637264e20 * c(3) - c(6) / 0.6e1 - 0.15998714909649e14 / 0.37594290333616e14 * c(4) - 0.375177e6 / 0.743572e6 * c(5) 0.8386761355510099813e19 / 0.128413970713633903242e21 * c(3) + 0.2224717261773437e16 / 0.2763180339520776e16 * c(4) + 0.5e1 / 0.6e1 * c(6) + c(7) / 0.24e2 + 0.280535e6 / 0.371786e6 * c(5) -0.35039615e8 / 0.213452232e9 * c(4) - c(7) / 0.6e1 - 0.13091810925e11 / 0.13226425254392e14 * c(3) - 0.1118749e7 / 0.2230716e7 * c(5) - c(6) / 0.2e1; -c(4) / 0.784e3 + c(3) / 0.784e3 -0.8673e4 / 0.2904112e7 * c(3) + 0.8673e4 / 0.2904112e7 * c(4) -0.960119e6 / 0.1280713392e10 * c(4) - 0.3391e4 / 0.6692148e7 * c(5) + 0.33235054191e11 / 0.26452850508784e14 * c(3) -0.368395e6 / 0.2230716e7 * c(5) + 0.752806667e9 / 0.539854092016e12 * c(3) + 0.1063649e7 / 0.8712336e7 * c(4) + c(6) / 0.8e1 -0.35039615e8 / 0.213452232e9 * c(4) - c(7) / 0.6e1 - 0.13091810925e11 / 0.13226425254392e14 * c(3) - 0.1118749e7 / 0.2230716e7 * c(5) - c(6) / 0.2e1 0.3290636e7 / 0.80044587e8 * c(4) + 0.5580181e7 / 0.6692148e7 * c(5) + 0.5e1 / 0.6e1 * c(7) + c(8) / 0.24e2 + 0.660204843e9 / 0.13226425254392e14 * c(3) + 0.3e1 / 0.4e1 * c(6);]; - - M(m-5:m,m-5:m)=[c(m-7) / 0.24e2 + 0.5e1 / 0.6e1 * c(m-6) + 0.5580181e7 / 0.6692148e7 * c(m-4) + 0.4887707739997e13 / 0.119037827289528e15 * c(m-3) + 0.3e1 / 0.4e1 * c(m-5) + 0.660204843e9 / 0.13226425254392e14 * c(m-2) + 0.660204843e9 / 0.13226425254392e14 * c(m-1) -c(m-6) / 0.6e1 - 0.1618585929605e13 / 0.9919818940794e13 * c(m-3) - c(m-5) / 0.2e1 - 0.1118749e7 / 0.2230716e7 * c(m-4) - 0.13091810925e11 / 0.13226425254392e14 * c(m-2) - 0.13091810925e11 / 0.13226425254392e14 * c(m-1) -0.368395e6 / 0.2230716e7 * c(m-4) + c(m-5) / 0.8e1 + 0.48866620889e11 / 0.404890569012e12 * c(m-3) + 0.752806667e9 / 0.539854092016e12 * c(m-2) + 0.752806667e9 / 0.539854092016e12 * c(m-1) -0.3391e4 / 0.6692148e7 * c(m-4) - 0.238797444493e12 / 0.119037827289528e15 * c(m-3) + 0.33235054191e11 / 0.26452850508784e14 * c(m-2) + 0.33235054191e11 / 0.26452850508784e14 * c(m-1) -0.8673e4 / 0.2904112e7 * c(m-2) - 0.8673e4 / 0.2904112e7 * c(m-1) + 0.8673e4 / 0.1452056e7 * c(m-3) -c(m-3) / 0.392e3 + c(m-2) / 0.784e3 + c(m-1) / 0.784e3; -c(m-6) / 0.6e1 - 0.1618585929605e13 / 0.9919818940794e13 * c(m-3) - c(m-5) / 0.2e1 - 0.1118749e7 / 0.2230716e7 * c(m-4) - 0.13091810925e11 / 0.13226425254392e14 * c(m-2) - 0.13091810925e11 / 0.13226425254392e14 * c(m-1) c(m-6) / 0.24e2 + 0.5e1 / 0.6e1 * c(m-5) + 0.3896014498639e13 / 0.4959909470397e13 * c(m-3) + 0.8386761355510099813e19 / 0.128413970713633903242e21 * c(m-2) + 0.280535e6 / 0.371786e6 * c(m-4) + 0.3360696339136261875e19 / 0.171218627618178537656e21 * c(m-1) -c(m-5) / 0.6e1 - 0.4959271814984644613e19 / 0.20965546238960637264e20 * c(m-2) - 0.375177e6 / 0.743572e6 * c(m-4) - 0.13425842714e11 / 0.33740880751e11 * c(m-3) - 0.193247108773400725e18 / 0.6988515412986879088e19 * c(m-1) -0.365281640980e12 / 0.1653303156799e13 * c(m-3) + 0.564461e6 / 0.4461432e7 * c(m-4) + 0.1613976761032884305e19 / 0.7963657098519931984e19 * c(m-2) - 0.198407225513315475e18 / 0.7963657098519931984e19 * c(m-1) -0.1328188692663e13 / 0.37594290333616e14 * c(m-2) + 0.2226377963775e13 / 0.37594290333616e14 * c(m-1) - 0.8673e4 / 0.363014e6 * c(m-3) c(m-3) / 0.49e2 + 0.49579087e8 / 0.10149031312e11 * c(m-2) - 0.256702175e9 / 0.10149031312e11 * c(m-1); -0.368395e6 / 0.2230716e7 * c(m-4) + c(m-5) / 0.8e1 + 0.48866620889e11 / 0.404890569012e12 * c(m-3) + 0.752806667e9 / 0.539854092016e12 * c(m-2) + 0.752806667e9 / 0.539854092016e12 * c(m-1) -c(m-5) / 0.6e1 - 0.4959271814984644613e19 / 0.20965546238960637264e20 * c(m-2) - 0.375177e6 / 0.743572e6 * c(m-4) - 0.13425842714e11 / 0.33740880751e11 * c(m-3) - 0.193247108773400725e18 / 0.6988515412986879088e19 * c(m-1) c(m-5) / 0.24e2 + 0.1869103e7 / 0.2230716e7 * c(m-4) + 0.507284006600757858213e21 / 0.475219048083107777984e21 * c(m-2) + 0.3e1 / 0.1088e4 * c(m) + 0.31688435395e11 / 0.67481761502e11 * c(m-3) + 0.27769176016102795561e20 / 0.712828572124661666976e21 * c(m-1) -0.125059e6 / 0.743572e6 * c(m-4) + c(m) / 0.136e3 - 0.23099342648e11 / 0.101222642253e12 * c(m-3) - 0.4836340090442187227e19 / 0.5525802884687299744e19 * c(m-2) + 0.193950157930938693e18 / 0.5525802884687299744e19 * c(m-1) 0.260297319232891e15 / 0.2556411742685888e16 * c(m-2) - 0.59e2 / 0.1088e4 * c(m) - 0.106641839640553e15 / 0.1278205871342944e16 * c(m-1) + 0.26019e5 / 0.726028e6 * c(m-3) -0.1244724001e10 / 0.21126554976e11 * c(m-2) + 0.3e1 / 0.68e2 * c(m) + 0.752806667e9 / 0.21126554976e11 * c(m-1); -0.3391e4 / 0.6692148e7 * c(m-4) - 0.238797444493e12 / 0.119037827289528e15 * c(m-3) + 0.33235054191e11 / 0.26452850508784e14 * c(m-2) + 0.33235054191e11 / 0.26452850508784e14 * c(m-1) -0.365281640980e12 / 0.1653303156799e13 * c(m-3) + 0.564461e6 / 0.4461432e7 * c(m-4) + 0.1613976761032884305e19 / 0.7963657098519931984e19 * c(m-2) - 0.198407225513315475e18 / 0.7963657098519931984e19 * c(m-1) -0.125059e6 / 0.743572e6 * c(m-4) + c(m) / 0.136e3 - 0.23099342648e11 / 0.101222642253e12 * c(m-3) - 0.4836340090442187227e19 / 0.5525802884687299744e19 * c(m-2) + 0.193950157930938693e18 / 0.5525802884687299744e19 * c(m-1) 0.564461e6 / 0.13384296e8 * c(m-4) + 0.470299699916357e15 / 0.952302618316224e15 * c(m-3) + 0.550597048646198778781e21 / 0.1624586048098066124736e22 * c(m-1) + c(m) / 0.51e2 + 0.378288882302546512209e21 / 0.270764341349677687456e21 * c(m-2) -0.59e2 / 0.408e3 * c(m) - 0.29294615794607e14 / 0.29725717938208e14 * c(m-2) - 0.2234477713167e13 / 0.29725717938208e14 * c(m-1) - 0.8673e4 / 0.363014e6 * c(m-3) -0.59e2 / 0.3136e4 * c(m-3) - 0.13249937023e11 / 0.48148892736e11 * c(m-1) + 0.2e1 / 0.17e2 * c(m) + 0.2083938599e10 / 0.8024815456e10 * c(m-2); -0.8673e4 / 0.2904112e7 * c(m-2) - 0.8673e4 / 0.2904112e7 * c(m-1) + 0.8673e4 / 0.1452056e7 * c(m-3) -0.1328188692663e13 / 0.37594290333616e14 * c(m-2) + 0.2226377963775e13 / 0.37594290333616e14 * c(m-1) - 0.8673e4 / 0.363014e6 * c(m-3) 0.260297319232891e15 / 0.2556411742685888e16 * c(m-2) - 0.59e2 / 0.1088e4 * c(m) - 0.106641839640553e15 / 0.1278205871342944e16 * c(m-1) + 0.26019e5 / 0.726028e6 * c(m-3) -0.59e2 / 0.408e3 * c(m) - 0.29294615794607e14 / 0.29725717938208e14 * c(m-2) - 0.2234477713167e13 / 0.29725717938208e14 * c(m-1) - 0.8673e4 / 0.363014e6 * c(m-3) 0.9258282831623875e16 / 0.7669235228057664e16 * c(m-2) + 0.3481e4 / 0.3264e4 * c(m) + 0.228389721191751e15 / 0.1278205871342944e16 * c(m-1) + 0.8673e4 / 0.1452056e7 * c(m-3) -0.6025413881e10 / 0.21126554976e11 * c(m-2) - 0.59e2 / 0.68e2 * c(m) - 0.537416663e9 / 0.7042184992e10 * c(m-1); -c(m-3) / 0.392e3 + c(m-2) / 0.784e3 + c(m-1) / 0.784e3 c(m-3) / 0.49e2 + 0.49579087e8 / 0.10149031312e11 * c(m-2) - 0.256702175e9 / 0.10149031312e11 * c(m-1) -0.1244724001e10 / 0.21126554976e11 * c(m-2) + 0.3e1 / 0.68e2 * c(m) + 0.752806667e9 / 0.21126554976e11 * c(m-1) -0.59e2 / 0.3136e4 * c(m-3) - 0.13249937023e11 / 0.48148892736e11 * c(m-1) + 0.2e1 / 0.17e2 * c(m) + 0.2083938599e10 / 0.8024815456e10 * c(m-2) -0.6025413881e10 / 0.21126554976e11 * c(m-2) - 0.59e2 / 0.68e2 * c(m) - 0.537416663e9 / 0.7042184992e10 * c(m-1) 0.3e1 / 0.3136e4 * c(m-3) + 0.27010400129e11 / 0.345067064608e12 * c(m-2) + 0.234566387291e12 / 0.690134129216e12 * c(m-1) + 0.12e2 / 0.17e2 * c(m);]; - - M=M/h; - D2=HI*(-M-c(1)*e_1*S_1'+c(m)*e_m*S_m'); - end - D2 = @D2_fun; - - - 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); - S2_1 = S2_1'; - S2_m = S2_m'; - - 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.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;]; - - M4(1:6,1:6)=M4_U; - - M4(m-5:m,m-5: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); - S3_1 = S3_1'; - S3_m = S3_m'; - - D4=HI*(M4-e_1*S3_1'+e_m*S3_m' + S_1*S2_1'-S_m*S2_m'); - - - - - -end
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/higher6.m --- a/+sbp/higher6.m Mon Sep 12 11:14:00 2016 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,150 +0,0 @@ -function [H, HI, D1, D2, D3, D4, e_1, e_m, M, M4,Q, Q3, S2_1, S2_m, S3_1, S3_m, S_1, S_m] = higher6(m,h) - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - %%% 4:de ordn. SBP Finita differens %%% - %%% operatorer framtagna av Ken Mattsson %%% - %%% %%% - %%% 6 randpunkter, diagonal norm %%% - %%% %%% - %%% Datum: 2013-11-11 %%% - %%% %%% - %%% %%% - %%% H (Normen) %%% - %%% D1 (approx f?rsta derivatan) %%% - %%% D2 (approx andra derivatan) %%% - %%% D3 (approx tredje derivatan) %%% - %%% D2 (approx fj?rde derivatan) %%% - %%% %%% - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - % M?ste ange antal punkter (m) och stegl?ngd (h) - % Notera att dessa opetratorer ?r framtagna f?r att anv?ndas n?r - % vi har 3de och 4de derivator i v?r PDE - % I annat fall anv?nd de "traditionella" som har noggrannare - % randsplutningar f?r D1 och D2 - - % Vi b?rjar med normen. Notera att alla SBP operatorer delar samma norm, - % vilket ?r n?dv?ndigt f?r stabilitet - - H=diag(ones(m,1),0); - H_U=[0.318365e6 / 0.1016064e7 0 0 0 0 0 0 0; 0 0.145979e6 / 0.103680e6 0 0 0 0 0 0; 0 0 0.139177e6 / 0.241920e6 0 0 0 0 0; 0 0 0 0.964969e6 / 0.725760e6 0 0 0 0; 0 0 0 0 0.593477e6 / 0.725760e6 0 0 0; 0 0 0 0 0 0.52009e5 / 0.48384e5 0 0; 0 0 0 0 0 0 0.141893e6 / 0.145152e6 0; 0 0 0 0 0 0 0 0.1019713e7 / 0.1016064e7;]; - - H(1:8,1:8)=H_U; - H(m-7:m,m-7:m)=fliplr(flipud(H_U)); - H=H*h; - HI=inv(H); - - - % First derivative SBP operator, 1st order accurate at first 6 boundary points - - q3=1/60;q2=-3/20;q1=3/4; - Q=q3*(diag(ones(m-3,1),3) - diag(ones(m-3,1),-3))+q2*(diag(ones(m-2,1),2) - diag(ones(m-2,1),-2))+q1*(diag(ones(m-1,1),1)-diag(ones(m-1,1),-1)); - - Q_U = [0 0.1547358409e10 / 0.2421619200e10 -0.422423e6 / 0.11211200e8 -0.1002751721e10 / 0.8717829120e10 -0.15605263e8 / 0.484323840e9 0.1023865e7 / 0.24216192e8 0.291943739e9 / 0.21794572800e11 -0.24659e5 / 0.2534400e7; -0.1547358409e10 / 0.2421619200e10 0 0.23031829e8 / 0.62899200e8 0.10784027e8 / 0.34594560e8 0.2859215e7 / 0.31135104e8 -0.45982103e8 / 0.345945600e9 -0.26681e5 / 0.1182720e7 0.538846039e9 / 0.21794572800e11; 0.422423e6 / 0.11211200e8 -0.23031829e8 / 0.62899200e8 0 0.28368209e8 / 0.69189120e8 -0.9693137e7 / 0.69189120e8 0.1289363e7 / 0.17740800e8 -0.39181e5 / 0.5491200e7 -0.168647e6 / 0.24216192e8; 0.1002751721e10 / 0.8717829120e10 -0.10784027e8 / 0.34594560e8 -0.28368209e8 / 0.69189120e8 0 0.5833151e7 / 0.10644480e8 0.4353179e7 / 0.69189120e8 0.2462459e7 / 0.155675520e9 -0.215471e6 / 0.10762752e8; 0.15605263e8 / 0.484323840e9 -0.2859215e7 / 0.31135104e8 0.9693137e7 / 0.69189120e8 -0.5833151e7 / 0.10644480e8 0 0.7521509e7 / 0.13837824e8 -0.1013231e7 / 0.11531520e8 0.103152839e9 / 0.8717829120e10; -0.1023865e7 / 0.24216192e8 0.45982103e8 / 0.345945600e9 -0.1289363e7 / 0.17740800e8 -0.4353179e7 / 0.69189120e8 -0.7521509e7 / 0.13837824e8 0 0.67795697e8 / 0.98841600e8 -0.17263733e8 / 0.151351200e9; -0.291943739e9 / 0.21794572800e11 0.26681e5 / 0.1182720e7 0.39181e5 / 0.5491200e7 -0.2462459e7 / 0.155675520e9 0.1013231e7 / 0.11531520e8 -0.67795697e8 / 0.98841600e8 0 0.1769933569e10 / 0.2421619200e10; 0.24659e5 / 0.2534400e7 -0.538846039e9 / 0.21794572800e11 0.168647e6 / 0.24216192e8 0.215471e6 / 0.10762752e8 -0.103152839e9 / 0.8717829120e10 0.17263733e8 / 0.151351200e9 -0.1769933569e10 / 0.2421619200e10 0;]; - - Q(1:8,1:8)=Q_U; - Q(m-7:m,m-7:m)=flipud( fliplr( -Q_U ) ); - - 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') ; - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - - - % Second derivative, 1st order accurate at first 6 boundary points - m3=-1/90;m2=3/20;m1=-3/2;m0=49/18; - - M=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); - M_U=[0.4347276223e10 / 0.3736212480e10 -0.1534657609e10 / 0.1210809600e10 0.68879e5 / 0.3057600e7 0.1092927401e10 / 0.13076743680e11 0.18145423e8 / 0.968647680e9 -0.1143817e7 / 0.60540480e8 -0.355447739e9 / 0.65383718400e11 0.56081e5 / 0.16473600e8; -0.1534657609e10 / 0.1210809600e10 0.42416226217e11 / 0.18681062400e11 -0.228654119e9 / 0.345945600e9 -0.12245627e8 / 0.34594560e8 -0.2995295e7 / 0.46702656e8 0.52836503e8 / 0.691891200e9 0.119351e6 / 0.12812800e8 -0.634102039e9 / 0.65383718400e11; 0.68879e5 / 0.3057600e7 -0.228654119e9 / 0.345945600e9 0.5399287e7 / 0.4193280e7 -0.24739409e8 / 0.34594560e8 0.7878737e7 / 0.69189120e8 -0.1917829e7 / 0.31449600e8 0.39727e5 / 0.3660800e7 0.10259e5 / 0.4656960e7; 0.1092927401e10 / 0.13076743680e11 -0.12245627e8 / 0.34594560e8 -0.24739409e8 / 0.34594560e8 0.7780367599e10 / 0.3736212480e10 -0.70085363e8 / 0.69189120e8 -0.500209e6 / 0.6289920e7 -0.311543e6 / 0.17962560e8 0.278191e6 / 0.21525504e8; 0.18145423e8 / 0.968647680e9 -0.2995295e7 / 0.46702656e8 0.7878737e7 / 0.69189120e8 -0.70085363e8 / 0.69189120e8 0.7116321131e10 / 0.3736212480e10 -0.545081e6 / 0.532224e6 0.811631e6 / 0.11531520e8 -0.84101639e8 / 0.13076743680e11; -0.1143817e7 / 0.60540480e8 0.52836503e8 / 0.691891200e9 -0.1917829e7 / 0.31449600e8 -0.500209e6 / 0.6289920e7 -0.545081e6 / 0.532224e6 0.324760747e9 / 0.138378240e9 -0.65995697e8 / 0.49420800e8 0.1469203e7 / 0.13759200e8; -0.355447739e9 / 0.65383718400e11 0.119351e6 / 0.12812800e8 0.39727e5 / 0.3660800e7 -0.311543e6 / 0.17962560e8 0.811631e6 / 0.11531520e8 -0.65995697e8 / 0.49420800e8 0.48284442317e11 / 0.18681062400e11 -0.1762877569e10 / 0.1210809600e10; 0.56081e5 / 0.16473600e8 -0.634102039e9 / 0.65383718400e11 0.10259e5 / 0.4656960e7 0.278191e6 / 0.21525504e8 -0.84101639e8 / 0.13076743680e11 0.1469203e7 / 0.13759200e8 -0.1762877569e10 / 0.1210809600e10 0.10117212851e11 / 0.3736212480e10;]; - - M(1:8,1:8)=M_U; - - M(m-7:m,m-7:m)=flipud( fliplr( M_U ) ); - M=M/h; - - S_U=[-0.25e2 / 0.12e2 4 -3 0.4e1 / 0.3e1 -0.1e1 / 0.4e1;]/h; - S_1=zeros(1,m); - S_1(1:5)=S_U; - S_m=zeros(1,m); - - S_m(m-4:m)=fliplr(-S_U); - - D2=HI*(-M-e_1*S_1+e_m*S_m); - - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - - - % Third derivative, 1st order accurate at first 6 boundary points - - q4=7/240;q3=-3/10;q2=169/120;q1=-61/30; - Q3=q4*(diag(ones(m-4,1),4)-diag(ones(m-4,1),-4))+q3*(diag(ones(m-3,1),3)-diag(ones(m-3,1),-3))+q2*(diag(ones(m-2,1),2)-diag(ones(m-2,1),-2))+q1*(diag(ones(m-1,1),1)-diag(ones(m-1,1),-1)); - - %QQ3=(-1/8*diag(ones(m-3,1),3) + 1*diag(ones(m-2,1),2) - 13/8*diag(ones(m-1,1),1) +13/8*diag(ones(m-1,1),-1) -1*diag(ones(m-2,1),-2) + 1/8*diag(ones(m-3,1),-3)); - - - Q3_U = [0 -0.10882810591e11 / 0.5811886080e10 0.398713069e9 / 0.132088320e9 -0.1746657571e10 / 0.1162377216e10 0.56050639e8 / 0.145297152e9 -0.11473393e8 / 0.1162377216e10 -0.38062741e8 / 0.1452971520e10 0.30473e5 / 0.4392960e7; 0.10882810591e11 / 0.5811886080e10 0 -0.3720544343e10 / 0.830269440e9 0.767707019e9 / 0.207567360e9 -0.1047978301e10 / 0.830269440e9 0.1240729e7 / 0.14826240e8 0.6807397e7 / 0.55351296e8 -0.50022767e8 / 0.1452971520e10; -0.398713069e9 / 0.132088320e9 0.3720544343e10 / 0.830269440e9 0 -0.2870078009e10 / 0.830269440e9 0.74962049e8 / 0.29652480e8 -0.12944857e8 / 0.30750720e8 -0.17846623e8 / 0.103783680e9 0.68707591e8 / 0.1162377216e10; 0.1746657571e10 / 0.1162377216e10 -0.767707019e9 / 0.207567360e9 0.2870078009e10 / 0.830269440e9 0 -0.727867087e9 / 0.276756480e9 0.327603877e9 / 0.207567360e9 -0.175223717e9 / 0.830269440e9 0.1353613e7 / 0.726485760e9; -0.56050639e8 / 0.145297152e9 0.1047978301e10 / 0.830269440e9 -0.74962049e8 / 0.29652480e8 0.727867087e9 / 0.276756480e9 0 -0.1804641793e10 / 0.830269440e9 0.311038417e9 / 0.207567360e9 -0.1932566239e10 / 0.5811886080e10; 0.11473393e8 / 0.1162377216e10 -0.1240729e7 / 0.14826240e8 0.12944857e8 / 0.30750720e8 -0.327603877e9 / 0.207567360e9 0.1804641793e10 / 0.830269440e9 0 -0.1760949511e10 / 0.830269440e9 0.2105883973e10 / 0.1452971520e10; 0.38062741e8 / 0.1452971520e10 -0.6807397e7 / 0.55351296e8 0.17846623e8 / 0.103783680e9 0.175223717e9 / 0.830269440e9 -0.311038417e9 / 0.207567360e9 0.1760949511e10 / 0.830269440e9 0 -0.1081094773e10 / 0.528353280e9; -0.30473e5 / 0.4392960e7 0.50022767e8 / 0.1452971520e10 -0.68707591e8 / 0.1162377216e10 -0.1353613e7 / 0.726485760e9 0.1932566239e10 / 0.5811886080e10 -0.2105883973e10 / 0.1452971520e10 0.1081094773e10 / 0.528353280e9 0;]; - - Q3(1:8,1:8)=Q3_U; - Q3(m-7:m,m-7:m)=flipud( fliplr( -Q3_U ) ); - Q3=Q3/h^2; - - - - S2_U=[0.35e2 / 0.12e2 -0.26e2 / 0.3e1 0.19e2 / 0.2e1 -0.14e2 / 0.3e1 0.11e2 / 0.12e2;]/h^2; - S2_1=zeros(1,m); - S2_1(1:5)=S2_U; - S2_m=zeros(1,m); - S2_m(m-4:m)=fliplr(S2_U); - - - - D3=HI*(Q3 - e_1*S2_1 + e_m*S2_m +1/2*S_1'*S_1 -1/2*S_m'*S_m ) ; - - % Fourth derivative, 0th order accurate at first 6 boundary points (still - % yield 4th order convergence if stable: for example u_tt=-u_xxxx - - m4=7/240;m3=-2/5;m2=169/60;m1=-122/15;m0=91/8; - 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); - - %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.40833734273e11 / 0.10761070320e11 -0.162181998421e12 / 0.16397821440e11 0.4696168417e10 / 0.521748864e9 -0.245714671483e12 / 0.68870850048e11 0.2185939219e10 / 0.2869618752e10 -0.15248255797e11 / 0.114784750080e12 0.345156907e9 / 0.12298366080e11 0.6388381e7 / 0.1093188096e10; -0.162181998421e12 / 0.16397821440e11 0.147281127041e12 / 0.5380535160e10 -0.3072614435609e13 / 0.114784750080e12 0.320122985851e12 / 0.28696187520e11 -0.768046031383e12 / 0.344354250240e12 0.7861605187e10 / 0.14348093760e11 -0.803762437e9 / 0.4251287040e10 0.167394281e9 / 0.86088562560e11; 0.4696168417e10 / 0.521748864e9 -0.3072614435609e13 / 0.114784750080e12 0.139712483333e12 / 0.4782697920e10 -0.1634124842747e13 / 0.114784750080e12 0.90855193447e11 / 0.28696187520e11 -0.26412188989e11 / 0.38261583360e11 0.668741173e9 / 0.1793511720e10 -0.132673781e9 / 0.2342545920e10; -0.245714671483e12 / 0.68870850048e11 0.320122985851e12 / 0.28696187520e11 -0.1634124842747e13 / 0.114784750080e12 0.437353997177e12 / 0.43044281280e11 -0.172873969321e12 / 0.38261583360e11 0.34759553483e11 / 0.28696187520e11 -0.98928859751e11 / 0.344354250240e12 0.295000207e9 / 0.3587023440e10; 0.2185939219e10 / 0.2869618752e10 -0.768046031383e12 / 0.344354250240e12 0.90855193447e11 / 0.28696187520e11 -0.172873969321e12 / 0.38261583360e11 0.126711914423e12 / 0.21522140640e11 -0.520477408939e12 / 0.114784750080e12 0.49581230003e11 / 0.28696187520e11 -0.99640101991e11 / 0.344354250240e12; -0.15248255797e11 / 0.114784750080e12 0.7861605187e10 / 0.14348093760e11 -0.26412188989e11 / 0.38261583360e11 0.34759553483e11 / 0.28696187520e11 -0.520477408939e12 / 0.114784750080e12 0.19422074929e11 / 0.2391348960e10 -0.772894368601e12 / 0.114784750080e12 0.10579712849e11 / 0.4099455360e10; 0.345156907e9 / 0.12298366080e11 -0.803762437e9 / 0.4251287040e10 0.668741173e9 / 0.1793511720e10 -0.98928859751e11 / 0.344354250240e12 0.49581230003e11 / 0.28696187520e11 -0.772894368601e12 / 0.114784750080e12 0.456715296239e12 / 0.43044281280e11 -0.915425403107e12 / 0.114784750080e12; 0.6388381e7 / 0.1093188096e10 0.167394281e9 / 0.86088562560e11 -0.132673781e9 / 0.2342545920e10 0.295000207e9 / 0.3587023440e10 -0.99640101991e11 / 0.344354250240e12 0.10579712849e11 / 0.4099455360e10 -0.915425403107e12 / 0.114784750080e12 0.488029542379e12 / 0.43044281280e11;]; - - M4(1:8,1:8)=M4_U; - - M4(m-7:m,m-7:m)=flipud( fliplr( M4_U ) ); - M4=M4/h^3; - - S3_U=[-0.5e1 / 0.2e1 9 -12 7 -0.3e1 / 0.2e1;]/h^3; - S3_1=zeros(1,m); - S3_1(1:5)=S3_U; - S3_m=zeros(1,m); - S3_m(m-4:m)=fliplr(-S3_U); - - D4=HI*(M4-e_1*S3_1+e_m*S3_m + S_1'*S2_1-S_m'*S2_m); - - - L=h*(m-1); - - % x1=linspace(0,L,m)'; - % x2=x1.^2/fac(2); - % x3=x1.^3/fac(3); - % x4=x1.^4/fac(4); - % x5=x1.^5/fac(5); - - % x0=x1.^0/fac(1); - - S_1 = S_1'; - S2_1 = S2_1'; - S3_1 = S3_1'; - S_m = S_m'; - S2_m = S2_m'; - S3_m = S3_m'; - - -end
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/higher6_compatible_halfvariable.m --- a/+sbp/higher6_compatible_halfvariable.m Mon Sep 12 11:14:00 2016 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,160 +0,0 @@ -function [H, HI, D2, D4, e_1, e_m, M4, S2_1, S2_m, S3_1, S3_m, S_1, S_m] = higher6_compatible_halfvariable(m,h) - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - %%% 6:te ordn. SBP Finita differens %%% - %%% operatorer med diagonal norm %%% - %%% Extension to variable koeff %%% - %%% %%% - %%% H (Normen) %%% - %%% D1=H^(-1)Q (approx f?rsta derivatan) %%% - %%% D2 (approx andra derivatan) %%% - %%% D2=HI*(R+C*D*S %%% - %%% %%% - %%% R=-D1'*H*C*D1-RR %%% - %%% %%% - %%% RR ?r dissipation) %%% - %%% Dissipationen uppbyggd av D4: %%% - %%% DI=D4*B*H*D4 %%% - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - - %m=10; %problemstorlek - %h=1/(m-1); - - % Variable koefficicients are stored in vector: c, size m, - % with the unknown stored as c(1), c(2), ..., c_m - % x=1:h:m*h;x=x'; - % c=x.^0; - - - H=diag(ones(m,1),0); - H(1:6,1:6)=diag([13649/43200,12013/8640,2711/4320,5359/4320,7877/8640, ... - 43801/43200]); - H(m-5:m,m-5:m)=fliplr(flipud(diag([13649/43200,12013/8640, ... - 2711/4320,5359/4320,7877/8640,43801/43200]))); - - - x1=0.70127127127127; - - - 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)); - - - - D1(1:6,1:9)=[-21600/13649, 43200/13649*x1-7624/40947, -172800/13649*x1+ ... - 715489/81894, 259200/13649*x1-187917/13649, -172800/13649* ... - x1+735635/81894, 43200/13649*x1-89387/40947, 0, 0, 0; ... - -8640/12013*x1+7624/180195, 0, 86400/12013*x1-57139/12013, ... - -172800/12013*x1+745733/72078, 129600/12013*x1-91715/12013, ... - -34560/12013*x1+240569/120130, 0, 0, 0; ... - 17280/2711*x1-715489/162660, -43200/2711*x1+57139/5422, 0, ... - 86400/2711*x1-176839/8133, -86400/2711*x1+242111/10844, ... - 25920/2711*x1-182261/27110, 0, 0, 0; ... - -25920/5359*x1+187917/53590, 86400/5359*x1-745733/64308, ... - -86400/5359*x1+176839/16077, 0, 43200/5359*x1-165041/32154, ... - -17280/5359*x1+710473/321540, 72/5359, 0, 0; ... - 34560/7877*x1-147127/47262, -129600/7877*x1+91715/7877, ... - 172800/7877*x1-242111/15754, -86400/7877*x1+165041/23631, ... - 0, 8640/7877*x1, -1296/7877, 144/7877, 0; ... - -43200/43801*x1+89387/131403, 172800/43801*x1-240569/87602,... - -259200/43801*x1+182261/43801, 172800/43801*x1-710473/262806, ... - -43200/43801*x1, 0, 32400/43801, -6480/43801, 720/43801]; - D1(m-5:m,m-8:m)=flipud( fliplr(-D1(1:6,1:9))); - D1=D1/h; - - e_1=zeros(m,1);e_1(1)=1; - e_m=zeros(m,1);e_m(m)=1; - - S_U=[-25/12, 4, -3, 4/3, -1/4]/h; - S_1=zeros(1,m); - S_1(1:5)=S_U; - S_m=zeros(1,m); - S_m(m-4:m)=fliplr(-S_U); - S_1 = S_1'; - S_m = S_m'; - - - - %DS=zeros(m,m); - %DS(1,1:5)=-[-25/12, 4, -3, 4/3, -1/4]; - %DS(m,m-4:m)=fliplr(-[-25/12, 4, -3, 4/3, -1/4]); - %DS=diag(c)*DS/h; - - - H=h*H; - HI=inv(H); - - - M=sparse(m,m); - e_1 = sparse(e_1); - e_m = sparse(e_m); - S_1 = sparse(S_1); - S_m = sparse(S_m); - - scheme_width = 7; - scheme_radius = (scheme_width-1)/2; - r = (1+scheme_radius):(m-scheme_radius); - - function D2 = D2_fun(c) - - Mm3 = c(r-2) / 0.40e2 + c(r-1) / 0.40e2 - 0.11e2 / 0.360e3 * c(r-3) - 0.11e2 / 0.360e3 * c(r); - Mm2 = c(r-3) / 0.20e2 - 0.3e1 / 0.10e2 * c(r-1) + c(r+1) / 0.20e2 + 0.7e1 / 0.40e2 * c(r) + 0.7e1 / 0.40e2 * c(r-2); - Mm1 = -c(r-3) / 0.40e2 - 0.3e1 / 0.10e2 * c(r-2) - 0.3e1 / 0.10e2 * c(r+1) - c(r+2) / 0.40e2 - 0.17e2 / 0.40e2 * c(r) - 0.17e2 / 0.40e2 * c(r-1); - M0 = c(r-3) / 0.180e3 + c(r-2) / 0.8e1 + 0.19e2 / 0.20e2 * c(r-1) + 0.19e2 / 0.20e2 * c(r+1) + c(r+2) / 0.8e1 + c(r+3) / 0.180e3 + 0.101e3 / 0.180e3 * c(r); - Mp1 = -c(r-2) / 0.40e2 - 0.3e1 / 0.10e2 * c(r-1) - 0.3e1 / 0.10e2 * c(r+2) - c(r+3) / 0.40e2 - 0.17e2 / 0.40e2 * c(r) - 0.17e2 / 0.40e2 * c(r+1); - Mp2 = c(r-1) / 0.20e2 - 0.3e1 / 0.10e2 * c(r+1) + c(r+3) / 0.20e2 + 0.7e1 / 0.40e2 * c(r) + 0.7e1 / 0.40e2 * c(r+2); - Mp3 = c(r+1) / 0.40e2 + c(r+2) / 0.40e2 - 0.11e2 / 0.360e3 * c(r) - 0.11e2 / 0.360e3 * c(r+3); - - M(r,:) = spdiags([Mm3 Mm2 Mm1 M0 Mp1 Mp2 Mp3],0:2*scheme_radius,length(r),m); - - - M(1:9,1:9)=[0.7912667594695582093926295e0 * c(1) + 0.2968472090638000742888467e0 * c(2) + 0.3185519088796429015220016e-2 * c(3) + 0.1632404042590951953384672e-1 * c(4) + 0.3160302244094415087693968e-1 * c(5) + 0.3167964748016105299646518e-1 * c(6) + 0.3148577733947253920469418e-1 * c(7) -0.1016689339350338144430605e1 * c(1) - 0.2845627370491611369031341e-1 * c(3) - 0.4128029838349298819825156e-1 * c(4) - 0.1392281451620140507549866e0 * c(5) - 0.1195777325611201766551392e0 * c(6) - 0.1194267756529333410855186e0 * c(7) 0.7075642937243715046279337e-1 * c(1) - 0.1845476106024151050283847e0 * c(2) - 0.4364163147111892346990101e-1 * c(4) + 0.2432367907207732460874765e0 * c(5) + 0.1582127073537215443965653e0 * c(6) + 0.1602348578364786307613271e0 * c(7) 0.2251991532891353212689574e0 * c(1) - 0.1662748711097054895317080e0 * c(2) + 0.2710530961648671297733465e-1 * c(3) - 0.1916646185968439909125616e0 * c(5) - 0.7684117160199014594442072e-1 * c(6) - 0.8219586949831697575883635e-1 * c(7) -0.5224403464202056316702078e-1 * c(1) + 0.4440063948509876221050939e-1 * c(2) - 0.1023976547309387874453988e-2 * c(3) + 0.7403484645316174090533193e-1 * c(4) + 0.1241625568998496895352046e-1 * c(6) + 0.7188652847892601282652228e-1 * c(5) + 0.1379362997104735503447960e-1 * c(7) -0.1828896813877197352675410e-1 * c(1) + 0.9574633163221758060736592e-2 * c(2) - 0.8105784530576404277872603e-3 * c(3) - 0.7348845587775519698437916e-2 * c(4) + 0.1063601949723906997026904e-1 * c(5) - 0.1315967038382618382356495e-1 * c(6) - 0.2117936478838753524581943e-1 * c(7) 0.1911888563316170927411831e-2 * c(4) - 0.4068130355529149936100229e-1 * c(5) + 0.1319674981073749167009902e-1 * c(6) + 0.2557266518123783676349144e-1 * c(7) 0.1559652871136785763960685e-1 * c(5) - 0.6486184157331537899459796e-2 * c(6) - 0.9110344554036319740147054e-2 * c(7) 0.5593983696629863059347067e-3 * c(6) - 0.1384822535100796372263822e-2 * c(5) + 0.8254241654378100663291154e-3 * c(7); -0.1016689339350338144430605e1 * c(1) - 0.2845627370491611369031341e-1 * c(3) - 0.4128029838349298819825156e-1 * c(4) - 0.1392281451620140507549866e0 * c(5) - 0.1195777325611201766551392e0 * c(6) - 0.1194267756529333410855186e0 * c(7) 0.1306332157111667628555907e1 * c(1) + 0.2542001760457345743492403e0 * c(3) + 0.1043897828092562609502636e0 * c(4) + 0.6672328021032112950919876e0 * c(5) + 0.4681819359722749441073885e0 * c(6) + 0.4676415410195836920069412e0 * c(7) -0.9091410269992464604926176e-1 * c(1) + 0.1103611313171476425250639e0 * c(4) - 0.1290397544997518887000350e1 * c(5) - 0.6639605248735044787146222e0 * c(6) - 0.6615974464005206184151509e0 * c(7) -0.2893557395653431666593814e0 * c(1) - 0.2421320004064592721552708e0 * c(3) + 0.1187670255028031027693374e1 * c(5) + 0.3956598149904136332753521e0 * c(6) + 0.3860048921755800000681479e0 * c(7) 0.6712774475803763988977355e-1 * c(1) + 0.9147192682075630179962131e-2 * c(3) - 0.1872196143003808021730728e0 * c(4) - 0.1319358558853174530078498e0 * c(6) - 0.4871575736811911887376923e0 * c(5) - 0.1047516312275448138054418e0 * c(7) 0.2349927974590068869356781e-1 * c(1) + 0.7240905383565181316381731e-2 * c(3) + 0.1858378996391679448655070e-1 * c(4) - 0.9289616133938676174345208e-1 * c(5) + 0.1223513270418807666970488e0 * c(6) + 0.1113520320436295033894092e0 * c(7) -0.4834791406446907590553793e-2 * c(4) + 0.2310683832687820403062715e0 * c(5) - 0.1080774142196007991746827e0 * c(6) - 0.1181561776427343335410349e0 * c(7) -0.8368141434403455353724691e-1 * c(5) + 0.4093499466767054661591066e-1 * c(6) + 0.4274641967636400692133626e-1 * c(7) -0.3576545132696983143406173e-2 * c(6) + 0.7389399124121078682094445e-2 * c(5) - 0.3812853991424095538688273e-2 * c(7); 0.7075642937243715046279337e-1 * c(1) - 0.1845476106024151050283847e0 * c(2) - 0.4364163147111892346990101e-1 * c(4) + 0.2432367907207732460874765e0 * c(5) + 0.1582127073537215443965653e0 * c(6) + 0.1602348578364786307613271e0 * c(7) -0.9091410269992464604926176e-1 * c(1) + 0.1103611313171476425250639e0 * c(4) - 0.1290397544997518887000350e1 * c(5) - 0.6639605248735044787146222e0 * c(6) - 0.6615974464005206184151509e0 * c(7) 0.6327161147136873807796515e-2 * c(1) + 0.1147318200715868527529827e0 * c(2) + 0.1166740554279680007487795e0 * c(4) + 0.2766610808285444037240703e1 * c(5) + 0.1070920689960817104203947e1 * c(6) + 0.1013161391032973057171717e1 * c(7) 0.2013769413884797246646959e-1 * c(1) + 0.1033717994630886401730470e0 * c(2) - 0.2913221621151742724258117e1 * c(5) - 0.8755807343482262259774782e0 * c(6) - 0.6909957183488812426508351e0 * c(7) -0.4671751091575462868310238e-2 * c(1) - 0.2760353365637712827793337e-1 * c(2) - 0.1979290298620869974478871e0 * c(4) + 0.5402985338373433052255418e0 * c(6) + 0.1239177593031911077924537e1 * c(5) + 0.2628038050247358227280031e0 * c(7) -0.1635430866921887819487473e-2 * c(1) - 0.5952475275883259619711594e-2 * c(2) + 0.1964682777744275219350831e-1 * c(4) + 0.3236640012639046600590714e0 * c(5) - 0.4659516693228870973898560e0 * c(6) - 0.2217272720941736859420432e0 * c(7) -0.5111353189352474549563559e-2 * c(4) - 0.5355878163774754346032096e0 * c(5) + 0.3328335104489738933610597e0 * c(6) + 0.2078656591178540157917135e0 * c(7) 0.1824328174134289562208038e0 * c(5) - 0.1059816030196818445908057e0 * c(6) - 0.7645121439374711162999809e-1 * c(7) 0.9209089963443799485648361e-2 * c(6) - 0.1591502818872493167091475e-1 * c(5) + 0.6705938225281132185266388e-2 * c(7); 0.2251991532891353212689574e0 * c(1) - 0.1662748711097054895317080e0 * c(2) + 0.2710530961648671297733465e-1 * c(3) - 0.1916646185968439909125616e0 * c(5) - 0.7684117160199014594442072e-1 * c(6) - 0.8219586949831697575883635e-1 * c(7) -0.2893557395653431666593814e0 * c(1) - 0.2421320004064592721552708e0 * c(3) + 0.1187670255028031027693374e1 * c(5) + 0.3956598149904136332753521e0 * c(6) + 0.3860048921755800000681479e0 * c(7) 0.2013769413884797246646959e-1 * c(1) + 0.1033717994630886401730470e0 * c(2) - 0.2913221621151742724258117e1 * c(5) - 0.8755807343482262259774782e0 * c(6) - 0.6909957183488812426508351e0 * c(7) 0.6409299775987186986730499e-1 * c(1) + 0.9313657638804699948929701e-1 * c(2) + 0.2306367624634749229113646e0 * c(3) + 0.3689440308283716620260816e1 * c(5) + 0.1190550338687608873798462e1 * c(6) + 0.5912479546888856519443605e0 * c(7) -0.1486895819265604128572498e-1 * c(1) - 0.2487040599390160764166412e-1 * c(2) - 0.8712928907711754187084757e-2 * c(3) - 0.1263507837371824205693950e1 * c(6) - 0.3058317397843997326920898e0 * c(7) - 0.1470691926045802954795783e1 * c(5) -0.5205147429855955657625694e-2 * c(1) - 0.5363098747528542488971874e-2 * c(2) - 0.6897142765790609546343709e-2 * c(3) - 0.7857524521667450101721993e0 * c(5) + 0.2291148005423734600066709e0 * c(7) + 0.9977064356292750529201981e0 * c(6) 0.6697297488067662265210608e0 * c(5) - 0.5013247356072127938999311e0 * c(6) - 0.1795161243106645437322408e0 * c(7) -0.2022909060111751565150958e0 * c(5) + 0.1453421858063658498587377e0 * c(6) + 0.5694872020480930665635812e-1 * c(7) -0.1200429618441003833696998e-1 * c(6) - 0.4776915669385923841535432e-2 * c(7) + 0.1678121185379596217850541e-1 * c(5); -0.5224403464202056316702078e-1 * c(1) + 0.4440063948509876221050939e-1 * c(2) - 0.1023976547309387874453988e-2 * c(3) + 0.7403484645316174090533193e-1 * c(4) + 0.1241625568998496895352046e-1 * c(6) + 0.7188652847892601282652228e-1 * c(5) + 0.1379362997104735503447960e-1 * c(7) 0.6712774475803763988977355e-1 * c(1) + 0.9147192682075630179962131e-2 * c(3) - 0.1872196143003808021730728e0 * c(4) - 0.1319358558853174530078498e0 * c(6) - 0.4871575736811911887376923e0 * c(5) - 0.1047516312275448138054418e0 * c(7) -0.4671751091575462868310238e-2 * c(1) - 0.2760353365637712827793337e-1 * c(2) - 0.1979290298620869974478871e0 * c(4) + 0.5402985338373433052255418e0 * c(6) + 0.1239177593031911077924537e1 * c(5) + 0.2628038050247358227280031e0 * c(7) -0.1486895819265604128572498e-1 * c(1) - 0.2487040599390160764166412e-1 * c(2) - 0.8712928907711754187084757e-2 * c(3) - 0.1263507837371824205693950e1 * c(6) - 0.3058317397843997326920898e0 * c(7) - 0.1470691926045802954795783e1 * c(5) 0.3449455095910233625229891e-2 * c(1) + 0.6641183499427826101618457e-2 * c(2) + 0.3291545083271862858501887e-3 * c(3) + 0.3357721707576477199985656e0 * c(4) + 0.2096413329579026439044119e1 * c(6) + 0.2317323204183126854954203e0 * c(7) + 0.6107825764368264576481962e-2 * c(8) + 0.7109125850683376695640722e0 * c(5) 0.1207544072304193806052558e-2 * c(1) + 0.1432116665752147607469646e-2 * c(2) + 0.2605582646183255957264249e-3 * c(3) - 0.3332941113251635390801278e-1 * c(4) - 0.2808241697385532683612407e0 * c(7) - 0.2720908083525083608370563e-1 * c(8) + 0.1045865435682921987447929e0 * c(5) - 0.1348436986667115543203552e1 * c(6) 0.8671038084174692625075159e-2 * c(4) + 0.1736073411355428563685818e0 * c(6) + 0.5331362125287625412555844e-1 * c(8) - 0.2424935262404526301801157e0 * c(5) + 0.1569015257678588270609004e0 * c(7) -0.8631683980217122275970376e-1 * c(6) + 0.2698842360470999243492629e-1 * c(7) + 0.8098194147715651085292754e-1 * c(5) - 0.3276463639080639163926118e-1 * c(8) 0.7462059484530855073291365e-2 * c(6) - 0.8121640361668678949573496e-3 * c(7) + 0.5522702088127090209264064e-3 * c(8) - 0.7202165657176696199260422e-2 * c(5); -0.1828896813877197352675410e-1 * c(1) + 0.9574633163221758060736592e-2 * c(2) - 0.8105784530576404277872603e-3 * c(3) - 0.7348845587775519698437916e-2 * c(4) + 0.1063601949723906997026904e-1 * c(5) - 0.1315967038382618382356495e-1 * c(6) - 0.2117936478838753524581943e-1 * c(7) 0.2349927974590068869356781e-1 * c(1) + 0.7240905383565181316381731e-2 * c(3) + 0.1858378996391679448655070e-1 * c(4) - 0.9289616133938676174345208e-1 * c(5) + 0.1223513270418807666970488e0 * c(6) + 0.1113520320436295033894092e0 * c(7) -0.1635430866921887819487473e-2 * c(1) - 0.5952475275883259619711594e-2 * c(2) + 0.1964682777744275219350831e-1 * c(4) + 0.3236640012639046600590714e0 * c(5) - 0.4659516693228870973898560e0 * c(6) - 0.2217272720941736859420432e0 * c(7) -0.5205147429855955657625694e-2 * c(1) - 0.5363098747528542488971874e-2 * c(2) - 0.6897142765790609546343709e-2 * c(3) - 0.7857524521667450101721993e0 * c(5) + 0.2291148005423734600066709e0 * c(7) + 0.9977064356292750529201981e0 * c(6) 0.1207544072304193806052558e-2 * c(1) + 0.1432116665752147607469646e-2 * c(2) + 0.2605582646183255957264249e-3 * c(3) - 0.3332941113251635390801278e-1 * c(4) - 0.2808241697385532683612407e0 * c(7) - 0.2720908083525083608370563e-1 * c(8) + 0.1045865435682921987447929e0 * c(5) - 0.1348436986667115543203552e1 * c(6) 0.4227226173449345042468960e-3 * c(1) + 0.3088241944378964404772302e-3 * c(2) + 0.2062575706647430620228133e-3 * c(3) + 0.3308343404200968256656458e-2 * c(4) + 0.5828047016405001815804837e0 * c(5) + 0.8054174220366215473556835e0 * c(7) + 0.1338363233410033443348225e0 * c(8) + 0.5555555555555555555555556e-2 * c(9) + 0.1190362071861893051132274e1 * c(6) -0.8607044252686413302647675e-3 * c(4) - 0.1748074708673904989293256e0 * c(5) - 0.3132544850115050165022338e0 * c(8) - 0.2500000000000000000000000e-1 * c(9) - 0.3169166305310429271303167e0 * c(7) - 0.6691607091647929161078591e0 * c(6) 0.3354661791693352108660900e-1 * c(5) - 0.3343620022386971405018586e0 * c(7) + 0.5000000000000000000000000e-1 * c(9) + 0.2169790609807602750804271e0 * c(6) + 0.1838363233410033443348225e0 * c(8) 0.2912518476823004642951502e-1 * c(7) + 0.2279091916474916391629437e-1 * c(8) - 0.3068985997518740530511593e-1 * c(6) - 0.1781799513347360596249022e-2 * c(5) - 0.3055555555555555555555556e-1 * c(9); 0.1911888563316170927411831e-2 * c(4) - 0.4068130355529149936100229e-1 * c(5) + 0.1319674981073749167009902e-1 * c(6) + 0.2557266518123783676349144e-1 * c(7) -0.4834791406446907590553793e-2 * c(4) + 0.2310683832687820403062715e0 * c(5) - 0.1080774142196007991746827e0 * c(6) - 0.1181561776427343335410349e0 * c(7) -0.5111353189352474549563559e-2 * c(4) - 0.5355878163774754346032096e0 * c(5) + 0.3328335104489738933610597e0 * c(6) + 0.2078656591178540157917135e0 * c(7) 0.6697297488067662265210608e0 * c(5) - 0.5013247356072127938999311e0 * c(6) - 0.1795161243106645437322408e0 * c(7) 0.8671038084174692625075159e-2 * c(4) + 0.1736073411355428563685818e0 * c(6) + 0.5331362125287625412555844e-1 * c(8) - 0.2424935262404526301801157e0 * c(5) + 0.1569015257678588270609004e0 * c(7) -0.8607044252686413302647675e-3 * c(4) - 0.1748074708673904989293256e0 * c(5) - 0.3132544850115050165022338e0 * c(8) - 0.2500000000000000000000000e-1 * c(9) - 0.3169166305310429271303167e0 * c(7) - 0.6691607091647929161078591e0 * c(6) 0.2239223735771599178951297e-3 * c(4) + 0.1275437785430956673825710e0 * c(5) + 0.1011699483929608164601067e1 * c(6) + 0.9698817275172575247533506e0 * c(8) + 0.1250000000000000000000000e0 * c(9) + 0.5555555555555555555555556e-2 * c(10) + 0.4823177543031281500117826e0 * c(7) -0.3784113973033012949863031e-1 * c(5) - 0.2997556885134827361576001e0 * c(6) - 0.3000000000000000000000000e0 * c(9) - 0.2500000000000000000000000e-1 * c(10) - 0.3991486867446821178415359e0 * c(7) - 0.4382544850115050165022338e0 * c(8) 0.4698146218022683933926520e-1 * c(6) - 0.2966863787471237458744416e0 * c(8) + 0.5000000000000000000000000e-1 * c(10) + 0.1716355704146006481727960e0 * c(7) + 0.3069346152296258362380356e-2 * c(5) + 0.1750000000000000000000000e0 * c(9); 0.1559652871136785763960685e-1 * c(5) - 0.6486184157331537899459796e-2 * c(6) - 0.9110344554036319740147054e-2 * c(7) -0.8368141434403455353724691e-1 * c(5) + 0.4093499466767054661591066e-1 * c(6) + 0.4274641967636400692133626e-1 * c(7) 0.1824328174134289562208038e0 * c(5) - 0.1059816030196818445908057e0 * c(6) - 0.7645121439374711162999809e-1 * c(7) -0.2022909060111751565150958e0 * c(5) + 0.1453421858063658498587377e0 * c(6) + 0.5694872020480930665635812e-1 * c(7) -0.8631683980217122275970376e-1 * c(6) + 0.2698842360470999243492629e-1 * c(7) + 0.8098194147715651085292754e-1 * c(5) - 0.3276463639080639163926118e-1 * c(8) 0.3354661791693352108660900e-1 * c(5) - 0.3343620022386971405018586e0 * c(7) + 0.5000000000000000000000000e-1 * c(9) + 0.2169790609807602750804271e0 * c(6) + 0.1838363233410033443348225e0 * c(8) -0.3784113973033012949863031e-1 * c(5) - 0.2997556885134827361576001e0 * c(6) - 0.3000000000000000000000000e0 * c(9) - 0.2500000000000000000000000e-1 * c(10) - 0.3991486867446821178415359e0 * c(7) - 0.4382544850115050165022338e0 * c(8) 0.1230328942716804455358698e-1 * c(5) + 0.1183647529645898332481833e0 * c(6) + 0.9410511898227943334189628e0 * c(7) + 0.9500000000000000000000000e0 * c(9) + 0.1250000000000000000000000e0 * c(10) + 0.5555555555555555555555556e-2 * c(11) + 0.5699474344521144554459336e0 * c(8) -0.2308067892671916339568942e-1 * c(6) - 0.2986625053775149497180439e0 * c(7) - 0.3000000000000000000000000e0 * c(10) - 0.2500000000000000000000000e-1 * c(11) - 0.1047734860515050802561078e-2 * c(5) - 0.4272090808352508360837056e0 * c(8) - 0.4250000000000000000000000e0 * c(9); 0.5593983696629863059347067e-3 * c(6) - 0.1384822535100796372263822e-2 * c(5) + 0.8254241654378100663291154e-3 * c(7) -0.3576545132696983143406173e-2 * c(6) + 0.7389399124121078682094445e-2 * c(5) - 0.3812853991424095538688273e-2 * c(7) 0.9209089963443799485648361e-2 * c(6) - 0.1591502818872493167091475e-1 * c(5) + 0.6705938225281132185266388e-2 * c(7) -0.1200429618441003833696998e-1 * c(6) - 0.4776915669385923841535432e-2 * c(7) + 0.1678121185379596217850541e-1 * c(5) 0.7462059484530855073291365e-2 * c(6) - 0.8121640361668678949573496e-3 * c(7) + 0.5522702088127090209264064e-3 * c(8) - 0.7202165657176696199260422e-2 * c(5) 0.2912518476823004642951502e-1 * c(7) + 0.2279091916474916391629437e-1 * c(8) - 0.3068985997518740530511593e-1 * c(6) - 0.1781799513347360596249022e-2 * c(5) - 0.3055555555555555555555556e-1 * c(9) 0.4698146218022683933926520e-1 * c(6) - 0.2966863787471237458744416e0 * c(8) + 0.5000000000000000000000000e-1 * c(10) + 0.1716355704146006481727960e0 * c(7) + 0.3069346152296258362380356e-2 * c(5) + 0.1750000000000000000000000e0 * c(9) -0.2308067892671916339568942e-1 * c(6) - 0.2986625053775149497180439e0 * c(7) - 0.3000000000000000000000000e0 * c(10) - 0.2500000000000000000000000e-1 * c(11) - 0.1047734860515050802561078e-2 * c(5) - 0.4272090808352508360837056e0 * c(8) - 0.4250000000000000000000000e0 * c(9) 0.5139370221149109977041877e-2 * c(6) + 0.1247723215009422001393184e0 * c(7) + 0.9505522702088127090209264e0 * c(8) + 0.9500000000000000000000000e0 * c(10) + 0.1250000000000000000000000e0 * c(11) + 0.5555555555555555555555556e-2 * c(12) + 0.9159362465153641826887659e-4 * c(5) + 0.5611111111111111111111111e0 * c(9);]; - - M(m-8:m,m-8:m)=[0.5555555555555555555555556e-2 * c(m-11) + 0.1250000000000000000000000e0 * c(m-10) + 0.9500000000000000000000000e0 * c(m-9) + 0.9505522702088127090209264e0 * c(m-7) + 0.1247205076844361998744053e0 * c(m-6) + 0.5139370221149109977041877e-2 * c(m-5) + 0.5611111111111111111111111e0 * c(m-8) + 0.1434074411575366831819799e-3 * c(m-4) -0.2500000000000000000000000e-1 * c(m-10) - 0.3000000000000000000000000e0 * c(m-9) - 0.2980649679116425253322056e0 * c(m-6) - 0.2308067892671916339568942e-1 * c(m-5) - 0.4250000000000000000000000e0 * c(m-8) - 0.4272090808352508360837056e0 * c(m-7) - 0.1645272326387475188399322e-2 * c(m-4) 0.5000000000000000000000000e-1 * c(m-9) - 0.2966863787471237458744416e0 * c(m-7) + 0.4698146218022683933926520e-1 * c(m-5) + 0.1750000000000000000000000e0 * c(m-8) + 0.1700291833903489463825077e0 * c(m-6) + 0.4675733176547960152668626e-2 * c(m-4) 0.2279091916474916391629437e-1 * c(m-7) + 0.3097763128598982561225538e-1 * c(m-6) - 0.3055555555555555555555556e-1 * c(m-8) - 0.3068985997518740530511593e-1 * c(m-5) - 0.3634246031107139778989373e-2 * c(m-4) 0.5522702088127090209264064e-3 * c(m-7) - 0.3265435411305071914756373e-2 * c(m-6) + 0.7462059484530855073291365e-2 * c(m-5) - 0.4748894282038492179461399e-2 * c(m-4) 0.6272075574042975468177820e-3 * c(m-6) - 0.1200429618441003833696998e-1 * c(m-5) + 0.1137708862700574079015220e-1 * c(m-4) 0.9209089963443799485648361e-2 * c(m-5) - 0.3129629392354775191148163e-3 * c(m-6) - 0.8896127024208321966533544e-2 * c(m-4) -0.3576545132696983143406173e-2 * c(m-5) + 0.4335019854436220306755673e-3 * c(m-6) + 0.3143043147253361112730605e-2 * c(m-4) 0.5593983696629863059347067e-3 * c(m-5) - 0.1446656414398166805849327e-3 * c(m-6) - 0.4147327282231696253497740e-3 * c(m-4); -0.2500000000000000000000000e-1 * c(m-10) - 0.3000000000000000000000000e0 * c(m-9) - 0.2980649679116425253322056e0 * c(m-6) - 0.2308067892671916339568942e-1 * c(m-5) - 0.4250000000000000000000000e0 * c(m-8) - 0.4272090808352508360837056e0 * c(m-7) - 0.1645272326387475188399322e-2 * c(m-4) 0.5555555555555555555555556e-2 * c(m-10) + 0.1250000000000000000000000e0 * c(m-9) + 0.9500000000000000000000000e0 * c(m-8) + 0.9341601509609901526962449e0 * c(m-6) + 0.1183647529645898332481833e0 * c(m-5) + 0.1919432828897222527630486e-1 * c(m-4) + 0.5699474344521144554459336e0 * c(m-7) -0.2500000000000000000000000e-1 * c(m-9) - 0.3000000000000000000000000e0 * c(m-8) - 0.2997556885134827361576001e0 * c(m-5) - 0.5636663150858098975790317e-1 * c(m-4) - 0.4382544850115050165022338e0 * c(m-7) - 0.3806231949664312575822630e0 * c(m-6) 0.5000000000000000000000000e-1 * c(m-8) - 0.3557251496099816106154206e0 * c(m-6) + 0.5490976528821799120017102e-1 * c(m-4) + 0.1838363233410033443348225e0 * c(m-7) + 0.2169790609807602750804271e0 * c(m-5) 0.5528052133944605740009217e-1 * c(m-6) - 0.8631683980217122275970376e-1 * c(m-5) - 0.3276463639080639163926118e-1 * c(m-7) + 0.5268984374242044588776166e-1 * c(m-4) -0.5373770512016897565958305e-2 * c(m-6) + 0.1453421858063658498587377e0 * c(m-5) - 0.1399684152943489522927794e0 * c(m-4) -0.1059816030196818445908057e0 * c(m-5) + 0.1014880675788250237247178e0 * c(m-4) + 0.4493535440856820866087846e-2 * c(m-6) 0.4093499466767054661591066e-1 * c(m-5) - 0.3471075437892810033585296e-1 * c(m-4) - 0.6224240288742446280057699e-2 * c(m-6) -0.6486184157331537899459796e-2 * c(m-5) + 0.4409068609809831485979484e-2 * c(m-4) + 0.2077115547521706413480312e-2 * c(m-6); 0.5000000000000000000000000e-1 * c(m-9) - 0.2966863787471237458744416e0 * c(m-7) + 0.4698146218022683933926520e-1 * c(m-5) + 0.1750000000000000000000000e0 * c(m-8) + 0.1700291833903489463825077e0 * c(m-6) + 0.4675733176547960152668626e-2 * c(m-4) -0.2500000000000000000000000e-1 * c(m-9) - 0.3000000000000000000000000e0 * c(m-8) - 0.2997556885134827361576001e0 * c(m-5) - 0.5636663150858098975790317e-1 * c(m-4) - 0.4382544850115050165022338e0 * c(m-7) - 0.3806231949664312575822630e0 * c(m-6) 0.5555555555555555555555556e-2 * c(m-9) + 0.1250000000000000000000000e0 * c(m-8) + 0.9698817275172575247533506e0 * c(m-7) + 0.1011699483929608164601067e1 * c(m-5) + 0.1773466968705924819112984e0 * c(m-4) + 0.2239223735771599178951297e-3 * c(m-3) + 0.4325148359756313354830552e0 * c(m-6) -0.2500000000000000000000000e-1 * c(m-8) - 0.3132544850115050165022338e0 * c(m-7) - 0.2322389872063761557916742e0 * c(m-4) - 0.8607044252686413302647675e-3 * c(m-3) - 0.2594851141920572702679681e0 * c(m-6) - 0.6691607091647929161078591e0 * c(m-5) 0.5331362125287625412555844e-1 * c(m-7) + 0.1736073411355428563685818e0 * c(m-5) + 0.8671038084174692625075159e-2 * c(m-3) + 0.8084259844422177692569663e-1 * c(m-6) - 0.1664345989168155800449120e0 * c(m-4) -0.5013247356072127938999311e0 * c(m-5) + 0.5021853752328231128475915e0 * c(m-4) - 0.1197175073672143005877150e-1 * c(m-6) 0.3328335104489738933610597e0 * c(m-5) - 0.3179803804558436283847901e0 * c(m-4) - 0.5111353189352474549563559e-2 * c(m-3) - 0.9741776803777790426705996e-2 * c(m-6) -0.1080774142196007991746827e0 * c(m-5) + 0.9941834083648937298100811e-1 * c(m-4) - 0.4834791406446907590553793e-2 * c(m-3) + 0.1349386478955833378422842e-1 * c(m-6) 0.1319674981073749167009902e-1 * c(m-5) - 0.1060554802883657391328704e-1 * c(m-4) + 0.1911888563316170927411831e-2 * c(m-3) - 0.4503090345217088684223814e-2 * c(m-6); 0.2279091916474916391629437e-1 * c(m-7) + 0.3097763128598982561225538e-1 * c(m-6) - 0.3055555555555555555555556e-1 * c(m-8) - 0.3068985997518740530511593e-1 * c(m-5) - 0.3634246031107139778989373e-2 * c(m-4) 0.5000000000000000000000000e-1 * c(m-8) - 0.3557251496099816106154206e0 * c(m-6) + 0.5490976528821799120017102e-1 * c(m-4) + 0.1838363233410033443348225e0 * c(m-7) + 0.2169790609807602750804271e0 * c(m-5) -0.2500000000000000000000000e-1 * c(m-8) - 0.3132544850115050165022338e0 * c(m-7) - 0.2322389872063761557916742e0 * c(m-4) - 0.8607044252686413302647675e-3 * c(m-3) - 0.2594851141920572702679681e0 * c(m-6) - 0.6691607091647929161078591e0 * c(m-5) 0.5555555555555555555555556e-2 * c(m-8) + 0.1338363233410033443348225e0 * c(m-7) + 0.7391887916719206077121040e0 * c(m-6) + 0.6490333320052011212240632e0 * c(m-4) + 0.3308343404200968256656458e-2 * c(m-3) + 0.2062575706647430620228133e-3 * c(m-2) + 0.3088241944378964404772302e-3 * c(m-1) + 0.4227226173449345042468960e-3 * c(m) + 0.1190362071861893051132274e1 * c(m-5) -0.2720908083525083608370563e-1 * c(m-7) - 0.1931148612480615118957263e0 * c(m-6) - 0.3332941113251635390801278e-1 * c(m-3) + 0.2605582646183255957264249e-3 * c(m-2) + 0.1432116665752147607469646e-2 * c(m-1) + 0.1207544072304193806052558e-2 * c(m) - 0.1348436986667115543203552e1 * c(m-5) + 0.1687723507780044227927853e-1 * c(m-4) 0.3590669644811151307464697e-1 * c(m-6) - 0.5925443480724830632401754e0 * c(m-4) - 0.6897142765790609546343709e-2 * c(m-2) - 0.5363098747528542488971874e-2 * c(m-1) - 0.5205147429855955657625694e-2 * c(m) + 0.9977064356292750529201981e0 * c(m-5) 0.7272438906214475928744770e-1 * c(m-4) + 0.1964682777744275219350831e-1 * c(m-3) - 0.5952475275883259619711594e-2 * c(m-1) - 0.1635430866921887819487473e-2 * c(m) + 0.2921234010758621482958052e-1 * c(m-6) - 0.4659516693228870973898560e0 * c(m-5) 0.5891947149681041048896399e-1 * c(m-4) + 0.1858378996391679448655070e-1 * c(m-3) + 0.7240905383565181316381731e-2 * c(m-2) + 0.2349927974590068869356781e-1 * c(m) - 0.4046360079256766884300687e-1 * c(m-6) + 0.1223513270418807666970488e0 * c(m-5) -0.2404661162020836566908542e-1 * c(m-4) - 0.7348845587775519698437916e-2 * c(m-3) - 0.8105784530576404277872603e-3 * c(m-2) + 0.9574633163221758060736592e-2 * c(m-1) - 0.1828896813877197352675410e-1 * c(m) + 0.1350326632905990039353503e-1 * c(m-6) - 0.1315967038382618382356495e-1 * c(m-5); 0.5522702088127090209264064e-3 * c(m-7) - 0.3265435411305071914756373e-2 * c(m-6) + 0.7462059484530855073291365e-2 * c(m-5) - 0.4748894282038492179461399e-2 * c(m-4) 0.5528052133944605740009217e-1 * c(m-6) - 0.8631683980217122275970376e-1 * c(m-5) - 0.3276463639080639163926118e-1 * c(m-7) + 0.5268984374242044588776166e-1 * c(m-4) 0.5331362125287625412555844e-1 * c(m-7) + 0.1736073411355428563685818e0 * c(m-5) + 0.8671038084174692625075159e-2 * c(m-3) + 0.8084259844422177692569663e-1 * c(m-6) - 0.1664345989168155800449120e0 * c(m-4) -0.2720908083525083608370563e-1 * c(m-7) - 0.1931148612480615118957263e0 * c(m-6) - 0.3332941113251635390801278e-1 * c(m-3) + 0.2605582646183255957264249e-3 * c(m-2) + 0.1432116665752147607469646e-2 * c(m-1) + 0.1207544072304193806052558e-2 * c(m) - 0.1348436986667115543203552e1 * c(m-5) + 0.1687723507780044227927853e-1 * c(m-4) 0.6107825764368264576481962e-2 * c(m-7) + 0.1155752633643216628010304e0 * c(m-6) + 0.2096413329579026439044119e1 * c(m-5) + 0.3357721707576477199985656e0 * c(m-3) + 0.3291545083271862858501887e-3 * c(m-2) + 0.6641183499427826101618457e-2 * c(m-1) + 0.3449455095910233625229891e-2 * c(m) + 0.8270696421223286922584620e0 * c(m-4) -0.4995827370863505253765970e-1 * c(m-6) - 0.1263507837371824205693950e1 * c(m-5) - 0.8712928907711754187084757e-2 * c(m-2) - 0.2487040599390160764166412e-1 * c(m-1) - 0.1486895819265604128572498e-1 * c(m) - 0.1726565392121567634950213e1 * c(m-4) 0.5402985338373433052255418e0 * c(m-5) - 0.1979290298620869974478871e0 * c(m-3) - 0.2760353365637712827793337e-1 * c(m-1) - 0.4671751091575462868310238e-2 * c(m) - 0.6952587985456154591014641e-1 * c(m-6) + 0.1571507277911208446562686e1 * c(m-4) -0.1319358558853174530078498e0 * c(m-5) - 0.1872196143003808021730728e0 * c(m-3) + 0.9147192682075630179962131e-2 * c(m-2) + 0.6712774475803763988977355e-1 * c(m) + 0.9630407686703666967100804e-1 * c(m-6) - 0.6882132817757726722141421e0 * c(m-4) 0.1241625568998496895352046e-1 * c(m-5) + 0.7403484645316174090533193e-1 * c(m-3) - 0.1023976547309387874453988e-2 * c(m-2) + 0.4440063948509876221050939e-1 * c(m-1) - 0.5224403464202056316702078e-1 * c(m) - 0.3213800979246298453953842e-1 * c(m-6) + 0.1178181682424363524005403e0 * c(m-4); 0.6272075574042975468177820e-3 * c(m-6) - 0.1200429618441003833696998e-1 * c(m-5) + 0.1137708862700574079015220e-1 * c(m-4) -0.5373770512016897565958305e-2 * c(m-6) + 0.1453421858063658498587377e0 * c(m-5) - 0.1399684152943489522927794e0 * c(m-4) -0.5013247356072127938999311e0 * c(m-5) + 0.5021853752328231128475915e0 * c(m-4) - 0.1197175073672143005877150e-1 * c(m-6) 0.3590669644811151307464697e-1 * c(m-6) - 0.5925443480724830632401754e0 * c(m-4) - 0.6897142765790609546343709e-2 * c(m-2) - 0.5363098747528542488971874e-2 * c(m-1) - 0.5205147429855955657625694e-2 * c(m) + 0.9977064356292750529201981e0 * c(m-5) -0.4995827370863505253765970e-1 * c(m-6) - 0.1263507837371824205693950e1 * c(m-5) - 0.8712928907711754187084757e-2 * c(m-2) - 0.2487040599390160764166412e-1 * c(m-1) - 0.1486895819265604128572498e-1 * c(m) - 0.1726565392121567634950213e1 * c(m-4) 0.2760393423824887721078848e-1 * c(m-6) + 0.1190550338687608873798462e1 * c(m-5) + 0.4253084328734353394994388e1 * c(m-4) + 0.2306367624634749229113646e0 * c(m-2) + 0.9313657638804699948929701e-1 * c(m-1) + 0.6409299775987186986730499e-1 * c(m) -0.8755807343482262259774782e0 * c(m-5) - 0.3645285178085761821545207e1 * c(m-4) + 0.1033717994630886401730470e0 * c(m-1) + 0.2013769413884797246646959e-1 * c(m) + 0.4106783858513785463625543e-1 * c(m-6) 0.3956598149904136332753521e0 * c(m-5) + 0.1630560443616104907615866e1 * c(m-4) - 0.2421320004064592721552708e0 * c(m-2) - 0.2893557395653431666593814e0 * c(m) - 0.5688529641249387985434413e-1 * c(m-6) -0.7684117160199014594442072e-1 * c(m-5) - 0.2928439026361256842196229e0 * c(m-4) + 0.2710530961648671297733465e-1 * c(m-2) - 0.1662748711097054895317080e0 * c(m-1) + 0.2251991532891353212689574e0 * c(m) + 0.1898341454096471754822498e-1 * c(m-6); 0.9209089963443799485648361e-2 * c(m-5) - 0.3129629392354775191148163e-3 * c(m-6) - 0.8896127024208321966533544e-2 * c(m-4) -0.1059816030196818445908057e0 * c(m-5) + 0.1014880675788250237247178e0 * c(m-4) + 0.4493535440856820866087846e-2 * c(m-6) 0.3328335104489738933610597e0 * c(m-5) - 0.3179803804558436283847901e0 * c(m-4) - 0.5111353189352474549563559e-2 * c(m-3) - 0.9741776803777790426705996e-2 * c(m-6) 0.7272438906214475928744770e-1 * c(m-4) + 0.1964682777744275219350831e-1 * c(m-3) - 0.5952475275883259619711594e-2 * c(m-1) - 0.1635430866921887819487473e-2 * c(m) + 0.2921234010758621482958052e-1 * c(m-6) - 0.4659516693228870973898560e0 * c(m-5) 0.5402985338373433052255418e0 * c(m-5) - 0.1979290298620869974478871e0 * c(m-3) - 0.2760353365637712827793337e-1 * c(m-1) - 0.4671751091575462868310238e-2 * c(m) - 0.6952587985456154591014641e-1 * c(m-6) + 0.1571507277911208446562686e1 * c(m-4) -0.8755807343482262259774782e0 * c(m-5) - 0.3645285178085761821545207e1 * c(m-4) + 0.1033717994630886401730470e0 * c(m-1) + 0.2013769413884797246646959e-1 * c(m) + 0.4106783858513785463625543e-1 * c(m-6) 0.1070920689960817104203947e1 * c(m-5) + 0.3717418466925056542408153e1 * c(m-4) + 0.1166740554279680007487795e0 * c(m-3) + 0.1147318200715868527529827e0 * c(m-1) + 0.6327161147136873807796515e-2 * c(m) + 0.6235373239336055200426697e-1 * c(m-6) -0.6639605248735044787146222e0 * c(m-5) - 0.1865625445986772763641423e1 * c(m-4) + 0.1103611313171476425250639e0 * c(m-3) - 0.9091410269992464604926176e-1 * c(m) - 0.8636954541126674177407762e-1 * c(m-6) 0.1582127073537215443965653e0 * c(m-5) + 0.3746489300753517635549495e0 * c(m-4) - 0.4364163147111892346990101e-1 * c(m-3) - 0.1845476106024151050283847e0 * c(m-1) + 0.7075642937243715046279337e-1 * c(m) + 0.2882271848190011329385407e-1 * c(m-6); -0.3576545132696983143406173e-2 * c(m-5) + 0.4335019854436220306755673e-3 * c(m-6) + 0.3143043147253361112730605e-2 * c(m-4) 0.4093499466767054661591066e-1 * c(m-5) - 0.3471075437892810033585296e-1 * c(m-4) - 0.6224240288742446280057699e-2 * c(m-6) -0.1080774142196007991746827e0 * c(m-5) + 0.9941834083648937298100811e-1 * c(m-4) - 0.4834791406446907590553793e-2 * c(m-3) + 0.1349386478955833378422842e-1 * c(m-6) 0.5891947149681041048896399e-1 * c(m-4) + 0.1858378996391679448655070e-1 * c(m-3) + 0.7240905383565181316381731e-2 * c(m-2) + 0.2349927974590068869356781e-1 * c(m) - 0.4046360079256766884300687e-1 * c(m-6) + 0.1223513270418807666970488e0 * c(m-5) -0.1319358558853174530078498e0 * c(m-5) - 0.1872196143003808021730728e0 * c(m-3) + 0.9147192682075630179962131e-2 * c(m-2) + 0.6712774475803763988977355e-1 * c(m) + 0.9630407686703666967100804e-1 * c(m-6) - 0.6882132817757726722141421e0 * c(m-4) 0.3956598149904136332753521e0 * c(m-5) + 0.1630560443616104907615866e1 * c(m-4) - 0.2421320004064592721552708e0 * c(m-2) - 0.2893557395653431666593814e0 * c(m) - 0.5688529641249387985434413e-1 * c(m-6) -0.6639605248735044787146222e0 * c(m-5) - 0.1865625445986772763641423e1 * c(m-4) + 0.1103611313171476425250639e0 * c(m-3) - 0.9091410269992464604926176e-1 * c(m) - 0.8636954541126674177407762e-1 * c(m-6) 0.4681819359722749441073885e0 * c(m-5) + 0.1015239189167790053447110e1 * c(m-4) + 0.1043897828092562609502636e0 * c(m-3) + 0.2542001760457345743492403e0 * c(m-2) + 0.1306332157111667628555907e1 * c(m) + 0.1196351539550049336518187e0 * c(m-6) -0.1195777325611201766551392e0 * c(m-5) - 0.2187310061229745694542609e0 * c(m-4) - 0.4128029838349298819825156e-1 * c(m-3) - 0.2845627370491611369031341e-1 * c(m-2) - 0.1016689339350338144430605e1 * c(m) - 0.3992391469197282238624438e-1 * c(m-6); 0.5593983696629863059347067e-3 * c(m-5) - 0.1446656414398166805849327e-3 * c(m-6) - 0.4147327282231696253497740e-3 * c(m-4) -0.6486184157331537899459796e-2 * c(m-5) + 0.4409068609809831485979484e-2 * c(m-4) + 0.2077115547521706413480312e-2 * c(m-6) 0.1319674981073749167009902e-1 * c(m-5) - 0.1060554802883657391328704e-1 * c(m-4) + 0.1911888563316170927411831e-2 * c(m-3) - 0.4503090345217088684223814e-2 * c(m-6) -0.2404661162020836566908542e-1 * c(m-4) - 0.7348845587775519698437916e-2 * c(m-3) - 0.8105784530576404277872603e-3 * c(m-2) + 0.9574633163221758060736592e-2 * c(m-1) - 0.1828896813877197352675410e-1 * c(m) + 0.1350326632905990039353503e-1 * c(m-6) - 0.1315967038382618382356495e-1 * c(m-5) 0.1241625568998496895352046e-1 * c(m-5) + 0.7403484645316174090533193e-1 * c(m-3) - 0.1023976547309387874453988e-2 * c(m-2) + 0.4440063948509876221050939e-1 * c(m-1) - 0.5224403464202056316702078e-1 * c(m) - 0.3213800979246298453953842e-1 * c(m-6) + 0.1178181682424363524005403e0 * c(m-4) -0.7684117160199014594442072e-1 * c(m-5) - 0.2928439026361256842196229e0 * c(m-4) + 0.2710530961648671297733465e-1 * c(m-2) - 0.1662748711097054895317080e0 * c(m-1) + 0.2251991532891353212689574e0 * c(m) + 0.1898341454096471754822498e-1 * c(m-6) 0.1582127073537215443965653e0 * c(m-5) + 0.3746489300753517635549495e0 * c(m-4) - 0.4364163147111892346990101e-1 * c(m-3) - 0.1845476106024151050283847e0 * c(m-1) + 0.7075642937243715046279337e-1 * c(m) + 0.2882271848190011329385407e-1 * c(m-6) -0.1195777325611201766551392e0 * c(m-5) - 0.2187310061229745694542609e0 * c(m-4) - 0.4128029838349298819825156e-1 * c(m-3) - 0.2845627370491611369031341e-1 * c(m-2) - 0.1016689339350338144430605e1 * c(m) - 0.3992391469197282238624438e-1 * c(m-6) 0.3167964748016105299646518e-1 * c(m-5) + 0.4976563420877041544013670e-1 * c(m-4) + 0.1632404042590951953384672e-1 * c(m-3) + 0.3185519088796429015220016e-2 * c(m-2) + 0.2968472090638000742888467e0 * c(m-1) + 0.7912667594695582093926295e0 * c(m) + 0.1332316557164627464149716e-1 * c(m-6);]; - - M(5,10)=M(10,5); - M(m-4,m-9)=M(m-9,m-4); - - M=M/h; - - D2=HI*(-M-diag(c)*e_1*S_1'+diag(c)*e_m*S_m'); - end - D2 = @D2_fun; - - S2_U=[0.35e2 / 0.12e2 -0.26e2 / 0.3e1 0.19e2 / 0.2e1 -0.14e2 / 0.3e1 0.11e2 / 0.12e2;]/h^2; - S2_1=zeros(1,m); - S2_1(1:5)=S2_U; - S2_m=zeros(1,m); - S2_m(m-4:m)=fliplr(S2_U); - S2_1 = S2_1'; - S2_m = S2_m'; - - - - - - % Fourth derivative, 1th order accurate at first 8 boundary points (still - % yield 5th order convergence if stable: for example u_tt=-u_xxxx - - m4=7/240;m3=-2/5;m2=169/60;m1=-122/15;m0=91/8; - 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); - - %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.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; -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; 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; -0.1104821700277e13 / 0.306001238400e12 0.28938615291031e14 / 0.2570410402560e13 -0.9117069604217e13 / 0.642602600640e12 0.5029150721885e13 / 0.514082080512e12 -0.5209119714341e13 / 0.1285205201280e13 0.12235427457469e14 / 0.12852052012800e14 -0.13731270505e11 / 0.64260260064e11 0.2933596129e10 / 0.40800165120e11; 0.1355771086763e13 / 0.1836007430400e13 -0.146167361863e12 / 0.71400288960e11 0.632177582849e12 / 0.233673672960e12 -0.5209119714341e13 / 0.1285205201280e13 0.14871726798559e14 / 0.2570410402560e13 -0.7504337615347e13 / 0.1606506501600e13 0.310830296467e12 / 0.171360693504e12 -0.55284274391e11 / 0.183600743040e12; -0.27818686453e11 / 0.459001857600e12 0.2793470836571e13 / 0.12852052012800e14 -0.1057776382577e13 / 0.6426026006400e13 0.12235427457469e14 / 0.12852052012800e14 -0.7504337615347e13 / 0.1606506501600e13 0.106318657014853e15 / 0.12852052012800e14 -0.14432772918527e14 / 0.2142008668800e13 0.58102695589e11 / 0.22666758400e11; -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; 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;]; - - M4(1:8,1:8)=M4_U; - - M4(m-7:m,m-7:m)=flipud( fliplr( M4_U ) ); - M4=M4/h^3; - - S3_U=[-0.5e1 / 0.2e1 9 -12 7 -0.3e1 / 0.2e1;]/h^3; - S3_1=zeros(1,m); - S3_1(1:5)=S3_U; - S3_m=zeros(1,m); - S3_m(m-4:m)=fliplr(-S3_U); - S3_1 = S3_1'; - S3_m = S3_m'; - - D4=HI*(M4-e_1*S3_1'+e_m*S3_m' + S_1*S2_1'-S_m*S2_m'); - -end
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/higher_compatible2.m --- a/+sbp/higher_compatible2.m Mon Sep 12 11:14:00 2016 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,143 +0,0 @@ -function [H, HI, D1, D4, e_1, e_m, M4, Q, S2_1, S2_m, S3_1, S3_m, S_1, S_m] = higher_compatible2(m,h) - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - %%% 4:de ordn. SBP Finita differens %%% - %%% operatorer framtagna av Ken Mattsson %%% - %%% %%% - %%% 6 randpunkter, diagonal norm %%% - %%% %%% - %%% Datum: 2013-11-11 %%% - %%% %%% - %%% %%% - %%% H (Normen) %%% - %%% D1 (approx f?rsta derivatan) %%% - %%% D2 (approx andra derivatan) %%% - %%% D3 (approx tredje derivatan) %%% - %%% D2 (approx fj?rde derivatan) %%% - %%% %%% - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - % M?ste ange antal punkter (m) och stegl?ngd (h) - % Notera att dessa opetratorer ?r framtagna f?r att anv?ndas n?r - % vi har 3de och 4de derivator i v?r PDE - % I annat fall anv?nd de "traditionella" som har noggrannare - % randsplutningar f?r D1 och D2 - - % Vi b?rjar med normen. Notera att alla SBP operatorer delar samma norm, - % vilket ?r n?dv?ndigt f?r stabilitet - - H=diag(ones(m,1),0);H(1,1)=1/2;H(m,m)=1/2; - - - H=H*h; - HI=inv(H); - - - % First derivative SBP operator, 1st order accurate at first 6 boundary points - - q1=1/2; - Q=q1*(diag(ones(m-1,1),1)-diag(ones(m-1,1),-1)); - - %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)); - - - 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') ; - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - - - % Second derivative, 1st order accurate at first 6 boundary points - m1=-1;m0=2; - M=m1*(diag(ones(m-1,1),1)+diag(ones(m-1,1),-1))+m0*diag(ones(m,1),0);M(1,1)=1;M(m,m)=1; - M=M/h; - - S_U=[-1 1]/h; - S_1=zeros(1,m); - S_1(1:2)=S_U; - S_m=zeros(1,m); - - S_m(m-1:m)=fliplr(-S_U); - - D2=HI*(-M-e_1*S_1+e_m*S_m); - - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - - - % Third derivative, 1st order accurate at first 6 boundary points - - q2=1/2;q1=-1; - Q3=q2*(diag(ones(m-2,1),2)-diag(ones(m-2,1),-2))+q1*(diag(ones(m-1,1),1)-diag(ones(m-1,1),-1)); - - %QQ3=(-1/8*diag(ones(m-3,1),3) + 1*diag(ones(m-2,1),2) - 13/8*diag(ones(m-1,1),1) +13/8*diag(ones(m-1,1),-1) -1*diag(ones(m-2,1),-2) + 1/8*diag(ones(m-3,1),-3)); - - - Q3_U = [0 -0.2e1 / 0.5e1 0.3e1 / 0.10e2 0.1e1 / 0.10e2; 0.2e1 / 0.5e1 0 -0.7e1 / 0.10e2 0.3e1 / 0.10e2; -0.3e1 / 0.10e2 0.7e1 / 0.10e2 0 -0.9e1 / 0.10e2; -0.1e1 / 0.10e2 -0.3e1 / 0.10e2 0.9e1 / 0.10e2 0;]; - Q3(1:4,1:4)=Q3_U; - Q3(m-3:m,m-3:m)=flipud( fliplr( -Q3_U ) ); - Q3=Q3/h^2; - - - - S2_U=[1 -2 1;]/h^2; - S2_1=zeros(1,m); - S2_1(1:3)=S2_U; - S2_m=zeros(1,m); - S2_m(m-2:m)=fliplr(S2_U); - - - - D3=HI*(Q3 - e_1*S2_1 + e_m*S2_m +1/2*S_1'*S_1 -1/2*S_m'*S_m ) ; - - % Fourth derivative, 0th order accurate at first 6 boundary points (still - % yield 4th order convergence if stable: for example u_tt=-u_xxxx - - m2=1;m1=-4;m0=6; - M4=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.4e1 / 0.5e1 -0.7e1 / 0.5e1 0.2e1 / 0.5e1 0.1e1 / 0.5e1; -0.7e1 / 0.5e1 0.16e2 / 0.5e1 -0.11e2 / 0.5e1 0.2e1 / 0.5e1; 0.2e1 / 0.5e1 -0.11e2 / 0.5e1 0.21e2 / 0.5e1 -0.17e2 / 0.5e1; 0.1e1 / 0.5e1 0.2e1 / 0.5e1 -0.17e2 / 0.5e1 0.29e2 / 0.5e1;]; - - 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); - - - - S_1 = S_1'; - S_m = S_m'; - S2_1 = S2_1'; - S2_m = S2_m'; - S3_1 = S3_1'; - S3_m = S3_m'; - - - - - % L=h*(m-1); - - % x1=linspace(0,L,m)'; - % x2=x1.^2/fac(2); - % x3=x1.^3/fac(3); - % x4=x1.^4/fac(4); - % x5=x1.^5/fac(5); - - % x0=x1.^0/fac(1); - - -end \ No newline at end of file
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/higher_compatible4.m --- a/+sbp/higher_compatible4.m Mon Sep 12 11:14:00 2016 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,148 +0,0 @@ -function [H, HI, D1, D4, e_1, e_m, M4, Q, S2_1, S2_m, S3_1, S3_m, S_1, S_m] = higher_compatible4(m,h) - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - %%% 4:de ordn. SBP Finita differens %%% - %%% operatorer framtagna av Ken Mattsson %%% - %%% %%% - %%% 6 randpunkter, diagonal norm %%% - %%% %%% - %%% Datum: 2013-11-11 %%% - %%% %%% - %%% %%% - %%% H (Normen) %%% - %%% D1 (approx f?rsta derivatan) %%% - %%% D2 (approx andra derivatan) %%% - %%% D3 (approx tredje derivatan) %%% - %%% D2 (approx fj?rde derivatan) %%% - %%% %%% - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - % M?ste ange antal punkter (m) och stegl?ngd (h) - % Notera att dessa opetratorer ?r framtagna f?r att anv?ndas n?r - % vi har 3de och 4de derivator i v?r PDE - % I annat fall anv?nd de "traditionella" som har noggrannare - % randsplutningar f?r D1 och D2 - - % Vi b?rjar med normen. Notera att alla SBP operatorer delar samma norm, - % vilket ?r n?dv?ndigt f?r stabilitet - - H=diag(ones(m,1),0); - H_U=[0.3e1 / 0.11e2 0 0 0 0 0; 0 0.2125516311e10 / 0.1311004640e10 0 0 0 0; 0 0 0.278735189e9 / 0.1966506960e10 0 0 0; 0 0 0 0.285925927e9 / 0.163875580e9 0 0; 0 0 0 0 0.1284335339e10 / 0.1966506960e10 0; 0 0 0 0 0 0.4194024163e10 / 0.3933013920e10;]; - H(1:6,1:6)=H_U; - H(m-5:m,m-5:m)=fliplr(flipud(H_U)); - H=H*h; - HI=inv(H); - - - % First derivative SBP operator, 1st order accurate at first 6 boundary points - - q2=-1/12;q1=8/12; - Q=q2*(diag(ones(m-2,1),2) - diag(ones(m-2,1),-2))+q1*(diag(ones(m-1,1),1)-diag(ones(m-1,1),-1)); - - %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.9e1 / 0.11e2 -0.9e1 / 0.22e2 0.1e1 / 0.11e2 0 0; -0.9e1 / 0.11e2 0 0.2595224893e10 / 0.2622009280e10 -0.151435707e9 / 0.327751160e9 0.1112665611e10 / 0.2622009280e10 -0.1290899e7 / 0.9639740e7; 0.9e1 / 0.22e2 -0.2595224893e10 / 0.2622009280e10 0 0.1468436423e10 / 0.983253480e9 -0.1194603401e10 / 0.983253480e9 0.72033031e8 / 0.238364480e9; -0.1e1 / 0.11e2 0.151435707e9 / 0.327751160e9 -0.1468436423e10 / 0.983253480e9 0 0.439819541e9 / 0.327751160e9 -0.215942641e9 / 0.983253480e9; 0 -0.1112665611e10 / 0.2622009280e10 0.1194603401e10 / 0.983253480e9 -0.439819541e9 / 0.327751160e9 0 0.1664113643e10 / 0.2622009280e10; 0 0.1290899e7 / 0.9639740e7 -0.72033031e8 / 0.238364480e9 0.215942641e9 / 0.983253480e9 -0.1664113643e10 / 0.2622009280e10 0;]; - Q(1:6,1:6)=Q_U; - Q(m-5:m,m-5:m)=flipud( fliplr( -Q_U ) ); - - 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') ; - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - - - % % Second derivative, 1st order accurate at first 6 boundary points - % m2=1/12;m1=-16/12;m0=30/12; - % M=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); - % %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)); - % M_U=[0.2386127e7 / 0.2177280e7 -0.515449e6 / 0.453600e6 -0.10781e5 / 0.777600e6 0.61567e5 / 0.1360800e7 0.6817e4 / 0.403200e6 -0.1069e4 / 0.136080e6; -0.515449e6 / 0.453600e6 0.4756039e7 / 0.2177280e7 -0.1270009e7 / 0.1360800e7 -0.3751e4 / 0.28800e5 0.3067e4 / 0.680400e6 0.119459e6 / 0.10886400e8; -0.10781e5 / 0.777600e6 -0.1270009e7 / 0.1360800e7 0.111623e6 / 0.60480e5 -0.555587e6 / 0.680400e6 -0.551339e6 / 0.5443200e7 0.8789e4 / 0.453600e6; 0.61567e5 / 0.1360800e7 -0.3751e4 / 0.28800e5 -0.555587e6 / 0.680400e6 0.1025327e7 / 0.544320e6 -0.464003e6 / 0.453600e6 0.222133e6 / 0.5443200e7; 0.6817e4 / 0.403200e6 0.3067e4 / 0.680400e6 -0.551339e6 / 0.5443200e7 -0.464003e6 / 0.453600e6 0.5074159e7 / 0.2177280e7 -0.1784047e7 / 0.1360800e7; -0.1069e4 / 0.136080e6 0.119459e6 / 0.10886400e8 0.8789e4 / 0.453600e6 0.222133e6 / 0.5443200e7 -0.1784047e7 / 0.1360800e7 0.1812749e7 / 0.725760e6;]; - % - % M(1:6,1:6)=M_U; - % - % M(m-5:m,m-5: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); - - % D2=HI*(-M-e_1*S_1+e_m*S_m); - - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - - - % Third derivative, 1st order accurate at first 6 boundary points - - % q3=-1/8;q2=1;q1=-13/8; - % Q3=q3*(diag(ones(m-3,1),3)-diag(ones(m-3,1),-3))+q2*(diag(ones(m-2,1),2)-diag(ones(m-2,1),-2))+q1*(diag(ones(m-1,1),1)-diag(ones(m-1,1),-1)); - % - % %QQ3=(-1/8*diag(ones(m-3,1),3) + 1*diag(ones(m-2,1),2) - 13/8*diag(ones(m-1,1),1) +13/8*diag(ones(m-1,1),-1) -1*diag(ones(m-2,1),-2) + 1/8*diag(ones(m-3,1),-3)); - % - % - % Q3_U = [0 -0.88471e5 / 0.67200e5 0.58139e5 / 0.33600e5 -0.1167e4 / 0.2800e4 -0.89e2 / 0.11200e5 0.7e1 / 0.640e3; 0.88471e5 / 0.67200e5 0 -0.43723e5 / 0.16800e5 0.46783e5 / 0.33600e5 -0.191e3 / 0.3200e4 -0.1567e4 / 0.33600e5; -0.58139e5 / 0.33600e5 0.43723e5 / 0.16800e5 0 -0.4049e4 / 0.2400e4 0.29083e5 / 0.33600e5 -0.71e2 / 0.1400e4; 0.1167e4 / 0.2800e4 -0.46783e5 / 0.33600e5 0.4049e4 / 0.2400e4 0 -0.8591e4 / 0.5600e4 0.10613e5 / 0.11200e5; 0.89e2 / 0.11200e5 0.191e3 / 0.3200e4 -0.29083e5 / 0.33600e5 0.8591e4 / 0.5600e4 0 -0.108271e6 / 0.67200e5; -0.7e1 / 0.640e3 0.1567e4 / 0.33600e5 0.71e2 / 0.1400e4 -0.10613e5 / 0.11200e5 0.108271e6 / 0.67200e5 0;]; - % - % Q3(1:6,1:6)=Q3_U; - % Q3(m-5:m,m-5:m)=flipud( fliplr( -Q3_U ) ); - % Q3=Q3/h^2; - - - - 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); - - - - %D3=HI*(Q3 - e_1*S2_1 + e_m*S2_m +1/2*S_1'*S_1 -1/2*S_m'*S_m ) ; - - % Fourth derivative, 0th order accurate at first 6 boundary points (still - % yield 4th order convergence if stable: for example u_tt=-u_xxxx - - 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.227176919517319e15 / 0.94899692875680e14 -0.15262605263734e14 / 0.2965615402365e13 0.20205404771243e14 / 0.6778549491120e13 -0.3998303664097e13 / 0.23724923218920e14 0.1088305091927e13 / 0.94899692875680e14 -0.1686077077693e13 / 0.23724923218920e14; -0.15262605263734e14 / 0.2965615402365e13 0.280494781164181e15 / 0.23724923218920e14 -0.46417445546261e14 / 0.5931230804730e13 0.1705307929429e13 / 0.1694637372780e13 -0.553547394061e12 / 0.5931230804730e13 0.5615721694973e13 / 0.23724923218920e14; 0.20205404771243e14 / 0.6778549491120e13 -0.46417445546261e14 / 0.5931230804730e13 0.4135802350237e13 / 0.551742400440e12 -0.4140981465247e13 / 0.1078405600860e13 0.75538453067437e14 / 0.47449846437840e14 -0.4778134936391e13 / 0.11862461609460e14; -0.3998303664097e13 / 0.23724923218920e14 0.1705307929429e13 / 0.1694637372780e13 -0.4140981465247e13 / 0.1078405600860e13 0.20760974175677e14 / 0.2965615402365e13 -0.138330689701889e15 / 0.23724923218920e14 0.23711317526909e14 / 0.11862461609460e14; 0.1088305091927e13 / 0.94899692875680e14 -0.553547394061e12 / 0.5931230804730e13 0.75538453067437e14 / 0.47449846437840e14 -0.138330689701889e15 / 0.23724923218920e14 0.120223780251937e15 / 0.13557098982240e14 -0.151383731537477e15 / 0.23724923218920e14; -0.1686077077693e13 / 0.23724923218920e14 0.5615721694973e13 / 0.23724923218920e14 -0.4778134936391e13 / 0.11862461609460e14 0.23711317526909e14 / 0.11862461609460e14 -0.151383731537477e15 / 0.23724923218920e14 0.220304030094121e15 / 0.23724923218920e14;]; - - M4(1:6,1:6)=M4_U; - - M4(m-5:m,m-5: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); - - S_1 = S_1'; - S_m = S_m'; - S2_1 = S2_1'; - S2_m = S2_m'; - S3_1 = S3_1'; - S3_m = S3_m'; - - % L=h*(m-1); - % - % x1=linspace(0,L,m)'; - % x2=x1.^2/fac(2); - % x3=x1.^3/fac(3); - % x4=x1.^4/fac(4); - % x5=x1.^5/fac(5); - % - % x0=x1.^0/fac(1); - -end
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/higher_compatible6.m --- a/+sbp/higher_compatible6.m Mon Sep 12 11:14:00 2016 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,148 +0,0 @@ -function [H, HI, D1, D4, e_1, e_m, M4, Q, S2_1, S2_m, S3_1, S3_m, S_1, S_m] = higher_compatible6(m,h) - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - %%% 4:de ordn. SBP Finita differens %%% - %%% operatorer framtagna av Ken Mattsson %%% - %%% %%% - %%% 6 randpunkter, diagonal norm %%% - %%% %%% - %%% Datum: 2013-11-11 %%% - %%% %%% - %%% %%% - %%% H (Normen) %%% - %%% D1 (approx f?rsta derivatan) %%% - %%% D2 (approx andra derivatan) %%% - %%% D3 (approx tredje derivatan) %%% - %%% D2 (approx fj?rde derivatan) %%% - %%% %%% - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - % M?ste ange antal punkter (m) och stegl?ngd (h) - % Notera att dessa opetratorer ?r framtagna f?r att anv?ndas n?r - % vi har 3de och 4de derivator i v?r PDE - % I annat fall anv?nd de "traditionella" som har noggrannare - % randsplutningar f?r D1 och D2 - - % Vi b?rjar med normen. Notera att alla SBP operatorer delar samma norm, - % vilket ?r n?dv?ndigt f?r stabilitet - - H=diag(ones(m,1),0); - H_U=[0.7493827e7 / 0.25401600e8 0 0 0 0 0 0 0; 0 0.5534051e7 / 0.3628800e7 0 0 0 0 0 0; 0 0 0.104561e6 / 0.403200e6 0 0 0 0 0; 0 0 0 0.260503e6 / 0.145152e6 0 0 0 0; 0 0 0 0 0.43237e5 / 0.103680e6 0 0 0; 0 0 0 0 0 0.514081e6 / 0.403200e6 0 0; 0 0 0 0 0 0 0.3356179e7 / 0.3628800e7 0; 0 0 0 0 0 0 0 0.25631027e8 / 0.25401600e8;]; - - H(1:8,1:8)=H_U; - H(m-7:m,m-7:m)=fliplr(flipud(H_U)); - H=H*h; - HI=inv(H); - - - % First derivative SBP operator, 3rd order accurate at first 8 boundary points - - q3=1/60;q2=-3/20;q1=3/4; - Q=q3*(diag(ones(m-3,1),3) - diag(ones(m-3,1),-3))+q2*(diag(ones(m-2,1),2) - diag(ones(m-2,1),-2))+q1*(diag(ones(m-1,1),1)-diag(ones(m-1,1),-1)); - - Q_U = [0 0.26431903e8 / 0.43545600e8 0.39791489e8 / 0.152409600e9 -0.12747751e8 / 0.16934400e8 0.76099447e8 / 0.152409600e9 -0.1397443e7 / 0.12192768e8 0 0; -0.26431903e8 / 0.43545600e8 0 -0.13847476213e11 / 0.19559232000e11 0.35844843977e11 / 0.11735539200e11 -0.63413503537e11 / 0.23471078400e11 0.4764412871e10 / 0.3911846400e10 -0.1668252557e10 / 0.5867769600e10 0.842644697e9 / 0.29338848000e11; -0.39791489e8 / 0.152409600e9 0.13847476213e11 / 0.19559232000e11 0 -0.73834802771e11 / 0.23471078400e11 0.1802732209e10 / 0.325987200e9 -0.65514173e8 / 0.16299360e8 0.79341409141e11 / 0.58677696000e11 -0.1282384321e10 / 0.7823692800e10; 0.12747751e8 / 0.16934400e8 -0.35844843977e11 / 0.11735539200e11 0.73834802771e11 / 0.23471078400e11 0 -0.5274106087e10 / 0.1173553920e10 0.33743985841e11 / 0.5867769600e10 -0.6482602549e10 / 0.2607897600e10 0.1506017269e10 / 0.3911846400e10; -0.76099447e8 / 0.152409600e9 0.63413503537e11 / 0.23471078400e11 -0.1802732209e10 / 0.325987200e9 0.5274106087e10 / 0.1173553920e10 0 -0.7165829063e10 / 0.2607897600e10 0.23903110999e11 / 0.11735539200e11 -0.5346675911e10 / 0.11735539200e11; 0.1397443e7 / 0.12192768e8 -0.4764412871e10 / 0.3911846400e10 0.65514173e8 / 0.16299360e8 -0.33743985841e11 / 0.5867769600e10 0.7165829063e10 / 0.2607897600e10 0 -0.1060918223e10 / 0.11735539200e11 0.628353989e9 / 0.3911846400e10; 0 0.1668252557e10 / 0.5867769600e10 -0.79341409141e11 / 0.58677696000e11 0.6482602549e10 / 0.2607897600e10 -0.23903110999e11 / 0.11735539200e11 0.1060918223e10 / 0.11735539200e11 0 0.25889988599e11 / 0.39118464000e11; 0 -0.842644697e9 / 0.29338848000e11 0.1282384321e10 / 0.7823692800e10 -0.1506017269e10 / 0.3911846400e10 0.5346675911e10 / 0.11735539200e11 -0.628353989e9 / 0.3911846400e10 -0.25889988599e11 / 0.39118464000e11 0;]; - - Q(1:8,1:8)=Q_U; - Q(m-7:m,m-7:m)=flipud( fliplr( -Q_U ) ); - - 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') ; - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - - - % Second derivative, 1st order accurate at first 6 boundary points - % m3=-1/90;m2=3/20;m1=-3/2;m0=49/18; - % - % M=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); - % M_U=[0.4347276223e10 / 0.3736212480e10 -0.1534657609e10 / 0.1210809600e10 0.68879e5 / 0.3057600e7 0.1092927401e10 / 0.13076743680e11 0.18145423e8 / 0.968647680e9 -0.1143817e7 / 0.60540480e8 -0.355447739e9 / 0.65383718400e11 0.56081e5 / 0.16473600e8; -0.1534657609e10 / 0.1210809600e10 0.42416226217e11 / 0.18681062400e11 -0.228654119e9 / 0.345945600e9 -0.12245627e8 / 0.34594560e8 -0.2995295e7 / 0.46702656e8 0.52836503e8 / 0.691891200e9 0.119351e6 / 0.12812800e8 -0.634102039e9 / 0.65383718400e11; 0.68879e5 / 0.3057600e7 -0.228654119e9 / 0.345945600e9 0.5399287e7 / 0.4193280e7 -0.24739409e8 / 0.34594560e8 0.7878737e7 / 0.69189120e8 -0.1917829e7 / 0.31449600e8 0.39727e5 / 0.3660800e7 0.10259e5 / 0.4656960e7; 0.1092927401e10 / 0.13076743680e11 -0.12245627e8 / 0.34594560e8 -0.24739409e8 / 0.34594560e8 0.7780367599e10 / 0.3736212480e10 -0.70085363e8 / 0.69189120e8 -0.500209e6 / 0.6289920e7 -0.311543e6 / 0.17962560e8 0.278191e6 / 0.21525504e8; 0.18145423e8 / 0.968647680e9 -0.2995295e7 / 0.46702656e8 0.7878737e7 / 0.69189120e8 -0.70085363e8 / 0.69189120e8 0.7116321131e10 / 0.3736212480e10 -0.545081e6 / 0.532224e6 0.811631e6 / 0.11531520e8 -0.84101639e8 / 0.13076743680e11; -0.1143817e7 / 0.60540480e8 0.52836503e8 / 0.691891200e9 -0.1917829e7 / 0.31449600e8 -0.500209e6 / 0.6289920e7 -0.545081e6 / 0.532224e6 0.324760747e9 / 0.138378240e9 -0.65995697e8 / 0.49420800e8 0.1469203e7 / 0.13759200e8; -0.355447739e9 / 0.65383718400e11 0.119351e6 / 0.12812800e8 0.39727e5 / 0.3660800e7 -0.311543e6 / 0.17962560e8 0.811631e6 / 0.11531520e8 -0.65995697e8 / 0.49420800e8 0.48284442317e11 / 0.18681062400e11 -0.1762877569e10 / 0.1210809600e10; 0.56081e5 / 0.16473600e8 -0.634102039e9 / 0.65383718400e11 0.10259e5 / 0.4656960e7 0.278191e6 / 0.21525504e8 -0.84101639e8 / 0.13076743680e11 0.1469203e7 / 0.13759200e8 -0.1762877569e10 / 0.1210809600e10 0.10117212851e11 / 0.3736212480e10;]; - % - % M(1:8,1:8)=M_U; - % - % M(m-7:m,m-7:m)=flipud( fliplr( M_U ) ); - % M=M/h; - - S_U=[-0.12700800e8 / 0.7493827e7 0.185023321e9 / 0.89925924e8 0.39791489e8 / 0.44962962e8 -0.38243253e8 / 0.14987654e8 0.76099447e8 / 0.44962962e8 -0.34936075e8 / 0.89925924e8;]/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); - - %D2=HI*(-M-e_1*S_1+e_m*S_m); - - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - - - % Third derivative, 1st order accurate at first 6 boundary points - - % q4=7/240;q3=-3/10;q2=169/120;q1=-61/30; - % Q3=q4*(diag(ones(m-4,1),4)-diag(ones(m-4,1),-4))+q3*(diag(ones(m-3,1),3)-diag(ones(m-3,1),-3))+q2*(diag(ones(m-2,1),2)-diag(ones(m-2,1),-2))+q1*(diag(ones(m-1,1),1)-diag(ones(m-1,1),-1)); - % - % %QQ3=(-1/8*diag(ones(m-3,1),3) + 1*diag(ones(m-2,1),2) - 13/8*diag(ones(m-1,1),1) +13/8*diag(ones(m-1,1),-1) -1*diag(ones(m-2,1),-2) + 1/8*diag(ones(m-3,1),-3)); - % - % - % Q3_U = [0 -0.10882810591e11 / 0.5811886080e10 0.398713069e9 / 0.132088320e9 -0.1746657571e10 / 0.1162377216e10 0.56050639e8 / 0.145297152e9 -0.11473393e8 / 0.1162377216e10 -0.38062741e8 / 0.1452971520e10 0.30473e5 / 0.4392960e7; 0.10882810591e11 / 0.5811886080e10 0 -0.3720544343e10 / 0.830269440e9 0.767707019e9 / 0.207567360e9 -0.1047978301e10 / 0.830269440e9 0.1240729e7 / 0.14826240e8 0.6807397e7 / 0.55351296e8 -0.50022767e8 / 0.1452971520e10; -0.398713069e9 / 0.132088320e9 0.3720544343e10 / 0.830269440e9 0 -0.2870078009e10 / 0.830269440e9 0.74962049e8 / 0.29652480e8 -0.12944857e8 / 0.30750720e8 -0.17846623e8 / 0.103783680e9 0.68707591e8 / 0.1162377216e10; 0.1746657571e10 / 0.1162377216e10 -0.767707019e9 / 0.207567360e9 0.2870078009e10 / 0.830269440e9 0 -0.727867087e9 / 0.276756480e9 0.327603877e9 / 0.207567360e9 -0.175223717e9 / 0.830269440e9 0.1353613e7 / 0.726485760e9; -0.56050639e8 / 0.145297152e9 0.1047978301e10 / 0.830269440e9 -0.74962049e8 / 0.29652480e8 0.727867087e9 / 0.276756480e9 0 -0.1804641793e10 / 0.830269440e9 0.311038417e9 / 0.207567360e9 -0.1932566239e10 / 0.5811886080e10; 0.11473393e8 / 0.1162377216e10 -0.1240729e7 / 0.14826240e8 0.12944857e8 / 0.30750720e8 -0.327603877e9 / 0.207567360e9 0.1804641793e10 / 0.830269440e9 0 -0.1760949511e10 / 0.830269440e9 0.2105883973e10 / 0.1452971520e10; 0.38062741e8 / 0.1452971520e10 -0.6807397e7 / 0.55351296e8 0.17846623e8 / 0.103783680e9 0.175223717e9 / 0.830269440e9 -0.311038417e9 / 0.207567360e9 0.1760949511e10 / 0.830269440e9 0 -0.1081094773e10 / 0.528353280e9; -0.30473e5 / 0.4392960e7 0.50022767e8 / 0.1452971520e10 -0.68707591e8 / 0.1162377216e10 -0.1353613e7 / 0.726485760e9 0.1932566239e10 / 0.5811886080e10 -0.2105883973e10 / 0.1452971520e10 0.1081094773e10 / 0.528353280e9 0;]; - % - % Q3(1:8,1:8)=Q3_U; - % Q3(m-7:m,m-7:m)=flipud( fliplr( -Q3_U ) ); - % Q3=Q3/h^2; - % - % - % - S2_U=[0.35e2 / 0.12e2 -0.26e2 / 0.3e1 0.19e2 / 0.2e1 -0.14e2 / 0.3e1 0.11e2 / 0.12e2;]/h^2; - S2_1=zeros(1,m); - S2_1(1:5)=S2_U; - S2_m=zeros(1,m); - S2_m(m-4:m)=fliplr(S2_U); - % - % - % - % D3=HI*(Q3 - e_1*S2_1 + e_m*S2_m +1/2*S_1'*S_1 -1/2*S_m'*S_m ) ; - - % Fourth derivative, 0th order accurate at first 6 boundary points (still - % yield 4th order convergence if stable: for example u_tt=-u_xxxx - - m4=7/240;m3=-2/5;m2=169/60;m1=-122/15;m0=91/8; - 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); - - - - M4_U=[0.600485868980522851e18 / 0.274825314114120000e18 -0.1421010223681841e16 / 0.348984525859200e15 0.38908412970187e14 / 0.1586293299360000e16 0.10224077451922837e17 / 0.2243471951952000e16 -0.7577302712815639e16 / 0.1744922629296000e16 0.138091642084013e15 / 0.59351109840000e14 -0.3775041725375197e16 / 0.4486943903904000e16 0.9907210230881393e16 / 0.61072292025360000e17; -0.1421010223681841e16 / 0.348984525859200e15 0.3985852497808703e16 / 0.407903991264000e15 -0.90048788923861e14 / 0.15579666333000e14 -0.4312795866499e13 / 0.997098645312e12 0.4414634708891947e16 / 0.448694390390400e15 -0.886174803100459e15 / 0.99709864531200e14 0.4333e4 / 0.1000e4 -0.13800578064893047e17 / 0.15704303663664000e17; 0.38908412970187e14 / 0.1586293299360000e16 -0.90048788923861e14 / 0.15579666333000e14 0.2071682582321887e16 / 0.113306664240000e15 -0.769471337294003e15 / 0.41545776888000e14 0.112191585452033e15 / 0.166183107552000e15 0.7204491902193671e16 / 0.623186653320000e15 -0.24847093554379e14 / 0.3115933266600e13 0.943854037768721e15 / 0.545288321655000e15; 0.10224077451922837e17 / 0.2243471951952000e16 -0.4312795866499e13 / 0.997098645312e12 -0.769471337294003e15 / 0.41545776888000e14 0.3086874339649421e16 / 0.81580798252800e14 -0.396009005312111e15 / 0.16618310755200e14 0.348854811893087e15 / 0.249274661328000e15 0.895954627955053e15 / 0.224347195195200e15 -0.184881685054543e15 / 0.166183107552000e15; -0.7577302712815639e16 / 0.1744922629296000e16 0.4414634708891947e16 / 0.448694390390400e15 0.112191585452033e15 / 0.166183107552000e15 -0.396009005312111e15 / 0.16618310755200e14 0.3774861828677557e16 / 0.112173597597600e15 -0.5693689108983593e16 / 0.249274661328000e15 0.803944126167107e15 / 0.99709864531200e14 -0.19547569411550791e17 / 0.15704303663664000e17; 0.138091642084013e15 / 0.59351109840000e14 -0.886174803100459e15 / 0.99709864531200e14 0.7204491902193671e16 / 0.623186653320000e15 0.348854811893087e15 / 0.249274661328000e15 -0.5693689108983593e16 / 0.249274661328000e15 0.73965842628398389e17 / 0.2492746613280000e16 -0.2184472662036043e16 / 0.124637330664000e15 0.46667e5 / 0.10000e5; -0.3775041725375197e16 / 0.4486943903904000e16 0.4333e4 / 0.1000e4 -0.24847093554379e14 / 0.3115933266600e13 0.895954627955053e15 / 0.224347195195200e15 0.803944126167107e15 / 0.99709864531200e14 -0.2184472662036043e16 / 0.124637330664000e15 0.37593640125444199e17 / 0.2243471951952000e16 -0.37e2 / 0.4e1; 0.9907210230881393e16 / 0.61072292025360000e17 -0.13800578064893047e17 / 0.15704303663664000e17 0.943854037768721e15 / 0.545288321655000e15 -0.184881685054543e15 / 0.166183107552000e15 -0.19547569411550791e17 / 0.15704303663664000e17 0.46667e5 / 0.10000e5 -0.37e2 / 0.4e1 0.12766926490502478779e20 / 0.1099301256456480000e19;]; - - M4(1:8,1:8)=M4_U; - - M4(m-7:m,m-7:m)=flipud( fliplr( M4_U ) ); - M4=M4/h^3; - - S3_U=[-0.5e1 / 0.2e1 9 -12 7 -0.3e1 / 0.2e1;]/h^3; - S3_1=zeros(1,m); - S3_1(1:5)=S3_U; - S3_m=zeros(1,m); - S3_m(m-4:m)=fliplr(-S3_U); - - D4=HI*(M4-e_1*S3_1+e_m*S3_m + S_1'*S2_1-S_m'*S2_m); - - S_1 = S_1'; - S_m = S_m'; - S2_1 = S2_1'; - S2_m = S2_m'; - S3_1 = S3_1'; - S3_m = S3_m'; - - % L=h*(m-1); - - % x1=linspace(0,L,m)'; - % x2=x1.^2/fac(2); - % x3=x1.^3/fac(3); - % x4=x1.^4/fac(4); - % x5=x1.^5/fac(5); - - % x0=x1.^0/fac(1); - -end
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/ordinary10.m --- a/+sbp/ordinary10.m Mon Sep 12 11:14:00 2016 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,50 +0,0 @@ -function [H, HI, D1, D2, e_1, e_m, M,Q S_1, S_m] = ordinary10(m,h) - - H_U = [0.5261271563e10 / 0.18289152000e11 0 0 0 0 0 0 0 0 0 0; 0 0.2881040311e10 / 0.1828915200e10 0 0 0 0 0 0 0 0 0; 0 0 0.52175551e8 / 0.406425600e9 0 0 0 0 0 0 0 0; 0 0 0 0.11662993e8 / 0.6096384e7 0 0 0 0 0 0 0; 0 0 0 0 0.50124587e8 / 0.87091200e8 0 0 0 0 0 0; 0 0 0 0 0 0.50124587e8 / 0.72576000e8 0 0 0 0 0; 0 0 0 0 0 0 0.148333439e9 / 0.87091200e8 0 0 0 0; 0 0 0 0 0 0 0 0.63867949e8 / 0.152409600e9 0 0 0; 0 0 0 0 0 0 0 0 0.20608675e8 / 0.16257024e8 0 0; 0 0 0 0 0 0 0 0 0 0.1704508063e10 / 0.1828915200e10 0; 0 0 0 0 0 0 0 0 0 0 0.18425967263e11 / 0.18289152000e11;]; - - H=eye(m); - H(1:11,1:11)=H_U; - H(m-10:m,m-10:m)=flipud( fliplr(H_U(1:11,1:11) ) ); - H=H*h; - HI=inv(H); - - Q=-(-1/1260*diag(ones(m-5,1),5)+5/504*diag(ones(m-4,1),4)-5/84*diag(ones(m-3,1),3)+5/21*diag(ones(m-2,1),2)-5/6*diag(ones(m-1,1),1)+5/6*diag(ones(m-1,1),-1)-5/21*diag(ones(m-2,1),-2)+5/84*diag(ones(m-3,1),-3)-5/504*diag(ones(m-4,1),-4)+1/1260*diag(ones(m-5,1),-5)); - - Q_U = [-0.1e1 / 0.2e1 0.2300876759589119e16 / 0.3395198177280000e16 -0.99808615498093e14 / 0.2263465451520000e16 -0.34957747037683e14 / 0.212199886080000e15 -0.709586095717e12 / 0.13473008640000e14 0.325330433051e12 / 0.6218311680000e13 0.27953548723573e14 / 0.485028311040000e15 0.2690678501e10 / 0.412439040000e12 -0.2397491025029e13 / 0.70733295360000e14 -0.9959492094287e13 / 0.1131732725760000e16 0.5242772857661e13 / 0.522338181120000e15; -0.2300876759589119e16 / 0.3395198177280000e16 0 0.3103439505511e13 / 0.16643128320000e14 0.2700334568377e13 / 0.5052378240000e13 0.50587599589937e14 / 0.242514155520000e15 -0.5570893587157e13 / 0.40419025920000e14 -0.1496329934863e13 / 0.8083805184000e13 -0.322512443237e12 / 0.12482346240000e14 0.2275340833763e13 / 0.23096586240000e14 0.22922115021893e14 / 0.848799544320000e15 -0.143e3 / 0.5000e4; 0.99808615498093e14 / 0.2263465451520000e16 -0.3103439505511e13 / 0.16643128320000e14 0 0.15053664233879e14 / 0.40419025920000e14 -0.9306441440587e13 / 0.32335220736000e14 -0.945459729233e12 / 0.13473008640000e14 0.956829267413e12 / 0.5774146560000e13 0.446866085903e12 / 0.56586636288000e14 -0.41109372242993e14 / 0.754488483840000e15 0.1e1 / 0.500e3 0.17e2 / 0.2500e4; 0.34957747037683e14 / 0.212199886080000e15 -0.2700334568377e13 / 0.5052378240000e13 -0.15053664233879e14 / 0.40419025920000e14 0 0.3899174751943e13 / 0.10104756480000e14 0.4691717443831e13 / 0.10104756480000e14 -0.58571891887e11 / 0.396264960000e12 0.100791910589e12 / 0.1040195520000e13 -0.425149181e9 / 0.29719872000e11 -0.2376515922259e13 / 0.30314269440000e14 0.36894656431e11 / 0.1036385280000e13; 0.709586095717e12 / 0.13473008640000e14 -0.50587599589937e14 / 0.242514155520000e15 0.9306441440587e13 / 0.32335220736000e14 -0.3899174751943e13 / 0.10104756480000e14 0 -0.4552305973e10 / 0.444165120000e12 0.4984940784247e13 / 0.11548293120000e14 -0.19410791e8 / 0.146764800e9 -0.2912773695913e13 / 0.40419025920000e14 0.127067639161e12 / 0.3233522073600e13 -0.89277540287e11 / 0.37309870080000e14; -0.325330433051e12 / 0.6218311680000e13 0.5570893587157e13 / 0.40419025920000e14 0.945459729233e12 / 0.13473008640000e14 -0.4691717443831e13 / 0.10104756480000e14 0.4552305973e10 / 0.444165120000e12 0 0.31722122083e11 / 0.84913920000e11 -0.887187251021e12 / 0.10104756480000e14 -0.1661755478749e13 / 0.26946017280000e14 0.1505713246249e13 / 0.13473008640000e14 -0.38859042469e11 / 0.1036385280000e13; -0.27953548723573e14 / 0.485028311040000e15 0.1496329934863e13 / 0.8083805184000e13 -0.956829267413e12 / 0.5774146560000e13 0.58571891887e11 / 0.396264960000e12 -0.4984940784247e13 / 0.11548293120000e14 -0.31722122083e11 / 0.84913920000e11 0 0.9357094407023e13 / 0.20209512960000e14 0.52602356173249e14 / 0.161676103680000e15 -0.1435252677707e13 / 0.17322439680000e14 -0.33048158431e11 / 0.3109155840000e13; -0.2690678501e10 / 0.412439040000e12 0.322512443237e12 / 0.12482346240000e14 -0.446866085903e12 / 0.56586636288000e14 -0.100791910589e12 / 0.1040195520000e13 0.19410791e8 / 0.146764800e9 0.887187251021e12 / 0.10104756480000e14 -0.9357094407023e13 / 0.20209512960000e14 0 0.70089734285659e14 / 0.141466590720000e15 -0.105938137621e12 / 0.471555302400e12 0.4358988450443e13 / 0.65292272640000e14; 0.2397491025029e13 / 0.70733295360000e14 -0.2275340833763e13 / 0.23096586240000e14 0.41109372242993e14 / 0.754488483840000e15 0.425149181e9 / 0.29719872000e11 0.2912773695913e13 / 0.40419025920000e14 0.1661755478749e13 / 0.26946017280000e14 -0.52602356173249e14 / 0.161676103680000e15 -0.70089734285659e14 / 0.141466590720000e15 0 0.314274398580227e15 / 0.377244241920000e15 -0.97822819709e11 / 0.487710720000e12; 0.9959492094287e13 / 0.1131732725760000e16 -0.22922115021893e14 / 0.848799544320000e15 -0.1e1 / 0.500e3 0.2376515922259e13 / 0.30314269440000e14 -0.127067639161e12 / 0.3233522073600e13 -0.1505713246249e13 / 0.13473008640000e14 0.1435252677707e13 / 0.17322439680000e14 0.105938137621e12 / 0.471555302400e12 -0.314274398580227e15 / 0.377244241920000e15 0 0.7519148725913e13 / 0.9327467520000e13; -0.5242772857661e13 / 0.522338181120000e15 0.143e3 / 0.5000e4 -0.17e2 / 0.2500e4 -0.36894656431e11 / 0.1036385280000e13 0.89277540287e11 / 0.37309870080000e14 0.38859042469e11 / 0.1036385280000e13 0.33048158431e11 / 0.3109155840000e13 -0.4358988450443e13 / 0.65292272640000e14 0.97822819709e11 / 0.487710720000e12 -0.7519148725913e13 / 0.9327467520000e13 0;]; - - Q(1:11,1:11)=Q_U; - Q(m-10:m,m-10:m)=flipud( fliplr(-Q_U ) ); - - D1=HI*Q; - - - s18=-1.000000000000000; s19=0.195000000000000; % alpha 0.0605 - s18= -0.475000000000000; s19=0.110000000000000; % alpha 0.0350 - %s18=0;s19=0; - DS=zeros(m,m); - DS(1,1:9)=[0.49e2 / 0.20e2 - s18 - (7 * s19) -0.6e1 + 0.7e1 * s18 + (48 * s19) 0.15e2 / 0.2e1 - 0.21e2 * s18 - (140 * s19) -0.20e2 / 0.3e1 + 0.35e2 * s18 + (224 * s19) 0.15e2 / 0.4e1 - 0.35e2 * s18 - (210 * s19) -0.6e1 / 0.5e1 + 0.21e2 * s18 + (112 * s19) 0.1e1 / 0.6e1 - 0.7e1 * s18 - (28 * s19) s18 s19;]; - DS(m,m-8:m)=fliplr(DS(1,1:9)); - DS=DS/h; - - M_U = [0.12056593789671863908e1 -0.13378814169347239658e1 0.36847309286546532061e-2 0.15698288365600946515e0 -0.37472461482539197952e-2 -0.62491712449361657064e-2 -0.29164045872729581661e-1 0.54848184117832929161e-3 0.13613461413384884448e-1 -0.25059220258337808220e-2 -0.94113457993630916498e-3; -0.13378814169347239658e1 0.21749807117105597139e1 -0.12369059547124894597e0 -0.83712574037924152603e0 0.50065127254670973258e-1 0.81045853127317536361e-2 0.97405846039248226536e-1 -0.68942461520402214720e-3 -0.41326971493379188475e-1 0.75778529605774119402e-2 0.25800256160095691057e-2; 0.36847309286546532061e-2 -0.12369059547124894597e0 0.18361596652499065332e0 0.48289690013342693109e-1 -0.19719621435164680412e0 0.11406859029505842791e0 -0.29646295985488126964e-1 -0.16038463172861201306e-2 0.32879841528337653050e-2 -0.93242311589807387463e-3 0.12241332668787820533e-3; 0.15698288365600946515e0 -0.83712574037924152603e0 0.48289690013342693109e-1 0.12886524606662484673e1 -0.14403037739488789185e0 -0.44846291607489015475e0 -0.10598334599408054277e0 -0.15873275740355918053e-1 0.73988493386459608166e-1 -0.12508848749152899785e-1 -0.39290233894513005339e-2; -0.37472461482539197952e-2 0.50065127254670973258e-1 -0.19719621435164680412e0 -0.14403037739488789185e0 0.51482665719685186210e0 0.51199577887125103015e-1 -0.36233561810883077365e0 0.91356850268746392169e-1 0.24195916108052419451e-2 -0.18564214413731389338e-2 -0.70192677320704413827e-3; -0.62491712449361657064e-2 0.81045853127317536361e-2 0.11406859029505842791e0 -0.44846291607489015475e0 0.51199577887125103015e-1 0.68636003380365860083e0 -0.28358848290867614908e0 -0.13836006478253396528e0 0.76158070663111995297e-2 0.11447010307180005164e-1 -0.21349696610286552676e-2; -0.29164045872729581661e-1 0.97405846039248226536e-1 -0.29646295985488126964e-1 -0.10598334599408054277e0 -0.36233561810883077365e0 -0.28358848290867614908e0 0.15216081480839085990e1 -0.42653865162216293237e0 -0.42047484981879143123e0 0.19813359263872926304e-1 0.19221397241190103344e-1; 0.54848184117832929161e-3 -0.68942461520402214720e-3 -0.16038463172861201306e-2 -0.15873275740355918053e-1 0.91356850268746392169e-1 -0.13836006478253396528e0 -0.42653865162216293237e0 0.10656733504627815335e1 -0.66921872668484232217e0 0.12022033144141336599e0 -0.30157881394591483631e-1; 0.13613461413384884448e-1 -0.41326971493379188475e-1 0.32879841528337653050e-2 0.73988493386459608166e-1 0.24195916108052419451e-2 0.76158070663111995297e-2 -0.42047484981879143123e0 -0.66921872668484232217e0 0.24064247712949611684e1 -0.15150200315922263367e1 0.17373015320416595052e0; -0.25059220258337808220e-2 0.75778529605774119402e-2 -0.93242311589807387463e-3 -0.12508848749152899785e-1 -0.18564214413731389338e-2 0.11447010307180005164e-1 0.19813359263872926304e-1 0.12022033144141336599e0 -0.15150200315922263367e1 0.27682502485427255096e1 -0.15975407111468405444e1; -0.94113457993630916498e-3 0.25800256160095691057e-2 0.12241332668787820533e-3 -0.39290233894513005339e-2 -0.70192677320704413827e-3 -0.21349696610286552676e-2 0.19221397241190103344e-1 -0.30157881394591483631e-1 0.17373015320416595052e0 -0.15975407111468405444e1 0.29033627686681129471e1;]; - - - M=-(1/3150)*diag(ones(m-5,1),5)+(5/1008)*diag(ones(m-4,1),4)-(5/126)*diag(ones(m-3,1),3)+(5/21)*diag(ones(m-2,1),2)-(5/3)*diag(ones(m-1,1),1)... - -(1/3150)*diag(ones(m-5,1),-5)+(5/1008)*diag(ones(m-4,1),-4)-(5/126)*diag(ones(m-3,1),-3)+(5/21)*diag(ones(m-2,1),-2)-(5/3)*diag(ones(m-1,1),-1)... - +(5269/1800)*diag(ones(m,1),0); - - M(1:11,1:11)=M_U; - M(m-10:m,m-10:m)=flipud( fliplr(M_U(1:11,1:11) ) ); - - D2=HI*(-M/h+DS); - - e_1 = zeros(m,1); - e_1(1)= 1; - e_m = zeros(m,1); - e_m(end)= 1; - S_1 = -DS(1,:)'; - S_m = DS(end,:)'; - - Q = H*D1-(-e_1*e_1' + e_m*e_m'); - M = -(H*D2-(-e_1*S_1' + e_m*S_m')); -end \ No newline at end of file
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/ordinary2.m --- a/+sbp/ordinary2.m Mon Sep 12 11:14:00 2016 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,31 +0,0 @@ -function [H, HI, D1, D2, e_1, e_m, M,Q S_1, S_m] = ordinary2(m,h) - e_1=zeros(m,1);e_1(1)=1; - e_m=zeros(m,1);e_m(m)=1; - - H=(eye(m,m));H(1,1)=0.5;H(m,m)=0.5; - H=h*H; - HI=inv(H); - - D1=((.5*diag(ones(m-1,1),1)-.5*diag(ones(m-1,1),-1))); - D1(1,1)=-1;D1(1,2)=1;D1(m,m-1)=-1;D1(m,m)=1; - D1(m,m-1)=-1;D1(m,m)=1; - D1=D1/h; - - Q=H*D1 + 1/2*e_1*e_1' - 1/2*e_m*e_m'; - - D2=((diag(ones(m-1,1),1)+diag(ones(m-1,1),-1)-2*diag(ones(m,1),0))); - D2(1,1)=1;D2(1,2)=-2;D2(1,3)=1; - D2(m,m-2)=1;D2(m,m-1)=-2;D2(m,m)=1; - D2=D2/h^2; - - S_U=[-3/2, 2, -1/2]/h; - S_1=zeros(1,m); - S_1(1:3)=S_U; - S_m=zeros(1,m); - S_m(m-2:m)=fliplr(-S_U); - - - M=-H*D2-e_1*S_1+e_m*S_m; - S_1 = S_1'; - S_m = S_m'; -end \ No newline at end of file
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/ordinary4.m --- a/+sbp/ordinary4.m Mon Sep 12 11:14:00 2016 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,43 +0,0 @@ -function [H, HI, D1, D2, e_1, e_m, M,Q S_1, S_m] = ordinary4(m,h) - e_1=zeros(m,1);e_1(1)=1; - e_m=zeros(m,1);e_m(m)=1; - - e=ones(m,1); - H=spdiags(e,0,m,m); - %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)=rot90(diag([17/48 59/48 43/48 49/48]),2); - H=H*h; - HI=inv(H); - - - Q=spdiags([e -8*e 0*e 8*e -e], -2:2, m, m)/12; - %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)=rot90( -Q_U(1:4,1:4) ,2 ); - - D1=HI*(Q-1/2*e_1*e_1'+1/2*e_m*e_m') ; - - M=-spdiags([-e 16*e -30*e 16*e -e], -2:2, m, m)/12; - - %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)); - - 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;]; - M(1:4,1:4)=M_U; - - M(m-3:m,m-3:m)=rot90( M_U ,2 ); - M=M/h; - - S_U=[-0.11e2 / 0.6e1 3 -0.3e1 / 0.2e1 0.1e1 / 0.3e1;]/h; - S_1=sparse(zeros(1,m)); - S_1(1:4)=S_U; - S_m=sparse(zeros(1,m)); - S_m(m-3:m)=fliplr(-S_U); - - - D2=HI*(-M-e_1*S_1+e_m*S_m); - S_1 = S_1'; - S_m = S_m'; -end \ No newline at end of file
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/ordinary6.m --- a/+sbp/ordinary6.m Mon Sep 12 11:14:00 2016 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,53 +0,0 @@ -function [H, HI, D1, D2, e_1, e_m, M,Q S_1, S_m] = ordinary6(m,h) - e_1=zeros(m,1);e_1(1)=1; - e_m=zeros(m,1);e_m(m)=1; - - H=diag(ones(m,1),0); - H(1:6,1:6)=diag([13649/43200,12013/8640,2711/4320,5359/4320,7877/8640, ... - 43801/43200]); - H(m-5:m,m-5:m)=rot90(diag([13649/43200,12013/8640, ... - 2711/4320,5359/4320,7877/8640,43801/43200]),2); - - H=H*h; - HI=inv(H); - - - % D1 har en fri parameter x1. - % Ett optimerat varde ger x1=0.70127127127127 = 331/472 - x1=0.70127127127127; - - - - 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)); - - - - D1(1:6,1:9)=[-21600/13649, 43200/13649*x1-7624/40947, -172800/13649*x1+ ... - 715489/81894, 259200/13649*x1-187917/13649, -172800/13649* ... - x1+735635/81894, 43200/13649*x1-89387/40947, 0, 0, 0; ... - -8640/12013*x1+7624/180195, 0, 86400/12013*x1-57139/12013, ... - -172800/12013*x1+745733/72078, 129600/12013*x1-91715/12013, ... - -34560/12013*x1+240569/120130, 0, 0, 0; 17280/2711*x1-715489/162660, -43200/2711*x1+57139/5422, 0, 86400/2711*x1-176839/8133, -86400/2711*x1+242111/10844, 25920/2711*x1-182261/27110, 0, 0, 0; -25920/5359*x1+187917/53590, 86400/5359*x1-745733/64308, -86400/5359*x1+176839/16077, 0, 43200/5359*x1-165041/32154, -17280/5359*x1+710473/321540, 72/5359, 0, 0; 34560/7877*x1-147127/47262, -129600/7877*x1+91715/7877, 172800/7877*x1-242111/15754, -86400/7877*x1+165041/23631, 0, 8640/7877*x1, -1296/7877, 144/7877, 0; -43200/43801*x1+89387/131403, 172800/43801*x1-240569/87602, -259200/43801*x1+182261/43801, 172800/43801*x1-710473/262806, -43200/43801*x1, 0, 32400/43801, -6480/43801, 720/43801]; - D1(m-5:m,m-8:m)=rot90( -D1(1:6,1:9),2); - D1=D1/h; - - Q=H*D1 + 1/2*e_1*e_1' - 1/2*e_m*e_m'; - - D2=(2*diag(ones(m-3,1),3)-27*diag(ones(m-2,1),2)+270*diag(ones(m-1,1),1)+270*diag(ones(m-1,1),-1)-27*diag(ones(m-2,1),-2)+2*diag(ones(m-3,1),-3)-490*diag(ones(m,1),0))/180; - - D2(1:6,1:9)=[114170/40947, -438107/54596, 336409/40947, -276997/81894, 3747/13649, 21035/163788, 0, 0, 0;6173/5860, -2066/879, 3283/1758, -303/293, 2111/3516, -601/4395, 0, 0, 0;-52391/81330, 134603/32532, -21982/2711, 112915/16266, -46969/16266, 30409/54220, 0, 0, 0;68603/321540, -12423/10718, 112915/32154, -75934/16077, 53369/21436, -54899/160770, 48/5359, 0, 0;-7053/39385, 86551/94524, -46969/23631, 53369/15754, -87904/23631, 820271/472620, -1296/7877, 96/7877, 0;21035/525612, -24641/131403, 30409/87602, -54899/131403, 820271/525612, -117600/43801, 64800/43801, -6480/43801, 480/43801]; - D2(m-5:m,m-8:m)=rot90( D2(1:6,1:9) ,2 ); - - D2=D2/h^2; - - S_U=[-25/12, 4, -3, 4/3, -1/4]/h; - S_1=zeros(1,m); - S_1(1:5)=S_U; - S_m=zeros(1,m); - S_m(m-4:m)=fliplr(-S_U); - - - M=-H*D2-e_1*S_1+e_m*S_m; - S_1 = S_1'; - S_m = S_m'; -end \ No newline at end of file
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/ordinary8.m --- a/+sbp/ordinary8.m Mon Sep 12 11:14:00 2016 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,109 +0,0 @@ -function [H, HI, D1, D2, e_1, e_m, M, Q, S_1, S_m] = ordinary8(m,h) - 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]))); - - D1=-(1/280*diag(ones(m-4,1),4)-4/105*diag(ones(m-3,1),3)+1/5*diag(ones(m-2,1),2)-4/5*diag(ones(m-1,1),1)+4/5*diag(ones(m-1,1),-1)-1/5*diag(ones(m-2,1),-2)+4/105*diag(ones(m-3,1),-3)-1/280*diag(ones(m-4,1),-4)); - - - - - %r68 = -1022551/30481920; - %r78 = 6445687/8709120; - %r67 = 1714837/4354560; - - %r67=0.58; - %r68=-0.08; - %r78=0.75; - - %r67=0.65; - %r68=-0.1; - %r78=0.75; - - %r67=0.9250; - %r68=-0.2; - %r78=0.775; - - %r67=0.65; - %r68=-0.105; - %r78=0.755; - - %%r67=0.649; - %%r68=-0.104; - %%r78=0.755; - - %r67=-0.48; - %r68=0.3; - %r78=0.67; - - %r67=0.5600; - %r68=-0.0733; - %r78=0.7500;/scr0/home/ken/VERY_FINE - - % min med 1/10 f?r D6 - %r67=0.62; - %r68=-0.1040; - %r78=0.7640; - - % Den nya optimerade, for att fungera i NS-dissipation - - r67=0.69789473684211; - r68=-0.12052631578947; - r78=0.75868421052632; - - - D1(1:8,1:12)=[-2540160/1498139, -142642467/5992556+50803200/1498139*r78+5080320/1498139*r67+25401600/1498139*r68, 705710031/5992556-228614400/1498139*r78-25401600/1498139*r67-121927680/1498139*r68, -3577778591/17977668+381024000/1498139*r78+50803200/1498139*r67+228614400/1498139*r68, 203718909/1498139-254016000/1498139*r78-50803200/1498139*r67-203212800/1498139*r68, -32111205/5992556+25401600/1498139*r67+76204800/1498139*r68, -652789417/17977668+76204800/1498139*r78-5080320/1498139*r67, 74517981/5992556-25401600/1498139*r78-5080320/1498139*r68, 0, 0, 0, 0;142642467/31004596-7257600/1107307*r78-725760/1107307*r67-3628800/1107307*r68, 0, -141502371/2214614+91445760/1107307*r78+10886400/1107307*r67+50803200/1107307*r68, 159673719/1107307-203212800/1107307*r78-29030400/1107307*r67-127008000/1107307*r68, -1477714693/13287684+152409600/1107307*r78+32659200/1107307*r67+127008000/1107307*r68, 11652351/2214614-17418240/1107307*r67-50803200/1107307*r68, 36069450/1107307-50803200/1107307*r78+3628800/1107307*r67, -536324953/46506894+17418240/1107307*r78+3628800/1107307*r68, 0, 0, 0, 0;-18095129/134148+3628800/20761*r78+403200/20761*r67+1935360/20761*r68, 47167457/124566-10160640/20761*r78-1209600/20761*r67-5644800/20761*r68, 0, -120219461/124566+25401600/20761*r78+4032000/20761*r67+16934400/20761*r68, 249289259/249132-25401600/20761*r78-6048000/20761*r67-22579200/20761*r68, -2611503/41522+3628800/20761*r67+10160640/20761*r68, -7149666/20761+10160640/20761*r78-806400/20761*r67, 37199165/290654-3628800/20761*r78-806400/20761*r68, 0, 0, 0, 0;3577778591/109619916-54432000/1304999*r78-7257600/1304999*r67-32659200/1304999*r68, -159673719/1304999+203212800/1304999*r78+29030400/1304999*r67+127008000/1304999*r68, 360658383/2609998-228614400/1304999*r78-36288000/1304999*r67-152409600/1304999*r68, 0, -424854441/5219996+127008000/1304999*r78+36288000/1304999*r67+127008000/1304999*r68, 22885113/2609998-29030400/1304999*r67-76204800/1304999*r68, 158096578/3914997-76204800/1304999*r78+7257600/1304999*r67, -296462325/18269986+29030400/1304999*r78+7257600/1304999*r68, 0, 0, 0, 0;-203718909/2096689+36288000/299527*r78+7257600/299527*r67+29030400/299527*r68, 1477714693/3594324-152409600/299527*r78-32659200/299527*r67-127008000/299527*r68, -747867777/1198108+228614400/299527*r78+54432000/299527*r67+203212800/299527*r68, 424854441/1198108-127008000/299527*r78-36288000/299527*r67-127008000/299527*r68, 0, -17380335/1198108+10886400/299527*r67+25401600/299527*r68, -67080435/1198108+25401600/299527*r78-3628800/299527*r67, 657798011/25160268-10886400/299527*r78-3628800/299527*r68, -2592/299527, 0, 0, 0;1529105/1237164-403200/103097*r67-1209600/103097*r68, -3884117/618582+1935360/103097*r67+5644800/103097*r68, 2611503/206194-3628800/103097*r67-10160640/103097*r68, -7628371/618582+3225600/103097*r67+8467200/103097*r68, 5793445/1237164-1209600/103097*r67-2822400/103097*r68, 0, 80640/103097*r67, 80640/103097*r68, 3072/103097, -288/103097, 0, 0;93255631/8041092-10886400/670091*r78+725760/670091*r67, -36069450/670091+50803200/670091*r78-3628800/670091*r67, 64346994/670091-91445760/670091*r78+7257600/670091*r67, -158096578/2010273+76204800/670091*r78-7257600/670091*r67, 67080435/2680364-25401600/670091*r78+3628800/670091*r67, -725760/670091*r67, 0, 725760/670091*r78, -145152/670091, 27648/670091, -2592/670091, 0;-3921999/1079524+25401600/5127739*r78+5080320/5127739*r68, 536324953/30766434-121927680/5127739*r78-25401600/5127739*r68, -334792485/10255478+228614400/5127739*r78+50803200/5127739*r68, 296462325/10255478-203212800/5127739*r78-50803200/5127739*r68, -657798011/61532868+76204800/5127739*r78+25401600/5127739*r68, -5080320/5127739*r68, -5080320/5127739*r78, 0, 4064256/5127739, -1016064/5127739, 193536/5127739, -18144/5127739]; - - - D1(m-7:m,m-11:m)=flipud( fliplr(-D1(1:8,1:12))); - - - D1=D1/h; - - %DD=-(1/280*diag(ones(m-4,1),4)-4/105*diag(ones(m-3,1),3)+1/5*diag(ones(m-2,1),2)-4/5*diag(ones(m-1,1),1)+4/5*diag(ones(m-1,1),-1)-1/5*diag(ones(m-2,1),-2)+4/105*diag(ones(m-3,1),-3)-1/280*diag(ones(m-4,1),-4)); - %DD(1:4,1:9)=1/280*[-761,2240,-3920,15680/3,-4900,3136,-3920/3,320,-35, - % -35,-446,980,-980,2450/3,-490,196,-140/3,5, - % 5,-80,-266,560,-350,560/3,-70,16,-5/3, - % -5/3,20,-140,-126,350,-140,140/3,-10,1]; - D(m-7:m,m-11:m)=flipud( fliplr(-D1(1:8,1:12))); - - D2=(-1/560*diag(ones(m-4,1),4)+8/315*diag(ones(m-3,1),3)-1/5*diag(ones(m-2,1),2)+8/5*diag(ones(m-1,1),1)+8/5*diag(ones(m-1,1),-1)-1/5*diag(ones(m-2,1),-2)+8/315*diag(ones(m-3,1),-3)-1/560*diag(ones(m-4,1),-4)-205/72*diag(ones(m,1),0)); - - D2(1:8,1:12)=[4870382994799/1358976868290, -893640087518/75498714905,926594825119/60398971924, -1315109406200/135897686829,39126983272/15099742981, 12344491342/75498714905, -451560522577/2717953736580, 0, 0, 0, 0, 0;333806012194/390619153855, -154646272029/111605472530, 1168338040/33481641759, 82699112501/133926567036, -171562838/11160547253, -28244698346/167408208795, 11904122576/167408208795, -2598164715/312495323084, 0, 0, 0, 0;7838984095/52731029988, 1168338040/5649753213, -88747895/144865467, 423587231/627750357, -43205598281/22599012852, 4876378562/1883251071, -5124426509/3766502142, 10496900965/39548272491, 0, 0, 0, 0;-94978241528/828644350023, 82699112501/157837019052, 1270761693/13153084921, -167389605005/118377764289, 48242560214/39459254763, -31673996013/52612339684, 43556319241/118377764289, -44430275135/552429566682, 0, 0, 0, 0;1455067816/21132528431, -171562838/3018932633, -43205598281/36227191596, 48242560214/9056797899, -52276055645/6037865266, 57521587238/9056797899, -80321706377/36227191596, 8078087158/21132528431, -1296/299527, 0, 0, 0;10881504334/327321118845, -28244698346/140280479505, 4876378562/9352031967, -10557998671/12469375956, 57521587238/28056095901, -278531401019/93520319670, 73790130002/46760159835, -137529995233/785570685228, 2048/103097, -144/103097, 0, 0;-135555328849/8509847458140, 11904122576/101307707835, -5124426509/13507694378, 43556319241/60784624701, -80321706377/81046166268, 73790130002/33769235945, -950494905688/303923123505, 239073018673/141830790969, -145152/670091, 18432/670091, -1296/670091, 0;0, -2598164715/206729925524, 10496900965/155047444143, -44430275135/310094888286, 425162482/2720130599, -137529995233/620189776572, 239073018673/155047444143, -144648000000/51682481381, 8128512/5127739, -1016064/5127739, 129024/5127739, -9072/5127739]; - - - - - D2(m-7:m,m-11:m)=flipud( fliplr(D2(1:8,1:12) ) ); - - D2=D2/h^2; - - DS=zeros(m,m); - DS(1,1:7)=-[-4723/2100, 839/175, -157/35, 278/105, -103/140, -1/175, 6/175]; - - DS(m,m-6:m)=fliplr(-[-4723/2100, 839/175, -157/35, 278/105, -103/140, -1/175, 6/175]); - DS=DS/h; - - H=h*H; - HI=inv(H); - - %r1=D1*u-u_x;sqrt(r1'*r1)/m - %r2=D2*u-u_xx;sqrt(r2'*r2)/m - - %te=eig(D1); - %tm=max(abs(te)); - %plot(real(te),imag(te),'*'); - %grid; - %xlabel('Real part'); - %ylabel('Imaginary part'); - %title('Spectrum, minimal spectral radius'); - e_1 = zeros(m,1); - e_1(1)= 1; - e_m = zeros(m,1); - e_m(end)= 1; - S_1 = -DS(1,:)'; - S_m = DS(end,:)'; - - Q = H*D1-(-e_1*e_1' + e_m*e_m'); - M = -(H*D2-(-e_1*S_1' + e_m*S_m')); -end \ No newline at end of file
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/upwind2.m --- a/+sbp/upwind2.m Mon Sep 12 11:14:00 2016 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,34 +0,0 @@ -function [H, HI, Dp, Dm, e_1, e_m] = upwind2(m,h) - Hv=ones(m,1); - Hv(1:2)=[0.1e1/0.4e1; 0.5e1/0.4e1;]; - Hv(m-1:m)=rot90(Hv(1:2),2); - Hv = Hv*h; - H = spdiag(Hv,0); - HI = spdiag(1./Hv,0); - - q_diags = [0 1 2]; - q_stencil = [-3/2 +2 -1/2]; - Qp = stripeMatrix(q_stencil, q_diags,m); - - Q_U = [ - -0.1e1/0.4e1 0.5e1/0.4e1; - -0.1e1/0.4e1 -0.5e1/0.4e1; - ]; - - Qp(1:2,1:2)=Q_U; - Qp(m-1:m,m-1:m)=rot90(Q_U,2)'; %%% This is different from standard SBP - - Qm=-Qp'; - - e_1=zeros(m,1);e_1(1)=1; - e_m=zeros(m,1);e_m(m)=1; - - Dp=HI*(Qp-1/2*e_1*e_1'+1/2*e_m*e_m') ; - - Dm=HI*(Qm-1/2*e_1*e_1'+1/2*e_m*e_m') ; -end - - - -% KOLLA NAMN PÅ ALLA FUNKTIONER -% TESTA ALLA FUNKTIONER \ No newline at end of file
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/upwind3.m --- a/+sbp/upwind3.m Mon Sep 12 11:14:00 2016 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,32 +0,0 @@ -function [H, HI, Dp, Dm, e_1, e_m] = upwind3(m,h) - Hv = ones(m,1); - Hv(1:3) = [3/8; 7/6; 23/24]; - Hv(m-2:m) = rot90(Hv(1:3),2); - Hv = Hv*h; - H = spdiag(Hv,0); - HI = spdiag(1./Hv,0); - - 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'; - - e_1=sparse(m,1); - e_1(1)=1; - e_m=sparse(m,1); - e_m(m)=1; - - Dp=HI*(Qp-1/2*e_1*e_1'+1/2*e_m*e_m') ; - - Dm=HI*(Qm-1/2*e_1*e_1'+1/2*e_m*e_m') ; -end -
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/upwind4.m --- a/+sbp/upwind4.m Mon Sep 12 11:14:00 2016 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,32 +0,0 @@ -function [H, HI, Dp, Dm, e_1, e_m] = upwind4(m,h) - - Hv=ones(m,1); - Hv(1:4)=[49/144 61/48 41/48 149/144]; - Hv(m-3:m)=rot90(Hv(1:4),2); - Hv = Hv*h; - H = spdiag(Hv,0); - HI = spdiag(1./Hv,0); - - q_diags = [-1, 0, 1, 2 3]; - q_stencil = [-1/4 -5/6 3/2 -1/2 1/12]; - Qp = stripeMatrix(q_stencil, q_diags,m); - - Q_U = [ - -0.1e1/0.48e2 0.205e3/0.288e3 -0.29e2/0.144e3 0.1e1/0.96e2; - -0.169e3/0.288e3 -0.11e2/0.48e2 0.33e2/0.32e2 -0.43e2/0.144e3; - 0.11e2/0.144e3 -0.13e2/0.32e2 -0.29e2/0.48e2 0.389e3/0.288e3; - 0.1e1/0.32e2 -0.11e2/0.144e3 -0.65e2/0.288e3 -0.13e2/0.16e2; - ]; - - Qp(1:4,1:4)=Q_U; - Qp(m-3:m,m-3:m)=rot90(Q_U,2)'; %%% This is different from standard SBP - - Qm=-Qp'; - - e_1=sparse(m,1);e_1(1)=1; - e_m=sparse(m,1);e_m(m)=1; - - Dp=HI*(Qp-1/2*e_1*e_1'+1/2*e_m*e_m') ; - - Dm=HI*(Qm-1/2*e_1*e_1'+1/2*e_m*e_m') ; -end
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/upwind5.m --- a/+sbp/upwind5.m Mon Sep 12 11:14:00 2016 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,31 +0,0 @@ -function [H, HI, Dp, Dm, e_1, e_m] = upwind5(m,h) - Hv=ones(m,1); - Hv(1:4)=[0.251e3/0.720e3; 0.299e3/0.240e3; 0.211e3/0.240e3; 0.739e3/0.720e3;]; - Hv(m-3:m)=rot90(Hv(1:4),2); - Hv = Hv*h; - H = spdiag(Hv,0); - HI = spdiag(1./Hv,0); - - q_diags = [-2 -1 0 1 2 3]; - q_stencil = [1/20 -1/2 -1/3 +1 -1/4 +1/30]; - Qp = stripeMatrix(q_stencil, q_diags,m); - - Q_U = [ - -0.1e1/0.120e3 0.941e3/0.1440e4 -0.47e2/0.360e3 -0.7e1/0.480e3; - -0.869e3/0.1440e4 -0.11e2/0.120e3 0.25e2/0.32e2 -0.43e2/0.360e3; - 0.29e2/0.360e3 -0.17e2/0.32e2 -0.29e2/0.120e3 0.1309e4/0.1440e4; - 0.1e1/0.32e2 -0.11e2/0.360e3 -0.661e3/0.1440e4 -0.13e2/0.40e2; - ]; - - Qp(1:4,1:4)=Q_U; - Qp(m-3:m,m-3:m)=flipud( fliplr(Q_U(1:4,1:4) ) )'; %%% This is different from standard SBP - - Qm=-Qp'; - - e_1=zeros(m,1);e_1(1)=1; - e_m=zeros(m,1);e_m(m)=1; - - Dp=HI*(Qp-1/2*e_1*e_1'+1/2*e_m*e_m') ; - - Dm=HI*(Qm-1/2*e_1*e_1'+1/2*e_m*e_m') ; -end
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/upwind6.m --- a/+sbp/upwind6.m Mon Sep 12 11:14:00 2016 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,34 +0,0 @@ -function [H, HI, Dp, Dm, e_1, e_m] = upwind6(m,h) - Hv = ones(m,1); - Hv(1:6)=[0.13613e5/0.43200e5; 0.12049e5/0.8640e4 ; 0.535e3/0.864e3 ; 0.1079e4/0.864e3 ; 0.7841e4/0.8640e4 ; 0.43837e5/0.43200e5]; - Hv(m-5:m)=rot90(Hv(1:6),2); - Hv = Hv*h; - H = spdiag(Hv,0); - HI = spdiag(1./Hv,0); - - q_diags = [-2 -1 0 1 2 3 4]; - q_stencil = [1/30 -2/5 -7/12 4/3 -1/2 2/15 -1/60]; - Qp = stripeMatrix(q_stencil, q_diags,m); - - Q_U =[ - -0.265e3/0.128688e6 0.1146190567e10/0.1737288000e10 -0.1596619e7/0.18384000e8 -0.55265831e8/0.579096000e9 0.26269819e8/0.3474576000e10 0.2464501e7/0.144774000e9; - -0.1116490567e10/0.1737288000e10 -0.8839e4/0.214480e6 0.190538869e9/0.347457600e9 0.102705469e9/0.694915200e9 0.413741e6/0.9651600e7 -0.191689861e9/0.3474576000e10; - 0.1096619e7/0.18384000e8 -0.135385429e9/0.347457600e9 -0.61067e5/0.321720e6 0.45137333e8/0.57909600e8 -0.253641811e9/0.694915200e9 0.70665929e8/0.579096000e9; - 0.66965831e8/0.579096000e9 -0.208765789e9/0.694915200e9 -0.17623253e8/0.57909600e8 -0.18269e5/0.45960e5 0.410905829e9/0.347457600e9 -0.477953317e9/0.1158192000e10; - -0.49219819e8/0.3474576000e10 0.293299e6/0.9651600e7 0.26422771e8/0.694915200e9 -0.141938309e9/0.347457600e9 -0.346583e6/0.643440e6 0.2217185207e10/0.1737288000e10; - -0.2374501e7/0.144774000e9 0.142906261e9/0.3474576000e10 -0.3137129e7/0.579096000e9 -0.29884283e8/0.1158192000e10 -0.630168407e9/0.1737288000e10 -0.3559e4/0.6128e4; - ]; - - Qp(1:6,1:6)=Q_U; - Qp(m-5:m,m-5:m)=rot90(Q_U,2)'; %%% This is different from standard SBP - - Qm=-Qp'; - - e_1=sparse(m,1);e_1(1)=1; - e_m=sparse(m,1);e_m(m)=1; - - Dp=HI*(Qp-1/2*e_1*e_1'+1/2*e_m*e_m') ; - - Dm=HI*(Qm-1/2*e_1*e_1'+1/2*e_m*e_m') ; - -end
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/upwind7.m --- a/+sbp/upwind7.m Mon Sep 12 11:14:00 2016 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,35 +0,0 @@ -function [H, HI, Dp, Dm, e_1, e_m] = upwind7(m,h) - - Hv=ones(m,1); - Hv(1:6) = [0.19087e5/0.60480e5; 0.84199e5/0.60480e5; 0.18869e5/0.30240e5; 0.37621e5/0.30240e5; 0.55031e5/0.60480e5; 0.61343e5/0.60480e5; ]; - Hv(m-5:m)=rot90(Hv(1:6),2); - Hv = Hv*h; - H = spdiag(Hv,0); - HI = spdiag(1./Hv,0); - - q_diags = [-3 -2 -1 0 1 2 3 4]; - q_stencil = [-1/105 +1/10 -3/5 -1/4 +1 -3/10 +1/15 -1/140]; - Qp = stripeMatrix(q_stencil, q_diags,m); - - Q_U =[ - -0.265e3/0.300272e6 0.1587945773e10/0.2432203200e10 -0.1926361e7/0.25737600e8 -0.84398989e8/0.810734400e9 0.48781961e8/0.4864406400e10 0.3429119e7/0.202683600e9; - -0.1570125773e10/0.2432203200e10 -0.26517e5/0.1501360e7 0.240029831e9/0.486440640e9 0.202934303e9/0.972881280e9 0.118207e6/0.13512240e8 -0.231357719e9/0.4864406400e10; - 0.1626361e7/0.25737600e8 -0.206937767e9/0.486440640e9 -0.61067e5/0.750680e6 0.49602727e8/0.81073440e8 -0.43783933e8/0.194576256e9 0.51815011e8/0.810734400e9; - 0.91418989e8/0.810734400e9 -0.53314099e8/0.194576256e9 -0.33094279e8/0.81073440e8 -0.18269e5/0.107240e6 0.440626231e9/0.486440640e9 -0.365711063e9/0.1621468800e10; - -0.62551961e8/0.4864406400e10 0.799e3/0.35280e5 0.82588241e8/0.972881280e9 -0.279245719e9/0.486440640e9 -0.346583e6/0.1501360e7 0.2312302333e10/0.2432203200e10; - -0.3375119e7/0.202683600e9 0.202087559e9/0.4864406400e10 -0.11297731e8/0.810734400e9 0.61008503e8/0.1621468800e10 -0.1360092253e10/0.2432203200e10 -0.10677e5/0.42896e5; - ]; - - - Qp(1:6,1:6)=Q_U; - Qp(m-5:m,m-5:m)=rot90(Q_U,2)'; - - Qm=-Qp'; - - e_1=zeros(m,1);e_1(1)=1; - e_m=zeros(m,1);e_m(m)=1; - - Dp=HI*(Qp-1/2*e_1*e_1'+1/2*e_m*e_m') ; - - Dm=HI*(Qm-1/2*e_1*e_1'+1/2*e_m*e_m') ; -end
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/upwind8.m --- a/+sbp/upwind8.m Mon Sep 12 11:14:00 2016 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,37 +0,0 @@ -function [H, HI, Dp, Dm, e_1, e_m] = upwind8(m,h) - Hv=ones(m,1); - Hv(1:8) = [0.7489399e7/0.25401600e8; 0.5537831e7/0.3628800e7; 0.103373e6/0.403200e6; 0.261259e6/0.145152e6; 0.298231e6/0.725760e6; 0.515917e6/0.403200e6; 0.3349159e7/0.3628800e7; 0.25639991e8/0.25401600e8]; - Hv(m-7:m)=rot90(Hv(1:8),2); - Hv=Hv*h; - - H = spdiag(Hv,0); - HI = spdiag(1./Hv,0); - - q_diags = [-3 -2 -1 0 1 2 3 4 5]; - q_stencil = [-1/168 +1/14 -1/2 -9/20 +5/4 -1/2 +1/6 -1/28 +1/280]; - Qp = stripeMatrix(q_stencil, q_diags,m); - - - Q_U =[ - -0.16683e5/0.63018560e8 0.29345822969987e14/0.43354248537600e14 -0.2734625426591e13/0.40644608004000e14 -0.113480208109603e15/0.780376473676800e15 -0.830250230261e12/0.26012549122560e14 0.2500519492033e13/0.32515686403200e14 0.2235718279643e13/0.390188236838400e15 -0.388481888477e12/0.26543417472000e14; - -0.29227665839987e14/0.43354248537600e14 -0.493793e6/0.63018560e8 0.8302717120817e13/0.26543417472000e14 0.3739408501537e13/0.9290196115200e13 0.2684481534461e13/0.13935294172800e14 -0.4450185662513e13/0.18580392230400e14 -0.1221838279381e13/0.37160784460800e14 0.90595000956023e14/0.1950941184192000e16; - 0.2505689537591e13/0.40644608004000e14 -0.7312922392817e13/0.26543417472000e14 -0.69332623e8/0.1323389760e10 0.10994933811709e14/0.18580392230400e14 -0.9270952411151e13/0.18580392230400e14 0.3191238635141e13/0.20644880256000e14 0.4442211176987e13/0.92901961152000e14 -0.940661365031e12/0.32515686403200e14; - 0.118016946570403e15/0.780376473676800e15 -0.4173878828737e13/0.9290196115200e13 -0.7990503962509e13/0.18580392230400e14 -0.207799621e9/0.1323389760e10 0.2044021560341e13/0.2477385630720e13 0.511197701761e12/0.18580392230400e14 0.1237681717213e13/0.13935294172800e14 -0.7784834666617e13/0.130062745612800e15; - 0.68609076271e11/0.2364777192960e13 -0.2235651762161e13/0.13935294172800e14 0.6527681584751e13/0.18580392230400e14 -0.1115980068821e13/0.2477385630720e13 -0.55386253e8/0.189055680e9 0.3208334350649e13/0.3716078446080e13 -0.407569013461e12/0.844563283200e12 0.136474842626653e15/0.780376473676800e15; - -0.2487637785013e13/0.32515686403200e14 0.4244231077313e13/0.18580392230400e14 -0.1550378843141e13/0.20644880256000e14 -0.5726967564961e13/0.18580392230400e14 -0.1017898941929e13/0.3716078446080e13 -0.526653889e9/0.1323389760e10 0.45241297077547e14/0.37160784460800e14 -0.2279608411897e13/0.5080576000500e13; - -0.2164019088443e13/0.390188236838400e15 0.1263196075861e13/0.37160784460800e14 -0.6600697610987e13/0.92901961152000e14 0.556610591687e12/0.13935294172800e14 0.926842346471e12/0.9290196115200e13 -0.18757693936747e14/0.37160784460800e14 -0.584765899e9/0.1323389760e10 0.204646287449e12/0.168431424000e12; - 0.387091928477e12/0.26543417472000e14 -0.90231551688023e14/0.1950941184192000e16 0.1032404418251e13/0.32515686403200e14 0.3502353445417e13/0.130062745612800e15 -0.15385068876253e14/0.780376473676800e15 0.262499068919e12/0.10161152001000e14 -0.867004691939e12/0.1852745664000e13 -0.85017967e8/0.189055680e9; - ]; - - Qp(1:8,1:8)=Q_U; - Qp(m-7:m,m-7:m)=rot90(Q_U,2)'; %%% This is different from standard SBP - - Qm=-Qp'; - - e_1=sparse(m,1);e_1(1)=1; - e_m=sparse(m,1);e_m(m)=1; - - Dp=HI*(Qp-1/2*e_1*e_1'+1/2*e_m*e_m') ; - - Dm=HI*(Qm-1/2*e_1*e_1'+1/2*e_m*e_m') ; -end
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/upwind9.m --- a/+sbp/upwind9.m Mon Sep 12 11:14:00 2016 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,38 +0,0 @@ -function [H, HI, Dp, Dm, e_1, e_m] = upwind9(m,h) - - Hv=ones(m,1); - Hv(1:8) = [0.1070017e7/0.3628800e7; 0.5537111e7/0.3628800e7; 0.103613e6/0.403200e6; 0.261115e6/0.145152e6; 0.298951e6/0.725760e6; 0.515677e6/0.403200e6; 0.3349879e7/0.3628800e7; 0.3662753e7/0.3628800e7;]; - Hv(m-7:m)=rot90(Hv(1:8),2); - Hv=Hv*h; - - H = spdiag(Hv,0); - HI = spdiag(1./Hv,0); - - q_diags = [-4 -3 -2 -1 0 1 2 3 4 5]; - q_stencil = [1/504 -1/42 +1/7 -2/3 -1/5 +1 -1/3 +2/21 -1/56 +1/630]; - Qp = stripeMatrix(q_stencil, q_diags,m); - - Q_U =[ - -0.5561e4/0.47263920e8 0.4186300102421e13/0.6193464076800e13 -0.377895002003e12/0.5806372572000e13 -0.16485548951749e14/0.111482353382400e15 -0.113245973003e12/0.3716078446080e13 0.355360297339e12/0.4645098057600e13 0.321012170669e12/0.55741176691200e14 -0.388397049437e12/0.26543417472000e14; - -0.4178798062421e13/0.6193464076800e13 -0.493793e6/0.141791760e9 0.725405227507e12/0.2413037952000e13 0.3904159533697e13/0.9290196115200e13 0.2483046570341e13/0.13935294172800e14 -0.4336328670953e13/0.18580392230400e14 -0.1258688487061e13/0.37160784460800e14 0.12931584852209e14/0.278705883456000e15; - 0.363359390003e12/0.5806372572000e13 -0.7539548734577e13/0.26543417472000e14 -0.69332623e8/0.2977626960e10 0.9994352248429e13/0.18580392230400e14 -0.8195655811631e13/0.18580392230400e14 0.7361486640463e13/0.61934640768000e14 0.5539855071347e13/0.92901961152000e14 -0.12898722943e11/0.422281641600e12; - 0.16773595838149e14/0.111482353382400e15 -0.372477950627e12/0.844563283200e12 -0.8659050093229e13/0.18580392230400e14 -0.207799621e9/0.2977626960e10 0.1734921317461e13/0.2477385630720e13 0.2530020015841e13/0.18580392230400e14 0.441856623253e12/0.13935294172800e14 -0.115132773073e12/0.2654341747200e13; - 0.108449122763e12/0.3716078446080e13 -0.2283566671541e13/0.13935294172800e14 0.6976424333231e13/0.18580392230400e14 -0.440819477447e12/0.825795210240e12 -0.55386253e8/0.425375280e9 0.2479572560009e13/0.3716078446080e13 -0.40258468963e11/0.120651897600e12 0.11808221047099e14/0.111482353382400e15; - -0.32231128289e11/0.422281641600e12 0.4244793299753e13/0.18580392230400e14 -0.5173673584463e13/0.61934640768000e14 -0.4848139955041e13/0.18580392230400e14 -0.1506045711689e13/0.3716078446080e13 -0.526653889e9/0.2977626960e10 0.36411368691307e14/0.37160784460800e14 -0.825434105779e12/0.2903186286000e13; - -0.316459841069e12/0.55741176691200e14 0.1277069729941e13/0.37160784460800e14 -0.6499182375347e13/0.92901961152000e14 0.355606625147e12/0.13935294172800e14 0.1519272420551e13/0.9290196115200e13 -0.2240079855137e13/0.3378253132800e13 -0.584765899e9/0.2977626960e10 0.2301241355533e13/0.2382101568000e13; - 0.387779289437e12/0.26543417472000e14 -0.12908508708209e14/0.278705883456000e15 0.147710908133e12/0.4645098057600e13 0.534025841911e12/0.18580392230400e14 -0.4119981443899e13/0.111482353382400e15 0.279819152779e12/0.2903186286000e13 -0.1510324515533e13/0.2382101568000e13 -0.85017967e8/0.425375280e9; - ]; - - - Qp(1:8,1:8)=Q_U; - Qp(m-7:m,m-7:m)=rot90(Q_U,2)'; %%% This is different from standard SBP - - Qm=-Qp'; - - e_1=zeros(m,1);e_1(1)=1; - e_m=zeros(m,1);e_m(m)=1; - - Dp=HI*(Qp-1/2*e_1*e_1'+1/2*e_m*e_m') ; - - Dm=HI*(Qm-1/2*e_1*e_1'+1/2*e_m*e_m') ; -end
diff -r 18c023aaf3f7 -r dae8c3a56f5e +sbp/variable4.m --- a/+sbp/variable4.m Mon Sep 12 11:14:00 2016 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,115 +0,0 @@ -function [H, HI, D1, D2, e_l, e_r, d_l, d_r] = variable4(m,h) - N = m; - - H = speye(N); - H(1,1) = 17/48; H(2,2) = 59/48; H(3,3) = 43/48; H(4,4) = 49/48; - H(N,N) = 17/48; H(N-1,N-1) = 59/48; H(N-2,N-2) = 43/48; H(N-3,N-3) = 49/48; - H = h*H; - - HI = inv(H); - - H = sparse(H); - HI = sparse(HI); - - - S = sparse(N,N); - S(1,1:4) = 1/h*[(-11/6);3;(-3/2);1/3]; - S(N,N-3:N) = 1/h*[(-1/3);3/2;(-3);11/6]; - S = sparse(S); - - e_l = sparse(m,1); - e_l(1) = 1; - - e_r = sparse(m,1); - e_r(end) = 1; - - d_l = S(1,:)'; - d_r = S(end,:)'; - - e=ones(m,1); - Q=spdiags([e -8*e 0*e 8*e -e], -2:2, m, m)/12; - 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)=rot90( -Q_U(1:4,1:4) ,2 ); - - D1=HI*(Q-1/2*e_l*e_l'+1/2*e_r*e_r') ; - - function D2 = D2_fun(c) - M = 78+(N-12)*5; - %h = 1/(N-1); - - - U = [48/(17)*(0.12e2 / 0.17e2 * c(1) + 0.59e2 / 0.192e3 * c(2) + 0.27010400129e11 / 0.345067064608e12 * c(3) + 0.69462376031e11 / 0.2070402387648e13 * c(4)) 48/(17)*(-0.59e2 / 0.68e2 * c(1) - 0.6025413881e10 / 0.21126554976e11 * c(3) - 0.537416663e9 / 0.7042184992e10 * c(4)) 48/(17)*(0.2e1 / 0.17e2 * c(1) - 0.59e2 / 0.192e3 * c(2) + 0.213318005e9 / 0.16049630912e11 * c(4) + 0.2083938599e10 / 0.8024815456e10 * c(3)) 48/(17)*(0.3e1 / 0.68e2 * c(1) - 0.1244724001e10 / 0.21126554976e11 * c(3) + 0.752806667e9 / 0.21126554976e11 * c(4)) 48/(17)*(0.49579087e8 / 0.10149031312e11 * c(3) - 0.49579087e8 / 0.10149031312e11 * c(4)) 48/(17)*(-c(4) / 0.784e3 + c(3) / 0.784e3);... - 48/(59)*(-0.59e2 / 0.68e2 * c(1) - 0.6025413881e10 / 0.21126554976e11 * c(3) - 0.537416663e9 / 0.7042184992e10 * c(4)) 48/(59)*(0.3481e4 / 0.3264e4 * c(1) + 0.9258282831623875e16 / 0.7669235228057664e16 * c(3) + 0.236024329996203e15 / 0.1278205871342944e16 * c(4)) 48/(59)*(-0.59e2 / 0.408e3 * c(1) - 0.29294615794607e14 / 0.29725717938208e14 * c(3) - 0.2944673881023e13 / 0.29725717938208e14 * c(4)) 48/(59)*(-0.59e2 / 0.1088e4 * c(1) + 0.260297319232891e15 / 0.2556411742685888e16 * c(3) - 0.60834186813841e14 / 0.1278205871342944e16 * c(4)) 48/(59)*(-0.1328188692663e13 / 0.37594290333616e14 * c(3) + 0.1328188692663e13 / 0.37594290333616e14 * c(4)) 48/(59)*(-0.8673e4 / 0.2904112e7 * c(3) + 0.8673e4 / 0.2904112e7 * c(4));... - 48/(43)*(0.2e1 / 0.17e2 * c(1) - 0.59e2 / 0.192e3 * c(2) + 0.213318005e9 / 0.16049630912e11 * c(4) + 0.2083938599e10 / 0.8024815456e10 * c(3)) 48/(43)*(-0.59e2 / 0.408e3 * c(1) - 0.29294615794607e14 / 0.29725717938208e14 * c(3) - 0.2944673881023e13 / 0.29725717938208e14 * c(4)) 48/(43)*(c(1) / 0.51e2 + 0.59e2 / 0.192e3 * c(2) + 0.13777050223300597e17 / 0.26218083221499456e17 * c(4) + 0.564461e6 / 0.13384296e8 * c(5) + 0.378288882302546512209e21 / 0.270764341349677687456e21 * c(3)) 48/(43)*(c(1) / 0.136e3 - 0.125059e6 / 0.743572e6 * c(5) - 0.4836340090442187227e19 / 0.5525802884687299744e19 * c(3) - 0.17220493277981e14 / 0.89177153814624e14 * c(4)) 48/(43)*(-0.10532412077335e14 / 0.42840005263888e14 * c(4) + 0.1613976761032884305e19 / 0.7963657098519931984e19 * c(3) + 0.564461e6 / 0.4461432e7 * c(5)) 48/(43)*(-0.960119e6 / 0.1280713392e10 * c(4) - 0.3391e4 / 0.6692148e7 * c(5) + 0.33235054191e11 / 0.26452850508784e14 * c(3));... - 48/(49)*(0.3e1 / 0.68e2 * c(1) - 0.1244724001e10 / 0.21126554976e11 * c(3) + 0.752806667e9 / 0.21126554976e11 * c(4)) 48/(49)*(-0.59e2 / 0.1088e4 * c(1) + 0.260297319232891e15 / 0.2556411742685888e16 * c(3) - 0.60834186813841e14 / 0.1278205871342944e16 * c(4)) 48/(49)*(c(1) / 0.136e3 - 0.125059e6 / 0.743572e6 * c(5) - 0.4836340090442187227e19 / 0.5525802884687299744e19 * c(3) - 0.17220493277981e14 / 0.89177153814624e14 * c(4)) 48/(49)*(0.3e1 / 0.1088e4 * c(1) + 0.507284006600757858213e21 / 0.475219048083107777984e21 * c(3) + 0.1869103e7 / 0.2230716e7 * c(5) + c(6) / 0.24e2 + 0.1950062198436997e16 / 0.3834617614028832e16 * c(4)) 48/(49)*(-0.4959271814984644613e19 / 0.20965546238960637264e20 * c(3) - c(6) / 0.6e1 - 0.15998714909649e14 / 0.37594290333616e14 * c(4) - 0.375177e6 / 0.743572e6 * c(5)) 48/(49)*(-0.368395e6 / 0.2230716e7 * c(5) + 0.752806667e9 / 0.539854092016e12 * c(3) + 0.1063649e7 / 0.8712336e7 * c(4) + c(6) / 0.8e1);... - 0.49579087e8 / 0.10149031312e11 * c(3) - 0.49579087e8 / 0.10149031312e11 * c(4) -0.1328188692663e13 / 0.37594290333616e14 * c(3) + 0.1328188692663e13 / 0.37594290333616e14 * c(4) -0.10532412077335e14 / 0.42840005263888e14 * c(4) + 0.1613976761032884305e19 / 0.7963657098519931984e19 * c(3) + 0.564461e6 / 0.4461432e7 * c(5) -0.4959271814984644613e19 / 0.20965546238960637264e20 * c(3) - c(6) / 0.6e1 - 0.15998714909649e14 / 0.37594290333616e14 * c(4) - 0.375177e6 / 0.743572e6 * c(5) 0.8386761355510099813e19 / 0.128413970713633903242e21 * c(3) + 0.2224717261773437e16 / 0.2763180339520776e16 * c(4) + 0.5e1 / 0.6e1 * c(6) + c(7) / 0.24e2 + 0.280535e6 / 0.371786e6 * c(5) -0.35039615e8 / 0.213452232e9 * c(4) - c(7) / 0.6e1 - 0.13091810925e11 / 0.13226425254392e14 * c(3) - 0.1118749e7 / 0.2230716e7 * c(5) - c(6) / 0.2e1;... - -c(4) / 0.784e3 + c(3) / 0.784e3 -0.8673e4 / 0.2904112e7 * c(3) + 0.8673e4 / 0.2904112e7 * c(4) -0.960119e6 / 0.1280713392e10 * c(4) - 0.3391e4 / 0.6692148e7 * c(5) + 0.33235054191e11 / 0.26452850508784e14 * c(3) -0.368395e6 / 0.2230716e7 * c(5) + 0.752806667e9 / 0.539854092016e12 * c(3) + 0.1063649e7 / 0.8712336e7 * c(4) + c(6) / 0.8e1 -0.35039615e8 / 0.213452232e9 * c(4) - c(7) / 0.6e1 - 0.13091810925e11 / 0.13226425254392e14 * c(3) - 0.1118749e7 / 0.2230716e7 * c(5) - c(6) / 0.2e1 0.3290636e7 / 0.80044587e8 * c(4) + 0.5580181e7 / 0.6692148e7 * c(5) + 0.5e1 / 0.6e1 * c(7) + c(8) / 0.24e2 + 0.660204843e9 / 0.13226425254392e14 * c(3) + 0.3e1 / 0.4e1 * c(6)]; - - - L = [c(N-7) / 0.24e2 + 0.5e1 / 0.6e1 * c(N-6) + 0.5580181e7 / 0.6692148e7 * c(N-4) + 0.4887707739997e13 / 0.119037827289528e15 * c(N-3) + 0.3e1 / 0.4e1 * c(N-5) + 0.660204843e9 / 0.13226425254392e14 * c(N-2) + 0.660204843e9 / 0.13226425254392e14 * c(N-1) -c(N-6) / 0.6e1 - 0.1618585929605e13 / 0.9919818940794e13 * c(N-3) - c(N-5) / 0.2e1 - 0.1118749e7 / 0.2230716e7 * c(N-4) - 0.13091810925e11 / 0.13226425254392e14 * c(N-2) - 0.13091810925e11 / 0.13226425254392e14 * c(N-1) -0.368395e6 / 0.2230716e7 * c(N-4) + c(N-5) / 0.8e1 + 0.48866620889e11 / 0.404890569012e12 * c(N-3) + 0.752806667e9 / 0.539854092016e12 * c(N-2) + 0.752806667e9 / 0.539854092016e12 * c(N-1) -0.3391e4 / 0.6692148e7 * c(N-4) - 0.238797444493e12 / 0.119037827289528e15 * c(N-3) + 0.33235054191e11 / 0.26452850508784e14 * c(N-2) + 0.33235054191e11 / 0.26452850508784e14 * c(N-1) -0.8673e4 / 0.2904112e7 * c(N-2) - 0.8673e4 / 0.2904112e7 * c(N-1) + 0.8673e4 / 0.1452056e7 * c(N-3) -c(N-3) / 0.392e3 + c(N-2) / 0.784e3 + c(N-1) / 0.784e3;... - -c(N-6) / 0.6e1 - 0.1618585929605e13 / 0.9919818940794e13 * c(N-3) - c(N-5) / 0.2e1 - 0.1118749e7 / 0.2230716e7 * c(N-4) - 0.13091810925e11 / 0.13226425254392e14 * c(N-2) - 0.13091810925e11 / 0.13226425254392e14 * c(N-1) c(N-6) / 0.24e2 + 0.5e1 / 0.6e1 * c(N-5) + 0.3896014498639e13 / 0.4959909470397e13 * c(N-3) + 0.8386761355510099813e19 / 0.128413970713633903242e21 * c(N-2) + 0.280535e6 / 0.371786e6 * c(N-4) + 0.3360696339136261875e19 / 0.171218627618178537656e21 * c(N-1) -c(N-5) / 0.6e1 - 0.4959271814984644613e19 / 0.20965546238960637264e20 * c(N-2) - 0.375177e6 / 0.743572e6 * c(N-4) - 0.13425842714e11 / 0.33740880751e11 * c(N-3) - 0.193247108773400725e18 / 0.6988515412986879088e19 * c(N-1) -0.365281640980e12 / 0.1653303156799e13 * c(N-3) + 0.564461e6 / 0.4461432e7 * c(N-4) + 0.1613976761032884305e19 / 0.7963657098519931984e19 * c(N-2) - 0.198407225513315475e18 / 0.7963657098519931984e19 * c(N-1) -0.1328188692663e13 / 0.37594290333616e14 * c(N-2) + 0.2226377963775e13 / 0.37594290333616e14 * c(N-1) - 0.8673e4 / 0.363014e6 * c(N-3) c(N-3) / 0.49e2 + 0.49579087e8 / 0.10149031312e11 * c(N-2) - 0.256702175e9 / 0.10149031312e11 * c(N-1);... - 48/(49)*(-0.368395e6 / 0.2230716e7 * c(N-4) + c(N-5) / 0.8e1 + 0.48866620889e11 / 0.404890569012e12 * c(N-3) + 0.752806667e9 / 0.539854092016e12 * c(N-2) + 0.752806667e9 / 0.539854092016e12 * c(N-1)) 48/(49)*(-c(N-5) / 0.6e1 - 0.4959271814984644613e19 / 0.20965546238960637264e20 * c(N-2) - 0.375177e6 / 0.743572e6 * c(N-4) - 0.13425842714e11 / 0.33740880751e11 * c(N-3) - 0.193247108773400725e18 / 0.6988515412986879088e19 * c(N-1)) 48/(49)*(c(N-5) / 0.24e2 + 0.1869103e7 / 0.2230716e7 * c(N-4) + 0.507284006600757858213e21 / 0.475219048083107777984e21 * c(N-2) + 0.3e1 / 0.1088e4 * c(N) + 0.31688435395e11 / 0.67481761502e11 * c(N-3) + 0.27769176016102795561e20 / 0.712828572124661666976e21 * c(N-1)) 48/(49)*(-0.125059e6 / 0.743572e6 * c(N-4) + c(N) / 0.136e3 - 0.23099342648e11 / 0.101222642253e12 * c(N-3) - 0.4836340090442187227e19 / 0.5525802884687299744e19 * c(N-2) + 0.193950157930938693e18 / 0.5525802884687299744e19 * c(N-1)) 48/(49)*(0.260297319232891e15 / 0.2556411742685888e16 * c(N-2) - 0.59e2 / 0.1088e4 * c(N) - 0.106641839640553e15 / 0.1278205871342944e16 * c(N-1) + 0.26019e5 / 0.726028e6 * c(N-3)) 48/(49)*(-0.1244724001e10 / 0.21126554976e11 * c(N-2) + 0.3e1 / 0.68e2 * c(N) + 0.752806667e9 / 0.21126554976e11 * c(N-1));... - 48/(43)*(-0.3391e4 / 0.6692148e7 * c(N-4) - 0.238797444493e12 / 0.119037827289528e15 * c(N-3) + 0.33235054191e11 / 0.26452850508784e14 * c(N-2) + 0.33235054191e11 / 0.26452850508784e14 * c(N-1)) 48/(43)*(-0.365281640980e12 / 0.1653303156799e13 * c(N-3) + 0.564461e6 / 0.4461432e7 * c(N-4) + 0.1613976761032884305e19 / 0.7963657098519931984e19 * c(N-2) - 0.198407225513315475e18 / 0.7963657098519931984e19 * c(N-1)) 48/(43)*(-0.125059e6 / 0.743572e6 * c(N-4) + c(N) / 0.136e3 - 0.23099342648e11 / 0.101222642253e12 * c(N-3) - 0.4836340090442187227e19 / 0.5525802884687299744e19 * c(N-2) + 0.193950157930938693e18 / 0.5525802884687299744e19 * c(N-1)) 48/(43)*(0.564461e6 / 0.13384296e8 * c(N-4) + 0.470299699916357e15 / 0.952302618316224e15 * c(N-3) + 0.550597048646198778781e21 / 0.1624586048098066124736e22 * c(N-1) + c(N) / 0.51e2 + 0.378288882302546512209e21 / 0.270764341349677687456e21 * c(N-2)) 48/(43)*(-0.59e2 / 0.408e3 * c(N) - 0.29294615794607e14 / 0.29725717938208e14 * c(N-2) - 0.2234477713167e13 / 0.29725717938208e14 * c(N-1) - 0.8673e4 / 0.363014e6 * c(N-3)) 48/(43)*(-0.59e2 / 0.3136e4 * c(N-3) - 0.13249937023e11 / 0.48148892736e11 * c(N-1) + 0.2e1 / 0.17e2 * c(N) + 0.2083938599e10 / 0.8024815456e10 * c(N-2));... - 48/(59)*(-0.8673e4 / 0.2904112e7 * c(N-2) - 0.8673e4 / 0.2904112e7 * c(N-1) + 0.8673e4 / 0.1452056e7 * c(N-3)) 48/(59)*(-0.1328188692663e13 / 0.37594290333616e14 * c(N-2) + 0.2226377963775e13 / 0.37594290333616e14 * c(N-1) - 0.8673e4 / 0.363014e6 * c(N-3)) 48/(59)*(0.260297319232891e15 / 0.2556411742685888e16 * c(N-2) - 0.59e2 / 0.1088e4 * c(N) - 0.106641839640553e15 / 0.1278205871342944e16 * c(N-1) + 0.26019e5 / 0.726028e6 * c(N-3)) 48/(59)*(-0.59e2 / 0.408e3 * c(N) - 0.29294615794607e14 / 0.29725717938208e14 * c(N-2) - 0.2234477713167e13 / 0.29725717938208e14 * c(N-1) - 0.8673e4 / 0.363014e6 * c(N-3)) 48/(59)*(0.9258282831623875e16 / 0.7669235228057664e16 * c(N-2) + 0.3481e4 / 0.3264e4 * c(N) + 0.228389721191751e15 / 0.1278205871342944e16 * c(N-1) + 0.8673e4 / 0.1452056e7 * c(N-3)) 48/(59)*(-0.6025413881e10 / 0.21126554976e11 * c(N-2) - 0.59e2 / 0.68e2 * c(N) - 0.537416663e9 / 0.7042184992e10 * c(N-1));... - 48/(17)*(-c(N-3) / 0.392e3 + c(N-2) / 0.784e3 + c(N-1) / 0.784e3) 48/(17)*(c(N-3) / 0.49e2 + 0.49579087e8 / 0.10149031312e11 * c(N-2) - 0.256702175e9 / 0.10149031312e11 * c(N-1)) 48/(17)*(-0.1244724001e10 / 0.21126554976e11 * c(N-2) + 0.3e1 / 0.68e2 * c(N) + 0.752806667e9 / 0.21126554976e11 * c(N-1)) 48/(17)*(-0.59e2 / 0.3136e4 * c(N-3) - 0.13249937023e11 / 0.48148892736e11 * c(N-1) + 0.2e1 / 0.17e2 * c(N) + 0.2083938599e10 / 0.8024815456e10 * c(N-2)) 48/(17)*(-0.6025413881e10 / 0.21126554976e11 * c(N-2) - 0.59e2 / 0.68e2 * c(N) - 0.537416663e9 / 0.7042184992e10 * c(N-1)) 48/(17)*(0.3e1 / 0.3136e4 * c(N-3) + 0.27010400129e11 / 0.345067064608e12 * c(N-2) + 0.234566387291e12 / 0.690134129216e12 * c(N-1) + 0.12e2 / 0.17e2 * c(N))]; - - - - R = zeros(M,1); - R(1:24) = reshape(U(1:4,:)',24,1); - R(25:30) = U(5,:); - R(31) = -c(5+1) / 0.6e1 + c(5) / 0.8e1 + c(5+2) / 0.8e1; - R(32:37) = U(6,:); - R(38:39) = [-c(6-1) / 0.6e1 - c(6+2) / 0.6e1 - c(6) / 0.2e1 - c(6+1) / 0.2e1;... - -c(6+1) / 0.6e1 + c(6) / 0.8e1 + c(6+2) / 0.8e1]; - - R(M-38:M-37) = [-c(N-6) / 0.6e1 + c(N-7) / 0.8e1 + c(N-5) / 0.8e1;... - -c(N-7) / 0.6e1 - c(N-4) / 0.6e1 - c(N-6) / 0.2e1 - c(N-5) / 0.2e1]; - R(M-36:M-31) = L(1,:); - R(M-30) = -c(N-5) / 0.6e1 + c(N-6) / 0.8e1 + c(N-4) / 0.8e1; - R(M-29:M-24) = L(2,:); - R(M-23:M) = reshape(L(3:6,:)',24,1); - - for i=7:N-6 - R(40+(i-7)*5:44+(i-7)*5) = [-c(i-1) / 0.6e1 + c(i-2) / 0.8e1 + c(i) / 0.8e1,... - -c(i-2) / 0.6e1 - c(i+1) / 0.6e1 - c(i-1) / 0.2e1 - c(i) / 0.2e1,... - c(i-2) / 0.24e2 + 0.5e1 / 0.6e1 * c(i-1) + 0.5e1 / 0.6e1 * c(i+1) + c(i+2) / 0.24e2 + 0.3e1 / 0.4e1 * c(i),... - -c(i-1) / 0.6e1 - c(i+2) / 0.6e1 - c(i) / 0.2e1 - c(i+1) / 0.2e1,... - -c(i+1) / 0.6e1 + c(i) / 0.8e1 + c(i+2) / 0.8e1]; - end - - R = R/h/h; - D2 = -R; - D2(1:4) = -48/17/h/h*[c(1)*(-11/6);c(1)*3;c(1)*(-3/2);c(1)*1/3] + D2(1:4); - D2(M-3:M) = -48/17/h/h*[c(N)*1/3;c(N)*(-3/2);c(N)*3;c(N)*(-11/6)] + D2(M-3:M); - - - - BS = sparse(N,N); - BS(1,1:4) = -c(1)*1/h*[(-11/6);3;(-3/2);1/3]; - BS(N,N-3:N) = c(N)*1/h*[(-1/3);3/2;(-3);11/6]; - BS = sparse(BS); - - % %%Row and column indices%% - M = 78+(N-12)*5; - rows = [kron([1;2;3;4],ones(6,1));... - 5*ones(7,1);... - 6*ones(8,1);... - kron((7:N-6)',ones(5,1));... - (N-5)*ones(8,1);... - (N-4)*ones(7,1);... - kron([N-3;N-2;N-1;N],ones(6,1))]; - - cols = zeros(M,1); - cols(1:24) = kron(ones(4,1),[1;2;3;4;5;6]); - cols(25:39) = [(1:7)';(1:8)']; - cols(M-23:M) = kron(ones(4,1),[N-5;N-4;N-3;N-2;N-1;N]); - cols(M-38:M-24) = [(N-7:N)';(N-6:N)']; - for i=7:N-6 - cols(40+(i-7)*5:44+(i-7)*5) = [i-2;i-1;i;i+1;i+2]; - end - D2 = sparse(rows,cols,D2); - end - D2 = @D2_fun; -end \ No newline at end of file