1 function diffusivity = diffusivity_buckley_leverett_derivative(glob, U, params)
2 %
function diffusivity = diffusivity_buckley_leverett_derivative(glob, U, params)
4 %
function computing derivative of an nonlinear diffusivity
for the Buckley-Leverett problem with
6 % `` \partial_u k(x,u) = K p_c
''(u) \lambda_n(u) f_w(u) + p_c'(u) \left (\lambda_n'(u)f_w(u) + \lambda_n(u) f_w'(u) \right) ``
7 % `` = -K\frac{\lambda}{\mu_1} \left[
8 % u^{\frac{2+2\lambda-\lambda^2}{\lambda}}
9 % \left( \frac{\lambda_n(u) m'(u)}{(m(u))^2} + \frac{\lambda_n
'(u)}{m(u)} \right)
10 % + u^{\frac{2+\lambda-\lambda^2}{\lambda}}
11 % \frac{\lambda_n(u)}{m(u)} \left(\frac{2\lambda-\lambda^2+2}{\lambda}\right) \right]``
13 % ``p_c(u) = u^{-\lambda},``
14 % ``p_c'(u) = -\lambda u^{-\lambda-1},``
15 % ``p_c
''(u) = (\lambda^2+\lambda) {u^{-\lambda-2}},``
16 % ``f_w(u) = \frac{\lambda_w(u)}{\lambda_w(u)+\lambda_n(u)},``
17 % ``\lambda_w(u) = \frac{u^{\frac{2+3\lambda}{\lambda}}}{\mu_1},``
18 % ``\lambda_n(u) = \frac{(1-u)^2 (1-u^{\frac{2+\lambda}{\lambda})}}{\mu_2},``
19 % ``\lambda_w
'(u) = \frac{2+3\lambda}{\lambda} \frac{u^{\frac{2+2\lambda}{\lambda}}}{\mu_1},``
20 % ``\lambda_n'(u) = \frac{-1}{\mu_2} \left(2(1-u) (1-u^{\frac{2+\lambda}{\lambda})} + \frac{2+\lambda}{\lambda}(1-u)^2 (1-u^{\frac{2}{\lambda}}) \right),``
21 % ``m(u) = \lambda_w(u) + \lambda_n(u),``
22 % ``m
'(u) = \lambda_w'(u) + \lambda_n
'(u).``
25 % U : solution at points in 'glob
'
27 % required fields of params:
28 % diff_K : diffussion factor `K`
29 % bl_mu_1 : viscosity factor `\mu_1`
30 % bl_mu_2 : viscosity factor `\mu_2`
31 % bl_lambda : material parameter `\lambda`
33 % See also diffusivity_buckley_leverett().
35 % generated fields of diffusivity:
36 % epsilon: upper bound on diffusivity value
37 % K: vector with diffusivity values
41 if ~isempty(glob) && size(glob,1) < size(glob,2)
42 warning('coordinates in variable glob are given row-wise, but expected them to be column-wise
');
49 ld = params.bl_lambda;
53 lambda1 = U.^((2+3*ld)/ld)/mu1;
54 lambda2 = (1-U).^2.*(1-U.^(2/ld+1))/mu2;
56 mobility = lambda1 + lambda2;
58 lambda1d = U.^((2+2*ld)/ld)/mu1*(2/ld+3);
59 lambda2d = -1/mu2*(2*(1-U).*(1-U.^(2/ld+1)) + (1-U).^2.*(1-U.^(2/ld)*(2/ld+1)));
61 mobilityd = lambda1d + lambda2d;
62 %gud = 2*U./params.diff_mu1;
63 %hu = lambda1+lambda2;
64 %hud = gud + 2*(U-1)./params.diff_mu2;
66 %fud = gud./hu - (gu.*hud)./(hu.^2);
68 diffusivity.K = + params.diff_K * ld/mu1 ...
69 * U.^(2-ld+2/ld) .* ( ...
70 U .* ( (lambda2.*mobilityd)./mobility.^2 ...
71 + lambda2d./mobility ) ...
72 + lambda2./mobility * (2-ld+2/ld) );
74 diffusivity.epsilon = max(diffusivity.K);
77 if ( any(isnan(diffusivity.K) | isinf(diffusivity.K)) )
78 error('diffusion factor has invalid elements
');
79 elseif ( max(abs(imag(U))) > 1e-6 )
80 error('U has non-trivial imaginary addend.
');
84 if params.decomp_mode>0
85 error('function is nonlinear and does not support affine decomposition!
');