16#include <Loi_Paroi_Nu_Impose_VDF.h>
17#include <Champ_Uniforme.h>
18#include <Champ_Uniforme_Morceaux.h>
19#include <Champ_Fonc_Tabule.h>
20#include <Domaine_Cl_VDF.h>
21#include <Dirichlet_paroi_fixe.h>
22#include <Dirichlet_paroi_defilante.h>
23#include <Neumann_paroi.h>
25#include <Fluide_base.h>
26#include <Convection_Diffusion_std.h>
27#include <Probleme_base.h>
28#include <EcrFicPartage.h>
29#include <Modele_turbulence_scal_base.h>
50 les_mots[0] =
"nusselt";
51 les_mots[1] =
"diam_hydr";
54 Motcle motlu, accolade_fermee=
"}", accolade_ouverte=
"{";
56 assert(motlu==accolade_ouverte);
58 if(motlu == accolade_ouverte)
63 while (motlu != accolade_fermee)
65 int rang=les_mots.search(motlu);
73 Cerr <<
"Lecture et interpretation de la fonction " << tmp <<
" ... ";
93 Cerr <<
"Mot cle \"" << motlu <<
"\" non compris lors de la lecture d'un "
103 Cerr <<
"Il faut definir l'expression nusselt(Re,Pr,x,y,z,Dh)" << finl;
107 if (diam_hydr->nb_comp()!=1)
109 Cerr <<
"Il faut definir le champ diam_hydr a une composante" << finl;
125 const IntTab& face_voisins = domaine_VDF.
face_voisins();
130 const IntVect& orientation = domaine_VDF.
orientation();
131 const DoubleTab& xv=domaine_VDF.
xv() ;
132 const IntTab& elem_faces = domaine_VDF.
elem_faces();
136 const DoubleTab& tab_visco = ch_visco_cin.
valeurs();
142 visco = std::max(tab_visco(0,0),DMINFLOAT);
147 if ((!l_unif) && (local_min_vect(tab_visco)<DMINFLOAT))
150 Cerr <<
"In Loi_Paroi_Nu_Impose_VDF::calculer_scal : visco = " << tab_visco.
local_min_vect() <<
" <= 0 ? " << finl;
155 bool dh_constant=sub_type(
Champ_Uniforme,diam_hydr.valeur())?
true:
false;
156 double dh_valeur=diam_hydr->valeurs()(0,0);
168 for (
int n_bord=0; n_bord<domaine_VDF.
nb_front_Cl(); n_bord++)
175 const Cond_lim& la_cl = le_dom_Cl_dis_->les_conditions_limites(n_bord);
185 int boundary_index=-1;
187 boundary_index=n_bord;
188 assert(boundary_index >= 0);
190 for (
int num_face=ndeb; num_face<nfin; num_face++)
192 elem = face_voisins(num_face,0);
194 elem = face_voisins(num_face,1);
198 d_visco = tab_visco[elem];
202 d_alpha = alpha.
valeurs()(0,0);
206 d_alpha = alpha.
valeurs()(elem);
208 d_alpha = alpha.
valeurs()(elem,0);
210 double Pr = d_visco/d_alpha;
213 int ori = orientation(num_face);
214 int face1 = elem_faces(elem,(ori+1));
216 double Ud = 0.5*(vitesse(face1)+vitesse(face2));
220 face1 = elem_faces(elem,(ori+2));
222 double tmp =0.5*(vitesse(face1)+vitesse(face2));
230 pos[i]=xv(num_face,i);
235 dh_valeur=diam_hydr->valeur_a_compo(pos,0);
238 double Re=Ud*dh_valeur/d_visco;
242 nusselt.setVar(
"Dh",dh_valeur);
256 int global_face=num_face;
274 const IntTab& face_voisins = domaine_VDF.
face_voisins();
285 bool dh_constant=sub_type(
Champ_Uniforme,diam_hydr.valeur())?
true:
false;
286 double dh_valeur=diam_hydr->valeurs()(0,0);
289 for (
int n_bord=0; n_bord<domaine_VDF.
nb_front_Cl(); n_bord++)
291 const Cond_lim& la_cl = le_dom_Cl_dis_->les_conditions_limites(n_bord);
301 int boundary_index=-1;
303 boundary_index=n_bord;
304 assert(boundary_index >= 0);
313 Nusselt <<
"Bord " << le_bord.
le_nom() << finl;
316 Nusselt <<
"----------------------------------------------------------------------------------------------------------------------------------------------------------------" << finl;
317 Nusselt <<
"\tFace a\t\t\t\t|" << finl;
318 Nusselt <<
"----------------------------------------------------------------------------------------------------------------------------------------------------------------" << finl;
319 Nusselt <<
"X\t\t| Y\t\t\t| dist. carac. (m)\t| Nusselt (local)\t| h (Conv. W/m2/K)\t| Tf cote paroi (K)\t| Tparoi equiv.(K)" << finl;
320 Nusselt <<
"----------------|-----------------------|-----------------------|-----------------------|-----------------------|-----------------------|-----------------------" << finl;
324 Nusselt <<
"----------------------------------------------------------------------------------------------------------------------------------------------------------------" << finl;
325 Nusselt <<
"\tFace a\t\t\t\t\t\t\t|" << finl;
326 Nusselt <<
"----------------------------------------------------------------------------------------------------------------------------------------------------------------" << finl;
327 Nusselt <<
"X\t\t| Y\t\t\t| Z\t\t\t| dist. carac. (m)\t| Nusselt (local)\t| h (Conv. W/m2/K)\t| Tf cote paroi (K)\t| Tparoi equiv.(K)" << finl;
328 Nusselt <<
"----------------|-----------------------|-----------------------|-----------------------|-----------------------|-----------------------|-----------------------|-----------------------" << finl;
333 for (
int num_face=ndeb; num_face<nfin; num_face++)
337 pos[i]=domaine_VDF.
xv(num_face,i);
341 dh_valeur=diam_hydr->valeur_a_compo(pos,0);
343 double x=domaine_VDF.
xv(num_face,0);
344 double y=domaine_VDF.
xv(num_face,1);
347 elem = face_voisins(num_face,0);
349 elem = face_voisins(num_face,1);
351 lambda = conductivite.
valeurs()(0,0);
355 lambda = conductivite.
valeurs()(elem);
357 lambda = conductivite.
valeurs()(elem,0);
361 Nusselt << x <<
"\t| " << y;
364 double z=domaine_VDF.
xv(num_face,2);
365 Nusselt << x <<
"\t| " << y <<
"\t| " << z;
368 int global_face=num_face;
371 double flux = la_cl_neum.
flux_impose(num_face-ndeb);
375 << lambda/
equivalent_distance_[boundary_index](local_face) <<
"\t| " << temperature(elem) <<
"\t|" << tparoi << finl;
384 Nusselt <<
"Bord " << le_bord.
le_nom() << finl;
387 Nusselt <<
"----------------------------------------------------------------------------------------------------------------------------------------" << finl;
388 Nusselt <<
"\tFace a\t\t\t\t|" << finl;
389 Nusselt <<
"----------------------------------------------------------------------------------------------------------------------------------------" << finl;
390 Nusselt <<
"X\t\t| Y\t\t\t| dist. carac. (m)\t| Nusselt (local)\t| h (Conv. W/m2/K)\t| Tf cote paroi (K)" << finl;
391 Nusselt <<
"----------------|-----------------------|-----------------------|-----------------------|-----------------------|-----------------------" << finl;
395 Nusselt <<
"----------------------------------------------------------------------------------------------------------------------------------------" << finl;
396 Nusselt <<
"\tFace a\t\t\t\t\t\t\t|" << finl;
397 Nusselt <<
"----------------------------------------------------------------------------------------------------------------------------------------" << finl;
398 Nusselt <<
"X\t\t| Y\t\t\t| Z\t\t\t| dist. carac. (m)\t| Nusselt (local)\t| h (Conv. W/m2/K)\t| Tf cote paroi (K)" << finl;
399 Nusselt <<
"----------------|-----------------------|-----------------------|-----------------------|-----------------------|-----------------------" << finl;
404 for (
int num_face=ndeb; num_face<nfin; num_face++)
408 pos[i]=domaine_VDF.
xv(num_face,i);
412 dh_valeur=diam_hydr->valeur_a_compo(pos,0);
414 double x=domaine_VDF.
xv(num_face,0);
415 double y=domaine_VDF.
xv(num_face,1);
417 elem = face_voisins(num_face,0);
419 elem = face_voisins(num_face,1);
421 lambda = conductivite.
valeurs()(0,0);
425 lambda = conductivite.
valeurs()(elem);
427 lambda = conductivite.
valeurs()(elem,0);
430 Nusselt << x <<
"\t| " << y;
433 double z=domaine_VDF.
xv(num_face,2);
434 Nusselt << x <<
"\t| " << y <<
"\t| " << z;
436 int global_face=num_face;
440 << lambda/
equivalent_distance_[boundary_index](local_face) <<
"\t| " << temperature(elem) << finl;
447 Nusselt << 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.
classe Champ_Fonc_base Classe de base des champs qui sont fonction d'une grandeur calculee
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
classe Convection_Diffusion_std Cette classe est la base des equations modelisant le transport
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.
const Cond_lim & les_conditions_limites(int) const
Renvoie la i-ieme condition aux limites.
int orientation(int) const override
inline DoubleVect& Domaine_VDF::porosite_face() {
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 Front_VF & front_VF(int i) 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
virtual Domaine_Cl_dis_base & domaine_Cl_dis()
Renvoie le domaine des conditions aux limite discretisee associee a l'equation.
Probleme_base & probleme()
Renvoie le probleme associe a l'equation.
virtual int nb_comp() const
classe Fluide_base Cette classe represente un d'un fluide incompressible ainsi que
const Champ_Don_base & viscosite_cinematique() const
int num_local_face(const int) const
int num_premiere_face() const
const Nom & le_nom() const override
Renvoie le nom de la frontiere geometrique.
classe Loi_Paroi_Nu_Impose_VDF
int calculer_scal(Champ_Fonc_base &) override
void imprimer_nusselt(Sortie &) const override
virtual const Champ_Don_base & conductivite() const
Renvoie la conductivite du milieu.
virtual const Champ_Don_base & diffusivite() const
Renvoie la diffusivite du milieu.
Classe Neumann_paroi Cette condition limite correspond a un flux impose pour l'equation de.
virtual double flux_impose(int i) const
Renvoie la valeur du flux impose sur la i-eme composante du champ representant le flux a la frontiere...
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.
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),...
Classe de base des flux de sortie.
_TYPE_ local_min_vect(Mp_vect_options opt=VECT_REAL_ITEMS) const
DoubleVects equivalent_distance_
void ouvrir_fichier_partage(EcrFicPartage &, const Nom &) const
Ouverture/creation d'un fichier d'impression de Face, d_eq, Nu local, h.