Mercurial > repos > public > sbplib
changeset 1186:3364a51f0d9e feature/rv
Add 1d shapiro filter function to ResidualViscosity
author | Vidar Stiernström <vidar.stiernstrom@it.uu.se> |
---|---|
date | Fri, 05 Jul 2019 19:08:37 +0200 |
parents | abb1b3ab8c23 |
children | 5aa3049a4212 |
files | +rv/ResidualViscosity.m |
diffstat | 1 files changed, 30 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/+rv/ResidualViscosity.m Fri Jul 05 18:12:10 2019 +0200 +++ b/+rv/ResidualViscosity.m Fri Jul 05 19:08:37 2019 +0200 @@ -32,6 +32,9 @@ 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); case 'maximum neighbors' switch grid.D() case 1 @@ -73,5 +76,32 @@ minmaxDiff = umax - umin; minmaxDiff = reshape(minmaxDiff',g.N(),1); end + function F = shapiroFilter(grid, order) + switch order + case 2 + F = spdiags(repmat([1 2 1],grid.m(1),1), -1:1, grid.m(1), grid.m(1)); + case 4 + F = spdiags(repmat([-1 4 10 4 -1],grid.m(1),1), -2:2, grid.m(1), grid.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)); + 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)); + 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)); + % Fx(1,:) = 0; + % Fx(1,1:2) = 1/(mid+1)*[mid 1]; + % Fx(end,:) = 0; + % Fx(end,end-1:end) = 1/(mid+1)*[1 mid]; + % Fy = spdiags(repmat(1/(mid+2)*[1 mid 1],g.m(2),1), -1:1, g.m(2), g.m(2)); + % Fy(1,:) = 0; + % Fy(1,1:2) = 1/(mid+1)*[mid 1]; + % Fy(end,:) = 0; + % Fy(end,end-1:end) = 1/(mid+1)*[1 mid]; + % Ix = speye(g.m(1)); + % Iy = speye(g.m(1)); + % F = kron(Fx, Iy) + kron(Ix, Fy); + end end + end \ No newline at end of file