diff +scheme/Beam.m @ 240:46256fffa329 feature/beams

Added some stuff for default structs. Improved interface for beam.
author Jonatan Werpers <jonatan@werpers.com>
date Wed, 03 Aug 2016 12:30:27 +0200
parents ba56e0d621f2
children f4306afd6849
line wrap: on
line diff
--- a/+scheme/Beam.m	Thu Jul 28 12:50:43 2016 +0200
+++ b/+scheme/Beam.m	Wed Aug 03 12:30:27 2016 +0200
@@ -15,15 +15,23 @@
         d3_l, d3_r
         gamm
         delt
-        interface_tuning
+
+        opt
     end
 
     methods
-        function obj = Beam(grid, order, alpha, opsGen, interface_tuning, alphaII, alphaIII)
+        function obj = Beam(grid, order, alpha, opsGen, opt)
             default_arg('alpha', -1);
-            default_arg('interface_tuning', 1.1);
-            default_arg('alphaII',  [])
-            default_arg('alphaIII', [])
+
+
+            opt_default.interface_l.tuning = 1.1;
+            opt_default.interface_l.tau = [];
+            opt_default.interface_l.sig = [];
+            opt_default.interface_r.tuning = 1.1;
+            opt_default.interface_r.tau = [];
+            opt_default.interface_r.sig = [];
+            default_struct('opt', opt_default);
+
 
             % default_arg('opsGen', @sbp.Higher);
             default_arg('opsGen', @sbp.HigherCompatibleVariable); % Supposed to be better
@@ -57,14 +65,12 @@
 
             obj.D = alpha*D4;
 
-            if isempty(alphaII) && isempty(alphaIII)
-                alphaII = ops.borrowing.N.S2/2;
-                alphaIII = ops.borrowing.N.S3/2;
-            end
+            alphaII = ops.borrowing.N.S2/2;
+            alphaIII = ops.borrowing.N.S3/2;
 
             obj.gamm = h*alphaII;
             obj.delt = h^3*alphaIII;
-            obj.interface_tuning = interface_tuning;
+            obj.opt = opt;
         end
 
 
@@ -113,27 +119,37 @@
             [e_u,d1_u,d2_u,d3_u,s_u] = obj.get_boundary_ops(boundary);
             [e_v,d1_v,d2_v,d3_v,s_v] = neighbour_scheme.get_boundary_ops(neighbour_boundary);
 
-            gamm_u = obj.gamm;
-            delt_u = obj.delt;
-
-            gamm_v = neighbour_scheme.gamm;
-            delt_v = neighbour_scheme.delt;
-
-            tuning = obj.interface_tuning;
-
 
             alpha_u = obj.alpha;
             alpha_v = neighbour_scheme.alpha;
 
-            tau1 = ((alpha_u/2)/delt_u + (alpha_v/2)/delt_v)/2*tuning;
-            % tau1 = (alpha_u/2 + alpha_v/2)/(2*delt_u)*tuning;
-            tau4 = s_u*alpha_u/2;
+            switch boundary
+                case 'l'
+                    interface_opt = obj.opt.interface_l;
+                case 'r'
+                    interface_opt = obj.opt.interface_r;
+            end
+
+
+            if isempty(interface_opt.tau) && isempty(interface_opt.sig)
+                gamm_u = obj.gamm;
+                delt_u = obj.delt;
 
-            sig2 = ((alpha_u/2)/gamm_u + (alpha_v/2)/gamm_v)/2*tuning;
-            sig3 = -s_u*alpha_u/2;
+                gamm_v = neighbour_scheme.gamm;
+                delt_v = neighbour_scheme.delt;
+
+                tuning = interface_opt.tuning;
 
+                tau1 = ((alpha_u/2)/delt_u + (alpha_v/2)/delt_v)/2*tuning;
+                sig2 = ((alpha_u/2)/gamm_u + (alpha_v/2)/gamm_v)/2*tuning;
+            else
+                tau1 = interface_opt.tau;
+                sig2 = interface_opt.sig;
+            end
+
+            tau4 = s_u*alpha_u/2;
+            sig3 = -s_u*alpha_u/2;
             phi2 = s_u*1/2;
-
             psi1 = -s_u*1/2;
 
             tau = tau1*e_u  +                     tau4*d3_u;