changeset 355:69b078cf8072 feature/hypsyst

Upwind doed not work in the non curve-linear case.
author Ylva Rydin <ylva.rydin@telia.com>
date Thu, 08 Dec 2016 10:42:11 +0100
parents dbac99d2c318
children 9567a9dd220d
files +grid/Ti3D.m +scheme/Hypsyst3d.m +scheme/Hypsyst3dCurve.m
diffstat 3 files changed, 63 insertions(+), 22 deletions(-) [+]
line wrap: on
line diff
--- a/+grid/Ti3D.m	Mon Nov 28 08:46:28 2016 +0100
+++ b/+grid/Ti3D.m	Thu Dec 08 10:42:11 2016 +0100
@@ -5,8 +5,9 @@
     end
     
     methods
-        % TODO function to label boundary names.
-        %  function to find largest and smallest delta h in the grid. Maybe shouldnt live here
+        % TODO write all fancy features for flipping around with the surfaces
+        % Each surface is defined with an outward facing outward and choosing
+        % the "corner" where XI=0 if not possible the corner where ETA=0 is choosen
         function obj = Ti3D(CW,CE,CS,CN,CB,CT)
             obj.gs = {CE,CW,CS,CN,CB,CT};
             
--- a/+scheme/Hypsyst3d.m	Mon Nov 28 08:46:28 2016 +0100
+++ b/+scheme/Hypsyst3d.m	Thu Dec 08 10:42:11 2016 +0100
@@ -26,7 +26,7 @@
         function obj = Hypsyst3d(m, lim, order, A, B,C, E, params,operator)
             default_arg('E', [])
             default_arg('operatpr',[])
-            xlim = lim{1};
+            xlim =  lim{1};
             ylim = lim{2};
             zlim = lim{3};
             
@@ -78,7 +78,7 @@
             
             obj.n = length(A(obj.params,0,0,0));
             
-            I_n = eye(obj.n);
+            I_n = speye(obj.n);
             I_x = speye(m_x);
             obj.I_x = I_x;
             I_y = speye(m_y);
@@ -90,7 +90,7 @@
             obj.Hxi = kr(I_n, ops_x.HI, I_y,I_z);
             obj.Hx = ops_x.H;
             obj.Hyi = kr(I_n, I_x, ops_y.HI,I_z);
-            obj.Hy = ops_y.H
+            obj.Hy = ops_y.H;
             obj.Hzi = kr(I_n, I_x,I_y, ops_z.HI);
             obj.Hz = ops_z.H;
             
@@ -113,19 +113,37 @@
                     
                     Ap = (obj.Aevaluated+alphaA*I_N)/2;
                     Am = (obj.Aevaluated-alphaA*I_N)/2;
+                    Dpx = kr(I_n, ops_x.Dp, I_y,I_z);
+                    Dmx = kr(I_n, ops_x.Dm, I_y,I_z);
+                    obj.D=-Am*Dpx;
+                    temp=Ap*Dmx;
+                    obj.D=obj.D-temp;
+                    clear Ap Am Dpx Dmx
+                    
                     Bp = (obj.Bevaluated+alphaB*I_N)/2;
                     Bm = (obj.Bevaluated-alphaB*I_N)/2;
-                    Cp = (obj.Cevaluated+alphaC*I_N)/2;
-                    Cm = (obj.Cevaluated-alphaC*I_N)/2;
-                    
-                    Dpx = kr(I_n, ops_x.Dp, I_y,I_z);
-                    Dmx = kr(I_n, ops_x.Dm, I_y,I_z);
                     Dpy = kr(I_n, I_x, ops_y.Dp,I_z);
                     Dmy = kr(I_n, I_x, ops_y.Dm,I_z);
+                    temp=Bm*Dpy;
+                    obj.D=obj.D-temp;
+                    temp=Bp*Dmy;
+                    obj.D=obj.D-temp;
+                    clear Bp Bm Dpy Dmy
+                    
+                    
+                    Cp = (obj.Cevaluated+alphaC*I_N)/2;
+                    Cm = (obj.Cevaluated-alphaC*I_N)/2;                  
                     Dpz = kr(I_n, I_x, I_y,ops_z.Dp);
                     Dmz = kr(I_n, I_x, I_y,ops_z.Dm);
                     
