16#include <Paroi_std_hyd_EF.h>
17#include <Champ_Q1_EF.h>
18#include <Fluide_base.h>
19#include <Champ_Uniforme.h>
20#include <Dirichlet_paroi_fixe.h>
21#include <Dirichlet_paroi_defilante.h>
22#include <Periodique.h>
23#include <Static_Int_Lists.h>
26#include <EcrFicPartage.h>
27#include <Modele_turbulence_hyd_Longueur_Melange_base.h>
28#include <Neumann_sortie_libre.h>
29#include <Modele_turbulence_hyd_combinaison.h>
31#include <Paroi_rugueuse.h>
33#include <Paroi_decalee_Robin.h>
34#include <Schema_Temps_base.h>
35#include <communications.h>
36#include <Equation_base.h>
71 param.lire_avec_accolades_depuis(s);
74 mot_test =
"u_star_impose";
76 if (param.get_list_mots_lus().rang(Motcle(mot_test))!=-1)
98 uplus_.resize(le_dom_dis_->nb_faces_tot());
104 seuil_LP.resize(le_dom_dis_->nb_faces_tot());
115 Cmu_ = mon_modele_turb_hyd->get_Cmu();
122 Cerr <<
" Paroi_std_hyd_EF::calculer_hyd_BiK(DoubleTab& tab_k_eps,DoubleTab& tab_eps) " << finl;
123 Cerr <<
"Methode non definie en discretisation EF " << finl ;
130 Cerr <<
" Paroi_std_hyd_EF::calculer_hyd(DoubleTab& tab_k_eps) " << finl;
131 Cerr <<
"on ne doit pas entrer dans cette methode" << finl;
132 Cerr <<
" car elle est definie uniquement pour la LES " << finl ;
140 const Equation_base& eqn_hydr = mon_modele_turb_hyd->equation();
144 const DoubleTab& tab_visco = ch_visco_cin.
valeurs();
149 ArrOfInt nodes_face(nsom);
150 int nb_nodes_free = nsom_elem - nsom;
156 visco = std::max(tab_visco(0,0),DMINFLOAT);
164 Cerr <<
"In Paroi_std_hyd_EF::calculer_hyd : visco = " << tab_visco.
local_min_vect() <<
" <= 0 ? " << finl;
169 double dist=-1,d_visco=-1;
170 double u_plus_d_plus,u_plus,d_plus,u_star;
185 for (
int n_bord=0; n_bord<nb_bords; n_bord++)
187 const Cond_lim& la_cl = le_dom_Cl_dis_->les_conditions_limites(n_bord);
203 for (
int ind_face=ndeb; ind_face<nfin; ind_face++)
205 int num_face=le_bord.
num_face(ind_face);
206 int elem = face_voisins(num_face,0);
211 for(
int jsom=0; jsom<nsom; jsom++)
214 nodes_face[jsom] = num_som;
215 for(
int comp=0; comp<
dimension; comp++) vit_face[comp]+=vitesse(num_som,comp)/nsom;
220 for (
int i=0; i<nsom_elem; i++)
222 int node=elems(elem,i);
224 for(
int jsom=0; jsom<nsom; jsom++)
225 if (nodes_face[jsom] == node) IOK=0;
229 vit[j]+=(vitesse(node,j)-vit_face[j])/nb_nodes_free;
231 double norm_v = norm_vit_lp(vit,num_face,domaine_EF,val);
233 dist = distance_face_elem(num_face,elem,domaine_EF);
239 d_visco = (tab_visco.
nb_dim()==1 ? tab_visco(elem) : tab_visco(elem,0));
241 u_plus_d_plus = norm_v*dist/d_visco;
249 u_star = norm_v/u_plus ;
250 d_plus = u_plus_d_plus/u_plus ;
273 if((!LM) && (!COMB)) tab_nu_t(elem) =
Cmu_*k*k/(eps+DMINFLOAT);
275 uplus_(num_face) = u_plus;
285 tab_nu_t(elem) *= dist_corr;
304 double d_visco,
double dist)
308 double u_star_carre = u_star * u_star;
309 k = 0.07*yp*yp*(exp(-yp/9.))+(1./(sqrt(
Cmu_)))*pow((1.-exp(-yp/20.)),2);
312 eps = (1./(
Kappa_*pow(yp*yp*yp*yp+50625,0.25)));
313 eps *= u_star_carre*u_star_carre/d_visco;
323 if(u_plus_d_plus<1.)
return sqrt(u_plus_d_plus);
326 double u_plus = u_plus_d_plus/100.;
328 double seuil = 0.001;
335 double d_plus,u_plus2;
337 while((iter++<itmax) && (r>seuil))
339 d_plus = u_plus_d_plus/ u_plus ;
340 u_plus2 = ((1./
Kappa_)*log(1.+
Kappa_*d_plus))+A*(1.-exp(-d_plus/11.)-exp(-d_plus/3.)*d_plus/11.);
341 u_plus = 0.5*(u_plus+u_plus2);
342 r = std::fabs(u_plus-u_plus2)/u_plus;
348 if (iter >= itmax) erreur_non_convergence();
357 double upmoy,dpmoy,utaumoy;
358 double seuil_moy,iter_moy;
372 for (
int n_bord=0; n_bord<domaine_EF.
nb_front_Cl(); n_bord++)
374 const Cond_lim& la_cl = le_dom_Cl_dis_->les_conditions_limites(n_bord);
378 (la_cl->que_suis_je() ==
"Frontiere_ouverte_vitesse_imposee_ALE"))
384 Ustar <<
"Bord " << le_bord.
le_nom() << finl;
387 Ustar <<
"-------------------------------------------------------------------------------------------";
388 Ustar <<
"--------------------------------------------------------------------------------------------" << finl;
389 Ustar <<
"\tFace a\t\t\t\t|\t\t\t\t\t\t\t\t\t| TAU=Nu.Grad(Ut) [m2/s2]" << finl;
390 Ustar <<
"----------------------------------------|--------------------------------------------------";
391 Ustar <<
"---------------------|----------------------------------------------------------------------" << finl;
392 Ustar <<
"X\t\t| Y\t\t\t| u+\t\t\t| d+\t\t\t| u*\t\t\t| ||TAU||_2\t\t| |TAUx|\t\t| |TAUy|" << finl;
393 Ustar <<
"----------------|-----------------------|-----------------------|-----------------------|--";
394 Ustar <<
"---------------------|-----------------------|-----------------------|----------------------" << finl;
398 Ustar <<
"-----------------------------------------------------------------------------------------------------------------";
399 Ustar <<
"-----------------------------------------------------------------------------------------------------------------" << finl;
400 Ustar <<
"\tFace a\t\t\t\t\t\t\t|\t\t\t\t\t\t\t\t\t| TAU=Nu.Grad(Ut) [m2/s2]" << finl;
401 Ustar <<
"----------------------------------------------------------------|------------------------------------------------";
402 Ustar <<
"-----------------------|-----------------------------------------------------------------------------------------" << finl;
403 Ustar <<
"X\t\t| Y\t\t\t| Z\t\t\t| u+\t\t\t| d+\t\t\t| u*\t\t\t| ||TAU||_2\t\t| |TAUx|\t\t| |TAUy|\t\t| |TAUz|" << finl;
404 Ustar <<
"----------------|-----------------------|-----------------------|-----------------------|-----------------------|";
405 Ustar <<
"-----------------------|-----------------------|-----------------------|-----------------------|-----------------" << finl;
410 for (
int num_face=ndeb; num_face<nfin; num_face++)
412 double x=domaine_EF.
xv(num_face,0);
413 double y=domaine_EF.
xv(num_face,1);
416 Ustar << x <<
"\t| " << y;
419 double z=domaine_EF.
xv(num_face,2);
420 Ustar << x <<
"\t| " << y <<
"\t| " << z;
423 norme_L2=sqrt(norme_L2);
452 ArrOfDouble array(6);
471 Ustar <<
"-------------------------------------------------------------" << finl;
472 Ustar <<
"Calcul des valeurs moyennes (en supposant maillage regulier):" << finl;
473 Ustar <<
"<u+>= " << upmoy/compt <<
" <d+>= " << dpmoy/compt <<
" <u*>= " << utaumoy/compt <<
" seuil_LP= " << seuil_moy/compt <<
" iterations_LP= " << iter_moy/compt << finl;
475 Ustar << finl << finl;
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.
classe Cond_lim Classe generique servant a representer n'importe quelle classe
static void verifier(const char *const msg, double)
classe Dirichlet_paroi_defilante Impose la vitesse de paroi dnas une equation de type Navier_Stokes.
classe Dirichlet_paroi_fixe Represente une paroi immobile dans une equation de type Navier_Stokes.
int nb_som_elem() const
Renvoie le nombre de sommets des elements geometriques constituants le domaine.
double xv(int num_face, int k) const
int face_sommets(int i, int j) const
renvoie le numero du ieme sommet de la face num_face.
int nb_som_face() const
renvoie le nombre de sommets par face.
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,...
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 Champ_Inc_base & inconnue() const =0
classe Fluide_base Cette classe represente un d'un fluide incompressible ainsi que
const Champ_Don_base & viscosite_cinematique() const
int num_premiere_face() const
int num_face(const int) const
const Nom & le_nom() const override
Renvoie le nom de la frontiere geometrique.
cette classe permet de specifier des options a la loi de paroi standard.
Classe Modele_turbulence_hyd_Longueur_Melange_base Classe representant le modele de turbulence Longue...
Classe Modele_turbulence_hyd_combinaison Classe representant un modele de turbulence exprime a partir...
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.
Helper class to factorize the readOn method of Objet_U classes.
CLASS: Paroi_hyd_base_EF Classe de base des lois de paroi hydraulique en EF.
void init_lois_paroi_hydraulique_()
void set_param(Param ¶m) const
int calculer_hyd_BiK(DoubleTab &, DoubleTab &) override
void imprimer_ustar(Sortie &) const override
int calculer_hyd(DoubleTab &) override
double calculer_u_plus(const int, const double, const double erugu)
virtual int init_lois_paroi_hydraulique()
virtual int calculer_k_eps(double &, double &, double, double, double, double)
void set_param(Param ¶m) const override
int init_lois_paroi() override
static void mp_sum_for_each_item(TRUSTArray< _TYPE_ > &x, int n=-1)
static int je_suis_maitre()
renvoie 1 si on est sur le processeur maitre du groupe courant (c'est a dire me() == 0),...
Classe de base des flux de sortie.
_TYPE_ local_min_vect(Mp_vect_options opt=VECT_REAL_ITEMS) const
virtual void echange_espace_virtuel(IsExchangeBlocking exchange_type=IsExchangeBlocking::DefaultBlocking, const std::string kernel_name="noname")
const DoubleVect & tab_d_plus() const
const DoubleVect & tab_u_star() const
void ouvrir_fichier_partage(EcrFicPartage &, const Nom &) const
Ouverture/creation d'un fichier d'impression de Face, uplus_, dplus_, tab_u_star, Cisaillement_paroi_...
DoubleTab Cisaillement_paroi_