16#include <Perte_Charge_Reguliere_VDF_Face.h>
17#include <Domaine_VDF.h>
18#include <Sous_Domaine.h>
19#include <Champ_Face_VDF.h>
20#include <Fluide_Incompressible.h>
21#include <Probleme_base.h>
22#include <Champ_Uniforme.h>
37 s >> nom_sous_domaine;
38 Cerr <<
" nom du sous domaine " << nom_sous_domaine << finl ;
56 const IntTab& elem_faces = domaine_VDF.
elem_faces();
58 const DoubleVect& volumes = domaine_VDF.
volumes();
59 const DoubleTab& xv = domaine_VDF.
xv() ;
60 const Sous_Domaine& le_sous_domaine = le_domaine.
ss_domaine(nom_sous_domaine);
61 int nb_poly_ss_domaine = le_sous_domaine.
nb_elem_tot();
65 int face_associee,nfac;
77 int num_elem,num_face;
78 for (num_elem=0; num_elem<nb_poly_ss_domaine; num_elem++)
79 num_loc[le_sous_domaine(num_elem)] = num_elem;
81 for (
int direction = 0; direction<
dimension; direction++)
83 Cerr <<
" Perte_Charge_Reguliere_VDF_Face::remplir num_face en direction " << direction << finl ;
85 if ((direction == k) || (
dir[direction] == 1 ))
88 if (
dir[direction] == 1 ) dir_a_faire = direction ;
89 for (num_elem=0; num_elem<nb_poly_ss_domaine; num_elem++)
91 num_poly = le_sous_domaine(num_elem);
92 num_face = elem_faces(num_poly,dir_a_faire);
94 for (
int ifa=0; ifa<
dimension; ifa++) xv_(ifa)= xv(num_face,ifa) ;
97 int num_poly_vois0 = face_voisins(num_face,0);
98 if (num_poly_vois0 != -1)
99 if (num_loc[num_poly_vois0] == -1)
101 corr_front_ss[nfac-1]*= volumes(num_poly)/(volumes(num_poly)+volumes(num_poly_vois0)) ;
103 face_associee = elem_faces(num_poly,dir_a_faire+
dimension);
104 int num_poly_vois1 = face_voisins(face_associee,1);
105 if (num_poly_vois1 != -1)
107 if (num_loc[num_poly_vois1] == -1)
110 for (
int ifa=0; ifa<
dimension; ifa++) xv_(ifa) = xv(face_associee,ifa) ;
112 corr_front_ss[nfac-1] *= volumes(num_poly)/(volumes(num_poly)+volumes(num_poly_vois1)) ;
130 const Domaine_VDF& domaine_VDF = le_dom_VDF.valeur();
131 const IntTab& face_voisins = domaine_VDF.
face_voisins();
133 const IntTab& elem_faces = domaine_VDF.
elem_faces();
135 const DoubleTab& vit = la_vitesse->valeurs();
147 d_visco = ch_nu.
valeurs()(0,0);
154 double Cf,CK,U,U_abs,Reynolds;
155 const DoubleTab& visco = nu.
valeurs();
158 for (
int i=0; i<nb_faces; i++)
162 U_abs = std::fabs(vit[numfa]);
166 if (numfa < ndeb_faces_int)
168 int n0 = face_voisins(numfa,0);
172 d_visco = visco[face_voisins(numfa,1)];
175 d_visco = 0.5*(visco[face_voisins(numfa,0)]+visco[face_voisins(numfa,1)]);
182 Cerr<<
"not implemented " <<finl;
185 double U_res=0.,vit1,vit2,div,corr_sign=1.0;
186 int ori,el,fa1,fa2,fa3,fa4 ;
192 for (
int ind=0; ind <2; ind++)
194 el = face_voisins(numfa,ind);
197 fa1 = elem_faces(el,(ori+1));
199 vit1 += vit[fa1] + vit[fa2] ;
202 fa3 = elem_faces(el,(ori+2));
204 vit2 += vit[fa3] + vit[fa4];
210 U_res = U*U+vit1*vit1;
218 Reynolds = U_res*
d()/d_visco;
226 corr_sign = U/std::fabs(U);
228 resu[numfa] += CK*U_res*U_res*volumes_entrelaces[numfa]*porosite_surf[numfa]*
corr_front_ss[i]*corr_sign;
232 Reynolds = U_abs*
d()/d_visco;
238 resu[numfa] += CK*U*U_abs*volumes_entrelaces[numfa]*porosite_surf[numfa]*
corr_front_ss[i];
classe Champ_Don_base classe de base des Champs donnes (non calcules)
DoubleTab & valeurs() override
Surcharge Champ_base::valeurs() Renvoie le tableau des valeurs.
const Sous_Domaine_t & ss_domaine(int i) const
int orientation(int) const override
inline DoubleVect& Domaine_VDF::porosite_face() {
DoubleVect & volumes_entrelaces()
double xv(int num_face, int k) const
double volumes(int i) 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 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.
Class defining operators and methods for all reading operation in an input flow (file,...
virtual const Milieu_base & milieu() const =0
Probleme_base & probleme()
Renvoie le probleme associe a l'equation.
DoubleVect & porosite_face()
const Equation_base & equation() const
Renvoie la reference sur l'equation pointe par MorEqn::mon_equation.
class Nom Une chaine de caractere pour nommer les objets de TRUST
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.
class Perte_Charge_Reguliere_VDF_Face
void remplir_num_faces(Nom &)
DoubleTab & ajouter_(const DoubleTab &, DoubleTab &) const override
double calculer_Cf_blasius(double) const
Entree & lire_donnees(Entree &)
Lit les specifications d'une perte de charge reguliere a partir d'un flot d'entree.
double correction_direction(DoubleVect &, int) const
int direction_perte_charge() const
Renvoie la direction de perte de charge.
const Domaine & domaine() const
Renvoie le domaine associe au probleme.
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
Classe de base des flux de sortie.
int_t nb_elem_tot() const