1 function [flux,lambda] = conv_flux_buckley_leverett_derivative(glob, U, params)
2 %
function [flux,lambda] = conv_flux_buckley_leverett_derivative(glob, U, params)
4 %
function computing the derivate of a nonlinear convection
function for a
5 % Buckley-Leverett problem.
6 % ``\partial_{u} f(x,u) = \frac{2M u (1-u)}{(u^2+M(1-U)^2)^2}
7 % \quad 0\leq u \leq 1``.
9 % required fields of params:
10 % bl_k : scaling factor
for diffusivity `k`
11 % bl_M : steepness factor of curve `M`
12 % U : DoF vector of discrete solution
13 % grid : pointer to grid structure
for neighbour
21 if ~isempty(glob) && size(glob,1) < size(glob,2)
22 warning('coordinates in variable glob are given row-wise, but expected them to be column-wise');
35 %tmpU = repmat(U, 1, grid.nneigh);
37 %real_nb_ind = grid.NBI > 0;
38 %neiU(real_nb_ind) = U(grid.NBI(real_nb_ind));
39 %U = 0.5 * (tmpU + neiU);
41 %vf = @(X,Y) [2*(2*X(:)-pi/2)-(4/3*Y(:)-pi/2)).^2.*cos((2*X(:)-pi/2)...
42 % +(4/3*Y(:)-pi/2))+0.1,...
43 % 2*((2*X(:)-pi/2)-(4/3*Y(:)-pi/2)).^2.*sin((2*X(:)-pi/2)...
44 % +(4/3*Y(:)-pi/2))+0.1];
46 % ((X(:)-Y(:))).^2.*cos((X(:)+Y(:))*pi/2)+0.1, ...
47 % ((X(:)-Y(:))).^2.*sin((X(:)+Y(:))*pi/2)+0.1 ...
50 %vf = @(X,Y) [abs((X(:)-Y(:))).^0.50.*cos((X(:)+Y(:))*pi/2)+0.5, ...
51 % abs((X(:)-Y(:))).^0.50.*sin((X(:)+Y(:))*pi/2)+0.5];
53 %vvf(X(:)>Y(:),[1,2])=vvf(X(:)>Y(:),[2,1]);
56 if params.debug && ( max(U)+eps > 1 || min(U) - eps < 0 )
57 error('U is outside admissable bounds [0,1]');
62 %flux = params.bl_k * (2*U(:)*params.bl_M)./(U(:).^2 + params.bl_M).^2;
63 flux = params.bl_k * ...
64 ( 2*M*U(:) .* (1-U(:)) ) ...
66 ( U(:).^2 + M * (1-U(:)).^2 ).^2;
68 flux = [ flux, flux ] .* [ones(size(flux)), params.conv_a*X(:)];
72 if params.decomp_mode>0
73 error('function is nonlinear and does not support affine decomposition!');
function [ flux , lambda ] = conv_flux_buckley_leverett(glob, U, params)
convective flux for Buckley-Leverett problem