37 const IntTab& f_e = domaine.face_voisins();
39 const Conds_lim& cls = le_dcl_coloc_->les_conditions_limites();
49 const int nb_faces = domaine.nb_faces();
52 DoubleTrav flux_l(nb_faces, num_flux.
line_size()), flux_r(nb_faces, num_flux.
line_size());
53 assert(flux_l.line_size() == alpha_rhoU.
line_size());
57 for (
int f = 0; f < nb_faces; f++)
60 const int el = f_e(f, 0), er = f_e(f, 1);
61 const double nx = domaine.face_normales(f, 0) / domaine.face_surfaces(f);
62 const double ny = domaine.face_normales(f, 1) / domaine.face_surfaces(f);
64 for (
int n = 0; n < nb_phase; n++)
67 double alpha_p = alpha(el, n) * p(el, n);
68 flux_l(f, n) = nx * alpha_p + alpha_rhoU(el, n) * vit_n(f, n);
69 flux_l(f, n + nb_phase) = ny * alpha_p + alpha_rhoU(el, n + nb_phase) * vit_n(f, n);
72 alpha_p = alpha(er, n) * p(er, n);
73 flux_r(f, n) = nx * alpha_p + alpha_rhoU(er, n) * vit_n(f, n + nb_phase);
74 flux_r(f, n + nb_phase) = ny * alpha_p + alpha_rhoU(er, n + nb_phase) * vit_n(f, n + nb_phase);
79 scheme(num_flux, flux_l, flux_r);
85 for (
int f = 0; f < nb_faces; f++)
96 assert (f_e(f, 1) < 0 && f_e(f, 0) >= 0 && vit_n(f, 0) != -123.123);
97 const int e = f_e(f, 0);
99 std::array<double, 3> normal { 0., 0., 0. };
101 normal[d] = domaine.face_normales(f, d) / domaine.face_surfaces(f);
105 for (
int n = 0; n < nb_phase; n++)
107 const double p_bord = p(e, n);
108 const double rho_bord = rho(e, n);
109 const double alpha_bord = alpha(e, n);
113 num_flux(f, n + nb_phase * d) = normal[d] * p_bord + vit(e, n + nb_phase * d) * rho_bord * vit_n(f, n);
114 num_flux(f, n + nb_phase * d) *= alpha_bord;
115 flux_bords_(f, n + nb_phase * d) = num_flux(f, n + nb_phase * d) * domaine.face_surfaces(f);
125 for (
int n = 0; n < nb_phase; n++)
127 std::array<double, 3> vitesse_bord { 0., 0., 0. };
128 double vitesse_normale_bord = 0;
130 const double rho_bord = ref_cast(
Dirichlet, cls_rho[fcl(f, 1)].valeur()).val_imp(fcl(f, 2), n);
131 const double p_bord = ref_cast(
Dirichlet, cls_p[fcl(f, 1)].valeur()).val_imp(fcl(f, 2), n);
132 const double alpha_bord = ref_cast(
Dirichlet, cls_alpha[fcl(f, 1)].valeur()).val_imp(fcl(f, 2), n);
136 vitesse_bord[d] = ref_cast(
Dirichlet, cls[fcl(f, 1)].valeur()).val_imp(fcl(f, 2), n + nb_phase * d);
137 vitesse_normale_bord += vitesse_bord[d] * normal[d];
142 num_flux(f, n + nb_phase * d) = normal[d] * p_bord + vitesse_bord[d] * rho_bord * vitesse_normale_bord;
143 num_flux(f, n + nb_phase * d) *= alpha_bord;
144 flux_bords_(f, n + nb_phase * d) = num_flux(f, n + nb_phase * d) * domaine.face_surfaces(f);
151 for (
int n = 0; n < nb_phase; n++)
153 std::array<double, 3> vitesse_bord { 0., 0., 0. };
155 const double p_bord = p(e, n);
156 const double rho_bord = rho(e, n);
157 const double alpha_bord = alpha(e, n);
158 double vitesse_normale_bord = 0;
162 num_flux(f, n + nb_phase * d) = normal[d] * p_bord + vitesse_bord[d] * rho_bord * vitesse_normale_bord;
163 num_flux(f, n + nb_phase * d) *= alpha_bord;
164 flux_bords_(f, n + nb_phase * d) = num_flux(f, n + nb_phase * d) * domaine.face_surfaces(f);
170 Cerr <<
" La CL de type " << fcl(f, 0) <<
" pour l'equation " << eq.
que_suis_je() <<
" n est pas diponible .....\n";
const Cond_lim & les_conditions_limites(int) const
Renvoie la i-ieme condition aux limites.