96 const IntTab& f_e = domaine.face_voisins(), &fcl = ch.
fcl();
97 const DoubleTab& inco = ch.
valeurs(), &vfd = domaine.volumes_entrelaces_dir(),
100 &temp_ou_enth = ref_cast(
Pb_Multiphase,
equation().probleme()).equation_energie().inconnue().passe(),
108 int e, f, k, l, n, m, N = inco.
line_size(), Nk = (k_turb) ? (*k_turb).line_size() : 0, d, D =
dimension, cR = (rho.dimension_tot(0) == 1), cM = (mu.dimension_tot(0) == 1), Np = press.line_size(),
120 DoubleTab dvr_face(domaine.nb_faces(), N, N, N);
128 DoubleTab gradAlpha, vort, nut;
135 gradAlpha.
resize(domaine.nb_faces(), D, N);
141 vort.
resize(domaine.nb_faces(), D, N);
147 nut.
resize(domaine.nb_elem_tot(), N);
152 for (f = 0; f < domaine.nb_faces(); f++)
156 for (a_max = 0, k = -1, n = 0; n < N; n++)
158 if (iter) a_m = alpha(f_e(f, f_e(f, 1) >= 0 && inco(f, n) < 0), n);
162 for (a_m = 0, i = 0; i < 2; i++)
163 if ((e = f_e(f, i)) >= 0)
164 a_m += vfd(f, i) / vf(f) * alpha(e, n);
166 if (a_m > a_max) k = n, a_max = a_m;
168 if (k >= 0) maj(f) = k;
173 for (n = 0; n < N; n++)
174 for (d = 0; d < D; d++) in.
v(d, n) = inco(f, n) * domaine.face_normales(f, d) / domaine.face_surfaces(f);
176 for (in.
alpha = 0, in.
rho = 0, in.
mu = 0, in.
d_bulles = 0, in.
k = 0, in.
nut = 0, in.
dh = 0, in.
g = 0, i = 0; i < 2 && (e = f_e(f, i)) >= 0; i++)
178 in.
dh += vfd(f, i) / vf(f) * dh_e(e);
179 for (n = 0; n < N; n++)
181 in.
alpha(n) += vfd(f, i) / vf(f) * alpha(e, n);
182 in.
rho(n) += vfd(f, i) / vf(f) * rho(!cR * e, n);
183 in.
mu(n) += vfd(f, i) / vf(f) * mu(!cM * e, n);
184 in.
d_bulles(n)+=vfd(f, i) / vf(f) *((d_bulles) ? (*d_bulles)(e, n) : -1.) ;
185 for (m = n+1; m < N; m++)
188 const int ind_trav = (n*(N-1)-(n-1)*(n)/2) + (m-n-1);
190 in.
sigma(ind_trav) = reso_en_T ? sat.
sigma(temp_ou_enth(e, n), press(e, n * (Np > 1))) : sat.
sigma_h(temp_ou_enth(e, n), press(e, n * (Np > 1)));
193 for (n = 0; n < Nk; n++) in.
k(n) += vfd(f, i) / vf(f) *((k_turb) ? (*k_turb)(e, n) : -1.), in.
nut(n) += vfd(f, i) / vf(f) *((is_turb) ? nut(e, n) : -1.) ;
194 for (d = 0; d < D; d++) in.
g(d) += vfd(f, i) / vf(f) * (*gravity)(e,d);
196 for (n = 0; n < N; n++)
197 for (d = 0; d < D; d++) in.
gradAlpha(d, n) = gradAlpha(f, d, n);
199 for (n = 0; n < N; n++)
200 for (d = 0; d < D; d++) in.
vort(d, n) = vort(f, d, n);
206 for (n = 0; n < N; n++)
208 if (iter) a_m = alpha(f_e(f, f_e(f, 1) >= 0 && inco(f, n) < 0), n);
212 for (a_m = 0, i = 0; i < 2; i++)
213 if ((e = f_e(f, i)) >= 0)
214 a_m += vfd(f, i) / vf(f) * alpha(e, n);
216 if (n != k && a_m < a_eps)
218 coeff(f, n, 1) = mat_diag(N * f + k, N * f + k) * (coeff(f, n, 0) = std::min(std::max((a_eps - a_m) / (a_eps - a_eps_min), 0.), 1.));
219 DoubleTab vr_face(N, N);
220 for (d = 0; d < D; ++d)
222 vr_face(n, k) += out.
vr(n, k, d) * domaine.face_normales(f, d) / domaine.face_surfaces(f);
223 for (l=0 ; l<N ; l++) dvr_face(f, n, k,l) += out.
dvr(n, k, d, l*D+d) * domaine.face_normales(f, d) / domaine.face_surfaces(f);
225 double flux = coeff(f, n, 0) * secmem(f, n) + coeff(f, n, 1) * (inco(f, n) - inco(f, k) - vr_face(n, k));
226 secmem(f, k) += flux, secmem(f, n) -= flux;
232 for (
auto &&n_m : matrices)
233 if (n_m.second->nb_colonnes())
235 int diag = (n_m.first == ch.
le_nom().getString());
238 for (f = 0; f < domaine.nb_faces(); f++)
240 for (n = 0; n < N; n++)
244 for (
auto i = mat.
get_tab1()(N * f + n) - 1, j = mat.
get_tab1()(N * f + k) - 1; i < mat.
get_tab1()(N * f + n + 1) - 1; i++, j++)
247 int c = diag * mat.
get_tab2()(i) - 1;
251 mat.
get_set_coeff()(j) += - coeff(f, n, 1) * ( - dvr_face(f, n, k, n)*(c == N * f + n) - dvr_face(f, n, k, n)*(c == N * f + k));
252 mat.
get_set_coeff()(i) += + coeff(f, n, 1) * ( - dvr_face(f, n, k, n)*(c == N * f + n) - dvr_face(f, n, k, k)*(c == N * f + k));
265 const IntTab& f_e = domaine.face_voisins();
266 const DoubleVect& vf = domaine.volumes_entrelaces(), &fs = domaine.face_surfaces();
267 const DoubleTab& n_f = domaine.face_normales(), &vfd = domaine.volumes_entrelaces_dir();
271 const int D =
dimension, N = vort.
dimension_tot(2), nf = domaine.nb_faces(), nf_tot = domaine.nb_faces_tot();
272 int c, e, f, n, d, d2, n_l = 0;
273 DoubleTrav grad_l(D, D), scal_grad(D);
275 for (f = 0; f < nf; f++)
276 for (c = 0; c < 2; c++)
285 for (n = 0; n < N; n++)
286 for (d = 0; d < D; d++)
287 vort(f, d, n) += vorticite(e, n) * vfd(f, c) / vf(f);
291 for (n = 0; n < N; n++)
292 for (d = 0; d < D; d++)
293 vort(f, d, n) += vorticite(e, N * d + n) * vfd(f, c) / vf(f);
298 for (f = 0; f < nf; f++)
301 for (d = 0; d < D; d++)
302 for (d2 = 0; d2 < D; d2++)
303 for (c = 0; c < 2 && (e = f_e(f, c)) >= 0; c++)
304 grad_l(d, d2) += vfd(f, c) / vf(f) * grad_v(nf_tot + D * e + d2, n_l * D + d);
307 for (d = 0; d < D; d++)
308 for (d2 = 0; d2 < D; d2++)
309 scal_grad(d) += grad_l(d, d2) * n_f(f, d2) / fs(f);
310 for (d = 0; d < D; d++)
311 for (d2 = 0; d2 < D; d2++)
312 grad_l(d, d2) += (grad_v(f, n_l * D + d) - scal_grad(d)) * n_f(f, d2) / fs(f);
314 vort(f, 0, n_l) = grad_l(2, 1) - grad_l(1, 2);
315 vort(f, 1, n_l) = grad_l(0, 2) - grad_l(2, 0);
316 vort(f, 2, n_l) = grad_l(1, 0) - grad_l(0, 1);