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))
142 if ((nom_elem==
"Tetra_VEF")||(nom_elem==
"Tri_VEF"))
156 int poly,face_adj,fa7,i,j,n_bord,num_face, rang ,itypcl, num10,num20,num_som;
157 const int ncomp_ch_transporte = transporte.
line_size();
171 int nb_faces_perio = 0;
173 for (n_bord=0; n_bord<domaine_VEF.
nb_front_Cl(); n_bord++)
179 nb_faces_perio += le_bord.
nb_faces();
183 DoubleTab tab(nb_faces_perio,ncomp_ch_transporte);
186 for (n_bord=0; n_bord<domaine_VEF.
nb_front_Cl(); n_bord++)
194 int num2 = num1 + le_bord.
nb_faces();
195 for (num_face=num1; num_face<num2; num_face++)
197 for (
int comp=0; comp<ncomp_ch_transporte; comp++)
198 tab(nb_faces_perio,comp) = resu(num_face,comp);
204 IntVect compteur(nsom);
215 const IntTab& KEL=type_elem.
KEL();
216 for (poly=0; poly<nb_elem_tot; poly++)
218 rang = rang_elem_non_std(poly);
225 for (face_adj=0; face_adj<nfac; face_adj++)
226 face[face_adj]= elem_faces(poly,face_adj);
230 vs[j] = la_vitesse.
valeurs()(face[0],j)*porosite_face(face[0]);
231 for (i=1; i<nfac; i++)
232 vs[j]+= la_vitesse.
valeurs()(face[i],j)*porosite_face(face[i]);
239 for (j=0; j<nsom; j++)
248 for (j=0; j<nsom; j++)
250 num_som = domaine.sommet_elem(poly,j);
251 for (
int ncomp=0; ncomp<
dimension; ncomp++)
259 for (fa7=0; fa7<nfa7; fa7++)
263 cc[i] = facette_normales(poly,fa7,i);
266 cc[i] = normales_facettes_Cl(rang,fa7,i);
270 for (i=0; i<nb_som_facette-1; i++)
274 psc+= vsom(KEL(i+2,fa7),j)*cc[j];
277 psc /= nb_som_facette;
278 num10 = face[KEL(0,fa7)];
279 num20 = face[KEL(1,fa7)];
282 convbis(psc,num10,num20,transporte,ncomp_ch_transporte,resu,
fluent_);
288 psc /= nb_som_facette;
289 num10 = face[KEL(0,fa7)];
290 num20 = face[KEL(1,fa7)];
293 convbis(psc,num10,num20,transporte,ncomp_ch_transporte,resu,
fluent_);
316 for (n_bord=0; n_bord<domaine_VEF.
nb_front_Cl(); n_bord++)
326 int num2 = num1 + le_bord.
nb_faces();
327 for (num_face=num1; num_face<num2; num_face++)
331 psc += la_vitesse.
valeurs()(num_face,i)*face_normales(num_face,i)*porosite_face(num_face);
334 for (i=0; i<ncomp_ch_transporte; i++)
336 resu(num_face,i) -= psc*transporte(num_face,i);
337 flux_b(num_face,i) -= psc*transporte(num_face,i);
342 for (i=0; i<ncomp_ch_transporte; i++)
344 resu(num_face,i) -= psc*la_sortie_libre.
val_ext(num_face-num1,i);
345 flux_b(num_face,i) -= psc*la_sortie_libre.
val_ext(num_face-num1,i);
358 for (num_face=num1; num_face<num2; num_face++)
360 if (fait[num_face-num1] == 0)
363 for (
int comp=0; comp<ncomp_ch_transporte; comp++)
365 diff1 = resu(num_face,comp)-tab(nb_faces_perio,comp);
366 diff2 = resu(voisine,comp)-tab(nb_faces_perio+voisine-num_face,comp);
367 resu(voisine,comp) += diff1;
368 resu(num_face,comp) += diff2;
369 flux_b(voisine,comp) += diff1;
370 flux_b(num_face,comp) += diff2;
373 fait[num_face-num1]= 1;
374 fait[voisine-num1] = 1;
389 const Domaine_VEF& domaine_VEF = le_dom_vef.valeur();
391 const IntTab& elem_faces = domaine_VEF.
elem_faces();
392 const DoubleTab& face_normales = domaine_VEF.
face_normales();
394 const Domaine& domaine = domaine_VEF.
domaine();
401 int nfac = domaine.nb_faces_elem(), nsom = domaine.nb_som_elem(), nb_som_facette = domaine.type_elem()->nb_som_face();
415 int poly,face_adj,fa7,i,j,n_bord, num_face, rang ,itypcl, num10,num20,num_som;
416 const int ncomp_ch_transporte = transporte.
line_size();
428 int voisine, nb_faces_perio = 0;
432 for (n_bord=0; n_bord<domaine_VEF.
nb_front_Cl(); n_bord++)
438 nb_faces_perio += le_bord.
nb_faces();
442 DoubleTab tab(nb_faces_perio,ncomp_ch_transporte);
446 for (n_bord=0; n_bord<domaine_VEF.
nb_front_Cl(); n_bord++)
453 int num2 = num1 + le_bord.
nb_faces();
454 for (num_face=num1; num_face<num2; num_face++)
456 for (
int comp=0; comp<ncomp_ch_transporte; comp++)
457 tab(nb_faces_perio,comp) = coeff(num_face*ncomp_ch_transporte+comp);
470 const IntTab& KEL=type_elem.
KEL();
471 for (poly=0; poly<nb_elem_tot; poly++)
474 rang = rang_elem_non_std(poly);
481 for (face_adj=0; face_adj<nfac; face_adj++)
482 face[face_adj]= elem_faces(poly,face_adj);
487 vs[j] = la_vitesse.
valeurs()(face[0],j);
488 for (i=1; i<nfac; i++)
489 vs[j]+= la_vitesse.
valeurs()(face[i],j);
496 for (j=0; j<nsom; j++)
498 num_som = domaine.sommet_elem(poly,j);
509 for (fa7=0; fa7<nfa7; fa7++)
513 cc[i] = facette_normales(poly,fa7,i);
516 cc[i] = normales_facettes_Cl(rang,fa7,i);
521 for (i=0; i<nb_som_facette-1; i++)
530 psc += vsom(KEL(i+2,fa7),j)*cc[j];
531 psc/= nb_som_facette;
532 num10 = face[KEL(0,fa7)];
533 num20 = face[KEL(1,fa7)];
534 convbisimplicite(psc,num10,num20,transporte,ncomp_ch_transporte,matrice);
542 psc /= nb_som_facette;
543 num10 = face[KEL(0,fa7)];
544 num20 = face[KEL(1,fa7)];
545 convbisimplicite(psc,num10,num20,transporte,ncomp_ch_transporte,matrice);
555 for (n_bord=0; n_bord<domaine_VEF.
nb_front_Cl(); n_bord++)
563 int num2 = num1 + le_bord.
nb_faces();
564 for (num_face=num1; num_face<num2; num_face++)
568 psc += la_vitesse.
valeurs()(num_face,i)*face_normales(num_face,i);
571 for (j=0; j<ncomp_ch_transporte; j++)
573 for (
auto k=tab1[num_face*ncomp_ch_transporte+j]-1; k<tab1[num_face*ncomp_ch_transporte+j+1]-1; k++)
575 if (tab2[k]-1==num_face*ncomp_ch_transporte+j)
582 for (j=0; j<ncomp_ch_transporte; j++)
584 for (
auto k=tab1[num_face*ncomp_ch_transporte+j]-1; k<tab1[num_face*ncomp_ch_transporte+j+1]-1; k++)
586 if (tab2[k]-1==num_face*ncomp_ch_transporte+j)
598 int num2 = num1 + le_bord.
nb_faces();
601 for (num_face=num1; num_face<num2; num_face++)
603 if (fait[num_face-num1] == 0)
606 for (
int comp=0; comp<ncomp_ch_transporte; comp++)
608 diff1 = -1*tab(nb_faces_perio,comp);
609 diff2 = -1*tab(nb_faces_perio+voisine-num_face,comp);
611 for (
auto k=tab1[num_face*ncomp_ch_transporte+comp]-1; k<tab1[num_face*ncomp_ch_transporte+1+comp]-1; k++)
612 if (tab2[k]-1==num_face*ncomp_ch_transporte+comp)
615 for (
auto k=tab1[voisine*ncomp_ch_transporte+comp]-1; k<tab1[voisine*ncomp_ch_transporte+1+comp]-1; k++)
616 if (tab2[k]-1==voisine*ncomp_ch_transporte+comp)
620 fait[num_face-num1]= 1;
621 fait[voisine-num1] = 1;
632 const Domaine_VEF& domaine_VEF = le_dom_vef.valeur();
634 const DoubleTab& face_normales = domaine_VEF.
face_normales();
638 int i,n_bord, num_face;
644 int voisine, nb_faces_perio = 0;
648 for (n_bord=0; n_bord<domaine_VEF.
nb_front_Cl(); n_bord++)
654 nb_faces_perio += le_bord.
nb_faces();
658 DoubleTab tab(nb_faces_perio,ncomp);
661 for (n_bord=0; n_bord<domaine_VEF.
nb_front_Cl(); n_bord++)
668 int num2 = num1 + le_bord.
nb_faces();
669 for (num_face=num1; num_face<num2; num_face++)
671 for (
int comp=0; comp<ncomp; comp++)
672 tab(nb_faces_perio,comp) = resu(num_face,comp);
682 for (n_bord=0; n_bord<domaine_VEF.
nb_front_Cl(); n_bord++)
690 int num2 = num1 + le_bord.
nb_faces();
691 for (num_face=num1; num_face<num2; num_face++)
695 psc += la_vitesse.
valeurs()(num_face,i)*face_normales(num_face,i);
697 for (i=0; i<ncomp; i++)
698 resu(num_face,i) += 0;
700 for (i=0; i<ncomp; i++)
701 resu(num_face,i) -= psc*la_sortie_libre.
val_ext(num_face-num1,i);
709 int num2 = num1 + le_bord.
nb_faces();
712 for (num_face=num1; num_face<num2; num_face++)
714 if (fait[num_face-num1] == 0)
717 for (
int comp=0; comp<ncomp; comp++)
719 diff1 = resu(num_face,comp)-tab(nb_faces_perio,comp);
720 diff2 = resu(voisine,comp)-tab(nb_faces_perio+voisine-num_face,comp);
721 resu(voisine,comp) += diff1;
722 resu(num_face,comp) += diff2;
725 fait[num_face-num1]= 1;
726 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
int nb_faces_bord() const
renvoie le nombre de faces sur lesquelles sont appliquees les conditions limites :