35 const IntTab& e_f = domaine.elem_faces(), &f_e = domaine.face_voisins();
37 int i, j, e, eb, ne = domaine.nb_elem(), f,n, N = inco.
line_size(), m,
40 for (
auto &&n_m : matrices)
41 if (n_m.first ==
"pression" || (n_m.first ==
"alpha" && !semi_impl.count(
"alpha")) || n_m.first ==
"vitesse")
46 if (n_m.first ==
"pression")
47 for (e = 0; e < ne; e++)
48 for (n = 0, m = 0; n < N; n++, m += (M > 1)) sten.
append_line(N * e + n, M * e + m);
49 else if (n_m.first ==
"vitesse")
50 for (e = 0; e < ne; e++)
53 if ((f = e_f(e, i)) >= 0)
54 for (n = 0; n < N; n++) sten.
append_line(N * e + n, N * f + n);
56 else for (e = 0; e < ne; e++)
58 if ((f = e_f(e, i)) >= 0)
59 for (j = 0; j < 2 && (eb = f_e(f, j)) >= 0; j++)
60 for (n = 0; n < N; n++) sten.
append_line(N * e + n, N * eb + n);
61 tableau_trier_retirer_doublons(sten);
72 &fs = domaine.face_surfaces(), &ve = domaine.volumes();
79 const DoubleTab& alpha = ch_a.
valeurs(), &c_alpha = semi_impl.count(
"alpha") ? semi_impl.at(
"alpha") : alpha,
80 &p_alpha = ch_a.
passe(), &press = ch_p.valeurs(), &vit = ch_v.valeurs();
82 const IntTab& fcl = ref_cast(
Champ_Inc_P0_base, ch_a).fcl(), &f_e = domaine.face_voisins(),
86 Matrice_Morse *Mp = matrices.count(
"pression") ? matrices.at(
"pression") :
nullptr,
87 *Ma = matrices.count(
"alpha") && !semi_impl.count(
"alpha") ? matrices.at(
"alpha") :
nullptr,
88 *Mv = matrices.count(
"vitesse") ? matrices.at(
"vitesse") :
nullptr;
90 int i, j, e, eb, f, n, N = alpha.
line_size(), m, M = press.line_size();
94 for (e = 0; e < domaine.nb_elem(); e++)
96 for (n = 0, m = 0; n < N; n++, m += (M > 1))
97 secmem(e, n) -= pe(e) * ve(e) * press(e, m) * (alpha(e, n) - p_alpha(e, n)) / dt;
99 for (n = 0, m = 0; n < N; n++, m += (M > 1))
100 (*Mp)(N * e + n, M * e + m) += pe(e) * ve(e) * (alpha(e, n) - p_alpha(e, n)) / dt;
102 for (n = 0, m = 0; n < N; n++, m += (M > 1))
103 (*Ma)(N * e + n, N * e + n) += pe(e) * ve(e) * press(e, m) / dt;
107 DoubleTrav dv_flux(N), dc_flux(2, N);
109 for (f = 0; f < domaine.nb_faces(); f++)
110 if (!fcl(f, 0) || (fcl(f, 0) > 4 && fcl(f, 0) < 7))
112 for (dv_flux = 0, dc_flux = 0, i = 0; i < 2; i++)
113 for (e = f_e(f, i), n = 0; n < N; n++)
115 const double v = vit(f, n) ? vit(f, n) : DBL_MIN,
116 fac = pf(f) * fs(f) * (1. + (v * (i ? -1 : 1) > 0 ? 1. : -1) *
alp) / 2;
119 dc_flux(i, n) = e >= 0 ? fac * vit(f, n) : 0;
123 for (i = 0; i < 2; i++)
124 if ((e = f_e(f, i)) >= 0)
125 if (e < domaine.nb_elem())
126 for (n = 0, m = 0; n < N; n++, m += (M > 1))
127 secmem(e, n) -= (i ? -1 : 1) * press(e, m) * dv_flux(n) * vit(f, n);
129 if (Mv && (fcl_v(f, 0) < 2 || fcl_v(f, 0) == 5))
130 for (i = 0; i < 2; i++)
131 if ((e = f_e(f, i)) >= 0)
132 if (e < domaine.nb_elem())
133 for (n = 0, m = 0; n < N; n++, m += (M > 1))
134 (*Mv)(N * e + n, N * f + n) += (i ? -1 : 1) * press(e, m) * dv_flux(n);
137 for (i = 0; i < 2; i++)
138 if ((e = f_e(f, i)) >= 0)
139 if (e < domaine.nb_elem())
140 for (n = 0, m = 0; n < N; n++, m += (M > 1))
141 (*Mp)(N * e + n, M * e + m) += (i ? -1 : 1) * dv_flux(n) * vit(f, n);
144 for (i = 0; i < 2; i++)
145 if ((e = f_e(f, i)) >= 0)
146 if (e < domaine.nb_elem())
147 for (j = 0; j < 2; j++)
148 if ((eb = f_e(f, j)) >= 0)
149 for (n = 0, m = 0; n < N; n++, m += (M > 1))
150 (*Ma)(N * e + n, N * eb + n) += (i ? -1 : 1) * press(e, m) * dc_flux(j, n);