65 DoubleTab& resu)
const
68 const Domaine_VEF& domaine_VEF = le_dom_vef.valeur();
73 const IntTab& elem_faces = domaine_VEF.
elem_faces();
76 const Domaine& domaine = domaine_VEF.
domaine();
84 int nfac = domaine.nb_faces_elem();
97 int poly,face_adj,fa7,i,j,comp0,n_bord;
98 int num_face, rang ,itypcl;
101 int ncomp_ch_transporte;
102 if (transporte.
nb_dim() == 1)
103 ncomp_ch_transporte=1;
105 ncomp_ch_transporte= transporte.
dimension(1);
115 double coef1=0.,coef2=0.,coef3=0.;
131 int nb_faces_perio = 0;
132 for (n_bord=0; n_bord<domaine_VEF.
nb_front_Cl(); n_bord++)
139 int num2 = num1 + le_bord.
nb_faces();
140 for (num_face=num1; num_face<num2; num_face++)
146 if (ncomp_ch_transporte == 1)
147 tab.
resize(nb_faces_perio);
149 tab.
resize(nb_faces_perio,ncomp_ch_transporte);
152 for (n_bord=0; n_bord<domaine_VEF.
nb_front_Cl(); n_bord++)
160 int num2 = num1 + le_bord.
nb_faces();
161 for (num_face=num1; num_face<num2; num_face++)
163 if (ncomp_ch_transporte == 1)
164 tab(nb_faces_perio) = resu(num_face);
166 for (
int comp=0; comp<ncomp_ch_transporte; comp++)
167 tab(nb_faces_perio,comp) = resu(num_face,comp);
182 for (poly=0; poly<nb_elem_tot; poly++)
185 rang = rang_elem_non_std(poly);
192 for (face_adj=0; face_adj<nfac; face_adj++)
193 face[face_adj]= elem_faces(poly,face_adj);
196 for (fa7=0; fa7<nfa7; fa7++)
200 num10 = face[KEL(0,fa7)];
201 num20 = face[KEL(1,fa7)];
213 if (num_int == num10)
218 else if (num_int == num20)
225 autre_num_face_loc(j)=i;
226 autre_num_face(j)=num_int;
237 cc[i] = facette_normales(poly,fa7,i);
241 cc[i] = normales_facettes_Cl(rang,fa7,i);
244 for (i=0; i<nfac; i ++)
252 psc[i]+= la_vitesse.
valeurs()(face[i],j)*cc[j]*porosite_face(face[i]);
267 coef1 = 13.0*( psc[nu1]+psc[nu2] ) ;
268 coef1 -= 8.0*psc[autre_num_face_loc(0)];
270 coef2 = 8.0*( psc[nu1]+psc[nu2] ) ;
271 coef2 -= 7.0*psc[autre_num_face_loc(0)];
273 if (ncomp_ch_transporte == 1)
275 flux = (transporte(num10)+transporte(num20))*coef1;
276 flux -= transporte(autre_num_face(0))*coef2;
282 for (comp0=0; comp0<ncomp_ch_transporte; comp0++)
284 flux = (transporte(num10,comp0)+transporte(num20,comp0))*coef1;
285 flux -= transporte(autre_num_face(0),comp0)*coef2;
287 resu(num10, comp0) -= flux;
288 resu(num20, comp0) += flux;
292 fluent_[num10] += 2.*((psc[nu1]+psc[nu2])- psc[autre_num_face_loc(0)])/3.;
293 fluent_[num10] -= 2.*((psc[nu1]+psc[nu2])- psc[autre_num_face_loc(0)])/3.;
300 if ((itypcl==1)||(itypcl==2)||(itypcl==4))
322 Cerr <<
"This should not be possible!!!" << finl;
331 coef1 = 2.*( psc[nu1]+psc[nu2] ) ;
332 coef1 -= psc[numfa7];
334 coef2 = psc[nu1]+psc[nu2] ;
335 coef2 -= 2.*psc[numfa7];
337 for (comp0=0; comp0<ncomp_ch_transporte; comp0++)
339 flux = (transporte(num10,comp0)+transporte(num20,comp0))*coef1;
340 flux -= transporte(numfa7,comp0)*coef2;
342 resu(num10, comp0) -= flux;
343 resu(num20, comp0) += flux;
346 fluent_[num10] += 0.5*(psc[nu1]+psc[nu2]);
347 fluent_[num20] -= 0.5*(psc[nu1]+psc[nu2]);
355 coef1 = 2.*( psc[nu1]-psc[nu2] ) ;
356 coef1 += 3.*psc[numfa7];
358 coef2 = 3.*(psc[nu1]-psc[nu2]) ;
359 coef2 += 6.*psc[numfa7];
362 for (comp0=0; comp0<ncomp_ch_transporte; comp0++)
364 flux = (transporte(face[nu1],comp0)-transporte(face[nu2],comp0))*coef1;
365 flux += transporte(face[numfa7],comp0)*coef2;
367 resu(face[nu1],comp0) -= flux;
371 fluent_[face[nu1]] -= 0.5*(psc[nu1]-psc[nu2])+psc[numfa7];
378 coef1 = 2.*( psc[nu2]-psc[nu1] ) ;
379 coef1 += 3.*psc[numfa7];
381 coef2 = 3.*(psc[nu2]-psc[nu1]) ;
382 coef2 += 6.*psc[numfa7];
385 for (comp0=0; comp0<ncomp_ch_transporte; comp0++)
387 flux = (transporte(face[nu2],comp0)-transporte(face[nu1],comp0))*coef1;
388 flux += transporte(face[numfa7],comp0)*coef2;
390 resu(face[nu1],comp0) -= flux;
394 fluent_[face[nu1]] -= 0.5*(psc[nu2]-psc[nu1])+psc[numfa7];
431 Cerr <<
"Stopping everything, this should not be possible!!!!" << finl;
432 Cerr <<
"otherwise it means I have misunderstood something!!!" << finl;
438 coef2 = (psc[nu1]-psc[nu2])/3.;
439 for (comp0=0; comp0<ncomp_ch_transporte; comp0++)
441 flux = transporte(face[fa7],comp0)*coef1;
442 flux += (transporte(face[nu1],comp0)-transporte(face[nu2],comp0))*coef2;
444 resu(face[nu1],comp0) -= flux;
447 fluent_[face[fa7]] -= psc[fa7];
462 coef1 = 19.0*( psc[nu1]+psc[nu2] ) ;
463 coef1 -= 7.0*(psc[autre_num_face_loc(0)]+psc[autre_num_face_loc(1)]);
466 coef2 = 7.0*( psc[nu1]+psc[nu2] ) ;
467 coef2 -= 15.0*psc[autre_num_face_loc(0)];
468 coef2 += 9.0*psc[autre_num_face_loc(1)];
471 coef3 = 7.0*( psc[nu1]+psc[nu2] ) ;
472 coef3 += 9.0*psc[autre_num_face_loc(0)];
473 coef3 -= 15.0*psc[autre_num_face_loc(1)];
476 for (comp0=0; comp0<ncomp_ch_transporte; comp0++)
478 flux = (transporte(num10,comp0)+transporte(num20,comp0))*coef1;
479 flux -= transporte(autre_num_face(0),comp0)*coef2;
480 flux -= transporte(autre_num_face(1),comp0)*coef3;
482 resu(num10, comp0) -= flux;
483 resu(num20, comp0) += flux;
497 f_int = 3.*(psc[nu1]+psc[nu2]);
498 f_int -= (psc[autre_num_face_loc(0)]+psc[autre_num_face_loc(1)]);
517 Cerr <<
"Dans le default!!" << finl;
534 coef1 = 6.*( psc[nu1]+psc[nu2] ) ;
535 coef1 -= 3.*psc[nu3]+psc[fa7];
537 coef2 = 3.0*( psc[nu1]+psc[nu2] ) ;
538 coef2 -= 7.0*psc[nu3];
539 coef2 += 4.0*psc[fa7];
541 coef3 = psc[nu1]+psc[nu2];
543 coef3 -= 7.*psc[fa7];
545 for (comp0=0; comp0<ncomp_ch_transporte; comp0++)
547 flux = (transporte(num10,comp0)+transporte(num20,comp0))*coef1;
548 flux -= transporte(face[nu3],comp0)*coef2;
549 flux -= transporte(face[fa7],comp0)*coef3;
551 resu(num10, comp0) -= flux;
552 resu(num20, comp0) += flux;
556 f_int = 3.*(psc[nu1]+psc[nu2]);
557 f_int -= (psc[autre_num_face_loc(0)]+psc[autre_num_face_loc(1)]);
598 for (n_bord=0; n_bord<domaine_VEF.
nb_front_Cl(); n_bord++)
609 int num2 = num1 + le_bord.
nb_faces();
610 for (num_face=num1; num_face<num2; num_face++)
614 pscav += la_vitesse.
valeurs()(num_face,i)*face_normales(num_face,i)*porosite_face(num_face);
616 if (ncomp_ch_transporte == 1)
618 resu(num_face) -= pscav*transporte(num_face);
619 flux_b(num_face,0) -= pscav*transporte(num_face);
622 for (i=0; i<ncomp_ch_transporte; i++)
624 resu(num_face,i) -= pscav*transporte(num_face,i);
625 flux_b(num_face,i) -= pscav*transporte(num_face,i);
629 if (ncomp_ch_transporte == 1)
631 resu(num_face) -= pscav*la_sortie_libre.
val_ext(num_face-num1);
632 flux_b(num_face,0) -= pscav*la_sortie_libre.
val_ext(num_face-num1);
635 for (i=0; i<ncomp_ch_transporte; i++)
637 resu(num_face,i) -= pscav*la_sortie_libre.
val_ext(num_face-num1,i);
638 flux_b(num_face,i) -= pscav*la_sortie_libre.
val_ext(num_face-num1,i);
650 int num2 = num1 + le_bord.
nb_faces();
653 for (num_face=num1; num_face<num2; num_face++)
655 if (fait[num_face-num1] == 0)
659 if (ncomp_ch_transporte == 1)
661 diff1 = resu(num_face)-tab(nb_faces_perio);
662 diff2 = resu(voisine)-tab(nb_faces_perio+voisine-num_face);
663 resu(voisine) += diff1;
664 resu(num_face) += diff2;
665 flux_b(voisine,0) += diff1;
666 flux_b(num_face,0) += diff1;
672 for (
int comp=0; comp<ncomp_ch_transporte; comp++)
674 diff1 = resu(num_face,comp)-tab(nb_faces_perio,comp);
675 diff2 = resu(voisine,comp)-tab(nb_faces_perio+voisine-num_face,comp);
678 resu(voisine,comp) += diff1;
679 resu(num_face,comp) += diff2;
680 flux_b(voisine,comp) += diff1;
681 flux_b(num_face,comp) += diff1;
687 fait[num_face-num1]= 1;
688 fait[voisine-num1] = 1;