38 const DoubleTab& w = le_champ_inco->valeurs();
39 const Conds_lim& cls = le_dcl_coloc_->les_conditions_limites();
40 const IntTab& f_e = domaine.face_voisins();
47 const int nb_faces = domaine.nb_faces();
50 DoubleTrav flux_l(nb_faces, num_flux.
line_size()), flux_r(nb_faces, num_flux.
line_size());
51 assert(flux_l.line_size() == nb_phases);
61 for (
int f = 0; f < nb_faces; f++)
64 const int el = f_e(f, 0), er = f_e(f, 1);
65 for (
int n = 0; n < nb_phases; n++)
67 flux_l(f, n) = (alpha_rhoE(el, n) + alpha(el, n) * p(el, n)) * vit_n(f, n);
68 flux_r(f, n) = (alpha_rhoE(er, n) + alpha(er, n) * p(er, n)) * vit_n(f, n + nb_phases);
75 for (
int f = 0; f < nb_faces; f++)
78 const int el = f_e(f, 0), er = f_e(f, 1);
80 for (
int n = 0; n < nb_phases; n++)
82 flux_l(f, n) = alpha_rho(el, n) * vit_n(f, n);
83 flux_r(f, n) = alpha_rho(er, n) * vit_n(f, n + nb_phases);
89 Cerr <<
"Op_NConserv_HLL_Coloc_Elem should not be used for equation " <<
equation().
que_suis_je() << finl;
94 scheme(num_flux, flux_l, flux_r);
100 for (
int f = 0; f < nb_faces; f++)
103 assert (f_e(f, 1) < 0 && f_e(f, 0) >= 0 && vit_n(f, 0) != -123.123);
104 const int e = f_e(f, 0);
116 std::array<double, 3> normal { 0., 0., 0. };
118 normal[d] = domaine.face_normales(f, d) / domaine.face_surfaces(f);
122 for (
int n = 0; n < nb_phases; n++)
124 num_flux(f, n) = eq.
flux_bord(w(e, n), vit_n(f, n), alpha(e, n) * p(e, n));
125 flux_bords_(f, n) = num_flux(f, n) * domaine.face_surfaces(f);
130 for (
int n = 0; n < nb_phases; n++)
140 for (
int n = 0; n < nb_phases; n++)
142 std::array<double, 3> vitesse_bord { 0., 0., 0. };
143 double vitesse_normale_bord = 0;
144 double norme_vitesse = 0;
145 const double alpha_bord = ref_cast(
Dirichlet, cls_alpha[fcl(f, 1)].valeur()).val_imp(fcl(f, 2), n);
146 const double p_bord = ref_cast(
Dirichlet, cls_p[fcl(f, 1)].valeur()).val_imp(fcl(f, 2), n);
147 const double rho_bord = ref_cast(
Dirichlet, cls_rho[fcl(f, 1)].valeur()).val_imp(fcl(f, 2), n);
151 vitesse_bord[d] = ref_cast(
Dirichlet, cls_qdm[fcl(f, 1)].valeur()).val_imp(fcl(f, 2), n + nb_phases * d);
152 vitesse_normale_bord += vitesse_bord[d] * normal[d];
153 norme_vitesse += vitesse_bord[d] * vitesse_bord[d];
158 num_flux(f, n) = eq.
flux_bord(inco_bord, vitesse_normale_bord, alpha_bord * p_bord);
159 flux_bords_(f, n) = num_flux(f, n) * domaine.face_surfaces(f);
164 Cerr <<
"The BC of type " << fcl(f, 0) <<
"for the equation " << eq.
que_suis_je() <<
" is not available \n";
const Cond_lim & les_conditions_limites(int) const
Renvoie la i-ieme condition aux limites.