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();
99 int poly,face_adj,fa7,i,j,comp0,n_bord;
100 int num_face, rang ,itypcl;
103 int ncomp_ch_transporte;
104 if (transporte.
nb_dim() == 1)
105 ncomp_ch_transporte=1;
107 ncomp_ch_transporte= transporte.
dimension(1);
117 double coef1=0.,coef2=0.,coef3=0.;
133 int nb_faces_perio = 0;
134 for (n_bord=0; n_bord<domaine_VEF.
nb_front_Cl(); n_bord++)
141 int num2 = num1 + le_bord.
nb_faces();
142 for (num_face=num1; num_face<num2; num_face++)
148 if (ncomp_ch_transporte == 1)
149 tab.
resize(nb_faces_perio);
151 tab.
resize(nb_faces_perio,ncomp_ch_transporte);
154 for (n_bord=0; n_bord<domaine_VEF.
nb_front_Cl(); n_bord++)
162 int num2 = num1 + le_bord.
nb_faces();
163 for (num_face=num1; num_face<num2; num_face++)
165 if (ncomp_ch_transporte == 1)
166 tab(nb_faces_perio) = resu(num_face);
168 for (
int comp=0; comp<ncomp_ch_transporte; comp++)
169 tab(nb_faces_perio,comp) = resu(num_face,comp);
184 for (poly=0; poly<nb_elem_tot; poly++)
187 rang = rang_elem_non_std(poly);
194 for (face_adj=0; face_adj<nfac; face_adj++)
195 face[face_adj]= elem_faces(poly,face_adj);
198 for (fa7=0; fa7<nfa7; fa7++)
202 num10 = face[KEL(0,fa7)];
203 num20 = face[KEL(1,fa7)];
215 if (num_int == num10)
220 else if (num_int == num20)
227 autre_num_face_loc(j)=i;
228 autre_num_face(j)=num_int;
239 cc[i] = facette_normales(poly,fa7,i);
243 cc[i] = normales_facettes_Cl(rang,fa7,i);
246 for (i=0; i<nfac; i ++)
254 psc[i]+= la_vitesse.
valeurs()(face[i],j)*cc[j]*porosite_face(face[i]);
269 coef1 = 13.0*( psc[nu1]+psc[nu2] ) ;
270 coef1 -= 8.0*psc[autre_num_face_loc(0)];
272 coef2 = 8.0*( psc[nu1]+psc[nu2] ) ;
273 coef2 -= 7.0*psc[autre_num_face_loc(0)];
275 if (ncomp_ch_transporte == 1)
277 flux = (transporte(num10)+transporte(num20))*coef1;
278 flux -= transporte(autre_num_face(0))*coef2;
284 for (comp0=0; comp0<ncomp_ch_transporte; comp0++)
286 flux = (transporte(num10,comp0)+transporte(num20,comp0))*coef1;
287 flux -= transporte(autre_num_face(0),comp0)*coef2;
289 resu(num10, comp0) -= flux;
290 resu(num20, comp0) += flux;
294 fluent_[num10] += 2.*((psc[nu1]+psc[nu2])- psc[autre_num_face_loc(0)])/3.;
295 fluent_[num10] -= 2.*((psc[nu1]+psc[nu2])- psc[autre_num_face_loc(0)])/3.;
302 if ((itypcl==1)||(itypcl==2)||(itypcl==4))
324 Cerr <<
"C est pas possible!!!" << finl;
333 coef1 = 2.*( psc[nu1]+psc[nu2] ) ;
334 coef1 -= psc[numfa7];
336 coef2 = psc[nu1]+psc[nu2] ;
337 coef2 -= 2.*psc[numfa7];
339 for (comp0=0; comp0<ncomp_ch_transporte; comp0++)
341 flux = (transporte(num10,comp0)+transporte(num20,comp0))*coef1;
342 flux -= transporte(numfa7,comp0)*coef2;
344 resu(num10, comp0) -= flux;
345 resu(num20, comp0) += flux;
348 fluent_[num10] += 0.5*(psc[nu1]+psc[nu2]);
349 fluent_[num20] -= 0.5*(psc[nu1]+psc[nu2]);
357 coef1 = 2.*( psc[nu1]-psc[nu2] ) ;
358 coef1 += 3.*psc[numfa7];
360 coef2 = 3.*(psc[nu1]-psc[nu2]) ;
361 coef2 += 6.*psc[numfa7];
364 for (comp0=0; comp0<ncomp_ch_transporte; comp0++)
366 flux = (transporte(face[nu1],comp0)-transporte(face[nu2],comp0))*coef1;
367 flux += transporte(face[numfa7],comp0)*coef2;
369 resu(face[nu1],comp0) -= flux;
373 fluent_[face[nu1]] -= 0.5*(psc[nu1]-psc[nu2])+psc[numfa7];
380 coef1 = 2.*( psc[nu2]-psc[nu1] ) ;
381 coef1 += 3.*psc[numfa7];
383 coef2 = 3.*(psc[nu2]-psc[nu1]) ;
384 coef2 += 6.*psc[numfa7];
387 for (comp0=0; comp0<ncomp_ch_transporte; comp0++)
389 flux = (transporte(face[nu2],comp0)-transporte(face[nu1],comp0))*coef1;
390 flux += transporte(face[numfa7],comp0)*coef2;
392 resu(face[nu1],comp0) -= flux;
396 fluent_[face[nu1]] -= 0.5*(psc[nu2]-psc[nu1])+psc[numfa7];
433 Cerr <<
"On arrete tout, c est pas possible!!!!" << finl;
434 Cerr <<
"sinon c est que je n ai rien compris!!!" << finl;
440 coef2 = (psc[nu1]-psc[nu2])/3.;
441 for (comp0=0; comp0<ncomp_ch_transporte; comp0++)
443 flux = transporte(face[fa7],comp0)*coef1;
444 flux += (transporte(face[nu1],comp0)-transporte(face[nu2],comp0))*coef2;
446 resu(face[nu1],comp0) -= flux;
449 fluent_[face[fa7]] -= psc[fa7];
464 coef1 = 19.0*( psc[nu1]+psc[nu2] ) ;
465 coef1 -= 7.0*(psc[autre_num_face_loc(0)]+psc[autre_num_face_loc(1)]);
468 coef2 = 7.0*( psc[nu1]+psc[nu2] ) ;
469 coef2 -= 15.0*psc[autre_num_face_loc(0)];
470 coef2 += 9.0*psc[autre_num_face_loc(1)];
473 coef3 = 7.0*( psc[nu1]+psc[nu2] ) ;
474 coef3 += 9.0*psc[autre_num_face_loc(0)];
475 coef3 -= 15.0*psc[autre_num_face_loc(1)];
478 for (comp0=0; comp0<ncomp_ch_transporte; comp0++)
480 flux = (transporte(num10,comp0)+transporte(num20,comp0))*coef1;
481 flux -= transporte(autre_num_face(0),comp0)*coef2;
482 flux -= transporte(autre_num_face(1),comp0)*coef3;
484 resu(num10, comp0) -= flux;
485 resu(num20, comp0) += flux;
499 f_int = 3.*(psc[nu1]+psc[nu2]);
500 f_int -= (psc[autre_num_face_loc(0)]+psc[autre_num_face_loc(1)]);
519 Cerr <<
"Dans le default!!" << finl;
536 coef1 = 6.*( psc[nu1]+psc[nu2] ) ;
537 coef1 -= 3.*psc[nu3]+psc[fa7];
539 coef2 = 3.0*( psc[nu1]+psc[nu2] ) ;
540 coef2 -= 7.0*psc[nu3];
541 coef2 += 4.0*psc[fa7];
543 coef3 = psc[nu1]+psc[nu2];
545 coef3 -= 7.*psc[fa7];
547 for (comp0=0; comp0<ncomp_ch_transporte; comp0++)
549 flux = (transporte(num10,comp0)+transporte(num20,comp0))*coef1;
550 flux -= transporte(face[nu3],comp0)*coef2;
551 flux -= transporte(face[fa7],comp0)*coef3;
553 resu(num10, comp0) -= flux;
554 resu(num20, comp0) += flux;
558 f_int = 3.*(psc[nu1]+psc[nu2]);
559 f_int -= (psc[autre_num_face_loc(0)]+psc[autre_num_face_loc(1)]);
601 for (n_bord=0; n_bord<domaine_VEF.
nb_front_Cl(); n_bord++)
612 int num2 = num1 + le_bord.
nb_faces();
613 for (num_face=num1; num_face<num2; num_face++)
617 pscav += la_vitesse.
valeurs()(num_face,i)*face_normales(num_face,i)*porosite_face(num_face);
619 if (ncomp_ch_transporte == 1)
621 resu(num_face) -= pscav*transporte(num_face);
622 flux_b(num_face,0) -= pscav*transporte(num_face);
625 for (i=0; i<ncomp_ch_transporte; i++)
627 resu(num_face,i) -= pscav*transporte(num_face,i);
628 flux_b(num_face,i) -= pscav*transporte(num_face,i);
632 if (ncomp_ch_transporte == 1)
634 resu(num_face) -= pscav*la_sortie_libre.
val_ext(num_face-num1);
635 flux_b(num_face,0) -= pscav*la_sortie_libre.
val_ext(num_face-num1);
638 for (i=0; i<ncomp_ch_transporte; i++)
640 resu(num_face,i) -= pscav*la_sortie_libre.
val_ext(num_face-num1,i);
641 flux_b(num_face,i) -= pscav*la_sortie_libre.
val_ext(num_face-num1,i);
653 int num2 = num1 + le_bord.
nb_faces();
656 for (num_face=num1; num_face<num2; num_face++)
658 if (fait[num_face-num1] == 0)
662 if (ncomp_ch_transporte == 1)
664 diff1 = resu(num_face)-tab(nb_faces_perio);
665 diff2 = resu(voisine)-tab(nb_faces_perio+voisine-num_face);
666 resu(voisine) += diff1;
667 resu(num_face) += diff2;
668 flux_b(voisine,0) += diff1;
669 flux_b(num_face,0) += diff1;
675 for (
int comp=0; comp<ncomp_ch_transporte; comp++)
677 diff1 = resu(num_face,comp)-tab(nb_faces_perio,comp);
678 diff2 = resu(voisine,comp)-tab(nb_faces_perio+voisine-num_face,comp);
681 resu(voisine,comp) += diff1;
682 resu(num_face,comp) += diff2;
683 flux_b(voisine,comp) += diff1;
684 flux_b(num_face,comp) += diff1;
690 fait[num_face-num1]= 1;
691 fait[voisine-num1] = 1;