41 DoubleTab& resu)
const
44 const Domaine_VEF& domaine_VEF = le_dom_vef.valeur();
48 const IntTab& elem_faces = domaine_VEF.
elem_faces();
51 const Domaine& domaine = domaine_VEF.
domaine();
52 const int nb_faces = domaine_VEF.
nb_faces();
54 const int nb_elem = domaine_VEF.
nb_elem();
61 int nfac = domaine.nb_faces_elem();
63 const DoubleVect& volumes = domaine_VEF.
volumes();
69 double inter,a0,a1,a2,f_int;
78 int poly,face_adj,fa7,i,j,n_bord;
95 int ncomp_ch_transporte;
96 if (transporte.
nb_dim() == 1)
97 ncomp_ch_transporte=1;
99 ncomp_ch_transporte= transporte.
dimension(1);
114 int nb_faces_perio = 0;
115 for (n_bord=0; n_bord<domaine_VEF.
nb_front_Cl(); n_bord++)
122 int num2 = num1 + le_bord.
nb_faces();
123 for (num_face=num1; num_face<num2; num_face++)
129 if (ncomp_ch_transporte == 1)
130 tab.
resize(nb_faces_perio);
132 tab.
resize(nb_faces_perio,ncomp_ch_transporte);
135 for (n_bord=0; n_bord<domaine_VEF.
nb_front_Cl(); n_bord++)
143 int num2 = num1 + le_bord.
nb_faces();
144 for (num_face=num1; num_face<num2; num_face++)
146 if (ncomp_ch_transporte == 1)
147 tab(nb_faces_perio) = resu(num_face);
149 for (
int comp=0; comp<ncomp_ch_transporte; comp++)
150 tab(nb_faces_perio,comp) = resu(num_face,comp);
171 for (poly=0; poly<nb_elem_tot; poly++)
174 rang = rang_elem_non_std(poly);
177 for (face_adj=0; face_adj<nfac; face_adj++)
178 face[face_adj]= elem_faces(poly,face_adj);
181 for (fa7=0; fa7<nfa7; fa7++)
185 num10 = face[KEL(0,fa7)];
186 num20 = face[KEL(1,fa7)];
211 if (num_int == num10)
215 else if (num_int == num20)
221 autre_num_face_loc(j)=i;
222 autre_num_face(j)=num_int;
235 cc[i] = facette_normales(poly,fa7,i);
239 cc[i] = normales_facettes_Cl(rang,fa7,i);
242 for (i=0; i<nfac; i ++)
247 psc[i]+= la_vitesse.
valeurs()(face[i],j)*cc[j];
256 f_int = 2.*((psc[nu1]+psc[nu2])- psc[autre_num_face_loc(0)])/3.;
263 f_int = 3.*(psc[nu1]+psc[nu2]);
264 f_int -= (psc[autre_num_face_loc(0)]+psc[autre_num_face_loc(1)]);
275 flux += la_vitesse.
valeurs()(num_calc,comp0)*la_vitesse.
valeurs()(num_calc,comp0);
279 resu(num10, comp0) -= 0.5*flux*cc[comp0];
280 resu(num20, comp0) += 0.5*flux*cc[comp0];
313 for (n_bord=0; n_bord<domaine_VEF.
nb_front_Cl(); n_bord++)
322 int num2 = num1 + le_bord.
nb_faces();
325 for (num_face=num1; num_face<num2; num_face++)
327 if (fait[num_face-num1] == 0)
331 if (ncomp_ch_transporte == 1)
333 diff1 = resu(num_face)-tab(nb_faces_perio);
334 diff2 = resu(voisine)-tab(nb_faces_perio+voisine-num_face);
335 resu(voisine) += diff1;
336 resu(num_face) += diff2;
337 flux_b(voisine,0) += diff1;
338 flux_b(num_face,0) += diff2;
341 for (
int comp=0; comp<ncomp_ch_transporte; comp++)
343 diff1 = resu(num_face,comp)-tab(nb_faces_perio,comp);
344 diff2 = resu(voisine,comp)-tab(nb_faces_perio+voisine-num_face,comp);
345 resu(voisine,comp) += diff1;
346 resu(num_face,comp) += diff2;
347 flux_b(voisine,comp) += diff1;
348 flux_b(num_face,comp) += diff2;
351 fait[num_face-num1]= 1;
352 fait[voisine-num1] = 1;
366 vorticite.
resize(nb_elem);
374 for (num_face=0; num_face<nb_faces; num_face++)
378 elem0 = face_voisins(num_face,0);
379 elem1 = face_voisins(num_face,1);
382 vol0 = volumes(elem0);
385 vol1 = volumes(elem1);
395 inter = vorticite[elem0]*vol0/3.+vorticite[elem1]*vol1/3.;
397 resu(num_face,0) -= -inter*la_vitesse.
valeurs()(num_face,1);
398 resu(num_face,1) -= inter*la_vitesse.
valeurs()(num_face,0);
413 a0 = vorticite(elem0,0)*vol0/4. + vorticite(elem1,0)*vol1/4.;
414 a1 = vorticite(elem0,1)*vol0/4. + vorticite(elem1,1)*vol1/4.;
415 a2 = vorticite(elem0,2)*vol0/4. + vorticite(elem1,2)*vol1/4.;
417 resu(num_face,0) -= a1*la_vitesse.
valeurs()(num_face,2)-a2*la_vitesse.
valeurs()(num_face,1) ;
418 resu(num_face,1) -= a2*la_vitesse.
valeurs()(num_face,0)-a0*la_vitesse.
valeurs()(num_face,2) ;
419 resu(num_face,2) -= a0*la_vitesse.
valeurs()(num_face,1)-a1*la_vitesse.
valeurs()(num_face,0) ;
432 Cerr <<
"DEBUT VERIF PERIO" << finl;
434 for (n_bord=0; n_bord<domaine_VEF.
nb_front_Cl(); n_bord++)
443 int num2 = num1 + le_bord.
nb_faces();
445 for (num_face=num1; num_face<num2; num_face++)
450 if ( resu(num_face,ii)!=resu(voisine,ii) )
452 Cerr <<
"Pbl de periodicite a la face" << num_face << finl;
453 Cerr <<
"diff = " << resu(num_face,ii)-resu(voisine,ii) << finl;
459 Cerr <<
"FIN VERIF PERIO" << finl;
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 face_voisins(int num_face, int i) const
renvoie l'element voisin de numface dans la direction i.
int nb_faces_bord() const
renvoie le nombre de faces sur lesquelles sont appliquees les conditions limites :