1 function diffusivity = diffusivity_buckley_leverett(glob, U, params)
2 %
function diffusivity = diffusivity_buckley_leverett(glob, U, params)
4 %
function computing an nonlinear diffusivity
for the buckley leverett problem
5 % ``k(u) = K p_c
'(u) \cdot \lambda_2(u) f(u) ``
7 % ``p_c(u) = u^{-\lambda},``
8 % ``p_c'(u) = -\lambda u^{-\lambda-1},``
9 % ``f(u) = \frac{\lambda_w(u)}{\lambda_w(u)+\lambda_n(u)},``
10 % ``\lambda_w(u) = \frac{u^{\frac{2+3\lambda}{\lambda}}}{\mu_1},``
11 % ``\lambda_n(u) = \frac{(1-u)^2 (1-u^{\frac{2+\lambda}{\lambda}})}{\mu_2}.``
14 % U : solution at points in
'glob'
16 % required fields of params:
17 % diff_K : diffussion factor `K`
18 % bl_mu_1 : viscosity factor `\mu_1`
19 % bl_mu_2 : viscosity factor `\mu_2`
20 % bl_lambda : mobility parameter `\lambda`
22 % See also diffusivity_buckley_leverett_derivative().
24 % generated fields of diffusivity:
25 % epsilon: upper bound on diffusivity value
26 % K: vector with diffusivity values
30 if ~isempty(glob) && size(glob,1) < size(glob,2)
31 warning('coordinates in variable glob are given row-wise, but expected them to be column-wise');
37 error('argument function is negative, which is disallowed here');
41 ld = params.bl_lambda;
45 lambda1 = U.^((2+3*ld)/ld)/mu1;
46 lambda2 = (1-U).^2.*(1-U.^(2/ld+1))/mu2;
48 mobility = lambda1 + lambda2;
50 %deg1 = (1-U).^(-0.5);
51 %deg1(isinf(deg1)) = realmax;
53 diffusivity.K = + params.diff_K * ld/mu1 ...
55 .* (U.^(2-ld+2/ld) ./ mobility);
57 diffusivity.epsilon = max(diffusivity.K);
60 if ( any(isnan(diffusivity.K) | isinf(diffusivity.K)) )
61 error('diffusion factor has invalid elements');
62 elseif ( max(abs(imag(U))) > 1e-6 )
63 error('U has non-trivial imaginary addend.');
67 if params.decomp_mode>0
68 error('function is nonlinear and does not support affine decomposition!');