191 Cerr <<
"debut init_lois_paroi" << finl;
194 const IntVect& orientation = domaine_VDF.
orientation();
195 const IntTab& face_voisins = domaine_VDF.
face_voisins();
196 const IntTab& elem_faces = domaine_VDF.
elem_faces();
197 const Equation_base& eqn_hydr = mon_modele_turb_hyd->equation();
201 int compteur_faces_paroi = 0;
202 DoubleVect corresp(le_dom_dis_->nb_faces_bord());
223 for (
int n_bord=0; n_bord<domaine_VDF.
nb_front_Cl(); n_bord++)
225 const Cond_lim& la_cl = le_dom_Cl_dis_->les_conditions_limites(n_bord);
234 for (
int num_face=ndeb; num_face<nfin; num_face++)
236 corresp(compteur_faces_paroi)=num_face;
239 compteur_faces_paroi++;
248 compteur_faces_paroi = le_dom_dis_->nb_faces_bord();
250 eq_k_U_W.dimensionner(compteur_faces_paroi);
251 corresp.
resize(compteur_faces_paroi);
261 compteur_faces_paroi=0;
262 for (
int n_bord=0; n_bord<domaine_VDF.
nb_front_Cl(); n_bord++)
265 const Cond_lim& la_cl = le_dom_Cl_dis_->les_conditions_limites(n_bord);
274 for (
int num_face=ndeb; num_face<nfin; num_face++)
286 face=compteur_faces_paroi;
289 compteur_faces_paroi++;
300 compteur_faces_paroi = 0;
303 for (
int n_bord=0; n_bord<domaine_VDF.
nb_front_Cl(); n_bord++)
310 const Cond_lim& la_cl = le_dom_Cl_dis_->les_conditions_limites(n_bord);
329 for (
int num_face=ndeb; num_face<nfin; num_face++)
333 ori = orientation(num_face);
335 if ((elem = face_voisins(num_face,0)) == -1)
337 elem = face_voisins(num_face,1);
341 eq_k_U_W[compteur_faces_paroi].associer_milieu(le_fluide);
349 eq_k_U_W[compteur_faces_paroi].set_y0(0.);
350 eq_k_U_W[compteur_faces_paroi].set_yn(dist);
353 eq_k_U_W[compteur_faces_paroi].initialiser(
nb_comp+1,
nb_pts,
356 eq_k_U_W[compteur_faces_paroi].set_u_y0(0,0.);
357 eq_k_U_W[compteur_faces_paroi].set_u_y0(1,0.);
364 if (sub_type(
Diffu_k,eq_k_U_W[compteur_faces_paroi].get_diffu()))
366 Diffu_k& diffu = ref_cast_non_const(
Diffu_k, eq_k_U_W[compteur_faces_paroi].get_diffu());
370 vmoy = 0.5*(vit(elem_faces(elem,(ori+1)%4)) + vit(elem_faces(elem,(ori+3)%4)));
373 eq_k_U_W[compteur_faces_paroi].set_u_yn(0,vmoy);
374 eq_k_U_W[compteur_faces_paroi].set_Uinit_lin(0, 0., vmoy);
376 vmoy = 0.5*(vit(elem_faces(elem,(ori+1)%4)) + vit(elem_faces(elem,(ori+3)%4)));
381 eq_k_U_W[compteur_faces_paroi].set_Uinit_lin(1, 0.,
k_init);
384 compteur_faces_paroi++;
401 for (
int num_face=ndeb; num_face<nfin; num_face++)
405 ori = orientation(num_face);
407 if ((elem = face_voisins(num_face,0)) == -1)
409 elem = face_voisins(num_face,1);
412 eq_k_U_W[compteur_faces_paroi].associer_milieu(le_fluide);
420 eq_k_U_W[compteur_faces_paroi].set_y0(0.);
421 eq_k_U_W[compteur_faces_paroi].set_yn(dist);
424 eq_k_U_W[compteur_faces_paroi].initialiser(
nb_comp+1,
nb_pts,
428 eq_k_U_W[compteur_faces_paroi].set_u_y0(0,0.);
429 eq_k_U_W[compteur_faces_paroi].set_u_y0(1,0.);
430 eq_k_U_W[compteur_faces_paroi].set_u_y0(2,0.);
434 if (sub_type(
Diffu_k,eq_k_U_W[compteur_faces_paroi].get_diffu()))
436 Diffu_k& diffu = ref_cast_non_const(
Diffu_k, eq_k_U_W[compteur_faces_paroi].get_diffu());
442 vmoy = 0.5*(vit(elem_faces(elem,(ori+1)%6)) + vit(elem_faces(elem,(ori+4)%6)));
444 eq_k_U_W[compteur_faces_paroi].set_u_yn(0,vmoy);
448 eq_k_U_W[compteur_faces_paroi].set_Uinit_lin(0, 0., vmoy);
450 vmoy = 0.5*(vit(elem_faces(elem,(ori+2)%6)) + vit(elem_faces(elem,(ori+5)%6)));
455 eq_k_U_W[compteur_faces_paroi].set_u_yn(1,vmoy);
456 eq_k_U_W[compteur_faces_paroi].set_Uinit_lin(1, 0., vmoy);
461 eq_k_U_W[compteur_faces_paroi].set_Uinit_lin(2, 0.,
k_init);
463 compteur_faces_paroi++;
470 Cerr <<
"fin init_lois_paroi" << finl;
493 Cerr <<
"ParoiVDF_TBLE_LRM::calculer_hyd n'est pas parallelise." << finl;
497 const IntVect& orientation = domaine_VDF.
orientation();
498 const IntTab& face_voisins = domaine_VDF.
face_voisins();
499 const IntTab& elem_faces = domaine_VDF.
elem_faces();
501 const Equation_base& eqn_hydr = mon_modele_turb_hyd->equation();
504 const DoubleTab& tab_visco = ch_visco_cin.
valeurs();
507 const DoubleTab& nu_t = mon_modele_turb_hyd->viscosite_turbulente().valeurs();
515 visco = std::max(tab_visco(0,0),DMINFLOAT);
525 Cerr <<
"In ParoiVDF_TBLE_LRM::calculer_hyd_BiK : visco = " << tab_visco.
local_min_vect() <<
" <= 0 ? " << finl;
541 double vmoy = 0., ts0 =0., ts1=0.,gradient_de_pression0=0., gradient_de_pression1 = 0.;
543 DoubleVect grad_vit_elemx;
544 DoubleVect grad_vit_elem_moyx;
545 DoubleVect grad_vit_elemz;
546 DoubleVect grad_vit_elem_moyz;
548 DoubleVect grad_T_moy;
549 DoubleVect source_T_k;
550 DoubleVect source_T_U;
570 DoubleTab grad_p(vit);
573 gradient.calculer(p, grad_p);
575 DoubleTab termes_sources;
586 int compteur_faces_paroi = 0;
587 DoubleVect corresp(le_dom_dis_->nb_faces_bord());
593 for (
int n_bord=0; n_bord<domaine_VDF.
nb_front_Cl(); n_bord++)
595 const Cond_lim& la_cl = le_dom_Cl_dis_->les_conditions_limites(n_bord);
604 for (
int num_face=ndeb; num_face<nfin; num_face++)
606 corresp(compteur_faces_paroi)=num_face;
607 compteur_faces_paroi++;
612 corresp.
resize(compteur_faces_paroi);
613 compteur_faces_paroi = 0;
619 for (
int n_bord=0; n_bord<domaine_VDF.
nb_front_Cl(); n_bord++)
627 const Cond_lim& la_cl = le_dom_Cl_dis_->les_conditions_limites(n_bord);
649 for (
int num_face=ndeb; num_face<nfin; num_face++)
652 ori = orientation(num_face);
661 if ((elem = face_voisins(num_face,0)) == -1)
663 elem = face_voisins(num_face,1);
670 eq_k_U_W[compteur_faces_paroi].set_dt(1.e12);
672 eq_k_U_W[compteur_faces_paroi].set_dt(dt);
677 int face1 = elem_faces(elem,(ori+1));
678 int face2 = elem_faces(elem,(ori+3)%4);
686 vmoy = 0.5*(vit(face1) + vit(face2));
691 ts0 = 0.5*(termes_sources(face1)/volumes_entrelaces(face1)
692 + termes_sources(face2)/volumes_entrelaces(face2));
694 eq_k_U_W[compteur_faces_paroi].set_u_y0(0,0.);
695 eq_k_U_W[compteur_faces_paroi].set_u_yn(0,vmoy);
704 gradient_de_pression0 = 0.5*(grad_p(face1)+grad_p(face2));
707 for(
int i=0 ; i<
nb_pts ; i++)
709 grad_vit_elemx(i)=(eq_k_U_W[compteur_faces_paroi].get_Unp1(0,i+1)-eq_k_U_W[compteur_faces_paroi].get_Unp1(0,i))/(eq_k_U_W[compteur_faces_paroi].get_y(i+1)-eq_k_U_W[compteur_faces_paroi].get_y(i));
713 for(
int i=1 ; i<
nb_pts ; i++)
715 grad_vit_elem_moyx(i)=0.5*(grad_vit_elemx(i)+grad_vit_elemx(i-1));
719 grad_vit_elem_moyx(0)=(eq_k_U_W[compteur_faces_paroi].get_Unp1(0,1)-eq_k_U_W[compteur_faces_paroi].get_Unp1(0,0))/(eq_k_U_W[compteur_faces_paroi].get_y(1)-eq_k_U_W[compteur_faces_paroi].get_y(0));
728 d_visco = tab_visco[elem];
744 int face3 = elem_faces(elem,(ori+2)%4);
745 int face4 = elem_faces(elem,ori);
753 int elem1=face_voisins(n2,0);
755 elem1=face_voisins(n2,1);
766 double a1=d_visco+0.5*(nu_t(elem)+nu_t(elem1));
771 double b2=a2/(eq_k_U_W[compteur_faces_paroi].get_y(
nb_pts)-eq_k_U_W[compteur_faces_paroi].get_y(
nb_pts-1));
774 kcl=(b1*tab_k(elem1)+b2*eq_k_U_W[compteur_faces_paroi].get_Unp1(1,
nb_pts-1))/(b1+b2);
779 eq_k_U_W[compteur_faces_paroi].set_u_y0(1,0.);
780 eq_k_U_W[compteur_faces_paroi].set_u_yn(1,kcl);
812 int nb_sources=les_sources.size();
814 for (
int j=0; j<nb_sources; j++)
833 const DoubleTab& tab_champ_beta_t = ch_beta_t.
valeurs();
836 beta_t = std::max(tab_champ_beta_t(0,0),DMINFLOAT);
840 Cerr <<
" On ne sait pas traiter un beta_t non uniforme dans Paroi TBLE_LRM !!!"<< finl;
846 for(
int i=0 ; i<
nb_pts ; i++)
848 grad_T(i)=(loi_tble_T.
get_eq_couche_lim_T(compteur_faces_paroi).get_Unp1(0,i+1)-loi_tble_T.
get_eq_couche_lim_T(compteur_faces_paroi).
get_Unp1(0,i))/(eq_k_U_W[compteur_faces_paroi].get_y(i+1)-eq_k_U_W[compteur_faces_paroi].get_y(i));
851 for(
int i=1 ; i<
nb_pts ; i++)
853 grad_T_moy(i)=0.5*(grad_T(i)+grad_T(i-1));
857 grad_T_moy(0)=(loi_tble_T.
get_eq_couche_lim_T(compteur_faces_paroi).get_Unp1(0,1)-loi_tble_T.
get_eq_couche_lim_T(compteur_faces_paroi).
get_Unp1(0,0))/(eq_k_U_W[compteur_faces_paroi].get_y(1)-eq_k_U_W[compteur_faces_paroi].get_y(0));
860 const DoubleVect& gravite = ch_gravite.
valeurs();
864 Cerr <<
" On ne sait pas traiter la gravite non uniforme dans Paroi TBLE_LRM !!!"<< finl;
877 gn+=gravite(idim)*domaine_VDF.
face_normales(num_face,idim)/norm_n;
884 gt_vect(idim) = gravite(idim)-gn*domaine_VDF.
face_normales(num_face,idim)/norm_n;
887 double g_t=gt_vect(1-ori);
891 for(
int i=0 ; i<
nb_pts; i++)
893 source_T_k(i) = g_t*beta_t*((diffu.
calculer_a_local(i)-d_visco)/(0.9))*grad_T_moy(i);
894 source_T_U(i) = g_t*beta_t*(loi_tble_T.
get_eq_couche_lim_T(compteur_faces_paroi).get_Unp1(0,i)-T0);
902 eps0=2*d_visco*eq_k_U_W[compteur_faces_paroi].get_Unp1(1,1)/(eq_k_U_W[compteur_faces_paroi].get_y(1)*eq_k_U_W[compteur_faces_paroi].get_y(1));
903 eq_k_U_W[compteur_faces_paroi].set_F(1,0,-eps0 + source_T_k(0));
904 eq_k_U_W[compteur_faces_paroi].set_F(0,0, -gradient_de_pression0 + ts0 - source_T_U(0));
906 for(
int i=1 ; i<
nb_pts; i++)
910 double k=eq_k_U_W[compteur_faces_paroi].get_Unp1(1,i);
911 double y=eq_k_U_W[compteur_faces_paroi].get_y(i);
918 eps=eq_k_U_W[compteur_faces_paroi].get_Unp1(1,i)*sqrt(vv_bar)/l_eps;
920 eq_k_U_W[compteur_faces_paroi].set_F(1,i,(diffu.
calculer_a_local(i)-d_visco)
921 *grad_vit_elem_moyx(i)*grad_vit_elem_moyx(i)-eps+source_T_k(i));
924 eq_k_U_W[compteur_faces_paroi].set_F(0,i, -gradient_de_pression0 + ts0 - source_T_U(i) );
932 eq_k_U_W[compteur_faces_paroi].aller_au_temps(tps);
936 for(
int i=0 ; i<
nb_pts ; i++)
938 if (eq_k_U_W[compteur_faces_paroi].get_Unp1(1,i)<0.)
940 Cerr <<
"Warning dans TBLE_LRM : k <0 !!! k = " << eq_k_U_W[compteur_faces_paroi].get_Unp1(1,i) << finl;
941 eq_k_U_W[compteur_faces_paroi].set_Unp1(1,i,1.e-9);
945 if(itmax<eq_k_U_W[compteur_faces_paroi].get_it())
947 itmax = eq_k_U_W[compteur_faces_paroi].get_it();
949 Cerr <<
"WARNING : TOO MANY ITERATIONS ARE NEEDED IN THE TBLE MESH"
972 tab_u_star_(num_face) =pow(eq_k_U_W[compteur_faces_paroi].get_cis(0)*eq_k_U_W[compteur_faces_paroi].get_cis(0),0.25);
975 compteur_faces_paroi++;
994 for (
int num_face=ndeb; num_face<nfin; num_face++)
997 ori = orientation(num_face);
1004 if ((elem = face_voisins(num_face,0)) == -1)
1006 elem = face_voisins(num_face,1);
1013 eq_k_U_W[compteur_faces_paroi].set_dt(1.e12);
1015 eq_k_U_W[compteur_faces_paroi].set_dt(dt);
1019 int face1 = elem_faces(elem,(ori+1));
1020 int face2 = elem_faces(elem,(ori+4)%6);
1022 int face3 = elem_faces(elem,(ori+2));
1023 int face4 = elem_faces(elem,(ori+5)%6);
1034 vmoy = 0.5*(vit(face1) + vit(face2));
1039 ts0 = 0.5*(termes_sources(face1)/volumes_entrelaces(face1)
1040 + termes_sources(face2)/volumes_entrelaces(face2));
1042 eq_k_U_W[compteur_faces_paroi].set_u_y0(0,0.);
1044 eq_k_U_W[compteur_faces_paroi].set_u_yn(0,vmoy);
1050 gradient_de_pression0 = 0.5*(grad_p(face1)+grad_p(face2));
1061 vmoy = 0.5*(vit(face3) + vit(face4));
1063 ts1 = 0.5*(termes_sources(face3)/volumes_entrelaces(face3)
1064 + termes_sources(face4)/volumes_entrelaces(face4));
1066 eq_k_U_W[compteur_faces_paroi].set_u_y0(1,0.);
1068 eq_k_U_W[compteur_faces_paroi].set_u_yn(1,vmoy);
1076 gradient_de_pression1 = 0.5*(grad_p(face3)+grad_p(face4));
1090 d_visco = tab_visco[elem];
1096 for(
int i=0 ; i<
nb_pts; i++)
1099 grad_vit_elemx(i)=(eq_k_U_W[compteur_faces_paroi].get_Unp1(0,i+1)-eq_k_U_W[compteur_faces_paroi].get_Unp1(0,i))/(eq_k_U_W[compteur_faces_paroi].get_y(i+1)-eq_k_U_W[compteur_faces_paroi].get_y(i));
1100 grad_vit_elemz(i)=(eq_k_U_W[compteur_faces_paroi].get_Unp1(1,i+1)-eq_k_U_W[compteur_faces_paroi].get_Unp1(1,i))/(eq_k_U_W[compteur_faces_paroi].get_y(i+1)-eq_k_U_W[compteur_faces_paroi].get_y(i));
1105 grad_vit_elem_moyx(0)=(eq_k_U_W[compteur_faces_paroi].get_Unp1(0,1)-eq_k_U_W[compteur_faces_paroi].get_Unp1(0,0))/(eq_k_U_W[compteur_faces_paroi].get_y(1)-eq_k_U_W[compteur_faces_paroi].get_y(0));
1106 grad_vit_elem_moyz(0)=(eq_k_U_W[compteur_faces_paroi].get_Unp1(1,1)-eq_k_U_W[compteur_faces_paroi].get_Unp1(1,0))/(eq_k_U_W[compteur_faces_paroi].get_y(1)-eq_k_U_W[compteur_faces_paroi].get_y(0));
1109 for(
int i=1 ; i<
nb_pts ; i++)
1112 grad_vit_elem_moyx(i)=0.5*(grad_vit_elemx(i)+grad_vit_elemx(i-1));
1113 grad_vit_elem_moyz(i)=0.5*(grad_vit_elemz(i)+grad_vit_elemz(i-1));
1129 int face5 = elem_faces(elem,(ori+3)%6);
1130 int face6 = elem_faces(elem,(ori));
1135 if (face5==num_face)
1139 int elem1=face_voisins(n2,0);
1141 elem1=face_voisins(n2,1);
1148 double a1=d_visco+0.5*(nu_t(elem)+nu_t(elem1));
1152 double b2=a2/(eq_k_U_W[compteur_faces_paroi].get_y(
nb_pts)-eq_k_U_W[compteur_faces_paroi].get_y(
nb_pts-1));
1156 kcl=(b1*tab_k(elem1)+b2*eq_k_U_W[compteur_faces_paroi].get_Unp1(2,
nb_pts-1))/(b1+b2);
1184 int nb_sources=les_sources.size();
1186 for (
int j=0; j<nb_sources; j++)
1205 const DoubleTab& tab_champ_beta_t = ch_beta_t.
valeurs();
1208 beta_t = std::max(tab_champ_beta_t(0,0),DMINFLOAT);
1212 Cerr <<
" On ne sait pas traiter un beta_t non uniforme dans Paroi TBLE_LRM !!!"<< finl;
1218 for(
int i=0 ; i<
nb_pts ; i++)
1220 grad_T(i)=(loi_tble_T.
get_eq_couche_lim_T(compteur_faces_paroi).get_Unp1(0,i+1)-loi_tble_T.
get_eq_couche_lim_T(compteur_faces_paroi).
get_Unp1(0,i))/(eq_k_U_W[compteur_faces_paroi].get_y(i+1)-eq_k_U_W[compteur_faces_paroi].get_y(i));
1223 for(
int i=1 ; i<
nb_pts ; i++)
1225 grad_T_moy(i)=0.5*(grad_T(i)+grad_T(i-1));
1229 grad_T_moy(0)=(loi_tble_T.
get_eq_couche_lim_T(compteur_faces_paroi).get_Unp1(0,1)-loi_tble_T.
get_eq_couche_lim_T(compteur_faces_paroi).
get_Unp1(0,0))/(eq_k_U_W[compteur_faces_paroi].get_y(1)-eq_k_U_W[compteur_faces_paroi].get_y(0));
1232 const DoubleVect& gravite = ch_gravite.
valeurs();
1236 Cerr <<
" On ne sait pas traiter la gravite non uniforme dans Paroi TBLE_LRM !!!"<< finl;
1248 for (
int idim=0; idim<
dimension; idim++)
1250 gn+=gravite(idim)*domaine_VDF.
face_normales(num_face,idim)/norm_n;
1255 for (
int idim=0; idim<
dimension; idim++)
1257 gt_vect(idim) = gravite(idim)-gn*domaine_VDF.
face_normales(num_face,idim)/norm_n;
1260 double g_t=gt_vect(1-ori);
1262 for(
int i=1 ; i<
nb_pts; i++)
1264 source_T_k(i) =g_t*beta_t*((diffu.
calculer_a_local(i)-d_visco)/(0.9))*grad_T_moy(i);
1265 source_T_U(i) =g_t*beta_t*(loi_tble_T.
get_eq_couche_lim_T(compteur_faces_paroi).get_Unp1(0,i)-T0);
1272 eps0=2*d_visco*eq_k_U_W[compteur_faces_paroi].get_Unp1(2,1)/(eq_k_U_W[compteur_faces_paroi].get_y(1)*eq_k_U_W[compteur_faces_paroi].get_y(1));
1273 eq_k_U_W[compteur_faces_paroi].set_F(2,0,-eps0 + source_T_k(0));
1274 eq_k_U_W[compteur_faces_paroi].set_F(0,0, -gradient_de_pression0 + ts0 - source_T_U(0));
1276 eq_k_U_W[compteur_faces_paroi].set_F(1,0, -gradient_de_pression1 + ts1 - source_T_U(0) );
1279 for(
int i=1 ; i<
nb_pts ; i++)
1283 double k=eq_k_U_W[compteur_faces_paroi].get_Unp1(2,i);
1284 double y=eq_k_U_W[compteur_faces_paroi].get_y(i);
1293 eps=eq_k_U_W[compteur_faces_paroi].get_Unp1(2,i)*sqrt(vv_bar)/l_eps;
1295 eq_k_U_W[compteur_faces_paroi].set_F(2,i,(diffu.
calculer_a_local(i)-d_visco)*(grad_vit_elem_moyx(i)*grad_vit_elem_moyx(i)+grad_vit_elem_moyz(i)*grad_vit_elem_moyz(i))-eps
1300 eq_k_U_W[compteur_faces_paroi].set_F(0,i, -gradient_de_pression0 + ts0 - source_T_U(i));
1301 eq_k_U_W[compteur_faces_paroi].set_F(1,i, -gradient_de_pression1 + ts1 - source_T_U(i) );
1310 eq_k_U_W[compteur_faces_paroi].set_u_y0(2,0.);
1311 eq_k_U_W[compteur_faces_paroi].set_u_yn(2,kcl);
1313 eq_k_U_W[compteur_faces_paroi].aller_au_temps(tps);
1316 for(
int i=0 ; i<
nb_pts ; i++)
1318 if (eq_k_U_W[compteur_faces_paroi].get_Unp1(2,i)<0.)
1321 eq_k_U_W[compteur_faces_paroi].set_Unp1(2,i,1.e-9);
1325 if(itmax<eq_k_U_W[compteur_faces_paroi].get_it())
1327 itmax = eq_k_U_W[compteur_faces_paroi].get_it();
1329 Cerr <<
"WARNING : TOO MANY ITERATIONS ARE NEEDED IN THE TBLE MESH"
1362 tab_u_star_(num_face) = pow((eq_k_U_W[compteur_faces_paroi].get_cis(0)*eq_k_U_W[compteur_faces_paroi].get_cis(0)
1363 +eq_k_U_W[compteur_faces_paroi].get_cis(1)*eq_k_U_W[compteur_faces_paroi].get_cis(1)),0.25);
1367 compteur_faces_paroi++;
1380 for(
int i=0 ; i<
nb_pts+1 ; i++)
1400 fic << tps <<
" " << itmax << finl;
1415 Cerr <<
"ParoiVDF_TBLE_LRM::calculer_hyd n'est pas parallelise." << finl;
1419 const IntVect& orientation = domaine_VDF.
orientation();
1420 const IntTab& face_voisins = domaine_VDF.
face_voisins();
1421 const IntTab& elem_faces = domaine_VDF.
elem_faces();
1423 const Equation_base& eqn_hydr = mon_modele_turb_hyd->equation();
1426 const DoubleTab& tab_visco = ch_visco_cin.
valeurs();
1429 const DoubleTab& nu_t = mon_modele_turb_hyd->viscosite_turbulente().valeurs();
1437 visco = std::max(tab_visco(0,0),DMINFLOAT);
1447 Cerr <<
"In ParoiVDF_TBLE_LRM::calculer_hyd : visco = " << tab_visco.
local_min_vect() <<
" <= 0 ? " << finl;
1463 double vmoy = 0., ts0 =0., ts1=0.,gradient_de_pression0=0., gradient_de_pression1 = 0.;
1465 DoubleVect grad_vit_elemx;
1466 DoubleVect grad_vit_elem_moyx;
1467 DoubleVect grad_vit_elemz;
1468 DoubleVect grad_vit_elem_moyz;
1470 DoubleVect grad_T_moy;
1471 DoubleVect source_T_k;
1472 DoubleVect source_T_U;
1492 DoubleTab grad_p(vit);
1495 gradient.calculer(p, grad_p);
1497 DoubleTab termes_sources;
1508 int compteur_faces_paroi = 0;
1509 DoubleVect corresp(le_dom_dis_->nb_faces_bord());
1515 for (
int n_bord=0; n_bord<domaine_VDF.
nb_front_Cl(); n_bord++)
1517 const Cond_lim& la_cl = le_dom_Cl_dis_->les_conditions_limites(n_bord);
1526 for (
int num_face=ndeb; num_face<nfin; num_face++)
1528 corresp(compteur_faces_paroi)=num_face;
1529 compteur_faces_paroi++;
1534 corresp.
resize(compteur_faces_paroi);
1535 compteur_faces_paroi = 0;
1541 for (
int n_bord=0; n_bord<domaine_VDF.
nb_front_Cl(); n_bord++)
1549 const Cond_lim& la_cl = le_dom_Cl_dis_->les_conditions_limites(n_bord);
1571 for (
int num_face=ndeb; num_face<nfin; num_face++)
1574 ori = orientation(num_face);
1583 if ((elem = face_voisins(num_face,0)) == -1)
1585 elem = face_voisins(num_face,1);
1592 eq_k_U_W[compteur_faces_paroi].set_dt(1.e12);
1594 eq_k_U_W[compteur_faces_paroi].set_dt(dt);
1599 int face1 = elem_faces(elem,(ori+1));
1600 int face2 = elem_faces(elem,(ori+3)%4);
1608 vmoy = 0.5*(vit(face1) + vit(face2));
1613 ts0 = 0.5*(termes_sources(face1)/volumes_entrelaces(face1)
1614 + termes_sources(face2)/volumes_entrelaces(face2));
1616 eq_k_U_W[compteur_faces_paroi].set_u_y0(0,0.);
1617 eq_k_U_W[compteur_faces_paroi].set_u_yn(0,vmoy);
1626 gradient_de_pression0 = 0.5*(grad_p(face1)+grad_p(face2));
1629 for(
int i=0 ; i<
nb_pts ; i++)
1631 grad_vit_elemx(i)=(eq_k_U_W[compteur_faces_paroi].get_Unp1(0,i+1)-eq_k_U_W[compteur_faces_paroi].get_Unp1(0,i))/(eq_k_U_W[compteur_faces_paroi].get_y(i+1)-eq_k_U_W[compteur_faces_paroi].get_y(i));
1635 for(
int i=1 ; i<
nb_pts ; i++)
1637 grad_vit_elem_moyx(i)=0.5*(grad_vit_elemx(i)+grad_vit_elemx(i-1));
1641 grad_vit_elem_moyx(0)=(eq_k_U_W[compteur_faces_paroi].get_Unp1(0,1)-eq_k_U_W[compteur_faces_paroi].get_Unp1(0,0))/(eq_k_U_W[compteur_faces_paroi].get_y(1)-eq_k_U_W[compteur_faces_paroi].get_y(0));
1650 d_visco = tab_visco[elem];
1666 int face3 = elem_faces(elem,(ori+2)%4);
1667 int face4 = elem_faces(elem,ori);
1670 if (face3==num_face)
1675 int elem1=face_voisins(n2,0);
1677 elem1=face_voisins(n2,1);
1688 double a1=d_visco+0.5*(nu_t(elem)+nu_t(elem1));
1693 double b2=a2/(eq_k_U_W[compteur_faces_paroi].get_y(
nb_pts)-eq_k_U_W[compteur_faces_paroi].get_y(
nb_pts-1));
1696 kcl=(b1*tab_k_eps(elem1,0)+b2*eq_k_U_W[compteur_faces_paroi].get_Unp1(1,
nb_pts-1))/(b1+b2);
1701 eq_k_U_W[compteur_faces_paroi].set_u_y0(1,0.);
1702 eq_k_U_W[compteur_faces_paroi].set_u_yn(1,kcl);
1721 tab_k_eps(elem,0)=kcl;
1727 tab_k_eps(elem,0)=kcl;
1742 int nb_sources=les_sources.size();
1744 for (
int j=0; j<nb_sources; j++)
1763 const DoubleTab& tab_champ_beta_t = ch_beta_t.
valeurs();
1766 beta_t = std::max(tab_champ_beta_t(0,0),DMINFLOAT);
1770 Cerr <<
" On ne sait pas traiter un beta_t non uniforme dans Paroi TBLE_LRM !!!"<< finl;
1776 for(
int i=0 ; i<
nb_pts ; i++)
1778 grad_T(i)=(loi_tble_T.
get_eq_couche_lim_T(compteur_faces_paroi).get_Unp1(0,i+1)-loi_tble_T.
get_eq_couche_lim_T(compteur_faces_paroi).
get_Unp1(0,i))/(eq_k_U_W[compteur_faces_paroi].get_y(i+1)-eq_k_U_W[compteur_faces_paroi].get_y(i));
1781 for(
int i=1 ; i<
nb_pts ; i++)
1783 grad_T_moy(i)=0.5*(grad_T(i)+grad_T(i-1));
1787 grad_T_moy(0)=(loi_tble_T.
get_eq_couche_lim_T(compteur_faces_paroi).get_Unp1(0,1)-loi_tble_T.
get_eq_couche_lim_T(compteur_faces_paroi).
get_Unp1(0,0))/(eq_k_U_W[compteur_faces_paroi].get_y(1)-eq_k_U_W[compteur_faces_paroi].get_y(0));
1790 const DoubleVect& gravite = ch_gravite.
valeurs();
1794 Cerr <<
" On ne sait pas traiter la gravite non uniforme dans Paroi TBLE_LRM !!!"<< finl;
1805 for (
int idim=0; idim<
dimension; idim++)
1807 gn+=gravite(idim)*domaine_VDF.
face_normales(num_face,idim)/norm_n;
1812 for (
int idim=0; idim<
dimension; idim++)
1814 gt_vect(idim) = gravite(idim)-gn*domaine_VDF.
face_normales(num_face,idim)/norm_n;
1817 double g_t=gt_vect(1-ori);
1821 for(
int i=0 ; i<
nb_pts; i++)
1823 source_T_k(i) = g_t*beta_t*((diffu.
calculer_a_local(i)-d_visco)/(0.9))*grad_T_moy(i);
1824 source_T_U(i) = g_t*beta_t*(loi_tble_T.
get_eq_couche_lim_T(compteur_faces_paroi).get_Unp1(0,i)-T0);
1832 eps0=2*d_visco*eq_k_U_W[compteur_faces_paroi].get_Unp1(1,1)/(eq_k_U_W[compteur_faces_paroi].get_y(1)*eq_k_U_W[compteur_faces_paroi].get_y(1));
1833 eq_k_U_W[compteur_faces_paroi].set_F(1,0,-eps0 + source_T_k(0));
1834 eq_k_U_W[compteur_faces_paroi].set_F(0,0, -gradient_de_pression0 + ts0 - source_T_U(0));
1836 for(
int i=1 ; i<
nb_pts; i++)
1840 double k=eq_k_U_W[compteur_faces_paroi].get_Unp1(1,i);
1841 double y=eq_k_U_W[compteur_faces_paroi].get_y(i);
1848 eps=eq_k_U_W[compteur_faces_paroi].get_Unp1(1,i)*sqrt(vv_bar)/l_eps;
1850 eq_k_U_W[compteur_faces_paroi].set_F(1,i,(diffu.
calculer_a_local(i)-d_visco)
1851 *grad_vit_elem_moyx(i)*grad_vit_elem_moyx(i)-eps+source_T_k(i));
1854 eq_k_U_W[compteur_faces_paroi].set_F(0,i, -gradient_de_pression0 + ts0 - source_T_U(i) );
1862 eq_k_U_W[compteur_faces_paroi].aller_au_temps(tps);
1866 for(
int i=0 ; i<
nb_pts ; i++)
1868 if (eq_k_U_W[compteur_faces_paroi].get_Unp1(1,i)<0.)
1870 Cerr <<
"Warning dans TBLE_LRM : k <0 !!! k = " << eq_k_U_W[compteur_faces_paroi].get_Unp1(1,i) << finl;
1871 eq_k_U_W[compteur_faces_paroi].set_Unp1(1,i,1.e-9);
1875 if(itmax<eq_k_U_W[compteur_faces_paroi].get_it())
1877 itmax = eq_k_U_W[compteur_faces_paroi].get_it();
1879 Cerr <<
"WARNING : TOO MANY ITERATIONS ARE NEEDED IN THE TBLE MESH"
1902 tab_u_star_(num_face) =pow(eq_k_U_W[compteur_faces_paroi].get_cis(0)*eq_k_U_W[compteur_faces_paroi].get_cis(0),0.25);
1905 compteur_faces_paroi++;
1924 for (
int num_face=ndeb; num_face<nfin; num_face++)
1927 ori = orientation(num_face);
1934 if ((elem = face_voisins(num_face,0)) == -1)
1936 elem = face_voisins(num_face,1);
1943 eq_k_U_W[compteur_faces_paroi].set_dt(1.e12);
1945 eq_k_U_W[compteur_faces_paroi].set_dt(dt);
1949 int face1 = elem_faces(elem,(ori+1));
1950 int face2 = elem_faces(elem,(ori+4)%6);
1952 int face3 = elem_faces(elem,(ori+2));
1953 int face4 = elem_faces(elem,(ori+5)%6);
1964 vmoy = 0.5*(vit(face1) + vit(face2));
1969 ts0 = 0.5*(termes_sources(face1)/volumes_entrelaces(face1)
1970 + termes_sources(face2)/volumes_entrelaces(face2));
1972 eq_k_U_W[compteur_faces_paroi].set_u_y0(0,0.);
1974 eq_k_U_W[compteur_faces_paroi].set_u_yn(0,vmoy);
1980 gradient_de_pression0 = 0.5*(grad_p(face1)+grad_p(face2));
1991 vmoy = 0.5*(vit(face3) + vit(face4));
1993 ts1 = 0.5*(termes_sources(face3)/volumes_entrelaces(face3)
1994 + termes_sources(face4)/volumes_entrelaces(face4));
1996 eq_k_U_W[compteur_faces_paroi].set_u_y0(1,0.);
1998 eq_k_U_W[compteur_faces_paroi].set_u_yn(1,vmoy);
2006 gradient_de_pression1 = 0.5*(grad_p(face3)+grad_p(face4));
2020 d_visco = tab_visco[elem];
2026 for(
int i=0 ; i<
nb_pts; i++)
2029 grad_vit_elemx(i)=(eq_k_U_W[compteur_faces_paroi].get_Unp1(0,i+1)-eq_k_U_W[compteur_faces_paroi].get_Unp1(0,i))/(eq_k_U_W[compteur_faces_paroi].get_y(i+1)-eq_k_U_W[compteur_faces_paroi].get_y(i));
2030 grad_vit_elemz(i)=(eq_k_U_W[compteur_faces_paroi].get_Unp1(1,i+1)-eq_k_U_W[compteur_faces_paroi].get_Unp1(1,i))/(eq_k_U_W[compteur_faces_paroi].get_y(i+1)-eq_k_U_W[compteur_faces_paroi].get_y(i));
2035 grad_vit_elem_moyx(0)=(eq_k_U_W[compteur_faces_paroi].get_Unp1(0,1)-eq_k_U_W[compteur_faces_paroi].get_Unp1(0,0))/(eq_k_U_W[compteur_faces_paroi].get_y(1)-eq_k_U_W[compteur_faces_paroi].get_y(0));
2036 grad_vit_elem_moyz(0)=(eq_k_U_W[compteur_faces_paroi].get_Unp1(1,1)-eq_k_U_W[compteur_faces_paroi].get_Unp1(1,0))/(eq_k_U_W[compteur_faces_paroi].get_y(1)-eq_k_U_W[compteur_faces_paroi].get_y(0));
2039 for(
int i=1 ; i<
nb_pts ; i++)
2042 grad_vit_elem_moyx(i)=0.5*(grad_vit_elemx(i)+grad_vit_elemx(i-1));
2043 grad_vit_elem_moyz(i)=0.5*(grad_vit_elemz(i)+grad_vit_elemz(i-1));
2059 int face5 = elem_faces(elem,(ori+3)%6);
2060 int face6 = elem_faces(elem,(ori));
2065 if (face5==num_face)
2069 int elem1=face_voisins(n2,0);
2071 elem1=face_voisins(n2,1);
2078 double a1=d_visco+0.5*(nu_t(elem)+nu_t(elem1));
2082 double b2=a2/(eq_k_U_W[compteur_faces_paroi].get_y(
nb_pts)-eq_k_U_W[compteur_faces_paroi].get_y(
nb_pts-1));
2086 kcl=(b1*tab_k_eps(elem1,0)+b2*eq_k_U_W[compteur_faces_paroi].get_Unp1(2,
nb_pts-1))/(b1+b2);
2091 if(tab_k_eps(elem,0)<0)
2094 tab_k_eps(elem,0)=1.e-8;
2100 tab_k_eps(elem,0)=kcl;
2114 int nb_sources=les_sources.size();
2116 for (
int j=0; j<nb_sources; j++)
2135 const DoubleTab& tab_champ_beta_t = ch_beta_t.
valeurs();
2138 beta_t = std::max(tab_champ_beta_t(0,0),DMINFLOAT);
2142 Cerr <<
" On ne sait pas traiter un beta_t non uniforme dans Paroi TBLE_LRM !!!"<< finl;
2148 for(
int i=0 ; i<
nb_pts ; i++)
2150 grad_T(i)=(loi_tble_T.
get_eq_couche_lim_T(compteur_faces_paroi).get_Unp1(0,i+1)-loi_tble_T.
get_eq_couche_lim_T(compteur_faces_paroi).
get_Unp1(0,i))/(eq_k_U_W[compteur_faces_paroi].get_y(i+1)-eq_k_U_W[compteur_faces_paroi].get_y(i));
2153 for(
int i=1 ; i<
nb_pts ; i++)
2155 grad_T_moy(i)=0.5*(grad_T(i)+grad_T(i-1));
2159 grad_T_moy(0)=(loi_tble_T.
get_eq_couche_lim_T(compteur_faces_paroi).get_Unp1(0,1)-loi_tble_T.
get_eq_couche_lim_T(compteur_faces_paroi).
get_Unp1(0,0))/(eq_k_U_W[compteur_faces_paroi].get_y(1)-eq_k_U_W[compteur_faces_paroi].get_y(0));
2162 const DoubleVect& gravite = ch_gravite.
valeurs();
2166 Cerr <<
" On ne sait pas traiter la gravite non uniforme dans Paroi TBLE_LRM !!!"<< finl;
2178 for (
int idim=0; idim<
dimension; idim++)
2180 gn+=gravite(idim)*domaine_VDF.
face_normales(num_face,idim)/norm_n;
2185 for (
int idim=0; idim<
dimension; idim++)
2187 gt_vect(idim) = gravite(idim)-gn*domaine_VDF.
face_normales(num_face,idim)/norm_n;
2190 double g_t=gt_vect(1-ori);
2192 for(
int i=1 ; i<
nb_pts; i++)
2194 source_T_k(i) =g_t*beta_t*((diffu.
calculer_a_local(i)-d_visco)/(0.9))*grad_T_moy(i);
2195 source_T_U(i) =g_t*beta_t*(loi_tble_T.
get_eq_couche_lim_T(compteur_faces_paroi).get_Unp1(0,i)-T0);
2202 eps0=2*d_visco*eq_k_U_W[compteur_faces_paroi].get_Unp1(2,1)/(eq_k_U_W[compteur_faces_paroi].get_y(1)*eq_k_U_W[compteur_faces_paroi].get_y(1));
2203 eq_k_U_W[compteur_faces_paroi].set_F(2,0,-eps0 + source_T_k(0));
2204 eq_k_U_W[compteur_faces_paroi].set_F(0,0, -gradient_de_pression0 + ts0 - source_T_U(0));
2206 eq_k_U_W[compteur_faces_paroi].set_F(1,0, -gradient_de_pression1 + ts1 - source_T_U(0) );
2209 for(
int i=1 ; i<
nb_pts ; i++)
2213 double k=eq_k_U_W[compteur_faces_paroi].get_Unp1(2,i);
2214 double y=eq_k_U_W[compteur_faces_paroi].get_y(i);
2223 eps=eq_k_U_W[compteur_faces_paroi].get_Unp1(2,i)*sqrt(vv_bar)/l_eps;
2225 eq_k_U_W[compteur_faces_paroi].set_F(2,i,(diffu.
calculer_a_local(i)-d_visco)*(grad_vit_elem_moyx(i)*grad_vit_elem_moyx(i)+grad_vit_elem_moyz(i)*grad_vit_elem_moyz(i))-eps
2230 eq_k_U_W[compteur_faces_paroi].set_F(0,i, -gradient_de_pression0 + ts0 - source_T_U(i));
2231 eq_k_U_W[compteur_faces_paroi].set_F(1,i, -gradient_de_pression1 + ts1 - source_T_U(i) );
2240 eq_k_U_W[compteur_faces_paroi].set_u_y0(2,0.);
2241 eq_k_U_W[compteur_faces_paroi].set_u_yn(2,kcl);
2243 eq_k_U_W[compteur_faces_paroi].aller_au_temps(tps);
2246 for(
int i=0 ; i<
nb_pts ; i++)
2248 if (eq_k_U_W[compteur_faces_paroi].get_Unp1(2,i)<0.)
2251 eq_k_U_W[compteur_faces_paroi].set_Unp1(2,i,1.e-9);
2255 if(itmax<eq_k_U_W[compteur_faces_paroi].get_it())
2257 itmax = eq_k_U_W[compteur_faces_paroi].get_it();
2259 Cerr <<
"WARNING : TOO MANY ITERATIONS ARE NEEDED IN THE TBLE MESH"
2292 tab_u_star_(num_face) = pow((eq_k_U_W[compteur_faces_paroi].get_cis(0)*eq_k_U_W[compteur_faces_paroi].get_cis(0)
2293 +eq_k_U_W[compteur_faces_paroi].get_cis(1)*eq_k_U_W[compteur_faces_paroi].get_cis(1)),0.25);
2297 compteur_faces_paroi++;
2310 for(
int i=0 ; i<
nb_pts+1 ; i++)
2330 fic << tps <<
" " << itmax << finl;