17#include <Source_Transport_Fluctuation_Temperature_W_Bas_Re_VDF_Elem.h>
18#include <Convection_Diffusion_Temperature.h>
19#include <Probleme_base.h>
21#include <Dirichlet_entree_fluide_leaves.h>
22#include <Champ_Uniforme.h>
23#include <Domaine_VDF.h>
24#include <Champ_Face_VDF.h>
25#include <Domaine_Cl_VDF.h>
26#include <Modele_turbulence_hyd_K_Eps_Bas_Reynolds.h>
27#include <Modele_turbulence_scal_Fluctuation_Temperature_W_Bas_Re.h>
46 Motcle accolade_ouverte(
"{");
47 Motcle accolade_fermee(
"}");
51 if (motlu != accolade_ouverte)
53 Cerr <<
"On attendait { pour commencer a lire les constantes de Source_Transport_Fluctuation_Temperature_W_Bas_Re" << finl;
56 Cerr <<
"Lecture des constantes de Source_Transport_Fluctuation_Temperature_W_Bas_Re" << finl;
65 while (motlu != accolade_fermee)
67 int rang=les_mots.search(motlu);
92 Cerr <<
"On ne comprend pas le mot cle : " << motlu <<
"dans Source_Transport_Fluctuation_Temperature_W_Bas_Re" << finl;
108 eq_thermique = eqn_th;
110 const Fluide_base& fluide = eq_thermique->fluide();
131 const DoubleTab& temper,
132 const DoubleTab& u_teta,
133 DoubleTab& uteta_T)
const
135 int nb_faces= domaine_VDF.
nb_faces();
136 const Domaine& le_dom=domaine_VDF.
domaine();
138 IntTrav numfa(nb_faces_elem);
139 const IntTab& les_elem_faces = domaine_VDF.
elem_faces();
140 DoubleTrav grad_T(nb_faces);
141 int nb_elem = domaine_VDF.
nb_elem();
145 const IntTab& face_voisins = domaine_VDF.
face_voisins();
155 for (face=premiere_face_int; face<nb_faces; face++)
157 n0 = face_voisins(face,0);
158 n1 = face_voisins(face,1);
160 grad_T[face] = (temper[n1] - temper[n0])/dist;
163 for (face=premiere_face_int; face<nb_faces; face++)
165 n0 = face_voisins(face,0);
166 n1 = face_voisins(face,1);
168 grad_T[face] = (temper[n1] - temper[n0])/dist;
173 for (
int n_bord=0; n_bord<domaine_VDF.
nb_front_Cl(); n_bord++)
183 int nfin = ndeb + le_bord.
nb_faces();
184 for (face=ndeb; face<nfin; face++)
186 double T_imp = la_cl_diri.
val_imp(face-ndeb);
187 n0 = face_voisins(face,0);
188 n1 = face_voisins(face,1);
196 grad_T[face] = (T_imp-temper[n0])/dist;
200 grad_T[face] = (temper[n1]-T_imp)/dist;
207 for (
int elem=0; elem<nb_elem; elem++)
209 for (
int i=0; i<nb_faces_elem; i++)
210 numfa[i] = les_elem_faces(elem,i);
212 uteta_T[elem] = (( 0.5*(u_teta[numfa[0]]*porosite_face(numfa[0]) + u_teta[numfa[
dimension]]*porosite_face(numfa[
dimension]))) * (0.5*(grad_T[numfa[0]]*porosite_face(numfa[0]) + grad_T[numfa[
dimension]]*porosite_face(numfa[
dimension]))))
213 + (( 0.5*(u_teta[numfa[1]]*porosite_face(numfa[1]) + u_teta[numfa[
dimension+1]]*porosite_face(numfa[
dimension+1])))*(0.5*(grad_T[numfa[1]]*porosite_face(numfa[1]) + grad_T[numfa[
dimension+1]]*porosite_face(numfa[
dimension+1]))));
216 uteta_T[elem] += ((0.5*(u_teta[numfa[2]]*porosite_face(numfa[2]) + u_teta[numfa[5]]*porosite_face(numfa[5])))
217 *(0.5*(grad_T[numfa[2]]*porosite_face(numfa[2])
218 + grad_T[numfa[5]]*porosite_face(numfa[5]))));
233 int nb_elem = domaine_VDF.
nb_elem();
249 for (
int elem=0; elem<nb_elem; elem++)
251 gteta2(elem,dim) = beta*gravite(dim)*fluctu_temp(elem,0) ;
261 int nb_elem = domaine_VDF.
nb_elem();
277 for (
int elem=0; elem<nb_elem; elem++)
279 gteta2(elem,dim) = beta(elem)*gravite(dim)*fluctu_temp(elem,0) ;
286 const DoubleTab& temper,
const DoubleTab& fluctu_temp,
const DoubleTab& keps,
287 const DoubleTab& alpha_turb,
288 DoubleTab& u_teta)
const
295 int nb_faces= domaine_VDF.
nb_faces();
300 const IntTab& face_voisins = domaine_VDF.
face_voisins();
302 const IntVect& orientation = domaine_VDF.
orientation();
313 for (face=premiere_face_int; face<nb_faces; face++)
315 n0 = face_voisins(face,0);
316 n1 = face_voisins(face,1);
318 alpha = 0.5*(alpha_turb(n0)+alpha_turb(n1));
319 u_teta[face] = alpha*(temper[n1] - temper[n0])/dist;
323 for (face=premiere_face_int; face<nb_faces; face++)
325 n0 = face_voisins(face,0);
326 n1 = face_voisins(face,1);
328 alpha = 0.5*(alpha_turb(n0)+alpha_turb(n1));
329 u_teta[face] = alpha*(temper[n1] - temper[n0])/dist;
334 for (n_bord=0; n_bord<domaine_VDF.
nb_front_Cl(); n_bord++)
344 int nfin = ndeb + le_bord.
nb_faces();
345 for (face=ndeb; face<nfin; face++)
347 double T_imp = la_cl_diri.
val_imp(face-ndeb);
348 n0 = face_voisins(face,0);
349 n1 = face_voisins(face,1);
356 alpha = alpha_turb(n0);
357 u_teta[face] = alpha*(T_imp-temper[n0])/dist;
361 alpha = alpha_turb(n1);
362 u_teta[face] = alpha*(temper[n1]-T_imp)/dist;
368 const DoubleTab& g = gravite_->valeurs();
370 const DoubleTab& tab_beta = ch_beta.
valeurs();
380 int ori,num_face,elem1,elem2;
381 for (n_bord=0; n_bord<domaine_VDF.
nb_front_Cl(); n_bord++)
386 int nfin = ndeb + le_bord.
nb_faces();
387 for (num_face=ndeb; num_face<nfin; num_face++)
389 ori = orientation(num_face);
390 elem1 = face_voisins(num_face,0);
393 if ( (keps(elem1,1)>1.e-10) && (fluctu_temp(elem1,1)>1.e-10) && (keps(elem1,0)>1.e-10) && (fluctu_temp(elem1,0)>1.e-10))
395 double tau = sqrt ( keps(elem1,0)/keps(elem1,1) * fluctu_temp(elem1,0)/fluctu_temp(elem1,1)/2 );
396 u_teta(num_face)=u_teta(num_face)-0.7*tau*gteta2(elem1,ori);
401 elem2 = face_voisins(num_face,1);
402 if ( (keps(elem2,1)>1.e-10) && (fluctu_temp(elem2,1)>1.e-10) && (keps(elem2,0)>1.e-10) && (fluctu_temp(elem2,0)>1.e-10))
404 double tau = sqrt ( keps(elem2,0)/keps(elem2,1) * fluctu_temp(elem2,0)/fluctu_temp(elem2,1)/2 );
405 u_teta(num_face)=u_teta(num_face)-0.7*tau*gteta2(elem2,ori);
414 ori = orientation(num_face);
415 elem1 = face_voisins(num_face,0);
416 elem2 = face_voisins(num_face,1);
417 double gtet = 0.5 *( gteta2(elem1,ori) + gteta2(elem2,ori) );
418 if ( (keps(elem1,1)>1.e-10) && (fluctu_temp(elem1,1)>1.e-10) && (keps(elem2,1)>1.e-10) && (fluctu_temp(elem2,1)>1.e-10) && (keps(elem1,0)>1.e-10) && (fluctu_temp(elem1,0)>1.e-10) && (keps(elem2,0)>1.e-10) && (fluctu_temp(elem2,0)>1.e-10))
420 double tau =0.5* ( sqrt ( keps(elem1,0)/keps(elem1,1) * fluctu_temp(elem1,0)/fluctu_temp(elem1,1)/2) + sqrt(keps(elem2,0)/keps(elem2,1) * fluctu_temp(elem2,0)/fluctu_temp(elem2,1)/2) );
421 u_teta(num_face)=u_teta(num_face)-0.7*tau*gtet;
431 DoubleTab& G,
const DoubleTab& temper,
432 const DoubleTab& fluctuTemp,
433 const DoubleTab& keps,
434 const DoubleTab& alpha_turb,
435 double beta,
const DoubleVect& gravite)
const
444 int nb_elem = domaine_VDF.
nb_elem();
445 int nb_faces= domaine_VDF.
nb_faces();
446 DoubleTrav u_teta(nb_faces);
466 const Domaine& le_dom=domaine_VDF.
domaine();
469 IntTrav numfa(nb_faces_elem);
471 const IntTab& les_elem_faces = domaine_VDF.
elem_faces();
473 for (
int elem=0; elem<nb_elem; elem++)
475 for (
int i=0; i<nb_faces_elem; i++)
476 numfa[i] = les_elem_faces(elem,i);
478 coef(0) = 0.5*(u_teta(numfa[0])*porosite_face(numfa[0])
480 coef(1) = 0.5*(u_teta(numfa[1])*porosite_face(numfa[1])
484 G[elem] = beta*(gravite(0)*coef(0) + gravite(1)*coef(1));
488 coef(2) = 0.5*(u_teta(numfa[2])*porosite_face(numfa[2])
489 + u_teta(numfa[5])*porosite_face(numfa[5]));
490 G[elem] = beta*(gravite(0)*coef(0) + gravite(1)*coef(1) + gravite(2)*coef(2));
500 DoubleTab& G,
const DoubleTab& temper,
501 const DoubleTab& fluctuTemp,
502 const DoubleTab& keps,
503 const DoubleTab& alpha_turb,
504 const DoubleTab& beta,
const DoubleVect& gravite)
const
513 int nb_elem = domaine_VDF.
nb_elem();
514 int nb_faces= domaine_VDF.
nb_faces();
515 DoubleTrav u_teta(nb_faces);
535 const Domaine& le_dom=domaine_VDF.
domaine();
537 IntTrav numfa(nb_faces_elem);
538 const IntTab& les_elem_faces = domaine_VDF.
elem_faces();
541 for (
int elem=0; elem<nb_elem; elem++)
543 for (
int i=0; i<nb_faces_elem; i++)
544 numfa[i] = les_elem_faces(elem,i);
546 coef(0) = 0.5*(u_teta(numfa[0])*porosite_face(numfa[0])
548 coef(1) = 0.5*(u_teta(numfa[1])*porosite_face(numfa[1])
552 G[elem] = beta(elem)*(gravite(0)*coef(0) + gravite(1)*coef(1));
556 coef(2) = 0.5*(u_teta(numfa[2])*porosite_face(numfa[2])
557 + u_teta(numfa[5])*porosite_face(numfa[5]));
558 G[elem] = beta(elem)*(gravite(0)*coef(0) + gravite(1)*coef(1) + gravite(2)*coef(2));
573 const RefObjU& modele_turbulence_hydr = eq_hydraulique->get_modele(TURBULENCE);
580 const DoubleTab& K_eps_Bas_Re = mon_eq_transport_K_Eps_Bas_Re.
inconnue().
valeurs();
581 const DoubleTab& scalaire = eq_thermique->inconnue().valeurs();
582 const DoubleTab& vit = eq_hydraulique->inconnue().valeurs();
584 const DoubleTab& Fluctu_Temperature = mon_eq_transport_Fluctu_Temp->inconnue().valeurs();
588 const DoubleVect& volumes = domaine_VDF.
volumes();
591 const DoubleTab& g = gravite_->valeurs();
593 int nb_elem = domaine_VDF.
nb_elem();
595 int nb_face = domaine_VDF.
nb_faces();
596 DoubleTrav uteta_T(nb_elem_tot);
597 DoubleTrav P(nb_elem_tot);
598 DoubleTrav G(nb_elem_tot);
599 DoubleTrav D(nb_elem_tot);
600 DoubleTrav E(nb_elem_tot);
601 DoubleTrav F1(nb_elem_tot);
602 DoubleTrav F2(nb_elem_tot);
603 DoubleTrav F3(nb_elem_tot);
604 DoubleTrav F4(nb_elem_tot);
605 DoubleTrav utet(nb_face);
612 const DoubleTab& tab_visco = ch_visco_cin.
valeurs();
613 const DoubleTab& tab_diffu = ch_diffu.
valeurs();
618 visco = std::max(tab_visco(0,0),DMINFLOAT);
623 Cerr <<
"La viscosite doit etre uniforme !!!!" << finl;
629 diffu = std::max(tab_diffu(0,0),DMINFLOAT);
634 Cerr <<
"La diffusivite doit etre uniforme !!!!" << finl;
642 mon_modele_fonc.
Calcul_D(D,z,zcl_VDF_th_dis,scalaire,Fluctu_Temperature,diffu);
643 mon_modele_fonc.
Calcul_E(E,z,zcl_VDF_th_dis,scalaire,Fluctu_Temperature,diffu,alpha_turb);
644 mon_modele_fonc.
Calcul_F1(F1,z,K_eps_Bas_Re,Fluctu_Temperature,visco,diffu);
645 mon_modele_fonc.
Calcul_F2(F2,z,K_eps_Bas_Re,Fluctu_Temperature,visco,diffu);
646 mon_modele_fonc.
Calcul_F3(F3,z,K_eps_Bas_Re,Fluctu_Temperature,visco,diffu);
647 mon_modele_fonc.
Calcul_F4(F4,z,K_eps_Bas_Re,Fluctu_Temperature,visco,diffu);
654 const DoubleTab& tab_beta = ch_beta.
valeurs();
685 for (
int elem=0; elem<nb_elem; elem++)
688 resu(elem,0) += (-2*(uteta_T(elem)+Fluctu_Temperature(elem,1))-D(elem))*volumes(elem)*porosite_vol(elem);
691 if (K_eps_Bas_Re(elem,0)>1.e-10)
692 A=-
Ca*F2(elem)*Fluctu_Temperature(elem,1)*K_eps_Bas_Re(elem,1)/K_eps_Bas_Re(elem,0);
694 if (Fluctu_Temperature(elem,0)>1.e-10)
695 B=-
Cb*F4(elem)*(Fluctu_Temperature(elem,1)*Fluctu_Temperature(elem,1))/Fluctu_Temperature(elem,0);
697 if (Fluctu_Temperature(elem,0)>1.e-10)
698 C=-
Cc*F3(elem)*(Fluctu_Temperature(elem,1)/Fluctu_Temperature(elem,0))*uteta_T(elem);
700 if ( K_eps_Bas_Re(elem,0)>1.e-10 )
701 dD=+
Cd*F1(elem)*(P(elem)+G(elem))*Fluctu_Temperature(elem,1)/K_eps_Bas_Re(elem,0);
702 resu(elem,1) += (A+B+C+dD+E(elem))*volumes(elem)*porosite_vol(elem);
DoubleTab & calculer_u_teta(const Domaine_VDF &, const Domaine_Cl_VDF &, const DoubleTab &, const DoubleTab &, DoubleTab &) const
DoubleVect & calculer_terme_production_K(const Domaine_VDF &, const Domaine_Cl_VDF &, DoubleVect &, const DoubleTab &, const DoubleTab &, const Champ_Face_VDF &, const DoubleTab &) const
DoubleVect & calculer_terme_production_K_Axi(const Domaine_VDF &, const Champ_Face_VDF &, DoubleVect &, const DoubleTab &, const DoubleTab &) const
classe Champ_Don_base classe de base des Champs donnes (non calcules)
DoubleTab & valeurs() override
Surcharge Champ_base::valeurs() Renvoie le tableau des valeurs.
class Champ_Face_VDF Cette classe sert a representer un champ vectoriel dont on ne calcule
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_Temperature Cas particulier de Convection_Diffusion_std
virtual double val_imp(int i) const
Renvoie la valeur imposee sur la i-eme composante du champ a la frontiere au temps par defaut du cham...
int nb_faces_elem(int=0) const
Renvoie le nombre de face de type i des elements geometriques constituants le domaine.
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.
double dist_norm(int num_face) const override
double dist_norm_bord_axi(int num_face) const
int orientation(int) const override
inline DoubleVect& Domaine_VDF::porosite_face() {
double dist_norm_axi(int num_face) const
double dist_norm_bord(int num_face) const override
int nb_faces() const
renvoie le nombre global de faces.
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.
classe Domaine_dis_base Cette classe est la base de la hierarchie des domaines discretisees.
const Domaine & domaine() const
classe Entree_fluide_temperature_imposee Cas particulier de la classe Dirichlet_entree_fluide pour la...
Class defining operators and methods for all reading operation in an input flow (file,...
virtual const Milieu_base & milieu() 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
DoubleVect & porosite_elem()
virtual const Champ_Don_base & beta_t() const
Renvoie beta_t du milieu.
virtual const Champ_Don_base & diffusivite() const
Renvoie la diffusivite du milieu.
DoubleVect & porosite_face()
virtual const Champ_Don_base & gravite() const
Renvoie la gravite du milieu si elle a ete associe provoque une erreur sinon.
virtual DoubleTab & Calcul_F1(DoubleTab &, const Domaine_dis_base &, const DoubleTab &, const DoubleTab &, double, double) const =0
virtual DoubleTab & Calcul_F2(DoubleTab &, const Domaine_dis_base &, const DoubleTab &, const DoubleTab &, double, double) const =0
virtual DoubleTab & Calcul_E(DoubleTab &, const Domaine_dis_base &, const Domaine_Cl_dis_base &, const DoubleTab &, const DoubleTab &, double, const DoubleTab &) const =0
virtual DoubleTab & Calcul_F3(DoubleTab &, const Domaine_dis_base &, const DoubleTab &, const DoubleTab &, double, double) const =0
virtual DoubleTab & Calcul_D(DoubleTab &, const Domaine_dis_base &, const Domaine_Cl_dis_base &, const DoubleTab &, const DoubleTab &, double) const =0
virtual DoubleTab & Calcul_F4(DoubleTab &, const Domaine_dis_base &, const DoubleTab &, const DoubleTab &, double, double) const =0
class Modele_turbulence_hyd_K_Eps_Bas_Reynolds
const Transport_K_Eps_Bas_Reynolds & get_eq_transport() const override
Classe Modele_turbulence_hyd_base Cette classe sert de base a la hierarchie des classes.
const Champ_Fonc_base & viscosite_turbulente() const
Modele_Fonc_Bas_Reynolds_Thermique_Base & associe_modele_fonction()
Classe Modele_turbulence_scal_base Cette classe represente un modele de turbulence pour une equation ...
const Champ_Fonc_base & diffusivite_turbulente() const
const Equation_base & equation() const
Renvoie la reference sur l'equation pointe par MorEqn::mon_equation.
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.
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.
Classe de base des flux de sortie.
DoubleTab & calculer_u_teta_W(const Domaine_VDF &, const Domaine_Cl_VDF &, const DoubleTab &, const DoubleTab &, const DoubleTab &, const DoubleTab &, DoubleTab &) const
DoubleTab & calculer_gteta2(const Domaine_VDF &, DoubleTab &, const DoubleTab &, double, const DoubleVect &) const
DoubleTab & ajouter(DoubleTab &) const override
DoubleTab & calculer_terme_destruction_K_W(const Domaine_VDF &, const Domaine_Cl_VDF &, DoubleTab &, const DoubleTab &, const DoubleTab &, const DoubleTab &, const DoubleTab &, double, const DoubleVect &) const
void associer_domaines(const Domaine_dis_base &, const Domaine_Cl_dis_base &) override
DoubleTab & calculer_Prod_uteta_T(const Domaine_VDF &, const Domaine_Cl_VDF &, const DoubleTab &, const DoubleTab &, DoubleTab &) const
void associer_pb(const Probleme_base &) override
DoubleTab & calculer(DoubleTab &) const override
classe Source_base Un objet Source_base est un terme apparaissant au second membre d'une
const Objet_U & valeur() const
Classe Transport_K_Eps_base Classe de base pour les equations.
const Champ_Inc_base & inconnue() const override
Renvoie le champ inconnue de l'equation.