rbmatlab  1.16.09
 All Classes Namespaces Files Functions Variables Modules Pages
fv_frechet_operators_diff_flux_pressure_gradient.m
Go to the documentation of this file.
2  model, model_data, P, S, NU_ind)
4 % model, model_data, P, S, NU_ind)
5 % computes a jacobian of implicit non-linear convective contributions to time
6 % evolution matrices at a point '(P,S)'.
7 %
8 %
9 
10 
11 if nargin < 5
12  NU_ind = 1:model_data.gn_edges;
13 end
14 
15 grid = [];
16 if ~isempty(model_data)
17  grid = model_data.grid;
18 end
19 
20 real_NB_ind = grid.NBI>0 & grid.NBI < repmat((1:grid.nelements)', 1, grid.nneigh);
21 NBIind = grid.NBI(real_NB_ind);
22 INBind = grid.INB(real_NB_ind);
23 %NB_real_NB_ind = sub2ind(size(grid.NBI),NBIind,INBind);
24 %NB_real_NB_ind = NB_real_NB_ind';
25 [i, j]=find(real_NB_ind);
26 i = i';
27 jj = model_data.gEI(real_NB_ind);
28 jj = jj(:)';
29 dir_NB_ind = find(grid.NBI == -1);
30 neu_NB_ind = find(grid.NBI == -2);
31 
32 spm.sn = model_data.gn_edges;
33 spm.sm = length(S);
34 [si1, subset1, dummy] = intersect(jj, NU_ind);
35 subset = [subset1, subset1+length(jj)];
36 spm.si = [si1, si1];
37 spm.sj = [i, NBIind'];
38 spm.sj = spm.sj(subset);
39 
40 spm.pn = model_data.gn_edges;
41 spm.pm = length(P);
42 spm.pi = [si1, si1];
43 spm.pj = [i, NBIind'];
44 spm.pj = spm.pj(subset);
45 
46 if ~isempty(dir_NB_ind)
47  error('Dirichlet boundaries not yet implemented');
48 end
49 
50 tmpS = repmat(S, 1, grid.nneigh);
51 neiS = tmpS;
52 real_nb_ind = grid.NBI > 0;
53 neiS(real_nb_ind) = S(grid.NBI(real_nb_ind));
54 %edgeU = 0.5 * (tmpU + neiU);
55 %edgeU = sqrt(tmpU.*neiU);
56 %edgeU = min(tmpU, neiU);
57 %edgeU = 2*(tmpU.*neiU)./(tmpU+neiU);
58 
59 mobi_tmp = model.two_phase.total_mobility([grid.ESX(:), grid.ESY(:)], tmpS(:), model);
60 deri_mobi_tmp = model.two_phase.total_mobility_deriv([grid.ESX(:), grid.ESY(:)], tmpS(:), model);
61 mobi_nei = model.two_phase.total_mobility([grid.ESX(:), grid.ESY(:)], neiS(:), model);
62 deri_mobi_nei = model.two_phase.total_mobility_deriv([grid.ESX(:), grid.ESY(:)], neiS(:), model);
63 
64 meanptr = model.mean_ptr;
65 meanx = model.mean_deriv1_ptr;
66 meany = model.mean_deriv2_ptr;
67 
68 K = meanptr(max([mobi_tmp.K, mobi_nei.K],0));
69 if length(K) == 1
70  K = ones(size(grid.ESX))*K;
71 else
72  K = reshape(K,size(grid.ESX));
73 end
74 
75 d_KK = meanx(max([mobi_tmp.K, mobi_nei.K],0)).*deri_mobi_tmp.K;
76 if length(d_KK) == 1
77  d_KK = ones(size(grid.ESX))*d_KK;
78 else
79  d_KK = reshape(d_KK,size(grid.ESX));
80 end
81 
82 d_KL = meany(max([mobi_tmp.K, mobi_nei.K],0)).*deri_mobi_nei.K;
83 if length(d_KL) == 1
84  d_KL = ones(size(grid.ESX))*d_KL;
85 else
86  d_KL = reshape(d_KL,size(grid.ESX));
87 end
88 
89 nfaces = size(grid.NBI,2);
90 PP = repmat(P,1,nfaces);
91 % matrix with the neighbouring values products
92 PNB = nan * ones(size(PP));
93 PNB(real_NB_ind) = PP(grid.NBI(real_NB_ind));
94 
95 % set real neighbour values
96 orientation = grid.NX(real_NB_ind) + grid.NY(real_NB_ind);
97 num_flux_mat.G(1:model_data.gn_inner_edges) = ...
98  K(real_NB_ind).*grid.EL(real_NB_ind).*(grid.DS(real_NB_ind).^(-1).* ...
99  (PNB(real_NB_ind)- ...
100  PP(real_NB_ind))) ...
101  .* orientation;
102 
103 orientation_i = grid.NX(real_NB_ind) + grid.NY(real_NB_ind);
104 orientation_nb = grid.NX(real_NB_ind) + grid.NY(real_NB_ind);
105 TKL_i = grid.EL(real_NB_ind).*grid.DS(real_NB_ind).^(-1);
106 TKL_nb = grid.EL(real_NB_ind).*grid.DS(real_NB_ind).^(-1);
107 
108 
109 svals1 = (d_KK(real_NB_ind).* TKL_i .* (PNB(real_NB_ind) - PP(real_NB_ind)) .* orientation_i)';
110 svals2 = (d_KL(real_NB_ind).* TKL_nb .* (PNB(real_NB_ind) - PP(real_NB_ind)) .* orientation_nb)';
111 
112 pvals1 = -(K(real_NB_ind) .* TKL_i .* orientation_i)';
113 pvals2 = (K(real_NB_ind) .* TKL_nb .* orientation_nb)';
114 
115 spm.svals = [ svals1, svals2 ];
116 spm.svals = spm.svals(subset);
117 spm.pvals = [ pvals1, pvals2 ];
118 spm.pvals = spm.pvals(subset);
119 
function spm = fv_frechet_operators_diff_flux_pressure_gradient(model, model_data, P, S, NU_ind)
computes a jacobian of implicit non-linear convective contributions to time evolution matrices at a p...