Mercurial > repos > public > sbplib
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);