-                    obj.D=-Am*Dpx-Ap*Dmx-Bm*Dpy-Bp*Dmy-Cm*Dpz-Cp*Dmz-obj.Eevaluated;
+                    temp=Cm*Dpz;
+                    obj.D=obj.D-temp;
+                    temp=-Cp*Dmz;
+                    obj.D=obj.D-temp;
+                    clear Cp Cm Dpz Dmz
+                    
+                    obj.D=obj.D-obj.Eevaluated;
+                    
                 otherwise
                     D1_x = kr(I_n, ops_x.D1, I_y,I_z);
                     D1_y = kr(I_n, I_x, ops_y.D1,I_z);
--- a/+scheme/Hypsyst3dCurve.m	Mon Nov 28 08:46:28 2016 +0100
+++ b/+scheme/Hypsyst3dCurve.m	Thu Dec 08 10:42:11 2016 +0100
@@ -53,7 +53,6 @@
             obj.n = length(A(obj,0,0,0));
             
             obj.m = m;
-            
             obj.order = order;
             obj.onesN = ones(obj.n);
             
@@ -185,20 +184,43 @@
                     alphaC = max(eig(obj.Chat(obj,obj.X(end), obj.Y(end),obj.Z(end), obj.X_xi(end),obj.X_eta(end),obj.Y_xi(end),obj.Y_eta(end),obj.Z_xi(end),obj.Z_eta(end))));
                     
                     Ap = (obj.Aevaluated+alphaA*I_N)/2;
+                    Dmxi = kr(I_n, ops_xi.Dm, I_eta,I_zeta);
+                    diffSum=-Ap*Dmxi;
+                    clear Ap Dmxi
+
                     Am = (obj.Aevaluated-alphaA*I_N)/2;
-                    Bp = (obj.Bevaluated+alphaB*I_N)/2;
-                    Bm = (obj.Bevaluated-alphaB*I_N)/2;
-                    Cp = (obj.Cevaluated+alphaC*I_N)/2;
-                    Cm = (obj.Cevaluated-alphaC*I_N)/2;
-                    
+                    clear obj.Aevaluated
                     Dpxi = kr(I_n, ops_xi.Dp, I_eta,I_zeta);
-                    Dmxi = kr(I_n, ops_xi.Dm, I_eta,I_zeta);
+                    temp=Am*Dpxi;
+                    diffSum=diffSum-temp;
+                    clear Am Dpxi
+
+                    Bp = (obj.Bevaluated+alphaB*I_N)/2;
+                    Dmeta = kr(I_n, I_xi, ops_eta.Dm,I_zeta);
+                    temp=Bp*Dmeta;
+                    diffSum=diffSum-temp;
+                    clear Bp Dmeta
+
+                    Bm = (obj.Bevaluated-alphaB*I_N)/2;
+                    clear obj.Bevaluated
                     Dpeta = kr(I_n, I_xi, ops_eta.Dp,I_zeta);
-                    Dmeta = kr(I_n, I_xi, ops_eta.Dm,I_zeta);
+                    temp=Bm*Dpeta;
+                    diffSum=diffSum-temp;
+
+
+                    Cp = (obj.Cevaluated+alphaC*I_N)/2;
+                    Dmzeta = kr(I_n, I_xi, I_eta,ops_zeta.Dm);
+                    temp=Cp*Dmzeta;
+                    diffSum=diffSum-temp;
+                    clear Cp Dmzeta
+
+                    Cm = (obj.Cevaluated-alphaC*I_N)/2;      
+                    clear obj.Cevaluated     
                     Dpzeta = kr(I_n, I_xi, I_eta,ops_zeta.Dp);
-                    Dmzeta = kr(I_n, I_xi, I_eta,ops_zeta.Dm);
-                    
-                    obj.D = obj.Ji*(-Am*Dpxi-Ap*Dmxi-Bm*Dpeta-Bp*Dmeta-Cm*Dpzeta-Cp*Dmzeta)-obj.Eevaluated;
+                    temp=Cm*Dpzeta;
+                    diffSum=diffSum-temp;
+                  
+                    obj.D = obj.Ji*diffSum-obj.Eevaluated;
                 otherwise
                     obj.D = obj.Ji*(-obj.Aevaluated*D1_xi-obj.Bevaluated*D1_eta -obj.Cevaluated*D1_zeta)-obj.Eevaluated;
             end