changeset 452:56eb7c088bd4 feature/grids

Allow any coefficient in LaplaceCurvilinear
author Jonatan Werpers <jonatan@werpers.com>
date Wed, 10 May 2017 13:16:12 +0200
parents 4e266dfe9edc
children 819345fe7ff1
files +scheme/LaplaceCurvilinear.m
diffstat 1 files changed, 20 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
diff -r 4e266dfe9edc -r 56eb7c088bd4 +scheme/LaplaceCurvilinear.m
--- a/+scheme/LaplaceCurvilinear.m	Wed May 10 13:13:06 2017 +0200
+++ b/+scheme/LaplaceCurvilinear.m	Wed May 10 13:16:12 2017 +0200
@@ -9,7 +9,7 @@
 
         D % non-stabalized scheme operator
         M % Derivative norm
-        c
+        a,b
         J, Ji
         a11, a12, a22
 
@@ -36,9 +36,16 @@
     end
 
     methods
-        function obj = LaplaceCurvilinear(g ,order, c, opSet)
+        % Implements  a*div(b*grad(u)) as a SBP scheme
+        function obj = LaplaceCurvilinear(g ,order, a, b, opSet)
             default_arg('opSet',@sbp.D2Variable);
-            default_arg('c', 1);
+            default_arg('a', 1);
+            default_arg('b', 1);
+
+
+            if b ~=1
+                error('Not implemented yet')
+            end
 
             assert(isa(g, 'grid.Curvilinear'))
 
@@ -146,13 +153,14 @@
             obj.order = order;
             obj.grid = g;
 
-            obj.c = c;
+            obj.a = a;
+            obj.b = b;
             obj.J = spdiags(J, 0, m_tot, m_tot);
             obj.Ji = spdiags(1./J, 0, m_tot, m_tot);
             obj.a11 = a11;
             obj.a12 = a12;
             obj.a22 = a22;
-            obj.D = obj.Ji*c^2*(Duu + Duv + Dvu + Dvv);
+            obj.D = obj.Ji*a*(Duu + Duv + Dvu + Dvv);
             obj.lambda = lambda;
 
             obj.Dx = spdiag( y_v./J)*Du + spdiag(-y_u./J)*Dv;
@@ -199,21 +207,19 @@
 
                     penalty_parameter_1 = halfnorm_inv_n*(tau + sig1*halfnorm_inv_t*F*e'*halfnorm_t)*e;
 
-                    closure = obj.Ji*obj.c^2 * penalty_parameter_1*e';
-                    penalty = -obj.Ji*obj.c^2 * penalty_parameter_1;
+                    closure = obj.Ji*obj.a * penalty_parameter_1*e';
+                    penalty = -obj.Ji*obj.a * penalty_parameter_1;
 
 
                 % Neumann boundary condition
                 case {'N','n','neumann'}
-                    c = obj.c;
-
                     a_n = spdiags(coeff_n,0,length(coeff_n),length(coeff_n));
                     a_t = spdiags(coeff_t,0,length(coeff_t),length(coeff_t));
                     d = (a_n * d_n' + a_t*d_t')';
 
                     tau1 = -s;
                     tau2 = 0;
-                    tau = c.^2 * obj.Ji*(tau1*e + tau2*d);
+                    tau = obj.a * obj.Ji*(tau1*e + tau2*d);
 
                     closure = halfnorm_inv*tau*d';
                     penalty = -halfnorm_inv*tau;
@@ -222,15 +228,14 @@
                 case {'characteristic', 'char', 'c'}
                     default_arg('parameter', 1);
                     beta = parameter;
-                    c = obj.c;
 
                     a_n = spdiags(coeff_n,0,length(coeff_n),length(coeff_n));
                     a_t = spdiags(coeff_t,0,length(coeff_t),length(coeff_t));
                     d = s*(a_n * d_n' + a_t*d_t')'; % outward facing normal derivative
 
-                    tau = -c.^2 * 1/beta*obj.Ji*e;
+                    tau = -obj.a * 1/beta*obj.Ji*e;
 
-                    closure{1} = halfnorm_inv*tau/c*spdiag(scale_factor)*e';
+                    closure{1} = halfnorm_inv*tau*spdiag(scale_factor)*e';
                     closure{2} = halfnorm_inv*tau*beta*d';
                     penalty = -halfnorm_inv*tau;
 
@@ -273,8 +278,8 @@
             penalty_parameter_2 = halfnorm_inv_u_n * sig2 * e_u;
 
 
-            closure = obj.Ji*obj.c^2 * ( penalty_parameter_1*e_u' + penalty_parameter_2*F_u');
-            penalty = obj.Ji*obj.c^2 * (-penalty_parameter_1*e_v' + penalty_parameter_2*F_v');
+            closure = obj.Ji*obj.a * ( penalty_parameter_1*e_u' + penalty_parameter_2*F_u');
+            penalty = obj.Ji*obj.a * (-penalty_parameter_1*e_v' + penalty_parameter_2*F_v');
         end
 
         % Ruturns the boundary ops and sign for the boundary specified by the string boundary.