Mercurial > repos > public > sbplib
changeset 263:21a180acbd49 operator_remake
Renamed standard class to D2Standard etc, Rewrote class properties.
author | Martin Almquist <martin.almquist@it.uu.se> |
---|---|
date | Thu, 08 Sep 2016 17:50:30 +0200 |
parents | 23051a86faa4 |
children | 8a625c5a3633 |
files | +sbp/D1Upwind.m +sbp/D2.m +sbp/D2BlockNorm.m +sbp/D2Standard.m +sbp/D2Variable.m +sbp/D4.m +sbp/D4Compatible.m +sbp/D4CompatibleVariable.m +sbp/D4Standard.m +sbp/OpSet.m |
diffstat | 10 files changed, 285 insertions(+), 270 deletions(-) [+] |
line wrap: on
line diff
--- a/+sbp/D1Upwind.m Thu Sep 08 15:37:48 2016 +0200 +++ b/+sbp/D1Upwind.m Thu Sep 08 17:50:30 2016 +0200 @@ -1,56 +1,55 @@ classdef D1Upwind < 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 + D1 % SBP operator approximating first derivative + H % Norm matrix + HI % H^-1 + Q % Skew-symmetric matrix + e_1 % Left boundary operator + e_m % 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,h,order) + function obj = D1Upwind(m,L,order) + + obj.h = L/(m-1); + obj.x = linspace(0,L,m)'; switch order case 2 - [H, HI, Dp, Dm, e_1, e_m] = ... - sbp.implementations.d1_upwind_2(m,h); + [obj.H, obj.HI, obj.Dp, obj.Dm, obj.e_1, obj.e_m] = ... + sbp.implementations.d1_upwind_2(m,obj.h); case 3 - [H, HI, Dp, Dm, e_1, e_m] = ... - sbp.implementations.d1_upwind_3(m,h); + [obj.H, obj.HI, obj.Dp, obj.Dm, obj.e_1, obj.e_m] = ... + sbp.implementations.d1_upwind_3(m,obj.h); case 4 - [H, HI, Dp, Dm, e_1, e_m] = ... - sbp.implementations.d1_upwind_4(m,h); + [obj.H, obj.HI, obj.Dp, obj.Dm, obj.e_1, obj.e_m] = ... + sbp.implementations.d1_upwind_4(m,obj.h); case 5 - [H, HI, Dp, Dm, e_1, e_m] = ... - sbp.implementations.d1_upwind_5(m,h); + [obj.H, obj.HI, obj.Dp, obj.Dm, obj.e_1, obj.e_m] = ... + sbp.implementations.d1_upwind_5(m,obj.h); case 6 - [H, HI, Dp, Dm, e_1, e_m] = ... - sbp.implementations.d1_upwind_6(m,h); + [obj.H, obj.HI, obj.Dp, obj.Dm, obj.e_1, obj.e_m] = ... + sbp.implementations.d1_upwind_6(m,obj.h); case 7 - [H, HI, Dp, Dm, e_1, e_m] = ... - sbp.implementations.d1_upwind_7(m,h); + [obj.H, obj.HI, obj.Dp, obj.Dm, obj.e_1, obj.e_m] = ... + sbp.implementations.d1_upwind_7(m,obj.h); case 8 - [H, HI, Dp, Dm, e_1, e_m] = ... - sbp.implementations.d1_upwind_8(m,h); + [obj.H, obj.HI, obj.Dp, obj.Dm, obj.e_1, obj.e_m] = ... + sbp.implementations.d1_upwind_8(m,obj.h); case 9 - [H, HI, Dp, Dm, e_1, e_m] = ... - sbp.implementations.d1_upwind_9(m,h); + [obj.H, obj.HI, obj.Dp, obj.Dm, obj.e_1, obj.e_m] = ... + sbp.implementations.d1_upwind_9(m,obj.h); otherwise error('Invalid operator order %d.',order); end - obj.h = h; obj.m = m; - - obj.norms.H = H; - obj.norms.HI = HI; + obj.borrowing = []; - obj.boundary.e_1 = e_1; - obj.boundary.e_m = e_m; - - obj.derivatives.Dp = Dp; - obj.derivatives.Dm = Dm; end end
--- a/+sbp/D2.m Thu Sep 08 15:37:48 2016 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,66 +0,0 @@ -classdef D2 < 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 = D2(m,h,order) - - if order == 2 - [H, HI, D1, D2, e_1, e_m, M, Q, S_1, S_m] = sbp.implementations.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.implementations.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.implementations.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.implementations.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.implementations.ordinary10(m,h); - obj.borrowing.M.S = 0.0351; - elseif order == 12 - [H, HI, D1, D2, e_1, e_m, M, Q, S_1, S_m] = sbp.implementations.ordinary12(m,h); - obj.borrowing.M.S = []; % Need to compute! - 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 - - - - -
--- a/+sbp/D2BlockNorm.m Thu Sep 08 15:37:48 2016 +0200 +++ b/+sbp/D2BlockNorm.m Thu Sep 08 17:50:30 2016 +0200 @@ -1,50 +1,51 @@ classdef D2BlockNorm < 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 + D1 % SBP operator approximating first derivative + H % Norm matrix + HI % H^-1 + Q % Skew-symmetric matrix + e_1 % Left boundary operator + e_m % Right boundary operator + D2 % SBP operator for second derivative + M % Norm matrix, second derivative + S_1 % Left boundary first derivative + S_m % 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,h,order) + function obj = D2BlockNorm(m,L,order) + + obj.h = L/(m-1); + obj.x = linspace(0,L,m)'; if order == 4 - [H, HI, D1, D2, e_1, e_m, M, Q, S_1, S_m] = ... - sbp.implementations.d2_blocknorm_4(m,h); + [obj.H, obj.HI, obj.D1, obj.D2, obj.e_1,... + obj.e_m, obj.M, obj.Q, obj.S_1, obj.S_m] = ... + sbp.implementations.d2_blocknorm_4(m,obj.h); elseif order == 6 - [H, HI, D1, D2, e_1, e_m, M, Q, S_1, S_m] = ... - sbp.implementations.d2_blocknorm_6(m,h); + [obj.H, obj.HI, obj.D1, obj.D2, obj.e_1,... + obj.e_m, obj.M, obj.Q, obj.S_1, obj.S_m] = ... + sbp.implementations.d2_blocknorm_6(m,obj.h); elseif order == 8 - [H, HI, D1, D2, e_1, e_m, M, Q, S_1, S_m] = ... - sbp.implementations.d2_blocknorm_8(m,h); + [obj.H, obj.HI, obj.D1, obj.D2, obj.e_1,... + obj.e_m, obj.M, obj.Q, obj.S_1, obj.S_m] = ... + sbp.implementations.d2_blocknorm_8(m,obj.h); elseif order == 10 - [H, HI, D1, D2, e_1, e_m, M, Q, S_1, S_m] = ... - sbp.implementations.d2_blocknorm_10(m,h); + [obj.H, obj.HI, obj.D1, obj.D2, obj.e_1,... + obj.e_m, obj.M, obj.Q, obj.S_1, obj.S_m] = ... + sbp.implementations.d2_blocknorm_10(m,obj.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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/+sbp/D2Standard.m Thu Sep 08 17:50:30 2016 +0200 @@ -0,0 +1,71 @@ +classdef D2Standard < sbp.OpSet + properties + D1 % SBP operator approximating first derivative + H % Norm matrix + HI % H^-1 + Q % Skew-symmetric matrix + e_1 % Left boundary operator + e_m % Right boundary operator + D2 % SBP operator for second derivative + M % Norm matrix, second derivative + S_1 % Left boundary first derivative + S_m % 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,L,order) + + obj.h = L/(m-1); + obj.x = linspace(0,L,m)'; + + if order == 2 + [obj.H, obj.HI, obj.D1, obj.D2, obj.e_1,... + obj.e_m, obj.M, obj.Q, obj.S_1, obj.S_m] =... + sbp.implementations.ordinary2(m,obj.h); + obj.borrowing.M.S = 0.4000; + elseif order == 4 + [obj.H, obj.HI, obj.D1, obj.D2, obj.e_1,... + obj.e_m, obj.M, obj.Q, obj.S_1, obj.S_m] =... + sbp.implementations.ordinary4(m,obj.h); + obj.borrowing.M.S = 0.2508; + elseif order == 6 + [obj.H, obj.HI, obj.D1, obj.D2, obj.e_1,... + obj.e_m, obj.M, obj.Q, obj.S_1, obj.S_m] =... + sbp.implementations.ordinary6(m,obj.h); + obj.borrowing.M.S = 0.1878; + elseif order == 8 + [obj.H, obj.HI, obj.D1, obj.D2, obj.e_1,... + obj.e_m, obj.M, obj.Q, obj.S_1, obj.S_m] =... + sbp.implementations.ordinary8(m,obj.h); + obj.borrowing.M.S = 0.0015; + elseif order == 10 + [obj.H, obj.HI, obj.D1, obj.D2, obj.e_1,... + obj.e_m, obj.M, obj.Q, obj.S_1, obj.S_m] =... + sbp.implementations.ordinary10(m,obj.h); + obj.borrowing.M.S = 0.0351; + elseif order == 12 + [obj.H, obj.HI, obj.D1, obj.D2, obj.e_1,... + obj.e_m, obj.M, obj.Q, obj.S_1, obj.S_m] =... + sbp.implementations.ordinary12(m,obj.h); + obj.borrowing.M.S = []; % Need to compute! + else + error('Invalid operator order %d.',order); + end + + obj.m = m; + + end + end + + +end + + + + +
--- a/+sbp/D2Variable.m Thu Sep 08 15:37:48 2016 +0200 +++ b/+sbp/D2Variable.m Thu Sep 08 17:50:30 2016 +0200 @@ -1,41 +1,39 @@ classdef D2Variable < 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 + D1 % SBP operator approximating first derivative + H % Norm matrix + HI % H^-1 + Q % Skew-symmetric matrix + e_1 % Left boundary operator + e_m % Right boundary operator + D2 % SBP operator for second derivative + M % Norm matrix, second derivative + S_1 % Left boundary first derivative + S_m % 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,h,order) + function obj = D2Variable(m,L,order) + + obj.h = L/(m-1); + obj.x = linspace(0,L,m)'; switch order case 4 - [H, HI, D1, D2, e_1, e_m, S_1, S_m] = ... - sbp.implementations.d2_variable_4(m,h); + [obj.H, obj.HI, obj.D1, obj.D2, obj.e_1,... + obj.e_m, obj.S_1, obj.S_m] = ... + sbp.implementations.d2_variable_4(m,obj.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; + obj.M = []; end end
--- a/+sbp/D4.m Thu Sep 08 15:37:48 2016 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,59 +0,0 @@ -classdef D4 < 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 = D4(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.implementations.d4_4(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.implementations.d4_6(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 - - -end \ No newline at end of file
--- a/+sbp/D4Compatible.m Thu Sep 08 15:37:48 2016 +0200 +++ b/+sbp/D4Compatible.m Thu Sep 08 17:50:30 2016 +0200 @@ -1,57 +1,67 @@ classdef D4Compatible < 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 + D1 % SBP operator approximating first derivative + H % Norm matrix + HI % H^-1 + Q % Skew-symmetric matrix + e_1 % Left boundary operator + e_m % Right boundary operator + D2 % SBP operator for second derivative + M % Norm matrix, second derivative + S_1 % Left boundary first derivative + S_m % Right boundary first derivative + D3 % SBP operator for third derivative + Q3 % Skew-symmetric matrix in third derivative + S2_1 % Left boundary second derivative + S2_m % Right boundary second derivative + D4 % SBP operator for fourth derivative + M4 % Norm matrix, fourth derivative + S3_1 % Left boundary third derivative + S3_m % 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,h,order) + function obj = D4Compatible(m,L,order) + + obj.h = L/(m-1); + obj.x = linspace(0,L,m)'; 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.implementations.d4_compatible_2(m,h); + [obj.H, obj.HI, obj.D1, obj.D4, obj.e_1, obj.e_m, obj.M4,... + obj.Q, obj.S2_1, obj.S2_m, obj.S3_1, obj.S3_m,... + obj.S_1, obj.S_m] =... + sbp.implementations.d4_compatible_2(m,obj.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.implementations.d4_compatible_4(m,h); + [obj.H, obj.HI, obj.D1, obj.D4, obj.e_1, obj.e_m, obj.M4,... + obj.Q, obj.S2_1, obj.S2_m, obj.S3_1, obj.S3_m,... + obj.S_1, obj.S_m] =... + sbp.implementations.d4_compatible_4(m,obj.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.implementations.d4_compatible_6(m,h); + [obj.H, obj.HI, obj.D1, obj.D4, obj.e_1, obj.e_m, obj.M4,... + obj.Q, obj.S2_1, obj.S2_m, obj.S3_1, obj.S3_m,... + obj.S_1, obj.S_m] =... + 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.h = h; obj.m = m; - obj.norms.H = H; - obj.norms.HI = HI; - obj.norms.Q = Q; - obj.norms.N = M4; + obj.D2 = []; + obj.D3 = []; - 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
--- a/+sbp/D4CompatibleVariable.m Thu Sep 08 15:37:48 2016 +0200 +++ b/+sbp/D4CompatibleVariable.m Thu Sep 08 17:50:30 2016 +0200 @@ -1,59 +1,67 @@ classdef D4CompatibleVariable < 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 + D1 % SBP operator approximating first derivative + H % Norm matrix + HI % H^-1 + Q % Skew-symmetric matrix + e_1 % Left boundary operator + e_m % Right boundary operator + D2 % SBP operator for second derivative + M % Norm matrix, second derivative + S_1 % Left boundary first derivative + S_m % Right boundary first derivative + D3 % SBP operator for third derivative + Q3 % Skew-symmetric matrix in third derivative + S2_1 % Left boundary second derivative + S2_m % Right boundary second derivative + D4 % SBP operator for fourth derivative + M4 % Norm matrix, fourth derivative + S3_1 % Left boundary third derivative + S3_m % 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,h,order) + function obj = D4CompatibleVariable(m,L,order) + + obj.h = L/(m-1); + obj.x = linspace(0,L,m)'; if order == 2 - [H, HI, ~, D2, ~, D4, e_1, e_m, M4, ~, S2_1, S2_m, S3_1,... - S3_m, S_1, S_m] =... - sbp.implementations.d4_compatible_halfvariable_2(m,h); + [obj.H, obj.HI, ~, obj.D2, ~, obj.D4, obj.e_1, obj.e_m,... + obj.M4, ~, obj.S2_1, obj.S2_m, obj.S3_1,... + obj.S3_m, obj.S_1, obj.S_m] =... + sbp.implementations.d4_compatible_halfvariable_2(m,obj.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.implementations.d4_compatible_halfvariable_4(m,h); + [obj.H, obj.HI, obj.D2, obj.D4, obj.e_1, obj.e_m, obj.M4,... + obj.S2_1, obj.S2_m, obj.S3_1, obj.S3_m, obj.S_1,... + obj.S_m] =... + sbp.implementations.d4_compatible_halfvariable_4(m,obj.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.implementations.d4_compatible_halfvariable_6(m,h); + [obj.H, obj.HI, obj.D2, obj.D4, obj.e_1, obj.e_m, obj.M4,... + obj.S2_1, obj.S2_m, obj.S3_1, obj.S3_m, obj.S_1,... + obj.S_m] =... + 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.h = h; obj.m = m; - - obj.norms.H = H; - obj.norms.HI = HI; - obj.norms.N = M4; + + obj.D1 = []; + obj.D3 = []; - 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/+sbp/D4Standard.m Thu Sep 08 17:50:30 2016 +0200 @@ -0,0 +1,59 @@ +classdef D4Standard < sbp.OpSet + properties + D1 % SBP operator approximating first derivative + H % Norm matrix + HI % H^-1 + Q % Skew-symmetric matrix + e_1 % Left boundary operator + e_m % Right boundary operator + D2 % SBP operator for second derivative + M % Norm matrix, second derivative + S_1 % Left boundary first derivative + S_m % Right boundary first derivative + D3 % SBP operator for third derivative + Q3 % Skew-symmetric matrix in third derivative + S2_1 % Left boundary second derivative + S2_m % Right boundary second derivative + D4 % SBP operator for fourth derivative + M4 % Norm matrix, fourth derivative + S3_1 % Left boundary third derivative + S3_m % 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,L,order) + + obj.h = L/(m-1); + obj.x = linspace(0,L,m)'; + + if order == 4 + [obj.H, obj.HI, obj.D1, obj.D2, obj.D3, obj.D4,... + obj.e_1, obj.e_m, obj.M, obj.M4, obj.Q, obj.Q3, obj.S2_1,... + obj.S2_m, obj.S3_1, obj.S3_m, obj.S_1, obj.S_m] = ... + 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_1, obj.e_m, obj.M, obj.M4, obj.Q, obj.Q3, obj.S2_1,... + obj.S2_m, obj.S3_1, obj.S3_m, obj.S_1, obj.S_m] = ... + 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
--- a/+sbp/OpSet.m Thu Sep 08 15:37:48 2016 +0200 +++ b/+sbp/OpSet.m Thu Sep 08 17:50:30 2016 +0200 @@ -1,15 +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 - end - - methods (Abstract) - + x % Grid end end \ No newline at end of file