17#include <ParoiVEF_TBLE.h>
18#include <Paroi_std_hyd_VEF.h>
19#include <Champ_Q1NC.h>
20#include <Dirichlet_paroi_fixe.h>
21#include <Champ_Uniforme.h>
22#include <Fluide_base.h>
25#include <Schema_Temps_base.h>
27#include <Modele_turbulence_scal_base.h>
28#include <Probleme_base.h>
29#include <ParoiVEF_TBLE_scal.h>
30#include <Terme_Boussinesq_VEFPreP1B_Face.h>
31#include <Terme_Source_Qdm_lambdaup_VEF_Face.h>
33#include <EcrFicPartage.h>
34#include <Modele_turbulence_hyd_base.h>
35#include <Navier_Stokes_std.h>
58 Cerr<<
"Reading of data for a "<<
que_suis_je()<<
" wall law"<<finl;
61 param.lire_avec_accolades_depuis(is);
72 param.
ajouter_condition(
"(value_of_alpha_ge_0)_and_(value_of_alpha_le_1)",
"The following condition must be satisfied : 0 <= alpha <= 1");
105 Cerr <<
"ParoiVEF_TBLE::init_lois_paroi()" << finl;
109 const IntTab& face_voisins = domaine_VEF.
face_voisins();
110 const IntTab& elem_faces = domaine_VEF.
elem_faces();
111 const Domaine& domaine = domaine_VEF.
domaine();
113 const int nfac = domaine.nb_faces_elem();
114 const Equation_base& eqn_hydr = mon_modele_turb_hyd->equation();
129 int compteur_faces_paroi = 0;
138 for (
int n_bord=0; n_bord<domaine_VEF.
nb_front_Cl(); n_bord++)
144 const Cond_lim& la_cl = le_dom_Cl_dis_->les_conditions_limites(n_bord);
152 for (
int ind_face=0; ind_face<size; ind_face++)
154 Eq_couch_lim& equation_vitesse = eq_vit[compteur_faces_paroi];
158 int num_face = le_bord.
num_face(ind_face);
159 elem = face_voisins(num_face,0);
165 surf2 += face_normale(num_face,i)*face_normale(num_face,i);
170 num[0]=elem_faces(elem,0);
171 num[1]=elem_faces(elem,1);
173 if (num[0]==num_face) num[0]=elem_faces(elem,2);
174 else if (num[1]==num_face) num[1]=elem_faces(elem,2);
176 n[0] = face_normale(num_face,0)/sqrt(surf2);
177 n[1] = face_normale(num_face,1)/sqrt(surf2);
182 dist = distance_2D(num_face,elem,domaine_VEF)*3./2.;
184 v_tang[0] = ((vit(num[0],0)+vit(num[1],0))*t1[0]
185 +(vit(num[0],1)+vit(num[1],1))*t1[1])/2.;
189 num[0]=elem_faces(elem,0);
190 num[1]=elem_faces(elem,1);
191 num[2]=elem_faces(elem,2);
193 if (num[0]==num_face) num[0]=elem_faces(elem,3);
194 else if (num[1]==num_face) num[1]=elem_faces(elem,3);
195 else if (num[2]==num_face) num[2]=elem_faces(elem,3);
197 n[0] = face_normale(num_face,0)/sqrt(surf2);
198 n[1] = face_normale(num_face,1)/sqrt(surf2);
199 n[2] = face_normale(num_face,2)/sqrt(surf2);
201 if( est_egal(n[0],0.) && est_egal(n[1],0.) )
209 t1[0] = -n[1]/sqrt(n[0]*n[0]+n[1]*n[1]);
210 t1[1] = n[0]/sqrt(n[0]*n[0]+n[1]*n[1]);
214 t2[0] = n[1]*t1[2] - n[2]*t1[1];
215 t2[1] = n[2]*t1[0] - n[0]*t1[2];
216 t2[2] = n[0]*t1[1] - n[1]*t1[0];
218 dist = distance_3D(num_face,elem,domaine_VEF)*4./3.;
220 v_tang[0] = ((vit(num[0],0)+vit(num[1],0)+vit(num[2],0))*t1[0]
221 +(vit(num[0],1)+vit(num[1],1)+vit(num[2],1))*t1[1]
222 +(vit(num[0],2)+vit(num[1],2)+vit(num[2],2))*t1[2])/3.;
224 v_tang[1] = ((vit(num[0],0)+vit(num[1],0)+vit(num[2],0))*t2[0]
225 +(vit(num[0],1)+vit(num[1],1)+vit(num[2],1))*t2[1]
226 +(vit(num[0],2)+vit(num[1],2)+vit(num[2],2))*t2[2])/3.;
230 equation_vitesse.
set_y0(0.);
231 equation_vitesse.
set_yn(dist);
240 equation_vitesse.
set_u_yn(i,v_tang[i]);
248 for (
int itble=0; itble<
nb_pts+1; itble++)
252 compteur_faces_paroi++;
258 f_tang_moy.resize(compteur_faces_paroi,
nb_comp);
267 int nb_sources=les_sources.size();
269 for (
int j=0; j<nb_sources; j++)
278 const DoubleTab& tab_champ_beta_t = ch_beta_t.
valeurs();
281 beta_t = std::max(tab_champ_beta_t(0,0),DMINFLOAT);
285 Cerr <<
" On ne sait pas traiter un beta_t non uniforme dans TBLE !!!"<< finl;
293 Cerr <<
"fin init_lois_paroi()" << finl;
320 const IntTab& face_voisins = domaine_VEF.
face_voisins();
321 const IntTab& elem_faces = domaine_VEF.
elem_faces();
322 const Domaine& domaine = domaine_VEF.
domaine();
324 const int nfac = domaine.nb_faces_elem();
326 const Equation_base& eqn_hydr = mon_modele_turb_hyd->equation();
330 const DoubleTab& tab_visco = ch_visco_cin.
valeurs();
338 Cerr <<
" On ne sait pas traiter la gravite non uniforme dans TBLE !!!"<< finl;
351 visco = std::max(tab_visco(0,0),DMINFLOAT);
361 Cerr <<
"In ParoiVEF_TBLE::calculer_hyd_BiK : visco = " << tab_visco.
local_min_vect() <<
" <= 0 ? " << finl;
368 int itmax=0,itmax_loc;
375 DoubleTab grad_p(vit);
378 gradient.calculer(p, grad_p);
380 const DoubleTab& visco_turb = mon_modele_turb_hyd->viscosite_turbulente().valeurs();
383 DoubleTab termes_sources(vit);
391 int compteur_faces_paroi = 0;
403 for (
int n_bord=0; n_bord<domaine_VEF.
nb_front_Cl(); n_bord++)
409 const Cond_lim& la_cl = le_dom_Cl_dis_->les_conditions_limites(n_bord);
417 for (
int ind_face=0; ind_face<size; ind_face++)
419 Eq_couch_lim& equation_vitesse = eq_vit[compteur_faces_paroi];
420 int num_face = le_bord.
num_face(ind_face);
421 elem = face_voisins(num_face,0);
427 surf2 += face_normale(num_face,i)*face_normale(num_face,i);
432 num[0]=elem_faces(elem,0);
433 num[1]=elem_faces(elem,1);
435 if (num[0]==num_face) num[0]=elem_faces(elem,2);
436 else if (num[1]==num_face) num[1]=elem_faces(elem,2);
438 n[0] = face_normale(num_face,0)/sqrt(surf2);
439 n[1] = face_normale(num_face,1)/sqrt(surf2);
444 dist = distance_2D(num_face,elem,domaine_VEF)*3./2.;
446 v_tang[0] = ((vit(num[0],0)+vit(num[1],0))*t1[0]
447 +(vit(num[0],1)+vit(num[1],1))*t1[1])/2.;
454 const DoubleVect& gravite = ch_gravite.
valeurs();
464 gt += gravite(idim)*t1[idim];
465 for(
int i=0; i<
nb_pts+1; i++)
471 F[0] = ((termes_sources(num[0],0)-grad_p(num[0],0))/volumes_entrelaces(num[0])
472 +(termes_sources(num[1],0)-grad_p(num[1],0))/volumes_entrelaces(num[1]))/2. ;
474 F[1] = ((termes_sources(num[0],1)-grad_p(num[0],1))/volumes_entrelaces(num[0])
475 +(termes_sources(num[1],1)-grad_p(num[1],1))/volumes_entrelaces(num[1]))/2. ;
477 F_tang[0] = F[0]*t1[0] + F[1]*t1[1] ;
478 f_tang_moy(compteur_faces_paroi,0) = alpha*F_tang[0] +(1-alpha)*f_tang_moy(compteur_faces_paroi,0);
482 num[0]=elem_faces(elem,0);
483 num[1]=elem_faces(elem,1);
484 num[2]=elem_faces(elem,2);
486 if (num[0]==num_face) num[0]=elem_faces(elem,3);
487 else if (num[1]==num_face) num[1]=elem_faces(elem,3);
488 else if (num[2]==num_face) num[2]=elem_faces(elem,3);
490 n[0] = face_normale(num_face,0)/sqrt(surf2);
491 n[1] = face_normale(num_face,1)/sqrt(surf2);
492 n[2] = face_normale(num_face,2)/sqrt(surf2);
495 if( est_egal(n[0],0.) && est_egal(n[1],0.) )
503 t1[0] = -n[1]/sqrt(n[0]*n[0]+n[1]*n[1]);
504 t1[1] = n[0]/sqrt(n[0]*n[0]+n[1]*n[1]);
508 t2[0] = n[1]*t1[2] - n[2]*t1[1];
509 t2[1] = n[2]*t1[0] - n[0]*t1[2];
510 t2[2] = n[0]*t1[1] - n[1]*t1[0];
512 dist = distance_3D(num_face,elem,domaine_VEF)*4./3.;
514 v_tang[0] = ((vit(num[0],0)+vit(num[1],0)+vit(num[2],0))*t1[0]
515 +(vit(num[0],1)+vit(num[1],1)+vit(num[2],1))*t1[1]
516 +(vit(num[0],2)+vit(num[1],2)+vit(num[2],2))*t1[2])/3.;
518 v_tang[1] = ((vit(num[0],0)+vit(num[1],0)+vit(num[2],0))*t2[0]
519 +(vit(num[0],1)+vit(num[1],1)+vit(num[2],1))*t2[1]
520 +(vit(num[0],2)+vit(num[1],2)+vit(num[2],2))*t2[2])/3.;
522 F[0] = ((termes_sources(num[0],0)-grad_p(num[0],0))/volumes_entrelaces(num[0])
523 +(termes_sources(num[1],0)-grad_p(num[1],0))/volumes_entrelaces(num[1])
524 +(termes_sources(num[2],0)-grad_p(num[2],0))/volumes_entrelaces(num[2]))/3.;
526 F[1] = ((termes_sources(num[0],1)-grad_p(num[0],1))/volumes_entrelaces(num[0])
527 +(termes_sources(num[1],1)-grad_p(num[1],1))/volumes_entrelaces(num[1])
528 +(termes_sources(num[2],1)-grad_p(num[2],1))/volumes_entrelaces(num[2]))/3.;
530 F[2] = ((termes_sources(num[0],2)-grad_p(num[0],2))/volumes_entrelaces(num[0])
531 +(termes_sources(num[1],2)-grad_p(num[1],2))/volumes_entrelaces(num[1])
532 +(termes_sources(num[2],2)-grad_p(num[2],2))/volumes_entrelaces(num[2]))/3.;
535 F_tang[0] = F[0]*t1[0] + F[1]*t1[1] + F[2]*t1[2] ;
536 F_tang[1] = F[0]*t2[0] + F[1]*t2[1] + F[2]*t2[2] ;
537 f_tang_moy(compteur_faces_paroi,0) = alpha*F_tang[0] +(1-alpha)*f_tang_moy(compteur_faces_paroi,0);
538 f_tang_moy(compteur_faces_paroi,1) = alpha*F_tang[1] +(1-alpha)*f_tang_moy(compteur_faces_paroi,1);
545 const DoubleVect& gravite = ch_gravite.
valeurs();
557 gt1 += gravite(idim)*t1[idim];
558 gt2 += gravite(idim)*t2[idim];
561 for(
int i=0; i<
nb_pts+1; i++)
564 ts_boussi(0, i) = -gt1*tmp;
565 ts_boussi(1, i) = -gt2*tmp;
588 if(dt<dt_min) equation_vitesse.
set_dt(1.e12);
589 else equation_vitesse.
set_dt(dt);
595 equation_vitesse.
set_u_yn(i,v_tang[i]);
598 for(
int ipts=0 ; ipts<
nb_pts+1; ipts++)
599 equation_vitesse.
set_F(i, ipts, f_tang_moy(compteur_faces_paroi,i)+ts_boussi(i,ipts));
615 itmax_loc = equation_vitesse.
get_it();
617 if(itmax_loc>
max_it) Cerr <<
"WARNING : TOO MANY ITERATIONS ARE NEEDED IN THE TBLE MESH" << finl;
619 if(itmax_loc>itmax) itmax=itmax_loc;
633 d_visco = tab_visco[elem];
637 double C0 = equation_vitesse.
get_cis(0);
639 double Cx = t1[0]*C0 ;
640 double Cy = t1[1]*C0 ;
650 double C0 = equation_vitesse.
get_cis(0);
651 double C1 = equation_vitesse.
get_cis(1);
653 double Cx = t1[0]*C0 + t2[0]*C1 ;
654 double Cy = t1[1]*C0 + t2[1]*C1 ;
655 double Cz = t1[2]*C0 + t2[2]*C1 ;
661 tab_u_star_(num_face) = pow(Cx*Cx+Cy*Cy+Cz*Cz,0.25);
673 traitement_keps_BiK(tab_k, tab_eps, num_face, face_voisins, elem_faces, nfac, dist,
tab_d_plus(num_face), d_visco,
tab_u_star(num_face));
675 compteur_faces_paroi++;
685 fic << tps <<
" " << itmax << finl;
701 const IntTab& face_voisins = domaine_VEF.
face_voisins();
702 const IntTab& elem_faces = domaine_VEF.
elem_faces();
703 const Domaine& domaine = domaine_VEF.
domaine();
705 const int nfac = domaine.nb_faces_elem();
707 const Equation_base& eqn_hydr = mon_modele_turb_hyd->equation();
711 const DoubleTab& tab_visco = ch_visco_cin.
valeurs();
719 Cerr <<
" On ne sait pas traiter la gravite non uniforme dans TBLE !!!"<< finl;
736 visco = std::max(tab_visco(0,0),DMINFLOAT);
746 Cerr <<
"In ParoiVEF_TBLE::calculer_hyd : visco = " << tab_visco.
local_min_vect() <<
" <= 0 ? " << finl;
753 int itmax=0,itmax_loc;
760 DoubleTab grad_p(vit);
763 gradient.calculer(p, grad_p);
765 const DoubleTab& visco_turb = mon_modele_turb_hyd->viscosite_turbulente().valeurs();
768 DoubleTab termes_sources(vit);
791 int compteur_faces_paroi = 0;
803 for (
int n_bord=0; n_bord<domaine_VEF.
nb_front_Cl(); n_bord++)
809 const Cond_lim& la_cl = le_dom_Cl_dis_->les_conditions_limites(n_bord);
817 for (
int ind_face=0; ind_face<size; ind_face++)
819 Eq_couch_lim& equation_vitesse = eq_vit[compteur_faces_paroi];
820 int num_face = le_bord.
num_face(ind_face);
821 elem = face_voisins(num_face,0);
827 surf2 += face_normale(num_face,i)*face_normale(num_face,i);
832 num[0]=elem_faces(elem,0);
833 num[1]=elem_faces(elem,1);
835 if (num[0]==num_face) num[0]=elem_faces(elem,2);
836 else if (num[1]==num_face) num[1]=elem_faces(elem,2);
838 n[0] = face_normale(num_face,0)/sqrt(surf2);
839 n[1] = face_normale(num_face,1)/sqrt(surf2);
844 dist = distance_2D(num_face,elem,domaine_VEF)*3./2.;
846 v_tang[0] = ((vit(num[0],0)+vit(num[1],0))*t1[0]
847 +(vit(num[0],1)+vit(num[1],1))*t1[1])/2.;
854 const DoubleVect& gravite = ch_gravite.
valeurs();
864 gt += gravite(idim)*t1[idim];
865 for(
int i=0; i<
nb_pts+1; i++)
871 F[0] = ((termes_sources(num[0],0)-grad_p(num[0],0))/volumes_entrelaces(num[0])
872 +(termes_sources(num[1],0)-grad_p(num[1],0))/volumes_entrelaces(num[1]))/2. ;
874 F[1] = ((termes_sources(num[0],1)-grad_p(num[0],1))/volumes_entrelaces(num[0])
875 +(termes_sources(num[1],1)-grad_p(num[1],1))/volumes_entrelaces(num[1]))/2. ;
877 F_tang[0] = F[0]*t1[0] + F[1]*t1[1] ;
878 f_tang_moy(compteur_faces_paroi,0) = alpha*F_tang[0] +(1-alpha)*f_tang_moy(compteur_faces_paroi,0);
882 num[0]=elem_faces(elem,0);
883 num[1]=elem_faces(elem,1);
884 num[2]=elem_faces(elem,2);
886 if (num[0]==num_face) num[0]=elem_faces(elem,3);
887 else if (num[1]==num_face) num[1]=elem_faces(elem,3);
888 else if (num[2]==num_face) num[2]=elem_faces(elem,3);
890 n[0] = face_normale(num_face,0)/sqrt(surf2);
891 n[1] = face_normale(num_face,1)/sqrt(surf2);
892 n[2] = face_normale(num_face,2)/sqrt(surf2);
895 if( est_egal(n[0],0.) && est_egal(n[1],0.) )
903 t1[0] = -n[1]/sqrt(n[0]*n[0]+n[1]*n[1]);
904 t1[1] = n[0]/sqrt(n[0]*n[0]+n[1]*n[1]);
908 t2[0] = n[1]*t1[2] - n[2]*t1[1];
909 t2[1] = n[2]*t1[0] - n[0]*t1[2];
910 t2[2] = n[0]*t1[1] - n[1]*t1[0];
912 dist = distance_3D(num_face,elem,domaine_VEF)*4./3.;
914 v_tang[0] = ((vit(num[0],0)+vit(num[1],0)+vit(num[2],0))*t1[0]
915 +(vit(num[0],1)+vit(num[1],1)+vit(num[2],1))*t1[1]
916 +(vit(num[0],2)+vit(num[1],2)+vit(num[2],2))*t1[2])/3.;
918 v_tang[1] = ((vit(num[0],0)+vit(num[1],0)+vit(num[2],0))*t2[0]
919 +(vit(num[0],1)+vit(num[1],1)+vit(num[2],1))*t2[1]
920 +(vit(num[0],2)+vit(num[1],2)+vit(num[2],2))*t2[2])/3.;
922 F[0] = ((termes_sources(num[0],0)-grad_p(num[0],0))/volumes_entrelaces(num[0])
923 +(termes_sources(num[1],0)-grad_p(num[1],0))/volumes_entrelaces(num[1])
924 +(termes_sources(num[2],0)-grad_p(num[2],0))/volumes_entrelaces(num[2]))/3.;
926 F[1] = ((termes_sources(num[0],1)-grad_p(num[0],1))/volumes_entrelaces(num[0])
927 +(termes_sources(num[1],1)-grad_p(num[1],1))/volumes_entrelaces(num[1])
928 +(termes_sources(num[2],1)-grad_p(num[2],1))/volumes_entrelaces(num[2]))/3.;
930 F[2] = ((termes_sources(num[0],2)-grad_p(num[0],2))/volumes_entrelaces(num[0])
931 +(termes_sources(num[1],2)-grad_p(num[1],2))/volumes_entrelaces(num[1])
932 +(termes_sources(num[2],2)-grad_p(num[2],2))/volumes_entrelaces(num[2]))/3.;
935 F_tang[0] = F[0]*t1[0] + F[1]*t1[1] + F[2]*t1[2] ;
936 F_tang[1] = F[0]*t2[0] + F[1]*t2[1] + F[2]*t2[2] ;
937 f_tang_moy(compteur_faces_paroi,0) = alpha*F_tang[0] +(1-alpha)*f_tang_moy(compteur_faces_paroi,0);
938 f_tang_moy(compteur_faces_paroi,1) = alpha*F_tang[1] +(1-alpha)*f_tang_moy(compteur_faces_paroi,1);
945 const DoubleVect& gravite = ch_gravite.
valeurs();
957 gt1 += gravite(idim)*t1[idim];
958 gt2 += gravite(idim)*t2[idim];
961 for(
int i=0; i<
nb_pts+1; i++)
964 ts_boussi(0, i) = -gt1*tmp;
965 ts_boussi(1, i) = -gt2*tmp;
988 if(dt<dt_min) equation_vitesse.
set_dt(1.e12);
989 else equation_vitesse.
set_dt(dt);
995 equation_vitesse.
set_u_yn(i,v_tang[i]);
998 for(
int ipts=0 ; ipts<
nb_pts+1; ipts++)
999 equation_vitesse.
set_F(i, ipts, f_tang_moy(compteur_faces_paroi,i)+ts_boussi(i,ipts));
1015 itmax_loc = equation_vitesse.
get_it();
1017 if(itmax_loc>
max_it) Cerr <<
"WARNING : TOO MANY ITERATIONS ARE NEEDED IN THE TBLE MESH" << finl;
1019 if(itmax_loc>itmax) itmax=itmax_loc;
1033 d_visco = tab_visco[elem];
1037 double C0 = equation_vitesse.
get_cis(0);
1039 double Cx = t1[0]*C0 ;
1040 double Cy = t1[1]*C0 ;
1050 double C0 = equation_vitesse.
get_cis(0);
1051 double C1 = equation_vitesse.
get_cis(1);
1053 double Cx = t1[0]*C0 + t2[0]*C1 ;
1054 double Cy = t1[1]*C0 + t2[1]*C1 ;
1055 double Cz = t1[2]*C0 + t2[2]*C1 ;
1061 tab_u_star_(num_face) = pow(Cx*Cx+Cy*Cy+Cz*Cz,0.25);
1083 traitement_keps(tab1, num_face, face_voisins, elem_faces, nfac, dist,
tab_d_plus(num_face), d_visco,
tab_u_star(num_face));
1086 compteur_faces_paroi++;
1096 fic << tps <<
" " << itmax << finl;
1106void ParoiVEF_TBLE::traitement_keps_BiK(DoubleTab& tab_k,DoubleTab& tab_eps,
int num_face,
const IntTab& face_voisins,
1107 const IntTab& elem_faces,
int nfac,
double dist,
double d_plus,
double d_visco,
double u_star)
1110 int elem=face_voisins(num_face,0);
1114 for (nf2=0; nf2<nfac; nf2++)
1116 num[nf2] = elem_faces(elem,nf2);
1119 for (nf2=0; nf2<nfac-1; nf2++)
1121 num[nf2] = elem_faces(elem,nf2);
1122 if (num[nf2] == num_face)
1124 num[nf2] = num[nfac-1];
1125 num[nfac-1] = num_face;
1130 for (
int nf=0; nf<nfac; nf++)
1132 if (num[nf]==num_face)
1142 tab_eps(num[nf])=0.;
1145 for (
int k=0; k<nfac; k++)
1150 tab_k(num[nf]) += tab_k(num[k]);
1151 tab_eps(num[nf])+= tab_eps(num[k]);
1157 tab_k(num[nf]) /=nk;
1158 tab_eps(num[nf])/=nk;
1168 calculer_k_eps(tab_k(num[nf]),tab_eps(num[nf]),d_plus,u_star,d_visco,dist);
1173void ParoiVEF_TBLE::traitement_keps(DoubleTab& tab_k_eps,
int num_face,
const IntTab& face_voisins,
1174 const IntTab& elem_faces,
int nfac,
double dist,
double d_plus,
double d_visco,
double u_star)
1177 int elem=face_voisins(num_face,0);
1181 for (nf2=0; nf2<nfac; nf2++)
1183 num[nf2] = elem_faces(elem,nf2);
1186 for (nf2=0; nf2<nfac-1; nf2++)
1188 num[nf2] = elem_faces(elem,nf2);
1189 if (num[nf2] == num_face)
1191 num[nf2] = num[nfac-1];
1192 num[nfac-1] = num_face;
1197 for (
int nf=0; nf<nfac; nf++)
1199 if (num[nf]==num_face)
1208 tab_k_eps(num[nf],0)=0.;
1209 tab_k_eps(num[nf],1)=0.;
1212 for (
int k=0; k<nfac; k++)
1217 tab_k_eps(num[nf],0)+= tab_k_eps(num[k],0);
1218 tab_k_eps(num[nf],1)+= tab_k_eps(num[k],1);
1224 tab_k_eps(num[nf],0)/=nk;
1225 tab_k_eps(num[nf],1)/=nk;
1235 calculer_k_eps(tab_k_eps(num[nf],0),tab_k_eps(num[nf],1),d_plus,u_star,d_visco,dist);
1272int ParoiVEF_TBLE::calculer_k_eps(
double& k,
double& eps ,
double yp,
double u_star,
1273 double d_visco,
double dist)
1277 k = 0.07*yp*yp*(exp(-yp/9.))+(1./(sqrt(
Cmu_)))*pow((1.-exp(-yp/20.)),2);
1280 eps = (1./(
Kappa_*pow(yp*yp*yp*yp+50625,0.25)));
1281 eps *= pow(u_star,4)/d_visco;
1286int ParoiVEF_TBLE::calculer_stats()
1288 const Domaine_VEF& domaine_VEF = ref_cast(Domaine_VEF, le_dom_dis_.valeur());
1290 const DoubleTab& face_normale = domaine_VEF.
face_normales();
1293 const Equation_base& eqn_hydr = mon_modele_turb_hyd->equation();
1297 int num_face, num_face_global;
1300 double t1x,t1y,t1z=0.;
1301 double t2x,t2y,t2z=0.;
1302 double Unp1_t1,Unp1_t2=0.;
1320 surf=sqrt(face_normale(num_face_global,0)*face_normale(num_face_global,0)+
1321 face_normale(num_face_global,1)*face_normale(num_face_global,1));
1323 nx = face_normale(num_face_global,0)/surf;
1324 ny = face_normale(num_face_global,1)/surf;
1329 for(
int i=0 ; i<
nb_pts+1 ; i++)
1331 Unp1_t1 = eq_vit[num_face].get_Unp1(0,i);
1332 Fx = t1x*eq_vit[num_face].get_F(0,i);
1333 Fy = t1y*eq_vit[num_face].get_F(0,i);
1348 surf=sqrt(face_normale(num_face_global,0)*face_normale(num_face_global,0)+
1349 face_normale(num_face_global,1)*face_normale(num_face_global,1)+
1350 face_normale(num_face_global,2)*face_normale(num_face_global,2));
1352 nx = face_normale(num_face_global,0)/surf;
1353 ny = face_normale(num_face_global,1)/surf;
1354 nz = face_normale(num_face_global,2)/surf;
1356 if( est_egal(nx,0.) && est_egal(ny,0.) )
1364 t1x = -ny/sqrt(nx*nx+ny*ny);
1365 t1y = nx/sqrt(nx*nx+ny*ny);
1369 t2x = ny*t1z - nz*t1y;
1370 t2y = nz*t1x - nx*t1z;
1371 t2z = nx*t1y - ny*t1x;
1373 for(
int i=0 ; i<
nb_pts+1 ; i++)
1376 Unp1_t1 = eq_vit[num_face].get_Unp1(0,i);
1377 Unp1_t2 = eq_vit[num_face].get_Unp1(1,i);
1378 Fx = t1x*eq_vit[num_face].get_F(0,i)+t2x*eq_vit[num_face].get_F(1,i);
1379 Fy = t1y*eq_vit[num_face].get_F(0,i)+t2y*eq_vit[num_face].get_F(1,i);
1380 Fz = t1z*eq_vit[num_face].get_F(0,i)+t2z*eq_vit[num_face].get_F(1,i);
1382 u = t1x*Unp1_t1 + t2x*Unp1_t2 ;
1383 v = t1y*Unp1_t1 + t2y*Unp1_t2 ;
1384 w = t1z*Unp1_t1 + t2z*Unp1_t2 ;
1398 const Equation_base& eqn_hydr = mon_modele_turb_hyd->equation();
1403 const DoubleTab& face_normale = domaine_VEF.
face_normales();
1406 int num_face, num_face_global;
1409 double t1x,t1y,t1z=0.;
1410 double t2x,t2y,t2z=0.;
1411 double Unp1_t1,Unp1_t2=0.;
1428 fic_post <<
"# t="<< tps <<
" " ;
1429 fic_post <<
"x= " << domaine_VEF.
xv(num_face_global,0) <<
" " <<
"y= " << domaine_VEF.
xv(num_face_global,1) ;
1430 if (
dimension==3) fic_post <<
" "<<
"z= " << domaine_VEF.
xv(num_face_global,2);
1431 fic_post <<
" " <<
"u*= " <<
tab_u_star(num_face_global) ;
1437 surf=sqrt(face_normale(num_face_global,0)*face_normale(num_face_global,0)+
1438 face_normale(num_face_global,1)*face_normale(num_face_global,1));
1440 nx = face_normale(num_face_global,0)/surf;
1441 ny = face_normale(num_face_global,1)/surf;
1446 fic_post <<
" " <<
"F_x= " << eq_vit[num_face].get_F0(0)*t1x <<
" F_y= " << eq_vit[num_face].get_F0(0)*t1y << finl;
1447 fic_post <<
"# d_paroi u v norm_v nu_t" << finl;
1449 for(
int i=0; i<
nb_pts+1; i++)
1451 Unp1_t1 = eq_vit[num_face].get_Unp1(0,i);
1452 nut = (i<
nb_pts)? eq_vit[num_face].get_visco_tot(i) : 0;
1456 norm_v=sqrt(u*u+v*v);
1458 fic_post << eq_vit[num_face].get_y(i) <<
" " << u <<
" " << v <<
" " << norm_v <<
" " << nut << finl;
1463 surf=sqrt(face_normale(num_face_global,0)*face_normale(num_face_global,0)+
1464 face_normale(num_face_global,1)*face_normale(num_face_global,1)+
1465 face_normale(num_face_global,2)*face_normale(num_face_global,2));
1467 nx = face_normale(num_face_global,0)/surf;
1468 ny = face_normale(num_face_global,1)/surf;
1469 nz = face_normale(num_face_global,2)/surf;
1471 if( est_egal(nx,0.) && est_egal(ny,0.) )
1479 t1x = -ny/sqrt(nx*nx+ny*ny);
1480 t1y = nx/sqrt(nx*nx+ny*ny);
1485 t2x = ny*t1z - nz*t1y;
1486 t2y = nz*t1x - nx*t1z;
1487 t2z = nx*t1y - ny*t1x;
1489 fic_post <<
" " <<
"F_x= " << eq_vit[num_face].get_F0(0)*t1x+eq_vit[num_face].get_F0(1)*t2x
1490 <<
" F_y= " << eq_vit[num_face].get_F0(0)*t1y+eq_vit[num_face].get_F0(1)*t2y
1491 <<
" F_z= " << eq_vit[num_face].get_F0(0)*t1z+eq_vit[num_face].get_F0(1)*t2z
1493 fic_post <<
"# dp/dt1= " << eq_vit[num_face].get_F0(0) <<
" dp/dt2= " << eq_vit[num_face].get_F0(1) << finl;
1494 fic_post <<
"# d_paroi u v w norm_v nu_t" << finl;
1496 for(
int i=0 ; i<
nb_pts+1 ; i++)
1498 Unp1_t1 = eq_vit[num_face].get_Unp1(0,i);
1499 Unp1_t2 = eq_vit[num_face].get_Unp1(1,i);
1501 u = t1x*Unp1_t1 + t2x*Unp1_t2 ;
1502 v = t1y*Unp1_t1 + t2y*Unp1_t2 ;
1503 w = t1z*Unp1_t1 + t2z*Unp1_t2 ;
1504 norm_v=sqrt(u*u+v*v+w*w);
1505 nut = (i<
nb_pts)? eq_vit[num_face].get_visco_tot(i) : 0;
1507 fic_post << eq_vit[num_face].get_y(i) <<
" " << u <<
" " << v <<
" " << w <<
" " << norm_v <<
" " << nut << finl;
1521 double tps = mon_modele_turb_hyd->equation().inconnue().temps();
1531 double tps_reprise = mon_modele_turb_hyd->equation().schema_temps().temps_courant();
classe Champ_Don_base classe de base des Champs donnes (non calcules)
DoubleTab & valeurs() override
Surcharge Champ_base::valeurs() Renvoie le tableau des valeurs.
DoubleTab & valeurs() override
Renvoie le tableau des valeurs du champ au temps courant.
double temps() const
Renvoie le temps du champ.
classe Cond_lim Classe generique servant a representer n'importe quelle classe
Classe Diffu_totale_hyd_base Classe abstraite calculant la diffusivite totale (somme diffusivite.
classe Dirichlet_paroi_fixe Represente une paroi immobile dans une equation de type Navier_Stokes.
DoubleVect & volumes_entrelaces()
virtual double face_normales(int face, int comp) const
double xv(int num_face, int k) const
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.
const Domaine & domaine() const
Sortie & syncfile() override
Provoque l'ecriture sur disque des donnees accumulees sur les differents processeurs depuis le dernie...
Class defining operators and methods for all reading operation in an input flow (file,...
void initialiser(int, int, double, double, int, int)
void set_u_y0(int j, double u)
void set_u_yn(int j, double u)
void aller_au_temps(double)
void set_Uinit_lin(int comp, double f1, double f2)
Diffu_totale_base & get_diffu()
void set_F(int j, double f)
void set_nu_t_yn(double nu_t)
void aller_jusqu_a_convergence(int, double)
void set_dt(double delta_t)
void set_Uinit(int comp, int i, double val)
classe Equation_base Le role d'une equation est le calcul d'un ou plusieurs champs....
virtual const Milieu_base & milieu() const =0
virtual const RefObjU & get_modele(Type_modele type) const
Sources & sources()
Renvoie les termes sources asssocies a l'equation.
virtual const Champ_Inc_base & inconnue() const =0
Probleme_base & probleme()
Renvoie le probleme associe a l'equation.
Schema_Temps_base & schema_temps()
Renvoie le schema en temps associe a l'equation.
classe Fluide_base Cette classe represente un d'un fluide incompressible ainsi que
const Champ_Don_base & viscosite_cinematique() const
int num_face(const int) const
virtual const Champ_Don_base & beta_t() const
Renvoie beta_t du milieu.
virtual const Champ_Don_base & gravite() const
Renvoie la gravite du milieu si elle a ete associe provoque une erreur sinon.
Classe Modele_turbulence_scal_base Cette classe represente un modele de turbulence pour une equation ...
const Turbulence_paroi_scal_base & loi_paroi() const
Renvoie la loi de turbulence sur la paroi (version const).
Une chaine de caractere (Nom) en majuscules.
classe Navier_Stokes_std Cette classe porte les termes de l'equation de la dynamique
Operateur_Grad & operateur_gradient()
Renvoie l'operateur de calcul du gradient associe a l'equation.
Champ_Inc_base & pression()
class Nom Une chaine de caractere pour nommer les objets de TRUST
virtual void set_param(Param &) const
const Nom & que_suis_je() const
renvoie la chaine identifiant la classe.
virtual Entree & readOn(Entree &)
Lecture d'un Objet_U sur un flot d'entree Methode a surcharger.
virtual const Nom & le_nom() const
Donne le nom de l'Objet_U Methode a surcharger : renvoie "neant" dans cette implementation.
virtual Sortie & printOn(Sortie &) const
Ecriture de l'objet sur un flot de sortie Methode a surcharger.
Classe Operateur_Grad Classe generique de la hierarchie des operateurs calculant le gradient.
Helper class to factorize the readOn method of Objet_U classes.
void ajouter_condition(const char *condition, const char *message, const char *name=0)
Declare a post-read logical condition that must hold on the parameter values.
void ajouter(const char *keyword, const int *value, Param::Nature nat=Param::OPTIONAL)
Register an integer parameter.
void ajouter_non_std(const char *keyword, const Objet_U *value, Param::Nature nat=Param::OPTIONAL)
Register a keyword handled by Objet_U::lire_motcle_non_standard.
CLASS: ParoiVEF_TBLE_scal.
void set_param(Param ¶m) const override
int init_lois_paroi() override
void imprimer_ustar(Sortie &) const override
int sauvegarder(Sortie &) const override
Sauvegarde d'un Objet_U sur un flot de sortie Methode a surcharger.
int reprendre(Entree &) override
Reprise d'un Objet_U sur un flot d'entree Methode a surcharger.
int calculer_hyd(DoubleTab &) override
int calculer_hyd_BiK(DoubleTab &, DoubleTab &) override
const Probleme_base & getPbBase() const override
int lire_motcle_non_standard(const Motcle &, Entree &) override
Lecture des parametres de type non simple d'un objet_U a partir d'un flot d'entree.
int est_initialise() const
Eq_couch_lim & get_eq_couche_lim_T(int i)
double tps_start_stat_nu_t_dyn
void calculer_stat(int indice_post, int indice_maillage, double Fx, double Fy, double Fz, double u, double v, double w, double dt)
void imprimer_stat(Sortie &, double) const
void set_param(Param ¶m) const
int reprendre(Entree &, const Domaine_dis_base &, const Domaine_Cl_dis_base &, double tps)
IntTab num_global_faces_post
int sauvegarder(Sortie &, const Domaine_dis_base &, const Domaine_Cl_dis_base &, double tps) const
DoubleTab valeurs_reprises
int lire_motcle_non_standard(const Motcle &, Entree &)
int init_lois_paroi(const Domaine_VF &, const Domaine_Cl_dis_base &)
CLASS: Paroi_hyd_base_VEF Classe de base des lois de paroi hydraulique en VEF.
IntVect face_keps_imposee_
int flag_face_keps_imposee_
void set_param(Param ¶m) const
classe Probleme_base C'est un Probleme_U qui n'est pas un couplage.
virtual const Equation_base & equation(int) const =0
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
static int je_suis_maitre()
renvoie 1 si on est sur le processeur maitre du groupe courant (c'est a dire me() == 0),...
Cette classe est a la classe C++ ofstream ce que la classe Sortie est a la classe C++ ostream Elle re...
double temps_courant() const
Renvoie le temps courant.
double pas_temps_min() const
Renvoie le pas de temps minimum.
double pas_de_temps() const
Renvoie le pas de temps (delta_t) courant.
Classe de base des flux de sortie.
classe Source_base Un objet Source_base est un terme apparaissant au second membre d'une
class Sources Sources represente une liste de Source.
_TYPE_ local_min_vect(Mp_vect_options opt=VECT_REAL_ITEMS) const
const Objet_U & valeur() const
Classe Terme_Boussinesq_base Cette classe represente le terme de gravite qui figure dans l'equation.
double Scalaire0(int i) const
const DoubleVect & tab_d_plus() const
const DoubleVect & tab_u_star() const
DoubleTab Cisaillement_paroi_
Classe Turbulence_paroi_scal_base Classe de base pour la hierarchie des classes representant les mode...