72 const DoubleTab& vitesse,
const DoubleTab& K_eps_Bas_Re,
const Champ_Don_base& ch_visco )
const
75 const DoubleTab& tab_visco=ch_visco.
valeurs();
81 const DoubleVect& volumes = le_dom.
volumes();
83 int nb_faces_tot = le_dom.
nb_faces();
87 const Domaine& domaine=le_dom.
domaine();
88 const IntTab& elem_faces = le_dom.
elem_faces();
89 const int nb_faces_elem = domaine.nb_faces_elem();
95 int num_elem,i,face_loc,face_glob,num_face;
107 for (num_elem=0; num_elem<nb_elem_tot; num_elem++)
109 Vol = volumes(num_elem);
113 for(face_loc=0; face_loc<nb_faces_elem; face_loc++)
115 face_glob = elem_faces(num_elem,face_loc);
116 deriv += sqrt(K_eps_Bas_Re(face_glob,0))*face_normales(face_glob,i)*le_dom.
oriente_normale(face_glob,num_elem);
119 for(face_loc=0; face_loc<nb_faces_elem; face_loc++)
121 face_glob = elem_faces(num_elem,face_loc);
126 visco=tab_visco(num_elem);
129 D(face_glob) += visco*deriv*deriv*Vol/nb_faces_elem;
135 for (num_face=0; num_face<nb_faces_tot; num_face++)
136 D(num_face) *= 2./vol_ent(num_face);
168 const DoubleTab& tab_visco=ch_visco.
valeurs();
171 visco=tab_visco(0,0);
177 const IntTab& face_voisins = domaine_VEF.
face_voisins();
178 const DoubleVect& volumes = domaine_VEF.
volumes();
183 const int nb_faces = domaine_VEF.
nb_faces();
186 const int nb_elem = domaine_VEF.
nb_elem();
192 int elem,elem0,elem2;
198 const int ncomp_ch_transporte = transporte.
line_size();
200 DoubleTab gradient(0, ncomp_ch_transporte,
dimension);
203 DoubleTab deriv_seconde_de_gradient_elem(0, ncomp_ch_transporte,
dimension,
dimension);
205 deriv_seconde_de_gradient_elem=0.;
212 DoubleTab gradient_elem(0, ncomp_ch_transporte,
dimension);
215 DoubleTab champ_elem(0, ncomp_ch_transporte,
dimension);
220 deriv_seconde_de_gradient=0.;
222 int fac=-1,elem1,comp;
226 ref_cast_non_const(
Champ_P1NC,vitesse).calcul_gradient(transporte,gradient_elem,ref_cast(
Domaine_Cl_VEF,eq_hydraulique->domaine_Cl_dis()));
232 for (fac=0; fac< premiere_face_int; fac++)
233 for (comp=0; comp<ncomp_ch_transporte; comp++)
236 elem1=face_voisins(fac,0);
238 gradient(fac, comp, i) = gradient_elem(elem1, comp, i);
241 elem1=face_voisins(fac,1);
242 gradient(fac, comp, i) = gradient_elem(elem1, comp, i);
247 for (; fac<nb_faces; fac++)
249 elem1=face_voisins(fac,0);
250 elem2=face_voisins(fac,1);
251 double vol1=volumes(elem1);
252 double vol2=volumes(elem2);
253 double voltot=vol1+vol2;
254 for (comp=0; comp<ncomp_ch_transporte; comp++)
257 double grad1=gradient_elem(elem1, comp, i);
258 double grad2=gradient_elem(elem2, comp, i);
259 gradient(fac, comp, i) = (vol1*grad1 + vol2*grad2)/voltot;
263 gradient.echange_espace_virtuel();
271 for (comp=0; comp<ncomp_ch_transporte; comp++)
272 for (fac=0; fac<nb_faces; fac++)
273 champ_face(fac,comp)=gradient(fac, comp, i);
275 ref_cast_non_const(
Champ_P1NC,vitesse).calcul_gradient(champ_face,champ_elem,ref_cast(
Domaine_Cl_VEF,eq_hydraulique->domaine_Cl_dis()));
277 for (comp=0; comp<ncomp_ch_transporte; comp++)
278 for ( elem=0; elem<nb_elem; elem++)
280 deriv_seconde_de_gradient_elem(elem,comp,i,j) = champ_elem(elem,comp,j);
290 for (fac=0; fac< premiere_face_int; fac++)
292 for (comp=0; comp<ncomp_ch_transporte; comp++)
296 elem1=face_voisins(fac,0);
298 deriv_seconde_de_gradient(fac, comp, i, j) = deriv_seconde_de_gradient_elem(elem1, comp, i, j);
301 elem1=face_voisins(fac,1);
302 deriv_seconde_de_gradient(fac, comp, i, j) = deriv_seconde_de_gradient_elem(elem1, comp, i, j);
308 for (; fac<nb_faces; fac++)
310 elem1=face_voisins(fac,0);
311 elem2=face_voisins(fac,1);
312 double vol1=volumes(elem1);
313 double vol2=volumes(elem2);
314 double voltot=vol1+vol2;
315 for (comp=0; comp<ncomp_ch_transporte; comp++)
319 double grad1=deriv_seconde_de_gradient_elem(elem1, comp, i, j);
320 double grad2=deriv_seconde_de_gradient_elem(elem2, comp, i, j);
321 deriv_seconde_de_gradient(fac, comp, i, j) = (vol1*grad1 + vol2*grad2)/voltot;
327 for (fac=0; fac<nb_faces; fac++)
332 double val2 = deriv_seconde_de_gradient(fac,0,1,1)*deriv_seconde_de_gradient(fac,0,1,1);
333 double val3 = deriv_seconde_de_gradient(fac,1,0,0)*deriv_seconde_de_gradient(fac,1,0,0);
339 double val2 = deriv_seconde_de_gradient(fac,1,0,0)+deriv_seconde_de_gradient(fac,2,0,0);
341 double val3 = deriv_seconde_de_gradient(fac,0,1,1)+deriv_seconde_de_gradient(fac,2,1,1);
343 double val4 = deriv_seconde_de_gradient(fac,0,2,2)+deriv_seconde_de_gradient(fac,1,2,2);
345 deriv = val2 + val3 + val4;
348 elem0 = face_voisins(fac,0);
349 elem1 = face_voisins(fac,1);
353 nuturb = visco_turb(elem0)*volumes(elem0)+visco_turb(elem1)*volumes(elem1);
354 nuturb /= volumes(elem0) + volumes(elem1);
356 visco=(tab_visco(elem0)+tab_visco(elem1))/2.;
360 nuturb = visco_turb(elem0);
362 visco=(tab_visco(elem0));
365 E(fac) = 2.*visco*deriv*nuturb;
643 const DoubleTab& vitesse,
const DoubleTab& K_Bas_Re,
const DoubleTab& eps_Bas_Re,
const Champ_Don_base& ch_visco )
const
646 const DoubleTab& tab_visco=ch_visco.
valeurs();
649 visco=tab_visco(0,0);
652 const DoubleVect& volumes = le_dom.
volumes();
654 int nb_faces_tot = le_dom.
nb_faces();
658 const Domaine& domaine=le_dom.
domaine();
659 const IntTab& elem_faces = le_dom.
elem_faces();
660 const int nb_faces_elem = domaine.nb_faces_elem();
666 int num_elem,i,face_loc,face_glob,num_face;
678 for (num_elem=0; num_elem<nb_elem_tot; num_elem++)
680 Vol = volumes(num_elem);
684 for(face_loc=0; face_loc<nb_faces_elem; face_loc++)
686 face_glob = elem_faces(num_elem,face_loc);
687 deriv += sqrt(K_Bas_Re(face_glob))*face_normales(face_glob,i)*le_dom.
oriente_normale(face_glob,num_elem);
690 for(face_loc=0; face_loc<nb_faces_elem; face_loc++)
692 face_glob = elem_faces(num_elem,face_loc);
697 visco=tab_visco(num_elem);
700 D(face_glob) += visco*deriv*deriv*Vol/nb_faces_elem;
706 for (num_face=0; num_face<nb_faces_tot; num_face++)
707 D(num_face) *= 2./vol_ent(num_face);
virtual void creer_tableau_elements(Array_base &, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT) const
creation d'un tableau parallele de valeurs aux elements.
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.