81 int e, k, n, N = inco.
line_size(), m, M = p.line_size(), is_m = ch.
le_nom() ==
"alpha", cR = (rho.dimension_tot(0) == 1),
83 if (N == 1 || p_degen || (is_m && !iter))
return;
85 double a_eps = alpha_res_, a_eps_min = alpha_res_min_, a_m, a_max;
91 for (e = 0; e < domaine.nb_elem(); e++)
94 for (a_max = 0, k = -1, n = 0; n < N; n++)
95 if ((a_m = alpha(e, n)) > a_max) k = n, a_max = a_m;
96 if (k >= 0) maj(e) = k;
100 for (n = 0, m = 0; n < N; n++, m += (M > 1))
101 if (n != k && (a_m = alpha(e, n)) < a_eps)
104 coeff(e, n, 0) = (a_eps == a_eps_min ? (a_m < a_eps) : std::min(std::max((a_eps - a_m) / (a_eps - a_eps_min), 0.), 1.));
105 coeff(e, n, 1) = mat_diag(N * e + k, N * e + k) * coeff(e, n, 0);
106 double flux = coeff(e, n, 0) * secmem(e, n) + coeff(e, n, 1) * (inco(e, n) - val);
107 secmem(e, k) += (p_degen ? rho(!cR * e, k) : 1) * flux, secmem(e, n) -= (p_degen ? rho(!cR * e, n) : 1) * flux;
112 for (
auto &&n_m : matrices)
113 if (n_m.second->nb_colonnes())
115 int diag = (n_m.first == ch.
le_nom().getString()), press = (n_m.first ==
"pression");
119 for (e = 0; e < domaine.nb_elem(); e++)
120 for (n = 0, m = 0; n < N; n++, m += (M > 1))
125 int cval = is_m ? -1 : milc.
has_saturation(n, k) ? M * e + m : N * e + k;
126 for (i = mat.
get_tab1()(N * e + n) - 1, j = mat.
get_tab1()(N * e + k) - 1; i < mat.
get_tab1()(N * e + n + 1) - 1; i++, j++)
130 double dflux = -coeff(e, n, 0) * mat.
get_set_coeff()(i) + coeff(e, n, 1) * (diag * (c == N * e + n) - dval * (c == cval));
131 mat.
get_set_coeff()(i) += (p_degen ? rho(!cR * e, n) : 1) * dflux;
132 mat.
get_set_coeff()(j) -= (p_degen ? rho(!cR * e, k) : 1) * dflux;