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;
93 int ncomp_ch_transporte;
94 if (transporte.
nb_dim() == 1)
95 ncomp_ch_transporte=1;
97 ncomp_ch_transporte= transporte.
dimension(1);
112 int nb_faces_perio = 0;
113 for (n_bord=0; n_bord<domaine_VEF.
nb_front_Cl(); n_bord++)
120 int num2 = num1 + le_bord.
nb_faces();
121 for (num_face=num1; num_face<num2; num_face++)
127 if (ncomp_ch_transporte == 1)
128 tab.
resize(nb_faces_perio);
130 tab.
resize(nb_faces_perio,ncomp_ch_transporte);
133 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++)
144 if (ncomp_ch_transporte == 1)
145 tab(nb_faces_perio) = resu(num_face);
147 for (
int comp=0; comp<ncomp_ch_transporte; comp++)
148 tab(nb_faces_perio,comp) = resu(num_face,comp);
168 for (poly=0; poly<nb_elem_tot; poly++)
171 rang = rang_elem_non_std(poly);
174 for (face_adj=0; face_adj<nfac; face_adj++)
175 face[face_adj]= elem_faces(poly,face_adj);
178 for (fa7=0; fa7<nfa7; fa7++)
182 num10 = face[KEL(0,fa7)];
183 num20 = face[KEL(1,fa7)];
208 if (num_int == num10)
212 else if (num_int == num20)
218 autre_num_face_loc(j)=i;
219 autre_num_face(j)=num_int;
232 cc[i] = facette_normales(poly,fa7,i);
236 cc[i] = normales_facettes_Cl(rang,fa7,i);
239 for (i=0; i<nfac; i ++)
244 psc[i]+= la_vitesse.
valeurs()(face[i],j)*cc[j];
253 f_int = 2.*((psc[nu1]+psc[nu2])- psc[autre_num_face_loc(0)])/3.;
260 f_int = 3.*(psc[nu1]+psc[nu2]);
261 f_int -= (psc[autre_num_face_loc(0)]+psc[autre_num_face_loc(1)]);
272 flux += la_vitesse.
valeurs()(num_calc,comp0)*la_vitesse.
valeurs()(num_calc,comp0);
276 resu(num10, comp0) -= 0.5*flux*cc[comp0];
277 resu(num20, comp0) += 0.5*flux*cc[comp0];
310 for (n_bord=0; n_bord<domaine_VEF.
nb_front_Cl(); n_bord++)
319 int num2 = num1 + le_bord.
nb_faces();
322 for (num_face=num1; num_face<num2; num_face++)
324 if (fait[num_face-num1] == 0)
328 if (ncomp_ch_transporte == 1)
330 diff1 = resu(num_face)-tab(nb_faces_perio);
331 diff2 = resu(voisine)-tab(nb_faces_perio+voisine-num_face);
332 resu(voisine) += diff1;
333 resu(num_face) += diff2;
334 flux_b(voisine,0) += diff1;
335 flux_b(num_face,0) += diff2;
338 for (
int comp=0; comp<ncomp_ch_transporte; comp++)
340 diff1 = resu(num_face,comp)-tab(nb_faces_perio,comp);
341 diff2 = resu(voisine,comp)-tab(nb_faces_perio+voisine-num_face,comp);
342 resu(voisine,comp) += diff1;
343 resu(num_face,comp) += diff2;
344 flux_b(voisine,comp) += diff1;
345 flux_b(num_face,comp) += diff2;
348 fait[num_face-num1]= 1;
349 fait[voisine-num1] = 1;
363 vorticite.
resize(nb_elem);
371 for (num_face=0; num_face<nb_faces; num_face++)
375 elem0 = face_voisins(num_face,0);
376 elem1 = face_voisins(num_face,1);
379 vol0 = volumes(elem0);
382 vol1 = volumes(elem1);
392 inter = vorticite[elem0]*vol0/3.+vorticite[elem1]*vol1/3.;
394 resu(num_face,0) -= -inter*la_vitesse.
valeurs()(num_face,1);
395 resu(num_face,1) -= inter*la_vitesse.
valeurs()(num_face,0);
410 a0 = vorticite(elem0,0)*vol0/4. + vorticite(elem1,0)*vol1/4.;
411 a1 = vorticite(elem0,1)*vol0/4. + vorticite(elem1,1)*vol1/4.;
412 a2 = vorticite(elem0,2)*vol0/4. + vorticite(elem1,2)*vol1/4.;
414 resu(num_face,0) -= a1*la_vitesse.
valeurs()(num_face,2)-a2*la_vitesse.
valeurs()(num_face,1) ;
415 resu(num_face,1) -= a2*la_vitesse.
valeurs()(num_face,0)-a0*la_vitesse.
valeurs()(num_face,2) ;
416 resu(num_face,2) -= a0*la_vitesse.
valeurs()(num_face,1)-a1*la_vitesse.
valeurs()(num_face,0) ;
429 Cerr <<
"DEBUT VERIF PERIO" << finl;
431 for (n_bord=0; n_bord<domaine_VEF.
nb_front_Cl(); n_bord++)
440 int num2 = num1 + le_bord.
nb_faces();
442 for (num_face=num1; num_face<num2; num_face++)
447 if ( resu(num_face,ii)!=resu(voisine,ii) )
449 Cerr <<
"Pbl de periodicite a la face" << num_face << finl;
450 Cerr <<
"diff = " << resu(num_face,ii)-resu(voisine,ii) << finl;
456 Cerr <<
"FIN VERIF PERIO" << finl;
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 face_voisins(int num_face, int i) const
Returns the neighbouring element of num_face in direction i.
int nb_faces_bord() const
Returns the number of faces on which boundary conditions are applied: