comparison +rv/ResidualViscosity.m @ 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 a8ee5eca0e6c
children 03ecf18d035f
comparison
equal deleted inserted replaced
1149:1fe48cbd379a 1150:922996695952
11 11
12 methods 12 methods
13 % TBD: Decide on how to treat waveSpeed. It would be nice to just pass a constant value without 13 % TBD: Decide on how to treat waveSpeed. It would be nice to just pass a constant value without
14 % wrapping it in a function. 14 % wrapping it in a function.
15 function obj = ResidualViscosity(Df, waveSpeed, Cmax, Cres, h, normalization) 15 function obj = ResidualViscosity(Df, waveSpeed, Cmax, Cres, h, normalization)
16 default_arg('normalization',@(v)norm(v/2,inf)); 16 default_arg('normalization',@(v)abs(obj.minmaxDiffNeighborhood1d(v)-norm(v-mean(v),inf)));
17 %default_arg('normalization',@(v)norm(v/2,inf));
17 obj.Df = Df; 18 obj.Df = Df;
18 obj.waveSpeed = waveSpeed; 19 obj.waveSpeed = waveSpeed;
19 obj.h = h; 20 obj.h = h;
20 obj.Cmax = Cmax; 21 obj.Cmax = Cmax;
21 obj.Cres = Cres; 22 obj.Cres = Cres;
27 firstOrderViscosity = obj.Cmax*obj.h*abs(obj.waveSpeed(v)); 28 firstOrderViscosity = obj.Cmax*obj.h*abs(obj.waveSpeed(v));
28 residualViscosity = obj.Cres*obj.h^2*abs(dvdt + Df)./obj.normalization(v); 29 residualViscosity = obj.Cres*obj.h^2*abs(dvdt + Df)./obj.normalization(v);
29 viscosity = min(firstOrderViscosity, residualViscosity); 30 viscosity = min(firstOrderViscosity, residualViscosity);
30 end 31 end
31 end 32 end
33 methods (Static)
34
35 % function f = minmaxDiffNeighborhood(g)
36 % switch g.D()
37 % case 1
38 % f = @(u)minmaxDiffNeighborhood1d(u);
39 % case 2
40 % f = @(u)minmaxDiffNeighborhood2d(g,u);
41 % end
42 % end
43
44 function minmaxDiff = minmaxDiffNeighborhood1d(u)
45 umax = movmax(u,3);
46 umin = movmin(u,3);
47 minmaxDiff = umax - umin;
48 end
49 function minmaxDiff = minmaxDiffNeighborhood2d(g, u)
50 m = g.m();
51 uMatrix = grid.funcToMatrix(g,u);
52 umax = max(movmax(uMatrix,3,1),movmax(uMatrix,3,2));
53 umin = min(movmin(uMatrix,3,1),movmin(uMatrix,3,2));
54 minmaxDiff = umax - umin;
55 minmaxDiff = reshape(minmaxDiff',m(1)*m(2),1);
56 end
57 end
32 end 58 end