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();
98 int poly,face_adj,fa7,i,j,comp0,n_bord;
99 int num_face, rang ,itypcl;
100 int num10, num20, num_som;
102 int ncomp_ch_transporte;
103 if (transporte.
nb_dim() == 1)
104 ncomp_ch_transporte=1;
106 ncomp_ch_transporte= transporte.
dimension(1);
122 if ((nom_elem==
"Tetra_VEF")||(nom_elem==
"Tri_VEF"))
133 DoubleVect ts(ncomp_ch_transporte);
134 DoubleVect tc(ncomp_ch_transporte);
135 DoubleTab tsom(nsom,ncomp_ch_transporte);
144 int nb_faces_perio = 0;
145 for (n_bord=0; n_bord<domaine_VEF.
nb_front_Cl(); n_bord++)
152 int num2 = num1 + le_bord.
nb_faces();
153 for (num_face=num1; num_face<num2; num_face++)
159 if (ncomp_ch_transporte == 1)
160 tab.
resize(nb_faces_perio);
162 tab.
resize(nb_faces_perio,ncomp_ch_transporte);
165 for (n_bord=0; n_bord<domaine_VEF.
nb_front_Cl(); n_bord++)
173 int num2 = num1 + le_bord.
nb_faces();
174 for (num_face=num1; num_face<num2; num_face++)
176 if (ncomp_ch_transporte == 1)
177 tab(nb_faces_perio) = resu(num_face);
179 for (
int comp=0; comp<ncomp_ch_transporte; comp++)
180 tab(nb_faces_perio,comp) = resu(num_face,comp);
195 for (poly=0; poly<nb_elem_tot; poly++)
198 rang = rang_elem_non_std(poly);
205 for (face_adj=0; face_adj<nfac; face_adj++)
206 face[face_adj]= elem_faces(poly,face_adj);
210 vs[j] = la_vitesse.
valeurs()(face[0],j)*porosite_face(face[0]);
211 for (i=1; i<nfac; i++)
212 vs[j]+= la_vitesse.
valeurs()(face[i],j)*porosite_face(face[i]);
217 for (j=0; j<nsom; j++)
228 for (j=0; j<nsom; j++)
230 num_som = domaine.sommet_elem(poly,j);
231 for (
int ncomp=0; ncomp<
dimension; ncomp++)
240 itypcl,porosite_face);
243 if(ncomp_ch_transporte == 1)
245 ts[0]=transporte(face[0]);
246 for (i=1; i<nfac; i++)
247 ts[0]+= transporte(face[i]);
249 for (i=0; i<nsom; i++)
250 tsom(i,0) = ts[0] -
dimension*transporte(face[i],0);
254 for (j=0; j<ncomp_ch_transporte; j++)
256 ts[j] = transporte(face[0],j);
257 for (i=1; i<nfac; i++)
258 ts[j]+= transporte(face[i],j);
260 for (i=0; i<nsom; i++)
261 for (j=0; j<ncomp_ch_transporte; j++)
262 tsom(i,j) = ts[j] -
dimension*transporte(face[i],j);
267 for (j=0; j<ncomp_ch_transporte; j++)
273 for (fa7=0; fa7<nfa7; fa7++)
275 num10 = face[KEL(0,fa7)];
276 num20 = face[KEL(1,fa7)];
279 cc[i] = facette_normales(poly,fa7,i);
282 cc[i] = normales_facettes_Cl(rang,fa7,i);
289 for (i=0; i<nb_som_facette-1; i++)
294 psc+= vsom(isom,j)*cc[j];
295 psc /= nb_som_facette;
303 if (ncomp_ch_transporte == 1)
305 flux = tsom(isom,0)*psc;
310 for (comp0=0; comp0<ncomp_ch_transporte; comp0++)
312 flux = tsom(isom,comp0)*psc;
313 resu(num10, comp0) -= flux;
314 resu(num20, comp0) += flux;
324 psc /= nb_som_facette;
333 if (ncomp_ch_transporte == 1)
340 for (comp0=0; comp0<ncomp_ch_transporte; comp0++)
342 flux = tc[comp0]*psc;
343 resu(num10, comp0) -= flux;
344 resu(num20, comp0) += flux;
363 for (n_bord=0; n_bord<domaine_VEF.
nb_front_Cl(); n_bord++)
373 int num2 = num1 + le_bord.
nb_faces();
374 for (num_face=num1; num_face<num2; num_face++)
378 psc += la_vitesse.
valeurs()(num_face,i)*face_normales(num_face,i)*porosite_face(num_face);
380 if (ncomp_ch_transporte == 1)
382 resu(num_face) -= psc*transporte(num_face);
383 flux_b(num_face,0) -= psc*transporte(num_face);
386 for (i=0; i<ncomp_ch_transporte; i++)
388 resu(num_face,i) -= psc*transporte(num_face,i);
389 flux_b(num_face,i) -= psc*transporte(num_face,i);
393 if (ncomp_ch_transporte == 1)
395 resu(num_face) -= psc*la_sortie_libre.
val_ext(num_face-num1);
396 flux_b(num_face,0) -= psc*la_sortie_libre.
val_ext(num_face-num1);
399 for (i=0; i<ncomp_ch_transporte; i++)
401 resu(num_face,i) -= psc*la_sortie_libre.
val_ext(num_face-num1,i);
402 flux_b(num_face,i) -= psc*la_sortie_libre.
val_ext(num_face-num1,i);
413 int num2 = num1 + le_bord.
nb_faces();
416 for (num_face=num1; num_face<num2; num_face++)
418 if (fait[num_face-num1] == 0)
422 if (ncomp_ch_transporte == 1)
424 diff1 = resu(num_face)-tab(nb_faces_perio);
425 diff2 = resu(voisine)-tab(nb_faces_perio+voisine-num_face);
426 resu(voisine) += diff1;
427 resu(num_face) += diff2;
428 flux_b(voisine,0) += diff1;
429 flux_b(num_face,0) += diff2;
432 for (
int comp=0; comp<ncomp_ch_transporte; comp++)
434 diff1 = resu(num_face,comp)-tab(nb_faces_perio,comp);
435 diff2 = resu(voisine,comp)-tab(nb_faces_perio+voisine-num_face,comp);
436 resu(voisine,comp) += diff1;
437 resu(num_face,comp) += diff2;
438 flux_b(voisine,comp) += diff1;
439 flux_b(num_face,comp) += diff2;
442 fait[num_face-num1]= 1;
443 fait[voisine-num1] = 1;
int elem_faces(int i, int j) const
Returns the index of the i-th face of element num_elem; the face numbering convention is.