changeset 1188:7173b6fd4063 feature/rv

Rename class property grid to g, to avoid confusion with grid package
author Vidar Stiernström <vidar.stiernstrom@it.uu.se>
date Mon, 08 Jul 2019 14:50:19 +0200
parents 5aa3049a4212
children 6cb03209f0a7
files +rv/ResidualViscosity.m
diffstat 1 files changed, 17 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
diff -r 5aa3049a4212 -r 7173b6fd4063 +rv/ResidualViscosity.m
--- a/+rv/ResidualViscosity.m	Mon Jul 08 14:48:56 2019 +0200
+++ b/+rv/ResidualViscosity.m	Mon Jul 08 14:50:19 2019 +0200
@@ -1,6 +1,6 @@
 classdef ResidualViscosity < handle
     properties
-        grid % grid
+        g % grid
         Df % Diff op approximating the gradient of the flux f(u)
         waveSpeed % Wave speed at each grid point, e.g f'(u). %TBD: Better naming?
         Cmax % Constant controlling relative amount of upwind dissipation
@@ -16,7 +16,7 @@
     methods
         %  TBD: Decide on how to treat waveSpeed. It would be nice to just pass a constant value without
         %       wrapping it in a function.
-        function obj = ResidualViscosity(grid, Df, waveSpeed, Cmax, Cres, h, normalization, postProcess)
+        function obj = ResidualViscosity(g, Df, waveSpeed, Cmax, Cres, h, normalization, postProcess)
             default_arg('normalization',@(v)abs(obj.minmaxDiffNeighborhood1d(v)-norm(v-mean(v),inf)));
             default_arg('postProcess','maximum neighbors');
             obj.Df = Df;
@@ -26,17 +26,19 @@
             
             obj.Cres = Cres;
             obj.normalization = normalization;
-            obj.grid = grid;
+            obj.g = g;
             obj.Mres = obj.Cres*obj.h^2;
             obj.Mfirst = obj.Cmax*obj.h;
             switch postProcess
                 case 'none'
                     obj.fRes = @(v,dvdt) obj.Mres*abs(dvdt + obj.Df(v))./obj.normalization(v);
                 case 'filter'
-                    F = obj.shapiroFilter(obj.grid, order);
-                    obj.fRes = @(v,dvdt) F*obj.Mres*abs(dvdt + obj.Df(v))./obj.normalization(v);
+                    order = 4;
+                    F = obj.shapiroFilter(obj.g, order);
+                    obj.Mres = F*obj.Mres;
+                    obj.fRes = @(v,dvdt) obj.Mres*abs(dvdt + obj.Df(v))./obj.normalization(v);
                 case 'maximum neighbors'
-                    switch grid.D()
+                    switch g.D()
                         case 1
                             obj.fRes = @(v,dvdt) movmax(obj.Mres*abs(dvdt + obj.Df(v))./obj.normalization(v),3);
                         case 2
@@ -58,8 +60,8 @@
 
         function res = maxResidualNeighbors2d(obj,v,dvdt)
             res = obj.Mres*abs(dvdt + obj.Df(v))./obj.normalization(v);
-            resMat = grid.funcToMatrix(obj.grid,res);
-            res = reshape(max(movmax(resMat,3,1),movmax(resMat,3,2))',obj.grid.N(),1);
+            resMat = grid.funcToMatrix(obj.g,res);
+            res = reshape(max(movmax(resMat,3,1),movmax(resMat,3,2))',obj.g.N(),1);
         end
     end
     methods (Static)
@@ -69,23 +71,23 @@
             minmaxDiff = umax - umin;
         end
         
-        function minmaxDiff = minmaxDiffNeighborhood2d(grid, u)
-            uMatrix = grid.funcToMatrix(grid,u);
+        function minmaxDiff = minmaxDiffNeighborhood2d(g, u)
+            uMatrix = grid.funcToMatrix(g,u);
             umax = max(movmax(uMatrix,3,1),movmax(uMatrix,3,2));
             umin = min(movmin(uMatrix,3,1),movmin(uMatrix,3,2));
             minmaxDiff = umax - umin;
             minmaxDiff = reshape(minmaxDiff',g.N(),1);
         end
-        function F = shapiroFilter(grid, order)
+        function F = shapiroFilter(g, order)
             switch order
                 case 2
-                    F = spdiags(repmat([1 2 1],grid.m(1),1), -1:1, grid.m(1), grid.m(1));
+                    F = spdiags(repmat([1 2 1],g.m(1),1), -1:1, g.m(1), g.m(1));
                 case 4
-                    F = spdiags(repmat([-1 4 10 4 -1],grid.m(1),1), -2:2, grid.m(1), grid.m(1));
+                    F = spdiags(repmat([-1 4 10 4 -1],g.m(1),1), -2:2, g.m(1), g.m(1));
                 case 6
-                    F = spdiags(repmat([1 -6 15 44 15 -6 1],grid.m(1),1), -3:3, grid.m(1), grid.m(1));
+                    F = spdiags(repmat([1 -6 15 44 15 -6 1],g.m(1),1), -3:3, g.m(1), g.m(1));
                 case 8
-                    F = spdiags(repmat([-1 8 -28 56 186 56 -28 8 -1],grid.m(1),1), -4:4, grid.m(1), grid.m(1));
+                    F = spdiags(repmat([-1 8 -28 56 186 56 -28 8 -1],g.m(1),1), -4:4, g.m(1), g.m(1));
             end
             F = 1/2^order * F;
             % Fx = spdiags(repmat(1/(mid+2)*[1 mid 1],g.m(1),1), -1:1, g.m(1), g.m(1));