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>
55 Cerr<<
"Reading of data for a "<<
que_suis_je()<<
" wall law"<<finl;
58 param.lire_avec_accolades_depuis(is);
68 param.
ajouter_condition(
"(value_of_alpha_ge_0)_and_(value_of_alpha_le_1)",
"The following condition must be satisfied : 0 <= alpha <= 1");
100 Cerr <<
"ParoiVEF_TBLE::init_lois_paroi()" << finl;
104 const IntTab& face_voisins = domaine_VEF.
face_voisins();
105 const IntTab& elem_faces = domaine_VEF.
elem_faces();
106 const Domaine& domaine = domaine_VEF.
domaine();
108 const int nfac = domaine.nb_faces_elem();
109 const Equation_base& eqn_hydr = mon_modele_turb_hyd->equation();
124 int compteur_faces_paroi = 0;
133 for (
int n_bord=0; n_bord<domaine_VEF.
nb_front_Cl(); n_bord++)
139 const Cond_lim& la_cl = le_dom_Cl_dis_->les_conditions_limites(n_bord);
147 for (
int ind_face=0; ind_face<size; ind_face++)
149 Eq_couch_lim& equation_vitesse = eq_vit[compteur_faces_paroi];
153 int num_face = le_bord.
num_face(ind_face);
154 elem = face_voisins(num_face,0);
160 surf2 += face_normale(num_face,i)*face_normale(num_face,i);
165 num[0]=elem_faces(elem,0);
166 num[1]=elem_faces(elem,1);
168 if (num[0]==num_face) num[0]=elem_faces(elem,2);
169 else if (num[1]==num_face) num[1]=elem_faces(elem,2);
171 n[0] = face_normale(num_face,0)/sqrt(surf2);
172 n[1] = face_normale(num_face,1)/sqrt(surf2);
177 dist = distance_2D(num_face,elem,domaine_VEF)*3./2.;
179 v_tang[0] = ((vit(num[0],0)+vit(num[1],0))*t1[0]
180 +(vit(num[0],1)+vit(num[1],1))*t1[1])/2.;
184 num[0]=elem_faces(elem,0);
185 num[1]=elem_faces(elem,1);
186 num[2]=elem_faces(elem,2);
188 if (num[0]==num_face) num[0]=elem_faces(elem,3);
189 else if (num[1]==num_face) num[1]=elem_faces(elem,3);
190 else if (num[2]==num_face) num[2]=elem_faces(elem,3);
192 n[0] = face_normale(num_face,0)/sqrt(surf2);
193 n[1] = face_normale(num_face,1)/sqrt(surf2);
194 n[2] = face_normale(num_face,2)/sqrt(surf2);
196 if( est_egal(n[0],0.) && est_egal(n[1],0.) )
204 t1[0] = -n[1]/sqrt(n[0]*n[0]+n[1]*n[1]);
205 t1[1] = n[0]/sqrt(n[0]*n[0]+n[1]*n[1]);
209 t2[0] = n[1]*t1[2] - n[2]*t1[1];
210 t2[1] = n[2]*t1[0] - n[0]*t1[2];
211 t2[2] = n[0]*t1[1] - n[1]*t1[0];
213 dist = distance_3D(num_face,elem,domaine_VEF)*4./3.;
215 v_tang[0] = ((vit(num[0],0)+vit(num[1],0)+vit(num[2],0))*t1[0]
216 +(vit(num[0],1)+vit(num[1],1)+vit(num[2],1))*t1[1]
217 +(vit(num[0],2)+vit(num[1],2)+vit(num[2],2))*t1[2])/3.;
219 v_tang[1] = ((vit(num[0],0)+vit(num[1],0)+vit(num[2],0))*t2[0]
220 +(vit(num[0],1)+vit(num[1],1)+vit(num[2],1))*t2[1]
221 +(vit(num[0],2)+vit(num[1],2)+vit(num[2],2))*t2[2])/3.;
225 equation_vitesse.
set_y0(0.);
226 equation_vitesse.
set_yn(dist);
235 equation_vitesse.
set_u_yn(i,v_tang[i]);
243 for (
int itble=0; itble<
nb_pts+1; itble++)
247 compteur_faces_paroi++;
253 f_tang_moy.resize(compteur_faces_paroi,
nb_comp);
262 int nb_sources=les_sources.size();
264 for (
int j=0; j<nb_sources; j++)
273 const DoubleTab& tab_champ_beta_t = ch_beta_t.
valeurs();
276 beta_t = std::max(tab_champ_beta_t(0,0),DMINFLOAT);
280 Cerr <<
" On ne sait pas traiter un beta_t non uniforme dans TBLE !!!"<< finl;
288 Cerr <<
"fin init_lois_paroi()" << finl;
315 const IntTab& face_voisins = domaine_VEF.
face_voisins();
316 const IntTab& elem_faces = domaine_VEF.
elem_faces();
317 const Domaine& domaine = domaine_VEF.
domaine();
319 const int nfac = domaine.nb_faces_elem();
321 const Equation_base& eqn_hydr = mon_modele_turb_hyd->equation();
325 const DoubleTab& tab_visco = ch_visco_cin.
valeurs();
333 Cerr <<
" On ne sait pas traiter la gravite non uniforme dans TBLE !!!"<< finl;
346 visco = std::max(tab_visco(0,0),DMINFLOAT);
356 Cerr <<
"In ParoiVEF_TBLE::calculer_hyd_BiK : visco = " << tab_visco.
local_min_vect() <<
" <= 0 ? " << finl;
363 int itmax=0,itmax_loc;
370 DoubleTab grad_p(vit);
373 gradient.calculer(p, grad_p);
375 const DoubleTab& visco_turb = mon_modele_turb_hyd->viscosite_turbulente().valeurs();
378 DoubleTab termes_sources(vit);
386 int compteur_faces_paroi = 0;
398 for (
int n_bord=0; n_bord<domaine_VEF.
nb_front_Cl(); n_bord++)
404 const Cond_lim& la_cl = le_dom_Cl_dis_->les_conditions_limites(n_bord);
412 for (
int ind_face=0; ind_face<size; ind_face++)
414 Eq_couch_lim& equation_vitesse = eq_vit[compteur_faces_paroi];
415 int num_face = le_bord.
num_face(ind_face);
416 elem = face_voisins(num_face,0);
422 surf2 += face_normale(num_face,i)*face_normale(num_face,i);
427 num[0]=elem_faces(elem,0);
428 num[1]=elem_faces(elem,1);
430 if (num[0]==num_face) num[0]=elem_faces(elem,2);
431 else if (num[1]==num_face) num[1]=elem_faces(elem,2);
433 n[0] = face_normale(num_face,0)/sqrt(surf2);
434 n[1] = face_normale(num_face,1)/sqrt(surf2);
439 dist = distance_2D(num_face,elem,domaine_VEF)*3./2.;
441 v_tang[0] = ((vit(num[0],0)+vit(num[1],0))*t1[0]
442 +(vit(num[0],1)+vit(num[1],1))*t1[1])/2.;
449 const DoubleVect& gravite = ch_gravite.
valeurs();
459 gt += gravite(idim)*t1[idim];
460 for(
int i=0; i<
nb_pts+1; i++)
466 F[0] = ((termes_sources(num[0],0)-grad_p(num[0],0))/volumes_entrelaces(num[0])
467 +(termes_sources(num[1],0)-grad_p(num[1],0))/volumes_entrelaces(num[1]))/2. ;
469 F[1] = ((termes_sources(num[0],1)-grad_p(num[0],1))/volumes_entrelaces(num[0])
470 +(termes_sources(num[1],1)-grad_p(num[1],1))/volumes_entrelaces(num[1]))/2. ;
472 F_tang[0] = F[0]*t1[0] + F[1]*t1[1] ;
473 f_tang_moy(compteur_faces_paroi,0) = alpha*F_tang[0] +(1-alpha)*f_tang_moy(compteur_faces_paroi,0);
477 num[0]=elem_faces(elem,0);
478 num[1]=elem_faces(elem,1);
479 num[2]=elem_faces(elem,2);
481 if (num[0]==num_face) num[0]=elem_faces(elem,3);
482 else if (num[1]==num_face) num[1]=elem_faces(elem,3);
483 else if (num[2]==num_face) num[2]=elem_faces(elem,3);
485 n[0] = face_normale(num_face,0)/sqrt(surf2);
486 n[1] = face_normale(num_face,1)/sqrt(surf2);
487 n[2] = face_normale(num_face,2)/sqrt(surf2);
490 if( est_egal(n[0],0.) && est_egal(n[1],0.) )
498 t1[0] = -n[1]/sqrt(n[0]*n[0]+n[1]*n[1]);
499 t1[1] = n[0]/sqrt(n[0]*n[0]+n[1]*n[1]);
503 t2[0] = n[1]*t1[2] - n[2]*t1[1];
504 t2[1] = n[2]*t1[0] - n[0]*t1[2];
505 t2[2] = n[0]*t1[1] - n[1]*t1[0];
507 dist = distance_3D(num_face,elem,domaine_VEF)*4./3.;
509 v_tang[0] = ((vit(num[0],0)+vit(num[1],0)+vit(num[2],0))*t1[0]
510 +(vit(num[0],1)+vit(num[1],1)+vit(num[2],1))*t1[1]
511 +(vit(num[0],2)+vit(num[1],2)+vit(num[2],2))*t1[2])/3.;
513 v_tang[1] = ((vit(num[0],0)+vit(num[1],0)+vit(num[2],0))*t2[0]
514 +(vit(num[0],1)+vit(num[1],1)+vit(num[2],1))*t2[1]
515 +(vit(num[0],2)+vit(num[1],2)+vit(num[2],2))*t2[2])/3.;
517 F[0] = ((termes_sources(num[0],0)-grad_p(num[0],0))/volumes_entrelaces(num[0])
518 +(termes_sources(num[1],0)-grad_p(num[1],0))/volumes_entrelaces(num[1])
519 +(termes_sources(num[2],0)-grad_p(num[2],0))/volumes_entrelaces(num[2]))/3.;
521 F[1] = ((termes_sources(num[0],1)-grad_p(num[0],1))/volumes_entrelaces(num[0])
522 +(termes_sources(num[1],1)-grad_p(num[1],1))/volumes_entrelaces(num[1])
523 +(termes_sources(num[2],1)-grad_p(num[2],1))/volumes_entrelaces(num[2]))/3.;
525 F[2] = ((termes_sources(num[0],2)-grad_p(num[0],2))/volumes_entrelaces(num[0])
526 +(termes_sources(num[1],2)-grad_p(num[1],2))/volumes_entrelaces(num[1])
527 +(termes_sources(num[2],2)-grad_p(num[2],2))/volumes_entrelaces(num[2]))/3.;
530 F_tang[0] = F[0]*t1[0] + F[1]*t1[1] + F[2]*t1[2] ;
531 F_tang[1] = F[0]*t2[0] + F[1]*t2[1] + F[2]*t2[2] ;
532 f_tang_moy(compteur_faces_paroi,0) = alpha*F_tang[0] +(1-alpha)*f_tang_moy(compteur_faces_paroi,0);
533 f_tang_moy(compteur_faces_paroi,1) = alpha*F_tang[1] +(1-alpha)*f_tang_moy(compteur_faces_paroi,1);
540 const DoubleVect& gravite = ch_gravite.
valeurs();
552 gt1 += gravite(idim)*t1[idim];
553 gt2 += gravite(idim)*t2[idim];
556 for(
int i=0; i<
nb_pts+1; i++)
559 ts_boussi(0, i) = -gt1*tmp;
560 ts_boussi(1, i) = -gt2*tmp;
583 if(dt<dt_min) equation_vitesse.
set_dt(1.e12);
584 else equation_vitesse.
set_dt(dt);
590 equation_vitesse.
set_u_yn(i,v_tang[i]);
593 for(
int ipts=0 ; ipts<
nb_pts+1; ipts++)
594 equation_vitesse.
set_F(i, ipts, f_tang_moy(compteur_faces_paroi,i)+ts_boussi(i,ipts));
610 itmax_loc = equation_vitesse.
get_it();
612 if(itmax_loc>
max_it) Cerr <<
"WARNING : TOO MANY ITERATIONS ARE NEEDED IN THE TBLE MESH" << finl;
614 if(itmax_loc>itmax) itmax=itmax_loc;
628 d_visco = tab_visco[elem];
632 double C0 = equation_vitesse.
get_cis(0);
634 double Cx = t1[0]*C0 ;
635 double Cy = t1[1]*C0 ;
645 double C0 = equation_vitesse.
get_cis(0);
646 double C1 = equation_vitesse.
get_cis(1);
648 double Cx = t1[0]*C0 + t2[0]*C1 ;
649 double Cy = t1[1]*C0 + t2[1]*C1 ;
650 double Cz = t1[2]*C0 + t2[2]*C1 ;
656 tab_u_star_(num_face) = pow(Cx*Cx+Cy*Cy+Cz*Cz,0.25);
668 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));
670 compteur_faces_paroi++;
680 fic << tps <<
" " << itmax << finl;
696 const IntTab& face_voisins = domaine_VEF.
face_voisins();
697 const IntTab& elem_faces = domaine_VEF.
elem_faces();
698 const Domaine& domaine = domaine_VEF.
domaine();
700 const int nfac = domaine.nb_faces_elem();
702 const Equation_base& eqn_hydr = mon_modele_turb_hyd->equation();
706 const DoubleTab& tab_visco = ch_visco_cin.
valeurs();
714 Cerr <<
" On ne sait pas traiter la gravite non uniforme dans TBLE !!!"<< finl;
731 visco = std::max(tab_visco(0,0),DMINFLOAT);
741 Cerr <<
"In ParoiVEF_TBLE::calculer_hyd : visco = " << tab_visco.
local_min_vect() <<
" <= 0 ? " << finl;
748 int itmax=0,itmax_loc;
755 DoubleTab grad_p(vit);
758 gradient.calculer(p, grad_p);
760 const DoubleTab& visco_turb = mon_modele_turb_hyd->viscosite_turbulente().valeurs();
763 DoubleTab termes_sources(vit);
786 int compteur_faces_paroi = 0;
798 for (
int n_bord=0; n_bord<domaine_VEF.
nb_front_Cl(); n_bord++)
804 const Cond_lim& la_cl = le_dom_Cl_dis_->les_conditions_limites(n_bord);
812 for (
int ind_face=0; ind_face<size; ind_face++)
814 Eq_couch_lim& equation_vitesse = eq_vit[compteur_faces_paroi];
815 int num_face = le_bord.
num_face(ind_face);
816 elem = face_voisins(num_face,0);
822 surf2 += face_normale(num_face,i)*face_normale(num_face,i);
827 num[0]=elem_faces(elem,0);
828 num[1]=elem_faces(elem,1);
830 if (num[0]==num_face) num[0]=elem_faces(elem,2);
831 else if (num[1]==num_face) num[1]=elem_faces(elem,2);
833 n[0] = face_normale(num_face,0)/sqrt(surf2);
834 n[1] = face_normale(num_face,1)/sqrt(surf2);
839 dist = distance_2D(num_face,elem,domaine_VEF)*3./2.;
841 v_tang[0] = ((vit(num[0],0)+vit(num[1],0))*t1[0]
842 +(vit(num[0],1)+vit(num[1],1))*t1[1])/2.;
849 const DoubleVect& gravite = ch_gravite.
valeurs();
859 gt += gravite(idim)*t1[idim];
860 for(
int i=0; i<
nb_pts+1; i++)
866 F[0] = ((termes_sources(num[0],0)-grad_p(num[0],0))/volumes_entrelaces(num[0])
867 +(termes_sources(num[1],0)-grad_p(num[1],0))/volumes_entrelaces(num[1]))/2. ;
869 F[1] = ((termes_sources(num[0],1)-grad_p(num[0],1))/volumes_entrelaces(num[0])
870 +(termes_sources(num[1],1)-grad_p(num[1],1))/volumes_entrelaces(num[1]))/2. ;
872 F_tang[0] = F[0]*t1[0] + F[1]*t1[1] ;
873 f_tang_moy(compteur_faces_paroi,0) = alpha*F_tang[0] +(1-alpha)*f_tang_moy(compteur_faces_paroi,0);
877 num[0]=elem_faces(elem,0);
878 num[1]=elem_faces(elem,1);
879 num[2]=elem_faces(elem,2);
881 if (num[0]==num_face) num[0]=elem_faces(elem,3);
882 else if (num[1]==num_face) num[1]=elem_faces(elem,3);
883 else if (num[2]==num_face) num[2]=elem_faces(elem,3);
885 n[0] = face_normale(num_face,0)/sqrt(surf2);
886 n[1] = face_normale(num_face,1)/sqrt(surf2);
887 n[2] = face_normale(num_face,2)/sqrt(surf2);
890 if( est_egal(n[0],0.) && est_egal(n[1],0.) )
898 t1[0] = -n[1]/sqrt(n[0]*n[0]+n[1]*n[1]);
899 t1[1] = n[0]/sqrt(n[0]*n[0]+n[1]*n[1]);
903 t2[0] = n[1]*t1[2] - n[2]*t1[1];
904 t2[1] = n[2]*t1[0] - n[0]*t1[2];
905 t2[2] = n[0]*t1[1] - n[1]*t1[0];
907 dist = distance_3D(num_face,elem,domaine_VEF)*4./3.;
909 v_tang[0] = ((vit(num[0],0)+vit(num[1],0)+vit(num[2],0))*t1[0]
910 +(vit(num[0],1)+vit(num[1],1)+vit(num[2],1))*t1[1]
911 +(vit(num[0],2)+vit(num[1],2)+vit(num[2],2))*t1[2])/3.;
913 v_tang[1] = ((vit(num[0],0)+vit(num[1],0)+vit(num[2],0))*t2[0]
914 +(vit(num[0],1)+vit(num[1],1)+vit(num[2],1))*t2[1]
915 +(vit(num[0],2)+vit(num[1],2)+vit(num[2],2))*t2[2])/3.;
917 F[0] = ((termes_sources(num[0],0)-grad_p(num[0],0))/volumes_entrelaces(num[0])
918 +(termes_sources(num[1],0)-grad_p(num[1],0))/volumes_entrelaces(num[1])
919 +(termes_sources(num[2],0)-grad_p(num[2],0))/volumes_entrelaces(num[2]))/3.;
921 F[1] = ((termes_sources(num[0],1)-grad_p(num[0],1))/volumes_entrelaces(num[0])
922 +(termes_sources(num[1],1)-grad_p(num[1],1))/volumes_entrelaces(num[1])
923 +(termes_sources(num[2],1)-grad_p(num[2],1))/volumes_entrelaces(num[2]))/3.;
925 F[2] = ((termes_sources(num[0],2)-grad_p(num[0],2))/volumes_entrelaces(num[0])
926 +(termes_sources(num[1],2)-grad_p(num[1],2))/volumes_entrelaces(num[1])
927 +(termes_sources(num[2],2)-grad_p(num[2],2))/volumes_entrelaces(num[2]))/3.;
930 F_tang[0] = F[0]*t1[0] + F[1]*t1[1] + F[2]*t1[2] ;
931 F_tang[1] = F[0]*t2[0] + F[1]*t2[1] + F[2]*t2[2] ;
932 f_tang_moy(compteur_faces_paroi,0) = alpha*F_tang[0] +(1-alpha)*f_tang_moy(compteur_faces_paroi,0);
933 f_tang_moy(compteur_faces_paroi,1) = alpha*F_tang[1] +(1-alpha)*f_tang_moy(compteur_faces_paroi,1);
940 const DoubleVect& gravite = ch_gravite.
valeurs();
952 gt1 += gravite(idim)*t1[idim];
953 gt2 += gravite(idim)*t2[idim];
956 for(
int i=0; i<
nb_pts+1; i++)
959 ts_boussi(0, i) = -gt1*tmp;
960 ts_boussi(1, i) = -gt2*tmp;
983 if(dt<dt_min) equation_vitesse.
set_dt(1.e12);
984 else equation_vitesse.
set_dt(dt);
990 equation_vitesse.
set_u_yn(i,v_tang[i]);
993 for(
int ipts=0 ; ipts<
nb_pts+1; ipts++)
994 equation_vitesse.
set_F(i, ipts, f_tang_moy(compteur_faces_paroi,i)+ts_boussi(i,ipts));
1010 itmax_loc = equation_vitesse.
get_it();
1012 if(itmax_loc>
max_it) Cerr <<
"WARNING : TOO MANY ITERATIONS ARE NEEDED IN THE TBLE MESH" << finl;
1014 if(itmax_loc>itmax) itmax=itmax_loc;
1028 d_visco = tab_visco[elem];
1032 double C0 = equation_vitesse.
get_cis(0);
1034 double Cx = t1[0]*C0 ;
1035 double Cy = t1[1]*C0 ;
1045 double C0 = equation_vitesse.
get_cis(0);
1046 double C1 = equation_vitesse.
get_cis(1);
1048 double Cx = t1[0]*C0 + t2[0]*C1 ;
1049 double Cy = t1[1]*C0 + t2[1]*C1 ;
1050 double Cz = t1[2]*C0 + t2[2]*C1 ;
1056 tab_u_star_(num_face) = pow(Cx*Cx+Cy*Cy+Cz*Cz,0.25);
1078 traitement_keps(tab1, num_face, face_voisins, elem_faces, nfac, dist,
tab_d_plus(num_face), d_visco,
tab_u_star(num_face));
1081 compteur_faces_paroi++;
1091 fic << tps <<
" " << itmax << finl;
1101void ParoiVEF_TBLE::traitement_keps_BiK(DoubleTab& tab_k,DoubleTab& tab_eps,
int num_face,
const IntTab& face_voisins,
1102 const IntTab& elem_faces,
int nfac,
double dist,
double d_plus,
double d_visco,
double u_star)
1105 int elem=face_voisins(num_face,0);
1109 for (nf2=0; nf2<nfac; nf2++)
1111 num[nf2] = elem_faces(elem,nf2);
1114 for (nf2=0; nf2<nfac-1; nf2++)
1116 num[nf2] = elem_faces(elem,nf2);
1117 if (num[nf2] == num_face)
1119 num[nf2] = num[nfac-1];
1120 num[nfac-1] = num_face;
1125 for (
int nf=0; nf<nfac; nf++)
1127 if (num[nf]==num_face)
1137 tab_eps(num[nf])=0.;
1140 for (
int k=0; k<nfac; k++)
1145 tab_k(num[nf]) += tab_k(num[k]);
1146 tab_eps(num[nf])+= tab_eps(num[k]);
1152 tab_k(num[nf]) /=nk;
1153 tab_eps(num[nf])/=nk;
1163 calculer_k_eps(tab_k(num[nf]),tab_eps(num[nf]),d_plus,u_star,d_visco,dist);
1168void ParoiVEF_TBLE::traitement_keps(DoubleTab& tab_k_eps,
int num_face,
const IntTab& face_voisins,
1169 const IntTab& elem_faces,
int nfac,
double dist,
double d_plus,
double d_visco,
double u_star)
1172 int elem=face_voisins(num_face,0);
1176 for (nf2=0; nf2<nfac; nf2++)
1178 num[nf2] = elem_faces(elem,nf2);
1181 for (nf2=0; nf2<nfac-1; nf2++)
1183 num[nf2] = elem_faces(elem,nf2);
1184 if (num[nf2] == num_face)
1186 num[nf2] = num[nfac-1];
1187 num[nfac-1] = num_face;
1192 for (
int nf=0; nf<nfac; nf++)
1194 if (num[nf]==num_face)
1203 tab_k_eps(num[nf],0)=0.;
1204 tab_k_eps(num[nf],1)=0.;
1207 for (
int k=0; k<nfac; k++)
1212 tab_k_eps(num[nf],0)+= tab_k_eps(num[k],0);
1213 tab_k_eps(num[nf],1)+= tab_k_eps(num[k],1);
1219 tab_k_eps(num[nf],0)/=nk;
1220 tab_k_eps(num[nf],1)/=nk;
1230 calculer_k_eps(tab_k_eps(num[nf],0),tab_k_eps(num[nf],1),d_plus,u_star,d_visco,dist);
1267int ParoiVEF_TBLE::calculer_k_eps(
double& k,
double& eps ,
double yp,
double u_star,
1268 double d_visco,
double dist)
1272 k = 0.07*yp*yp*(exp(-yp/9.))+(1./(sqrt(
Cmu_)))*pow((1.-exp(-yp/20.)),2);
1275 eps = (1./(
Kappa_*pow(yp*yp*yp*yp+50625,0.25)));
1276 eps *= pow(u_star,4)/d_visco;
1281int ParoiVEF_TBLE::calculer_stats()
1283 const Domaine_VEF& domaine_VEF = ref_cast(Domaine_VEF, le_dom_dis_.valeur());
1285 const DoubleTab& face_normale = domaine_VEF.
face_normales();
1288 const Equation_base& eqn_hydr = mon_modele_turb_hyd->equation();
1292 int num_face, num_face_global;
1295 double t1x,t1y,t1z=0.;
1296 double t2x,t2y,t2z=0.;
1297 double Unp1_t1,Unp1_t2=0.;
1315 surf=sqrt(face_normale(num_face_global,0)*face_normale(num_face_global,0)+
1316 face_normale(num_face_global,1)*face_normale(num_face_global,1));
1318 nx = face_normale(num_face_global,0)/surf;
1319 ny = face_normale(num_face_global,1)/surf;
1324 for(
int i=0 ; i<
nb_pts+1 ; i++)
1326 Unp1_t1 = eq_vit[num_face].get_Unp1(0,i);
1327 Fx = t1x*eq_vit[num_face].get_F(0,i);
1328 Fy = t1y*eq_vit[num_face].get_F(0,i);
1343 surf=sqrt(face_normale(num_face_global,0)*face_normale(num_face_global,0)+
1344 face_normale(num_face_global,1)*face_normale(num_face_global,1)+
1345 face_normale(num_face_global,2)*face_normale(num_face_global,2));
1347 nx = face_normale(num_face_global,0)/surf;
1348 ny = face_normale(num_face_global,1)/surf;
1349 nz = face_normale(num_face_global,2)/surf;
1351 if( est_egal(nx,0.) && est_egal(ny,0.) )
1359 t1x = -ny/sqrt(nx*nx+ny*ny);
1360 t1y = nx/sqrt(nx*nx+ny*ny);
1364 t2x = ny*t1z - nz*t1y;
1365 t2y = nz*t1x - nx*t1z;
1366 t2z = nx*t1y - ny*t1x;
1368 for(
int i=0 ; i<
nb_pts+1 ; i++)
1371 Unp1_t1 = eq_vit[num_face].get_Unp1(0,i);
1372 Unp1_t2 = eq_vit[num_face].get_Unp1(1,i);
1373 Fx = t1x*eq_vit[num_face].get_F(0,i)+t2x*eq_vit[num_face].get_F(1,i);
1374 Fy = t1y*eq_vit[num_face].get_F(0,i)+t2y*eq_vit[num_face].get_F(1,i);
1375 Fz = t1z*eq_vit[num_face].get_F(0,i)+t2z*eq_vit[num_face].get_F(1,i);
1377 u = t1x*Unp1_t1 + t2x*Unp1_t2 ;
1378 v = t1y*Unp1_t1 + t2y*Unp1_t2 ;
1379 w = t1z*Unp1_t1 + t2z*Unp1_t2 ;
1393 const Equation_base& eqn_hydr = mon_modele_turb_hyd->equation();
1398 const DoubleTab& face_normale = domaine_VEF.
face_normales();
1401 int num_face, num_face_global;
1404 double t1x,t1y,t1z=0.;
1405 double t2x,t2y,t2z=0.;
1406 double Unp1_t1,Unp1_t2=0.;
1423 fic_post <<
"# t="<< tps <<
" " ;
1424 fic_post <<
"x= " << domaine_VEF.
xv(num_face_global,0) <<
" " <<
"y= " << domaine_VEF.
xv(num_face_global,1) ;
1425 if (
dimension==3) fic_post <<
" "<<
"z= " << domaine_VEF.
xv(num_face_global,2);
1426 fic_post <<
" " <<
"u*= " <<
tab_u_star(num_face_global) ;
1432 surf=sqrt(face_normale(num_face_global,0)*face_normale(num_face_global,0)+
1433 face_normale(num_face_global,1)*face_normale(num_face_global,1));
1435 nx = face_normale(num_face_global,0)/surf;
1436 ny = face_normale(num_face_global,1)/surf;
1441 fic_post <<
" " <<
"F_x= " << eq_vit[num_face].get_F0(0)*t1x <<
" F_y= " << eq_vit[num_face].get_F0(0)*t1y << finl;
1442 fic_post <<
"# d_paroi u v norm_v nu_t" << finl;
1444 for(
int i=0; i<
nb_pts+1; i++)
1446 Unp1_t1 = eq_vit[num_face].get_Unp1(0,i);
1447 nut = (i<
nb_pts)? eq_vit[num_face].get_visco_tot(i) : 0;
1451 norm_v=sqrt(u*u+v*v);
1453 fic_post << eq_vit[num_face].get_y(i) <<
" " << u <<
" " << v <<
" " << norm_v <<
" " << nut << finl;
1458 surf=sqrt(face_normale(num_face_global,0)*face_normale(num_face_global,0)+
1459 face_normale(num_face_global,1)*face_normale(num_face_global,1)+
1460 face_normale(num_face_global,2)*face_normale(num_face_global,2));
1462 nx = face_normale(num_face_global,0)/surf;
1463 ny = face_normale(num_face_global,1)/surf;
1464 nz = face_normale(num_face_global,2)/surf;
1466 if( est_egal(nx,0.) && est_egal(ny,0.) )
1474 t1x = -ny/sqrt(nx*nx+ny*ny);
1475 t1y = nx/sqrt(nx*nx+ny*ny);
1480 t2x = ny*t1z - nz*t1y;
1481 t2y = nz*t1x - nx*t1z;
1482 t2z = nx*t1y - ny*t1x;
1484 fic_post <<
" " <<
"F_x= " << eq_vit[num_face].get_F0(0)*t1x+eq_vit[num_face].get_F0(1)*t2x
1485 <<
" F_y= " << eq_vit[num_face].get_F0(0)*t1y+eq_vit[num_face].get_F0(1)*t2y
1486 <<
" F_z= " << eq_vit[num_face].get_F0(0)*t1z+eq_vit[num_face].get_F0(1)*t2z
1488 fic_post <<
"# dp/dt1= " << eq_vit[num_face].get_F0(0) <<
" dp/dt2= " << eq_vit[num_face].get_F0(1) << finl;
1489 fic_post <<
"# d_paroi u v w norm_v nu_t" << finl;
1491 for(
int i=0 ; i<
nb_pts+1 ; i++)
1493 Unp1_t1 = eq_vit[num_face].get_Unp1(0,i);
1494 Unp1_t2 = eq_vit[num_face].get_Unp1(1,i);
1496 u = t1x*Unp1_t1 + t2x*Unp1_t2 ;
1497 v = t1y*Unp1_t1 + t2y*Unp1_t2 ;
1498 w = t1z*Unp1_t1 + t2z*Unp1_t2 ;
1499 norm_v=sqrt(u*u+v*v+w*w);
1500 nut = (i<
nb_pts)? eq_vit[num_face].get_visco_tot(i) : 0;
1502 fic_post << eq_vit[num_face].get_y(i) <<
" " << u <<
" " << v <<
" " << w <<
" " << norm_v <<
" " << nut << finl;
1516 double tps = mon_modele_turb_hyd->equation().inconnue().temps();
1526 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...