104 DoubleTab& resu)
const
108 const Domaine_VEF& domaine_VEF = le_dom_vef.valeur();
110 const IntTab& elem_faces = domaine_VEF.
elem_faces();
111 const DoubleTab& face_normales = domaine_VEF.
face_normales();
114 const Domaine& domaine = domaine_VEF.
domaine();
120 int nfac = domaine.nb_faces_elem();
121 int nsom = domaine.nb_som_elem();
122 int nb_som_facette = domaine.type_elem()->nb_som_face();
123 const Elem_geom_base& elem_geom = domaine.type_elem().valeur();
124 if ( sub_type(Hexaedre_VEF,elem_geom))
141 if ((nom_elem==
"Tetra_VEF")||(nom_elem==
"Tri_VEF"))
153 int poly,face_adj,fa7,i,j,n_bord,num_face, rang ,itypcl, num10,num20,num_som;
154 const int ncomp_ch_transporte = transporte.
line_size();
168 int nb_faces_perio = 0;
170 for (n_bord=0; n_bord<domaine_VEF.
nb_front_Cl(); n_bord++)
176 nb_faces_perio += le_bord.
nb_faces();
180 DoubleTab tab(nb_faces_perio,ncomp_ch_transporte);
183 for (n_bord=0; n_bord<domaine_VEF.
nb_front_Cl(); n_bord++)
191 int num2 = num1 + le_bord.
nb_faces();
192 for (num_face=num1; num_face<num2; num_face++)
194 for (
int comp=0; comp<ncomp_ch_transporte; comp++)
195 tab(nb_faces_perio,comp) = resu(num_face,comp);
201 IntVect compteur(nsom);
211 const IntTab& KEL=type_elem.
KEL();
212 for (poly=0; poly<nb_elem_tot; poly++)
214 rang = rang_elem_non_std(poly);
221 for (face_adj=0; face_adj<nfac; face_adj++)
222 face[face_adj]= elem_faces(poly,face_adj);
226 vs[j] = la_vitesse.
valeurs()(face[0],j)*porosite_face(face[0]);
227 for (i=1; i<nfac; i++)
228 vs[j]+= la_vitesse.
valeurs()(face[i],j)*porosite_face(face[i]);
235 for (j=0; j<nsom; j++)
244 for (j=0; j<nsom; j++)
246 num_som = domaine.sommet_elem(poly,j);
247 for (
int ncomp=0; ncomp<
dimension; ncomp++)
255 for (fa7=0; fa7<nfa7; fa7++)
259 cc[i] = facette_normales(poly,fa7,i);
262 cc[i] = normales_facettes_Cl(rang,fa7,i);
266 for (i=0; i<nb_som_facette-1; i++)
270 psc+= vsom(KEL(i+2,fa7),j)*cc[j];
273 psc /= nb_som_facette;
274 num10 = face[KEL(0,fa7)];
275 num20 = face[KEL(1,fa7)];
278 convbis(psc,num10,num20,transporte,ncomp_ch_transporte,resu,
fluent_);
284 psc /= nb_som_facette;
285 num10 = face[KEL(0,fa7)];
286 num20 = face[KEL(1,fa7)];
289 convbis(psc,num10,num20,transporte,ncomp_ch_transporte,resu,
fluent_);
311 for (n_bord=0; n_bord<domaine_VEF.
nb_front_Cl(); n_bord++)
321 int num2 = num1 + le_bord.
nb_faces();
322 for (num_face=num1; num_face<num2; num_face++)
326 psc += la_vitesse.
valeurs()(num_face,i)*face_normales(num_face,i)*porosite_face(num_face);
329 for (i=0; i<ncomp_ch_transporte; i++)
331 resu(num_face,i) -= psc*transporte(num_face,i);
332 flux_b(num_face,i) -= psc*transporte(num_face,i);
337 for (i=0; i<ncomp_ch_transporte; i++)
339 resu(num_face,i) -= psc*la_sortie_libre.
val_ext(num_face-num1,i);
340 flux_b(num_face,i) -= psc*la_sortie_libre.
val_ext(num_face-num1,i);
353 for (num_face=num1; num_face<num2; num_face++)
355 if (fait[num_face-num1] == 0)
358 for (
int comp=0; comp<ncomp_ch_transporte; comp++)
360 diff1 = resu(num_face,comp)-tab(nb_faces_perio,comp);
361 diff2 = resu(voisine,comp)-tab(nb_faces_perio+voisine-num_face,comp);
362 resu(voisine,comp) += diff1;
363 resu(num_face,comp) += diff2;
364 flux_b(voisine,comp) += diff1;
365 flux_b(num_face,comp) += diff2;
368 fait[num_face-num1]= 1;
369 fait[voisine-num1] = 1;
384 const Domaine_VEF& domaine_VEF = le_dom_vef.valeur();
386 const IntTab& elem_faces = domaine_VEF.
elem_faces();
387 const DoubleTab& face_normales = domaine_VEF.
face_normales();
389 const Domaine& domaine = domaine_VEF.
domaine();
396 int nfac = domaine.nb_faces_elem(), nsom = domaine.nb_som_elem(), nb_som_facette = domaine.type_elem()->nb_som_face();
408 int poly,face_adj,fa7,i,j,n_bord, num_face, rang ,itypcl, num10,num20,num_som;
409 const int ncomp_ch_transporte = transporte.
line_size();
421 int voisine, nb_faces_perio = 0;
425 for (n_bord=0; n_bord<domaine_VEF.
nb_front_Cl(); n_bord++)
431 nb_faces_perio += le_bord.
nb_faces();
435 DoubleTab tab(nb_faces_perio,ncomp_ch_transporte);
439 for (n_bord=0; n_bord<domaine_VEF.
nb_front_Cl(); n_bord++)
446 int num2 = num1 + le_bord.
nb_faces();
447 for (num_face=num1; num_face<num2; num_face++)
449 for (
int comp=0; comp<ncomp_ch_transporte; comp++)
450 tab(nb_faces_perio,comp) = coeff(num_face*ncomp_ch_transporte+comp);
462 const IntTab& KEL=type_elem.
KEL();
463 for (poly=0; poly<nb_elem_tot; poly++)
466 rang = rang_elem_non_std(poly);
473 for (face_adj=0; face_adj<nfac; face_adj++)
474 face[face_adj]= elem_faces(poly,face_adj);
479 vs[j] = la_vitesse.
valeurs()(face[0],j);
480 for (i=1; i<nfac; i++)
481 vs[j]+= la_vitesse.
valeurs()(face[i],j);
488 for (j=0; j<nsom; j++)
490 num_som = domaine.sommet_elem(poly,j);
501 for (fa7=0; fa7<nfa7; fa7++)
505 cc[i] = facette_normales(poly,fa7,i);
508 cc[i] = normales_facettes_Cl(rang,fa7,i);
513 for (i=0; i<nb_som_facette-1; i++)
522 psc += vsom(KEL(i+2,fa7),j)*cc[j];
523 psc/= nb_som_facette;
524 num10 = face[KEL(0,fa7)];
525 num20 = face[KEL(1,fa7)];
526 convbisimplicite(psc,num10,num20,transporte,ncomp_ch_transporte,matrice);
534 psc /= nb_som_facette;
535 num10 = face[KEL(0,fa7)];
536 num20 = face[KEL(1,fa7)];
537 convbisimplicite(psc,num10,num20,transporte,ncomp_ch_transporte,matrice);
546 for (n_bord=0; n_bord<domaine_VEF.
nb_front_Cl(); n_bord++)
554 int num2 = num1 + le_bord.
nb_faces();
555 for (num_face=num1; num_face<num2; num_face++)
559 psc += la_vitesse.
valeurs()(num_face,i)*face_normales(num_face,i);
562 for (j=0; j<ncomp_ch_transporte; j++)
564 for (
auto k=tab1[num_face*ncomp_ch_transporte+j]-1; k<tab1[num_face*ncomp_ch_transporte+j+1]-1; k++)
566 if (tab2[k]-1==num_face*ncomp_ch_transporte+j)
573 for (j=0; j<ncomp_ch_transporte; j++)
575 for (
auto k=tab1[num_face*ncomp_ch_transporte+j]-1; k<tab1[num_face*ncomp_ch_transporte+j+1]-1; k++)
577 if (tab2[k]-1==num_face*ncomp_ch_transporte+j)
589 int num2 = num1 + le_bord.
nb_faces();
592 for (num_face=num1; num_face<num2; num_face++)
594 if (fait[num_face-num1] == 0)
597 for (
int comp=0; comp<ncomp_ch_transporte; comp++)
599 diff1 = -1*tab(nb_faces_perio,comp);
600 diff2 = -1*tab(nb_faces_perio+voisine-num_face,comp);
602 for (
auto k=tab1[num_face*ncomp_ch_transporte+comp]-1; k<tab1[num_face*ncomp_ch_transporte+1+comp]-1; k++)
603 if (tab2[k]-1==num_face*ncomp_ch_transporte+comp)
606 for (
auto k=tab1[voisine*ncomp_ch_transporte+comp]-1; k<tab1[voisine*ncomp_ch_transporte+1+comp]-1; k++)
607 if (tab2[k]-1==voisine*ncomp_ch_transporte+comp)
611 fait[num_face-num1]= 1;
612 fait[voisine-num1] = 1;
623 const Domaine_VEF& domaine_VEF = le_dom_vef.valeur();
625 const DoubleTab& face_normales = domaine_VEF.
face_normales();
629 int i,n_bord, num_face;
635 int voisine, nb_faces_perio = 0;
639 for (n_bord=0; n_bord<domaine_VEF.
nb_front_Cl(); n_bord++)
645 nb_faces_perio += le_bord.
nb_faces();
649 DoubleTab tab(nb_faces_perio,ncomp);
652 for (n_bord=0; n_bord<domaine_VEF.
nb_front_Cl(); n_bord++)
659 int num2 = num1 + le_bord.
nb_faces();
660 for (num_face=num1; num_face<num2; num_face++)
662 for (
int comp=0; comp<ncomp; comp++)
663 tab(nb_faces_perio,comp) = resu(num_face,comp);
672 for (n_bord=0; n_bord<domaine_VEF.
nb_front_Cl(); n_bord++)
680 int num2 = num1 + le_bord.
nb_faces();
681 for (num_face=num1; num_face<num2; num_face++)
685 psc += la_vitesse.
valeurs()(num_face,i)*face_normales(num_face,i);
687 for (i=0; i<ncomp; i++)
688 resu(num_face,i) += 0;
690 for (i=0; i<ncomp; i++)
691 resu(num_face,i) -= psc*la_sortie_libre.
val_ext(num_face-num1,i);
699 int num2 = num1 + le_bord.
nb_faces();
702 for (num_face=num1; num_face<num2; num_face++)
704 if (fait[num_face-num1] == 0)
707 for (
int comp=0; comp<ncomp; comp++)
709 diff1 = resu(num_face,comp)-tab(nb_faces_perio,comp);
710 diff2 = resu(voisine,comp)-tab(nb_faces_perio+voisine-num_face,comp);
711 resu(voisine,comp) += diff1;
712 resu(num_face,comp) += diff2;
715 fait[num_face-num1]= 1;
716 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.
int nb_faces_bord() const
Returns the number of faces on which boundary conditions are applied: