changeset 1159:1ad7da049b50 feature/rv

Fix bug using 2d maximum neighborhood in 1d
author Vidar Stiernström <vidar.stiernstrom@it.uu.se>
date Tue, 25 Jun 2019 15:04:53 +0200
parents 2ba63553ccfc
children 76e3bb7836cf
files +rv/ResidualViscosity.m
diffstat 1 files changed, 12 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/+rv/ResidualViscosity.m	Tue Jun 25 14:14:25 2019 +0200
+++ b/+rv/ResidualViscosity.m	Tue Jun 25 15:04:53 2019 +0200
@@ -18,7 +18,7 @@
         %       wrapping it in a function.
         function obj = ResidualViscosity(grid, 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');
+            default_arg('postProcess','none');
             obj.Df = Df;
             obj.waveSpeed = waveSpeed;
             obj.h = h;
@@ -33,21 +33,28 @@
                 case 'none'
                     obj.fRes = @(v,dvdt) obj.Mres*abs(dvdt + obj.Df(v))./obj.normalization(v);
                 case 'maximum neighbors'
-                    obj.fRes = @obj.maxResidualNeighbors
+                    switch grid.D()
+                        case 1
+                            obj.fRes = @(v,dvdt) movmax(obj.Mres*abs(dvdt + obj.Df(v))./obj.normalization(v),3)
+                        case 2
+                            obj.fRes = @obj.maxResidualNeighbors2d
+                    end
             end
         end
 
         function viscosity = evaluateViscosity(obj, v, dvdt)
-            viscosity = min(obj.Mfirst*abs(obj.waveSpeed(v)), obj.fRes(v,dvdt));
+            firstOrderViscosity = obj.Mfirst*abs(obj.waveSpeed(v));
+            viscosity = min(firstOrderViscosity, obj.fRes(v,dvdt));
         end
 
         function [viscosity, Df, firstOrderViscosity, residualViscosity] = evaluate(obj, v, dvdt)
             Df = obj.Df(v);
             firstOrderViscosity = obj.Mfirst*abs(obj.waveSpeed(v));
             residualViscosity = obj.fRes(v,dvdt);
-            viscosity = min(firstOrderViscosity, obj.fRes(v,dvdt));
+            viscosity = min(firstOrderViscosity, residualViscosity);
         end
-        function res = maxResidualNeighbors(obj,v,dvdt)
+
+        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);