59 DoubleTab& resu)
const
62 const Domaine_VEF& domaine_VEF = le_dom_vef.valeur();
66 const IntTab& elem_faces = domaine_VEF.
elem_faces();
70 const Domaine& domaine = domaine_VEF.
domaine();
83 int nfac = domaine.nb_faces_elem();
84 int nsom = domaine.nb_som_elem();
85 int nb_som_facette = domaine.type_elem()->nb_som_face();
100 int poly,face_adj,fa7,i,j,comp0,n_bord;
101 int num_face, rang ,itypcl;
102 int num10, num20, num_som;
104 int ncomp_ch_transporte;
105 if (transporte.
nb_dim() == 1)
106 ncomp_ch_transporte=1;
108 ncomp_ch_transporte= transporte.
dimension(1);
124 if ((nom_elem==
"Tetra_VEF")||(nom_elem==
"Tri_VEF"))
135 DoubleVect ts(ncomp_ch_transporte);
136 DoubleVect tc(ncomp_ch_transporte);
137 DoubleTab tsom(nsom,ncomp_ch_transporte);
146 int nb_faces_perio = 0;
147 for (n_bord=0; n_bord<domaine_VEF.
nb_front_Cl(); n_bord++)
154 int num2 = num1 + le_bord.
nb_faces();
155 for (num_face=num1; num_face<num2; num_face++)
161 if (ncomp_ch_transporte == 1)
162 tab.
resize(nb_faces_perio);
164 tab.
resize(nb_faces_perio,ncomp_ch_transporte);
167 for (n_bord=0; n_bord<domaine_VEF.
nb_front_Cl(); n_bord++)
175 int num2 = num1 + le_bord.
nb_faces();
176 for (num_face=num1; num_face<num2; num_face++)
178 if (ncomp_ch_transporte == 1)
179 tab(nb_faces_perio) = resu(num_face);
181 for (
int comp=0; comp<ncomp_ch_transporte; comp++)
182 tab(nb_faces_perio,comp) = resu(num_face,comp);
197 for (poly=0; poly<nb_elem_tot; poly++)
200 rang = rang_elem_non_std(poly);
207 for (face_adj=0; face_adj<nfac; face_adj++)
208 face[face_adj]= elem_faces(poly,face_adj);
212 vs[j] = la_vitesse.
valeurs()(face[0],j)*porosite_face(face[0]);
213 for (i=1; i<nfac; i++)
214 vs[j]+= la_vitesse.
valeurs()(face[i],j)*porosite_face(face[i]);
219 for (j=0; j<nsom; j++)
230 for (j=0; j<nsom; j++)
232 num_som = domaine.sommet_elem(poly,j);
233 for (
int ncomp=0; ncomp<
dimension; ncomp++)
242 itypcl,porosite_face);
245 if(ncomp_ch_transporte == 1)
247 ts[0]=transporte(face[0]);
248 for (i=1; i<nfac; i++)
249 ts[0]+= transporte(face[i]);
251 for (i=0; i<nsom; i++)
252 tsom(i,0) = ts[0] -
dimension*transporte(face[i],0);
256 for (j=0; j<ncomp_ch_transporte; j++)
258 ts[j] = transporte(face[0],j);
259 for (i=1; i<nfac; i++)
260 ts[j]+= transporte(face[i],j);
262 for (i=0; i<nsom; i++)
263 for (j=0; j<ncomp_ch_transporte; j++)
264 tsom(i,j) = ts[j] -
dimension*transporte(face[i],j);
269 for (j=0; j<ncomp_ch_transporte; j++)
275 for (fa7=0; fa7<nfa7; fa7++)
277 num10 = face[KEL(0,fa7)];
278 num20 = face[KEL(1,fa7)];
281 cc[i] = facette_normales(poly,fa7,i);
284 cc[i] = normales_facettes_Cl(rang,fa7,i);
291 for (i=0; i<nb_som_facette-1; i++)
296 psc+= vsom(isom,j)*cc[j];
297 psc /= nb_som_facette;
305 if (ncomp_ch_transporte == 1)
307 flux = tsom(isom,0)*psc;
312 for (comp0=0; comp0<ncomp_ch_transporte; comp0++)
314 flux = tsom(isom,comp0)*psc;
315 resu(num10, comp0) -= flux;
316 resu(num20, comp0) += flux;
326 psc /= nb_som_facette;
335 if (ncomp_ch_transporte == 1)
342 for (comp0=0; comp0<ncomp_ch_transporte; comp0++)
344 flux = tc[comp0]*psc;
345 resu(num10, comp0) -= flux;
346 resu(num20, comp0) += flux;
366 for (n_bord=0; n_bord<domaine_VEF.
nb_front_Cl(); n_bord++)
376 int num2 = num1 + le_bord.
nb_faces();
377 for (num_face=num1; num_face<num2; num_face++)
381 psc += la_vitesse.
valeurs()(num_face,i)*face_normales(num_face,i)*porosite_face(num_face);
383 if (ncomp_ch_transporte == 1)
385 resu(num_face) -= psc*transporte(num_face);
386 flux_b(num_face,0) -= psc*transporte(num_face);
389 for (i=0; i<ncomp_ch_transporte; i++)
391 resu(num_face,i) -= psc*transporte(num_face,i);
392 flux_b(num_face,i) -= psc*transporte(num_face,i);
396 if (ncomp_ch_transporte == 1)
398 resu(num_face) -= psc*la_sortie_libre.
val_ext(num_face-num1);
399 flux_b(num_face,0) -= psc*la_sortie_libre.
val_ext(num_face-num1);
402 for (i=0; i<ncomp_ch_transporte; i++)
404 resu(num_face,i) -= psc*la_sortie_libre.
val_ext(num_face-num1,i);
405 flux_b(num_face,i) -= psc*la_sortie_libre.
val_ext(num_face-num1,i);
416 int num2 = num1 + le_bord.
nb_faces();
419 for (num_face=num1; num_face<num2; num_face++)
421 if (fait[num_face-num1] == 0)
425 if (ncomp_ch_transporte == 1)
427 diff1 = resu(num_face)-tab(nb_faces_perio);
428 diff2 = resu(voisine)-tab(nb_faces_perio+voisine-num_face);
429 resu(voisine) += diff1;
430 resu(num_face) += diff2;
431 flux_b(voisine,0) += diff1;
432 flux_b(num_face,0) += diff2;
435 for (
int comp=0; comp<ncomp_ch_transporte; comp++)
437 diff1 = resu(num_face,comp)-tab(nb_faces_perio,comp);
438 diff2 = resu(voisine,comp)-tab(nb_faces_perio+voisine-num_face,comp);
439 resu(voisine,comp) += diff1;
440 resu(num_face,comp) += diff2;
441 flux_b(voisine,comp) += diff1;
442 flux_b(num_face,comp) += diff2;
445 fait[num_face-num1]= 1;
446 fait[voisine-num1] = 1;
int elem_faces(int i, int j) const
renvoie le numero de le ieme face de la maille num_elem la facon dont ces faces sont numerotees est