1 function diffusivity = diffusivity_buckley_leverett_simple_derivative(glob, U, params)
2 %
function diffusivity = diffusivity_buckley_leverett_simple_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[
9 % \left( \frac{\lambda_n(u) m'(u)}{(m(u))^2} + \frac{\lambda_n
'(u)}{m(u)} \right)
11 % \frac{\lambda_n(u)}{m(u)} \left(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^3}{\mu_1},``
18 % ``\lambda_n(u) = \frac{(1-u)^3}{\mu_2},``
19 % ``\lambda_w
'(u) = 3 \frac{u^{2}}{\mu_1},``
20 % ``\lambda_n'(u) = -3 \frac{(1-u)^2}{\mu_2},``
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_mu1 : viscosity factor `\mu_1`
30 % bl_mu2 : viscosity factor `\mu_2`
31 % bl_lambda : material parameter `\lambda`
33 % See also diffusivity_buckley_leverett_simple().
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 if params.newton_regularisation && ( ( max(U) > 1 )... % && max(U)-1e7*eps < 1 )...
50 || ( min(U) < 0 ) )%&& min(U)+1e7*eps > 0 ) )
56 ld = params.bl_lambda;
60 lambda1 = (U(:).^3)/mu1;
61 lambda2 = ((1-U(:)).^3)/mu2;
63 mobility = lambda1 + lambda2;
65 lambda1d = 3*(U(:).^2)/mu1;
66 lambda2d = -3*((1-U(:)).^2)/mu2;
68 mobilityd = lambda1d + lambda2d;
69 %gud = 2*U./params.diff_mu1;
70 %hu = lambda1+lambda2;
71 %hud = gud + 2*(U-1)./params.diff_mu2;
73 %fud = gud./hu - (gu.*hud)./(hu.^2);
75 diffusivity.K = + params.diff_K * ld/mu1 ...
76 * real(U.^(2-ld)) .* ( ...
77 U .* ( (lambda2.*mobilityd)./mobility.^2 ...
78 + lambda2d./mobility ) ...
79 + lambda2./mobility * (2-ld) );
82 diffusivity.epsilon = max(diffusivity.K);
85 if ( any(isnan(diffusivity.K) | isinf(diffusivity.K)) )
86 error('diffusion factor has invalid elements
');
87 elseif ( max(abs(imag(U))) > 1e-6 )
88 error('U has non-trivial imaginary addend.
');
92 if params.decomp_mode>0
93 error('function is nonlinear and does not support affine decomposition!
');