55 const Domaine_VDF& domaine_VDF = le_dom_VDF.valeur();
58 const IntVect& orientation = domaine_VDF.
orientation();
66 const int cR = alp ? ((*rho).dimension_tot(0) == 1) : 0;
70 int ndeb, nfin, ncomp, num_face, elem1, elem2;
74 const DoubleVect& s = la_source->valeurs();
79 for (
int n_bord = 0; n_bord < domaine_VDF.
nb_front_Cl(); n_bord++)
85 if (alp)
Process::exit(
"Terme_Source_Qdm_VDF_Face : periodic CL not yet available for Pb_Multiphase !");
91 for (
int k = 0; k < nb_comp; k++)
92 for (num_face = ndeb; num_face < nfin; num_face++)
94 vol = volumes_entrelaces(num_face);
95 ncomp = orientation(num_face);
96 resu(num_face, k) += s(nb_comp * ncomp + k) * vol;
105 for (
int k = 0; k < nb_comp; k++)
106 for (num_face = ndeb; num_face < nfin; num_face++)
108 vol = volumes_entrelaces(num_face) * porosite_surf(num_face);
109 ncomp = orientation(num_face);
110 double alpha_rho = 1.0;
113 elem1 = face_voisins(num_face, 0), elem2 = face_voisins(num_face, 1);
114 const int e = ( elem1 > -1 ? elem1 : elem2);
115 double a = (*alp)(e, k), r = (*rho)(!cR * e, k);
118 resu(num_face, k) += s(nb_comp * ncomp + k) * vol * alpha_rho;
122 else if (sub_type(
Symetrie, la_cl.valeur())) { }
128 for (
int k = 0; k < nb_comp; k++)
131 vol = volumes_entrelaces(num_face) * porosite_surf(num_face);
132 ncomp = orientation(num_face);
133 double alpha_rho = 1.0;
136 elem1 = face_voisins(num_face, 0), elem2 = face_voisins(num_face, 1);
137 double a = 0.5 * ((*alp)(elem1, k) + (*alp)(elem2, k)), r = 0.5 * ((*rho)(!cR * elem1, k) + (*rho)(!cR * elem2, k));
140 resu(num_face, k) += s(nb_comp * ncomp + k) * vol * alpha_rho;
145 const DoubleTab *s_tmp =
nullptr;
147 if (la_source->que_suis_je().contient(
"_som_"))
152 la_source->valeur_aux(domaine_VDF.
xp(), eval);
156 s_tmp = &(la_source->valeurs());
157 const DoubleTab& s = *s_tmp;
162 for (
int n_bord = 0; n_bord < domaine_VDF.
nb_front_Cl(); n_bord++)
172 for (
int k = 0; k < nb_comp; k++)
173 for (num_face = ndeb; num_face < nfin; num_face++)
175 vol = volumes_entrelaces(num_face) * porosite_surf(num_face);
176 ncomp = orientation(num_face);
177 elem1 = face_voisins(num_face, 0), elem2 = face_voisins(num_face, 1);
178 const int e = (elem1 > -1 ? elem1 : elem2);
179 double alpha_rho = 1.0;
182 double a = (*alp)(e, k), r = (*rho)(!cR * e, k);
185 resu(num_face, k) += s(e, nb_comp * ncomp + k) * vol * alpha_rho;
188 else if (sub_type(
Symetrie, la_cl.valeur())) { }
190 else if (sub_type(
Periodique, la_cl.valeur()))
192 if (alp)
Process::exit(
"Terme_Source_Qdm_VDF_Face : periodic CL not yet available for Pb_Multiphase !");
198 for (
int k = 0; k < nb_comp; k++)
199 for (num_face = ndeb; num_face < nfin; num_face++)
201 vol = volumes_entrelaces(num_face) * porosite_surf(num_face);
202 ncomp = orientation(num_face);
203 double s_face = 0.5 * (s(face_voisins(num_face, 0), nb_comp * ncomp + k) + s(face_voisins(num_face, 1), nb_comp * ncomp + k));
204 resu(num_face, k) += s_face * vol;
212 for (
int k = 0; k < nb_comp; k++)
215 vol = volumes_entrelaces(num_face) * porosite_surf(num_face);
216 ncomp = orientation(num_face);
217 elem1 = face_voisins(num_face, 0), elem2 = face_voisins(num_face, 1);
218 double alpha_rho = 1.0;
221 double a = 0.5 * ((*alp)(elem1, k) + (*alp)(elem2, k)), r = 0.5 * ((*rho)(!cR * elem1, k) + (*rho)(!cR * elem2, k));
224 double s_face = 0.5 * (s(elem1, nb_comp * ncomp + k) + s(elem2, nb_comp * ncomp + k));
225 resu(num_face,k ) += s_face * vol * alpha_rho;
classe Domaine_Cl_dis_base Les objets Domaine_Cl_dis_base representent les conditions aux limites
const Cond_lim & les_conditions_limites(int) const
Renvoie la i-ieme condition aux limites.
int orientation(int) const override
inline DoubleVect& Domaine_VDF::porosite_face() {
int nb_faces() const
renvoie le nombre global de faces.
double xp(int num_elem, int k) const
int premiere_face_int() const
une face est interne ssi elle separe deux elements.
int face_voisins(int num_face, int i) const
renvoie l'element voisin de numface dans la direction i.
classe Domaine_dis_base Cette classe est la base de la hierarchie des domaines discretisees.