16#include <Modele_Shih_Zhu_Lumley_VEF.h>
17#include <Domaine_VEF.h>
18#include <Champ_Uniforme.h>
19#include <Champ_P1NC.h>
20#include <Periodique.h>
22#include <Champ_P0_VEF.h>
23#include <Discretisation_base.h>
24#include <Check_espace_virtuel.h>
25#include <LecFicDiffuse.h>
26#include <EcritureLectureSpecial.h>
49 param.lire_avec_accolades_depuis(is);
78 DoubleTab gradient_elem;
83 int nelem =
S_elem_.dimension(0);
85 for (
int elem=0; elem<nelem; elem++)
91 S_elem_(elem,i,j) = 0.5 * ( gradient_elem(elem,i,j) + gradient_elem(elem,j,i) );
92 R_elem_(elem,i,j) = 0.5 * ( gradient_elem(elem,i,j) - gradient_elem(elem,j,i) );
102 S_elem_.echange_espace_virtuel();
103 R_elem_.echange_espace_virtuel();
108 const DoubleTab& visco_tab,
const DoubleTab& visco_turb,
109 const DoubleTab& tab_paroi,
const int idt)
114 DoubleTab gradient_elem;
122 int nelem =
S_elem_.dimension(0);
124 for (
int elem=0; elem<nelem; elem++)
130 S_elem_(elem,i,j) = 0.5 * ( gradient_elem(elem,i,j) + gradient_elem(elem,j,i) );
131 R_elem_(elem,i,j) = 0.5 * ( gradient_elem(elem,i,j) - gradient_elem(elem,j,i) );
141 S_elem_.echange_espace_virtuel();
142 R_elem_.echange_espace_virtuel();
157 for (
int face=0; face<
nfaces_; face++)
162 somme += S_face(face,i,j)*S_face(face,i,j);
163 S_[face] = sqrt(2.*somme);
171 assert_espace_virtuel_vect(Tenseur_elem);
172 const IntTab& face_voisins = domaine_VEF.
face_voisins();
173 int nb_faces = domaine_VEF.
nb_faces();
176 int nb_cl=les_cl.size();
177 const DoubleVect& volumes = domaine_VEF.
volumes();
179 for (
int n_bord=0; n_bord<nb_cl; n_bord++)
184 int nfin = ndeb + le_bord.
nb_faces();
188 for (
int fac=ndeb; fac<nfin; fac++)
190 int poly1 = face_voisins(fac,0);
191 int poly2 = face_voisins(fac,1);
192 double a=volumes(poly1)/(volumes(poly1)+volumes(poly2));
193 double b=volumes(poly2)/(volumes(poly1)+volumes(poly2));
196 Tenseur_face(fac,i,j) = a*Tenseur_elem(poly1,i,j) + b*Tenseur_elem(poly2,i,j);
201 for (
int fac=ndeb; fac<nfin; fac++)
203 int poly1 = face_voisins(fac,0);
206 Tenseur_face(fac,i,j) = Tenseur_elem(poly1,i,j);
211 for (
int fac = n0; fac<nb_faces; fac++)
213 int poly1 = face_voisins(fac,0);
214 int poly2 = face_voisins(fac,1);
215 double a=volumes(poly1)/(volumes(poly1)+volumes(poly2));
216 double b=volumes(poly2)/(volumes(poly1)+volumes(poly2));
219 Tenseur_face(fac,i,j) = a*Tenseur_elem(poly1,i,j) + b*Tenseur_elem(poly2,i,j);
284 for (
int face=0; face<
nfaces_; face++)
293 eta =
S_(face) * K_Eps(face,0)/( K_Eps(face,1) + BR_EPS );
295 C1_[face] = std::max( 0.43 , eta / ( 5. + eta ) );
302 for (
int face=0; face<
nfaces_; face++)
306 eta =
S_(face) * K(face)/( Eps(face) + BR_EPS );
308 C1_[face] = std::max( 0.43 , eta / ( 5. + eta ) );
326 DoubleTab U_etoile_face;
331 for (
int face=0; face<
nfaces_; face++)
341 somme += S_face(face,i,j)*S_face(face,i,j)+R_face(face,i,j)*R_face(face,i,j);
342 somme2 += S_face(face,i,j)*S_face(face,i,j);
345 somme3 += S_face(face,i,j)*S_face(face,j,k)*S_face(face,k,i);
350 U_etoile_face(face) = sqrt(somme);
351 double S_tilde = sqrt(somme2);
352 S_[face] = sqrt(2.*somme2);
353 double val_cosinus = sqrt(6.) * somme3 / ( S_tilde * S_tilde * S_tilde +1.e-20 );
355 if ( val_cosinus > 1. )
359 else if ( val_cosinus < -1. )
364 As_face(face) = sqrt(6.) * cos ( (1./3.) * acos( val_cosinus ) );
372 Cmu_[face] = 1./(
A0_+As_face(face)*U_etoile_face(face)*K_Eps(face,0)/( K_Eps(face,1) + BR_EPS));
390 DoubleTab U_etoile_face;
395 for (
int face=0; face<
nfaces_; face++)
405 somme += S_face(face,i,j)*S_face(face,i,j)+R_face(face,i,j)*R_face(face,i,j);
406 somme2 += S_face(face,i,j)*S_face(face,i,j);
409 somme3 += S_face(face,i,j)*S_face(face,j,k)*S_face(face,k,i);
414 U_etoile_face(face) = sqrt(somme);
415 double S_tilde = sqrt(somme2);
416 S_[face] = sqrt(2.*somme2);
417 double val_cosinus = sqrt(6.) * somme3 / ( S_tilde * S_tilde * S_tilde +1.e-20 );
419 if ( val_cosinus > 1. )
423 else if ( val_cosinus < -1. )
428 As_face(face) = sqrt(6.) * cos ( (1./3.) * acos( val_cosinus ) );
436 Cmu_[face] = 1./(
A0_+As_face(face)*U_etoile_face(face)*K(face)/( Eps(face) + BR_EPS));
460 Calcul_C1(domaine_dis,domaine_Cl_dis,vitesse,K_Eps,EPS_MIN);
464 const DoubleTab& visco,
const DoubleTab& visco_turb,
const DoubleTab& loi_paroi,
const int idt)
468 Calcul_C1(domaine_dis,domaine_Cl_dis,vitesse,K_Eps,EPS_MIN);
475 Calcul_C1_BiK(domaine_dis,domaine_Cl_dis,vitesse,K,Eps,EPS_MIN);
479 const DoubleTab& visco,
const DoubleTab& visco_turb,
const DoubleTab& loi_paroi,
const int idt)
483 Calcul_C1_BiK(domaine_dis,domaine_Cl_dis,vitesse,K,Eps,EPS_MIN);
static DoubleTab & calcul_gradient(const DoubleTab &, DoubleTab &, const Domaine_Cl_VEF &)
static DoubleTab & calcul_duidxj_paroi(DoubleTab &, const DoubleTab &, const DoubleTab &, const DoubleTab &, const Domaine_Cl_VEF &)
classe Cond_lim Classe generique servant a representer n'importe quelle classe
classe Conds_lim Cette classe represente un vecteur de conditions aux limites.
virtual void creer_tableau_elements(Array_base &, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT) const
creation d'un tableau parallele de valeurs aux elements.
classe Domaine_Cl_dis_base Les objets Domaine_Cl_dis_base representent les conditions aux limites
const Cond_lim & les_conditions_limites(int) const
Renvoie la i-ieme condition aux limites.
int nb_faces() const
renvoie le nombre global de faces.
void creer_tableau_faces(Array_base &, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT) const
double volumes(int i) const
int premiere_face_int() const
une face est interne ssi elle separe deux elements.
int face_voisins(int num_face, int i) const
renvoie l'element voisin de numface dans la direction i.
classe Domaine_dis_base Cette classe est la base de la hierarchie des domaines discretisees.
const Domaine & domaine() const
Class defining operators and methods for all reading operation in an input flow (file,...
int num_premiere_face() const
void init_tenseur_elem(DoubleTab &, const Domaine_VEF &, const int) const
void init_tenseur_face(DoubleTab &, const Domaine_VEF &, const int) const
void Contributions_Sources(const Domaine_dis_base &domaine_dis, const Domaine_Cl_dis_base &domaine_Cl_dis, const DoubleTab &vitesse, const DoubleTab &K_Eps, const double EPS_MIN) override
void Initialisation(const Domaine_dis_base &domaine_dis)
void Calcul_Tenseurs_S_et_R_elem(const Domaine_dis_base &domaine_dis, const Domaine_Cl_dis_base &domaine_Cl_dis, const DoubleTab &vitesse)
void Calcul_C1(const Domaine_dis_base &domaine_dis, const Domaine_Cl_dis_base &domaine_Cl_dis, const DoubleTab &vitesse, const DoubleTab &K_Eps, const double EPS_MIN) override
void mettre_a_jour(double) override
void Calcul_Tenseurs_S_et_R_elem_Paroi(const Domaine_dis_base &domaine_dis, const Domaine_Cl_dis_base &domaine_Cl_dis, const DoubleTab &vitesse, const DoubleTab &visco_tab, const DoubleTab &visco_turb, const DoubleTab &tab_paroi, const int idt)
void Calcul_S(const Domaine_dis_base &domaine_dis, const Domaine_Cl_dis_base &domaine_Cl_dis, const DoubleTab &vitesse) override
void Calcul_Cmu_et_S_BiK(const Domaine_dis_base &domaine_dis, const Domaine_Cl_dis_base &domaine_Cl_dis, const DoubleTab &vitesse, const DoubleTab &K, const DoubleTab &Eps, const double EPS_MIN) override
virtual DoubleTab & calcul_tenseur_face(DoubleTab &, const DoubleTab &, const Domaine_VEF &, const Domaine_Cl_VEF &) const
void associer(const Domaine_dis_base &, const Domaine_Cl_dis_base &) override
void Contributions_Sources_Paroi_BiK(const Domaine_dis_base &domaine_dis, const Domaine_Cl_dis_base &domaine_Cl_dis, const DoubleTab &vitesse, const DoubleTab &K, const DoubleTab &Eps, const double EPS_MIN, const DoubleTab &visco_tab, const DoubleTab &visco_turb, const DoubleTab &tab_paroi, const int idt) override
void Contributions_Sources_BiK(const Domaine_dis_base &domaine_dis, const Domaine_Cl_dis_base &domaine_Cl_dis, const DoubleTab &vitesse, const DoubleTab &K, const DoubleTab &Eps, const double EPS_MIN) override
void Calcul_Cmu_et_S(const Domaine_dis_base &domaine_dis, const Domaine_Cl_dis_base &domaine_Cl_dis, const DoubleTab &vitesse, const DoubleTab &K_Eps, const double EPS_MIN) override
void Calcul_C1_BiK(const Domaine_dis_base &domaine_dis, const Domaine_Cl_dis_base &domaine_Cl_dis, const DoubleTab &vitesse, const DoubleTab &K, const DoubleTab &Eps, const double EPS_MIN) override
virtual void set_param(Param ¶m) const override
void Contributions_Sources_Paroi(const Domaine_dis_base &domaine_dis, const Domaine_Cl_dis_base &domaine_Cl_dis, const DoubleTab &vitesse, const DoubleTab &K_Eps, const double EPS_MIN, const DoubleTab &visco, const DoubleTab &visco_turb, const DoubleTab &loi_paroi, const int idt) override
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 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.
void ajouter(const char *keyword, const int *value, Param::Nature nat=Param::OPTIONAL)
Register an integer parameter.
classe Periodique Cette classe represente une condition aux limites periodique.
Classe de base des flux de sortie.
void resize(_SIZE_ n, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT)
virtual const MD_Vector & get_md_vector() const