changeset 1150:922996695952 feature/rv

Implement local residual normalization functions
author Vidar Stiernström <vidar.stiernstrom@it.uu.se>
date Thu, 24 Jan 2019 10:23:52 +0100
parents 1fe48cbd379a
children 03ecf18d035f
files +rv/ResidualViscosity.m
diffstat 1 files changed, 27 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/+rv/ResidualViscosity.m	Thu Jan 24 09:05:44 2019 +0100
+++ b/+rv/ResidualViscosity.m	Thu Jan 24 10:23:52 2019 +0100
@@ -13,7 +13,8 @@
         %  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(Df, waveSpeed, Cmax, Cres, h, normalization)
-            default_arg('normalization',@(v)norm(v/2,inf));
+            default_arg('normalization',@(v)abs(obj.minmaxDiffNeighborhood1d(v)-norm(v-mean(v),inf)));
+            %default_arg('normalization',@(v)norm(v/2,inf));
             obj.Df = Df;
             obj.waveSpeed = waveSpeed;
             obj.h = h;
@@ -29,4 +30,29 @@
             viscosity = min(firstOrderViscosity, residualViscosity);
         end
     end
+    methods (Static)
+
+        % function f = minmaxDiffNeighborhood(g)
+        %     switch g.D()
+        %         case 1
+        %             f = @(u)minmaxDiffNeighborhood1d(u);
+        %         case 2
+        %             f = @(u)minmaxDiffNeighborhood2d(g,u);
+        %     end
+        % end
+
+        function minmaxDiff = minmaxDiffNeighborhood1d(u)
+            umax = movmax(u,3);
+            umin = movmin(u,3);
+            minmaxDiff = umax - umin;
+        end
+        function minmaxDiff = minmaxDiffNeighborhood2d(g, u)
+            m = g.m();
+            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',m(1)*m(2),1);
+        end
+    end
 end
\ No newline at end of file