94 DoubleTab& resu)
const
98 const Domaine_VEF& domaine_VEF = le_dom_vef.valeur();
101 const DoubleTab& velocity_tab=la_vitesse.
valeurs();
104 const IntTab& elem_faces = domaine_VEF.
elem_faces();
105 const IntTab& face_voisins = domaine_VEF.
face_voisins();
109 const int nb_faces_elem=elem_faces.
dimension(1);
119 const int nb_faces = domaine_VEF.
nb_faces();
120 for(
int num_face=0; num_face<nb_faces; num_face++)
124 psc+=velocity_tab(num_face,i)*face_normales(num_face,i);
125 fluent_(num_face)=std::fabs(psc);
130 DoubleTab transporte_;
131 DoubleTab vitesse_face_;
135 const DoubleTab& transporte=modif_par_porosite_si_flag(transporte_2,transporte_,!marq,porosite_face);
136 const DoubleTab& tab_vitesse=modif_par_porosite_si_flag(velocity_tab,vitesse_face_,marq,porosite_face);
142 DoubleTab uT(transporte);
143 DoubleTab u(tab_vitesse);
150 DoubleTab grad_phi(nb_faces_elem,
dimension);
151 int elem, num_face, j, i, face;
152 double d_inv=(1./nb_faces_elem);
156 DoubleTab contrib_elem(nb_faces_elem, nb_comp);
157 for (elem=0; elem<nb_elem_tot; elem++)
160 sigma=0, contrib_elem=0, grad_uT=0., grad_phi=0.;
161 for(num_face=0; num_face<nb_faces_elem; num_face++)
164 face=elem_faces(elem, num_face);
166 if(face_voisins(face,0)!=elem)
170 grad_phi(num_face,i)=face_normales(face,i)*cc;
171 for (j=0; j<nb_comp; j++)
173 sigma(i,j)+=u(face,i)*uT(face,j);
174 grad_uT(j,i)+=uT(face,j)*grad_phi(num_face,i);
181 for(num_face=0; num_face<nb_faces_elem; num_face++)
184 face=elem_faces(elem, num_face);
186 for (j=0; j<nb_comp; j++)
187 contrib_elem(num_face,j)-=0.5*d_inv*(u(face,i)*grad_uT(j,i)-sigma(i,j)*grad_phi(num_face,i));
192 for(num_face=0; num_face<nb_faces_elem; num_face++)
195 face=elem_faces(elem, num_face);
197 for (j=0; j<nb_comp; j++)
198 contrib_elem(num_face,j)-=d_inv*(u(face,i)*grad_uT(j, i));
202 for(num_face=0; num_face<nb_faces_elem; num_face++)
204 face=elem_faces(elem, num_face);
205 for (i=0; i<nb_comp; i++)
206 resu(face,i)+=contrib_elem(num_face,i);
210 for (
int n_bord=0; n_bord<domaine_VEF.
nb_front_Cl(); n_bord++)
221 IntVect fait(nb_faces_bord_tot);
224 for (
int ind_face=num10; ind_face<num20; ind_face++)
227 if (fait(ind_face) == 0)
231 fait(face_associee) = 1;
232 face_associee = le_bord.
num_face(face_associee);
234 for (
int comp=0; comp<nb_comp; comp++)
237 som=resu(face_associee,comp)+resu(face,comp);
238 resu(face,comp)=resu(face_associee,comp)=som;
250 int num2 = num1 + nb_faces;
252 for (face=num1; face<num2; face++)
256 for (comp=0; comp<nb_comp; comp++)
257 psc += face_normales(face,comp)*u(face, comp);
259 for (comp=0; comp<nb_comp; comp++)
260 resu(face, comp)-=psc*uT(face, comp);
273 Cerr <<
"filtrage petites echelles : " << finl;
275 DoubleTab ubar(transporte);
277 DoubleTab uprime(transporte);
280 const int nb_faces = domaine_VEF.
nb_faces();
283 double psc=0., pscprim=0., ec=0., ecprime=0.;
285 for(face2=deb; face2<nb_faces; face2++)
288 double v=volumes_entrelaces(face2);
312 for (
int n_bord=0; n_bord<domaine_VEF.
nb_front_Cl(); n_bord++)
318 int num2 = num1 + nb_faces_b;
323 IntVect fait(nb_faces_b);
326 for (face2=num1; face2<num2; face2++)
328 if (fait(face2-num1) == 0)
330 fait(face2-num1) = 1;
332 fait(face_associee) = 1;
334 double v=volumes_entrelaces(face2);
340 up=(uprime(face2,k));
342 uprime(face_associee,k)=uprime(face2,k);
350 uprime(face_associee)=uprime(face2);
364 for (face2=num1; face2<num2; face2++)
366 double v=volumes_entrelaces(face2);
372 up=(uprime(face2,k));
392 Cerr <<
"(u,u) "<< ec <<finl;
393 Cerr <<
"(u',u') "<< ecprime <<finl;
394 Cerr <<
"(u grad u ,u) "<< psc <<finl;
395 Cerr <<
"(u grad u ,u') "<< pscprim <<finl;
398 pourcent=100*sqrt(ecprime/ec);
399 Cerr <<
"||u'||/||u|| : " << pourcent <<
" %" << 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 premiere_face_int() const
une face est interne ssi elle separe deux elements.
int face_voisins(int num_face, int i) const
renvoie l'element voisin de numface dans la direction i.