72 int e, k, l, n, m, N = inco.
line_size(), Nk = (k_turb) ? (*k_turb).line_size() : 0, D =
dimension, nf_tot = domaine.nb_faces_tot(), cR = (rho.dimension_tot(0) == 1), cM = (mu.dimension_tot(0) == 1), Np = press.line_size();
78 DoubleTab dvr_elem(domaine.nb_elem_tot()*
dimension, N, N, N);
87 DoubleTab gradAlpha, vort, nut;
94 gradAlpha.
resize(domaine.nb_elem_tot(), D, N);
100 vort.
resize(domaine.nb_elem_tot(), D, N);
106 nut.
resize(domaine.nb_elem_tot(), N);
110 for (e = 0; e < domaine.nb_elem_tot(); e++)
113 for (a_max = 0, k = -1, n = 0; n < N; n++)
114 if ((a_m = alpha(e, n)) > a_max) k = n, a_max = a_m;
116 for (
int i = nf_tot + D * e, d = 0; d < D; d++, i++) maj(i) = k;
123 for (n = 0; n < N; n++)
125 in.
alpha(n) = alpha(e, n);
126 in.
rho(n) = rho(!cR * e, n);
127 in.
mu(n) = mu(!cM * e, n);
128 in.
d_bulles(n) = (d_bulles) ? (*d_bulles)(e, n) : -1. ;
129 for (
int d = 0; d < D; d++) in.
v(d, n) = inco(nf_tot + D * e + d, n);
130 for (m = n+1; m < N; m++)
133 const int ind_trav = (n*(N-1)-(n-1)*(n)/2) + (m-n-1);
135 in.
sigma(ind_trav) = res_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)));
138 for (n = 0; n < Nk; n++) in.
k(n) = (k_turb) ? (*k_turb)(e, n) : -1., in.
nut(n) = (is_turb) ? nut(e, n) : -1. ;
139 for (
int d = 0; d < D; d++) in.
g(d) = (*gravity)(e,d);
141 for (n = 0; n < N; n++)
142 for (
int d = 0; d < D; d++) in.
gradAlpha(d, n) = gradAlpha(e, d, n);
144 for (n = 0; n < N; n++)
145 for (
int d = 0; d < D; d++) in.
vort(d, n) = vort(e, d, n);
152 for (i = nf_tot + D * e, d = 0; d < D; d++, i++)
153 for (n = 0; n < N; n++)
154 if (n != k && (a_m = alpha(e, n)) < a_eps)
156 coeff(i, n, 1) = mat_diag(N * i + k, N * i + k) * (coeff(i, n, 0) = std::min(std::max((a_eps - a_m) / (a_eps - a_eps_min), 0.), 1.));
157 for (l=0 ; l<N ; l++) dvr_elem(D*e+d, n, k, l) = out.
dvr(n, k, d, l*D+d) ;
158 double flux = coeff(i, n, 0) * secmem(i, n) + coeff(i, n, 1) * (inco(i, n) - inco(i, k) - out.
vr(n, k, d));
159 secmem(i, k) += flux, secmem(i, n) -= flux;
164 for (
auto &&n_m: matrices)
165 if (n_m.second->nb_colonnes())
167 int diag = (n_m.first == ch.
le_nom().getString());
170 for (e = 0, l = nf_tot; e < domaine.nb_elem_tot(); e++)
171 for (
int d = 0; d < D; d++, l++)
172 for (n = 0; n < N; n++)
177 for (k = maj(l), i = mat.
get_tab1()(N * l + n) - 1, j = mat.
get_tab1()(N * l + k) - 1;
178 i < mat.
get_tab1()(N * l + n + 1) - 1; i++, j++)
184 coeff(l, n, 1) * ((c == N * l + n) - (c == N * l + k));
186 coeff(l, n, 1) * ((c == N * l + n) - (c == N * l + k));
189 (-dvr_elem(D * e + d, n, k, n) * (c == N * l + n) -
190 dvr_elem(D * e + d, n, k, k) * (c == N * l + k));
192 (-dvr_elem(D * e + d, n, k, n) * (c == N * l + n) -
193 dvr_elem(D * e + d, n, k, k) * (c == N * l + k));
204 const IntTab& f_e = domaine.face_voisins(), &e_f = domaine.elem_faces();
205 const DoubleVect& fs = domaine.face_surfaces(), &ve = domaine.volumes();
206 const DoubleTab& xp = domaine.xp(), &xv = domaine.xv();
208 int N = alpha.
line_size(), D =
dimension, nf_tot = domaine.nb_faces_tot(), ne_tot = domaine.nb_elem_tot();;
212 DoubleTrav grad_f_a(nf_tot, N);
215 const DoubleTab& fg_w = ch_a.
fgrad_w;
217 const IntTab& fcl_a = ch_a.
fcl();
219 for (
int n = 0; n < N; n++)
220 for (
int f = 0; f < nf_tot; f++)
223 for (
int j = fg_d(f); j < fg_d(f+1) ; j++)
227 if ( (f_bord = e-ne_tot) < 0)
228 grad_f_a(f, n) += fg_w(j) * alpha(e, n);
229 else if (fcl_a(f_bord, 0) == 1 || fcl_a(f_bord, 0) == 2)
230 grad_f_a(f, n) += fg_w(j) ? fg_w(j) * ref_cast(
Echange_impose_base, cls_a[fcl_a(f_bord, 1)].valeur()).T_ext(fcl_a(f_bord, 2), n) : 0;
231 else if (fcl_a(f_bord, 0) == 4)
232 grad_f_a(f, n) += fg_w(j) ? fg_w(j) * ref_cast(
Neumann_paroi , cls_a[fcl_a(f_bord, 1)].valeur()).flux_impose(fcl_a(f_bord, 2), n) : 0;
233 else if (fcl_a(f_bord, 0) == 6)
234 grad_f_a(f, n) += fg_w(j) * ref_cast(
Dirichlet, cls_a[fcl_a(f_bord, 1)].valeur()).val_imp(fcl_a(f_bord, 2), n);
239 for (
int n = 0; n < N; n++)
240 for (
int e = 0; e < ne_tot; e++)
241 for (
int d = 0; d < D; d++)
243 gradAlphaElem(e, d, n) = 0 ;
244 for (
int j = 0, f; j < e_f.dimension(1) && (f = e_f(e, j)) >= 0; j++)
245 gradAlphaElem(e, d, n) += (e == f_e(f, 0) ? 1 : -1) * fs(f) * (xv(f, d) - xp(e, d)) / ve(e) * grad_f_a(f, n);
254 const DoubleTab& n_f = domaine.face_normales(), &vf_dir = domaine.volumes_entrelaces_dir();
255 const DoubleVect& vf = domaine.volumes_entrelaces(), &fs = domaine.face_surfaces(), &ve = domaine.volumes();
256 const IntTab& f_e = domaine.face_voisins(), &e_f = domaine.elem_faces();
257 const DoubleTab& xp = domaine.xp(), &xv = domaine.xv();
259 int N = alpha.
line_size(), D =
dimension, ne_tot = domaine.nb_elem_tot(), nf_tot = domaine.nb_faces_tot(), nf = domaine.nb_faces();
261 DoubleTrav gradAlphaElem(ne_tot, D, N);
265 DoubleTrav grad_f_a(nf_tot, N);
268 const DoubleTab& fg_w = ch_a.
fgrad_w;
270 const IntTab& fcl_a = ch_a.
fcl();
272 for (
int n = 0; n < N; n++)
273 for (
int f = 0; f < nf_tot; f++)
276 for (
int j = fg_d(f); j < fg_d(f+1) ; j++)
280 if ( (f_bord = e-ne_tot) < 0)
281 grad_f_a(f, n) += fg_w(j) * alpha(e, n);
282 else if (fcl_a(f_bord, 0) == 1 || fcl_a(f_bord, 0) == 2)
283 grad_f_a(f, n) += fg_w(j) ? fg_w(j) * ref_cast(
Echange_impose_base, cls_a[fcl_a(f_bord, 1)].valeur()).T_ext(fcl_a(f_bord, 2), n) : 0;
284 else if (fcl_a(f_bord, 0) == 4)
285 grad_f_a(f, n) += fg_w(j) ? fg_w(j) * ref_cast(
Neumann_paroi , cls_a[fcl_a(f_bord, 1)].valeur()).flux_impose(fcl_a(f_bord, 2), n) : 0;
286 else if (fcl_a(f_bord, 0) == 6)
287 grad_f_a(f, n) += fg_w(j) * ref_cast(
Dirichlet, cls_a[fcl_a(f_bord, 1)].valeur()).val_imp(fcl_a(f_bord, 2), n);
292 for (
int n = 0; n < N; n++)
293 for (
int e = 0; e < ne_tot; e++)
294 for (
int d = 0; d < D; d++)
295 for (
int j = 0, f; j < e_f.dimension(1) && (f = e_f(e, j)) >= 0; j++)
296 gradAlphaElem(e, d, n) += (e == f_e(f, 0) ? 1 : -1) * fs(f) * (xv(f, d) - xp(e, d)) / ve(e) * grad_f_a(f, n);
299 double scalGradElem=0.;
301 for (
int n = 0; n < N; n++)
302 for (
int f = 0; f < nf; f++)
304 for (c=0 ; c<2 && (e = f_e(f, c)) >= 0; c++)
305 for (
int d = 0; d < D; d++)
306 gradAlphaFaces(f, d, n) += vf_dir(f, c)/vf(f)*gradAlphaElem(e, d, n);
308 for (
int d = 0; d < D; d++)
309 scalGradElem += gradAlphaFaces(f, d, n)*n_f(f,d)/fs(f);
310 for (
int d = 0; d < D; d++)
311 gradAlphaFaces(f, d, n) += (grad_f_a(f, n) - scalGradElem)*n_f(f,d)/fs(f);
const Cond_lim & les_conditions_limites(int) const
Renvoie la i-ieme condition aux limites.