5 function diff = Phi(
this, glob, S, model)
8 % S_sorted = sort(S(:));
10 if ~isfield(model, 'h')
11 h = 1e-6; %max(min(abs(S_sorted(2:end) - S_sorted(1:end-1))), 1e-3);
17 intlength = length(intrange)-1;
18 int_args = phi(this, [], intrange, model);
19 if isnan(int_args.K(1))
23 ints = cumsum(int_args.K .* [1, ones(1, intlength)*h]);
24 S_indices = floor(S/h)+1;
26 diff.K = ints(S_indices);
27 diff.epsilon = max(diff.K);
30 function diff = phi(this, glob, S, model)
31 % function diff = phi(this, glob, S, model)
32 % returns the function `\phi(s)`.
34 kw = water_permeability(this, glob, S, model);
36 ko = oil_permeability(this, glob, S, model);
38 pc_derivative = capillary_pressure_derivative(this, glob, S, model);
40 diff.K = kw .* ko ./ (kw + ko) .* pc_derivative;
41 diff.epsilon = max(diff.K);
44 function ddiff = phi_derivative(this, glob, S, model)
45 % function ddiff = phi_derivative(this, glob, S, model)
46 % returns the derivative `\phi'(s)`.
47 kw = water_permeability(this, glob, S, model);
49 dkw = water_permeability_derivative(this, glob, S, model);
51 ko = oil_permeability(this, glob, S, model);
53 dko = oil_permeability_derivative(this, glob, S, model);
55 pc_derivative = capillary_pressure_derivative(this, glob, S, model);
57 pc_sec_derivative = capillary_pressure_second_derivative(this, glob, S, model);
59 oben = ko .* kw .* pc_derivative;
61 oben_der = dko .* kw .* pc_derivative + ko .* dkw .* pc_derivative + ko .* kw .* pc_sec_derivative;
65 unten_der = dkw + dko;
67 nominator = (oben_der .* unten - unten_der .* oben);
68 denominator = unten .* unten;
69 denominator(nominator == 0) = 1;
70 ddiff.K = nominator ./ denominator;
71 assert(all(~isinf(ddiff.K)));
72 assert(all(~isnan(ddiff.K)));
73 ddiff.epsilon = max(ddiff.K);
76 function fw = waterflow(this, glob, S, model)
77 % function fw = waterflow(this, glob, S, model)
79 kw = water_permeability(this, glob, S, model);
81 ko = oil_permeability(this, glob, S, model);
86 function dfw = waterflow_derivative(this, glob, S, model)
87 % function dfw = waterflow_derivative(this, glob, S, model)
89 kw = water_permeability(this, glob, S, model);
91 dkw = water_permeability_derivative(this, glob, S, model);
93 ko = oil_permeability(this, glob, S, model);
95 dko = oil_permeability_derivative(this, glob, S, model);
99 unten_der = dkw + dko;
101 dfw = (dkw .* unten - unten_der .* kw) ./ (unten .* unten);
105 function fwU = waterflow_flux(this, glob, S, U, model)
106 % function fwU = waterflow_flux(this, glob, S, U, model)
107 % returns the waterflow flux over the boundaries `f_w(s) \cdot \underscore{u}`.
109 kw = water_permeability(
this, glob, S, model);
111 assert(size(U) == [size(kw, 1), 2]);
112 ko = oil_permeability(
this, glob, S, model);
113 scalar = kw./(kw + ko);
115 fwU = [ scalar, scalar ] .* U;
119 function fw_deriv_U = waterflow_deriv_flux(
this, glob, S, U, model)
120 %
function fwU = waterflow_deriv_flux(
this, glob, S, model)
121 % returns the waterflow flux over the boundaries, actually only `\underscore{u}`.
127 function m = total_mobility(
this, glob, S, model)
128 %
function m = total_mobility(
this, glob, S, model)
130 kw = water_permeability(this, glob, S, model);
131 ko = oil_permeability(this, glob, S, model);
133 m.epsilon = max(m.K);
137 function m = total_mobility_deriv(this, glob, S, model)
138 % function m = total_mobility(this, glob, S, model)
140 dkw = water_permeability_derivative(this, glob, S, model);
141 dko = oil_permeability_derivative(this, glob, S, model);
143 m.epsilon = max(m.K);
148 function m = total_mobility_dual(this, glob, S, NBI, Sdir, dir_NBI, model)
149 % function m = total_mobility_dual(this, glob, S, NBI, Sdir, dir_NBI, model)
151 mob = total_mobility(this, glob, S, model);
153 mob = repmat(mob, 4, 1);
155 assert(size(mob) == size(mobn));
157 m = 1 ./ ( (2 ./ mob) + (2 ./ mobn) );
160 function p = visualize(this)
164 descr = default_descr(this, descr);
168 kw = water_permeability(this, glob, Stest, descr);
169 ko = oil_permeability(this, glob, Stest, descr);
170 pc = capillary_pressure(this, glob, Stest, descr);
171 dpc = capillary_pressure_derivative(this, glob, Stest, descr);
172 ph = phi(this, glob, Stest, descr);
173 Ph = Phi(this, glob, Stest, descr);
175 fw = waterflow(this, glob, Stest, descr);
176 m = total_mobility(this, glob, Stest, descr);
180 subplot(2,3,1); plot(Stest, kw, Stest, ko); title('kw, ko');
181 sp=subplot(2,3,2); plot(Stest, pc); set(sp, 'YScale', 'log'); title('p_c');
182 sp=subplot(2,3,3); plot(Stest, dpc); set(sp, 'YScale', 'log'); title('p_c''');
183 subplot(2,3,4); plot(Stest, ph.K, Stest, Ph.K); title('\phi, \Phi');
184 subplot(2,3,5); plot(Stest, fw); title('f');
185 subplot(2,3,6); plot(Stest, m.K); title('M');
192 kw = water_permeability(this, glob, S, model);
194 dkw = water_permeability_derivative(this, glob, S, model);
196 ko = oil_permeability(this, glob, S, model);
198 dko = oil_permeability_derivative(this, glob, S, model);
200 pc = capillary_pressure(this, glob, S, model);
202 dpc = capillary_pressure_derivative(this, glob, S, model);
204 ddpc = capillary_pressure_second_derivative(this, glob, S, model);
206 c = injection_concentration(this, glob, model);
208 s_under = lower_source(this, elemin, loc, grid);
210 s_above = upper_source(this, elemin, loc, grid);
212 descr = default_descr(this, descr);