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