Mercurial > repos > public > sbplib
changeset 119:c56437d097de
I added remaining upwind operators.
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Tue, 15 Dec 2015 16:38:17 +0100 |
parents | 5046ff7d13b8 |
children | 8eb4e39df8a5 |
files | +sbp/Upwind.m +sbp/upwind2.m +sbp/upwind3.m +sbp/upwind3_3bp.m +sbp/upwind5.m +sbp/upwind7.m +sbp/upwind9.m |
diffstat | 7 files changed, 189 insertions(+), 42 deletions(-) [+] |
line wrap: on
line diff
--- a/+sbp/Upwind.m Tue Dec 15 16:38:02 2015 +0100 +++ b/+sbp/Upwind.m Tue Dec 15 16:38:17 2015 +0100 @@ -11,16 +11,25 @@ methods function obj = Upwind(m,h,order) - if order == 3 - [H, HI, Dp, Dm, e_1, e_m] = sbp.upwind3_3bp(m,h); - elseif order == 4 - [H, HI, Dp, Dm, e_1, e_m] = sbp.upwind4(m,h); - elseif order == 6 - [H, HI, Dp, Dm, e_1, e_m] = sbp.upwind6(m,h); - elseif order == 8 - [H, HI, Dp, Dm, e_1, e_m] = sbp.upwind8(m,h); - else - error('Invalid operator order %d.',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;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/+sbp/upwind2.m Tue Dec 15 16:38:17 2015 +0100 @@ -0,0 +1,34 @@ +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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/+sbp/upwind3.m Tue Dec 15 16:38:17 2015 +0100 @@ -0,0 +1,32 @@ +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 +
--- a/+sbp/upwind3_3bp.m Tue Dec 15 16:38:02 2015 +0100 +++ /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 -
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/+sbp/upwind5.m Tue Dec 15 16:38:17 2015 +0100 @@ -0,0 +1,31 @@ +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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/+sbp/upwind7.m Tue Dec 15 16:38:17 2015 +0100 @@ -0,0 +1,35 @@ +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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/+sbp/upwind9.m Tue Dec 15 16:38:17 2015 +0100 @@ -0,0 +1,38 @@ +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