16#include <Source_Transport_K_Eps_Bas_Reynolds_anisotherme_W_VDF_Elem.h>
17#include <Modele_turbulence_scal_Fluctuation_Temperature_W_Bas_Re.h>
18#include <Modele_turbulence_hyd_K_Eps_Bas_Reynolds.h>
19#include <Convection_Diffusion_Temperature.h>
20#include <Dirichlet_entree_fluide_leaves.h>
21#include <Champ_Uniforme.h>
22#include <Champ_Face_VDF.h>
23#include <Domaine_Cl_VDF.h>
47 const DoubleTab& K_eps_Bas_Re = eqn_keps_bas_re->inconnue().valeurs(), &scalaire = eq_thermique->inconnue().valeurs(), &vit = eq_hydraulique->inconnue().valeurs();
48 const DoubleTab& visco_turb = eqn_keps_bas_re->modele_turbulence().viscosite_turbulente().valeurs();
53 const DoubleTab& Fluctu_Temperature = monEqFluctu.
inconnue().
valeurs(), &g = gravite->valeurs();
55 const DoubleVect& volumes = domaine_VDF.
volumes(), &porosite_vol = eq_hydraulique->milieu().porosite_elem();
63 DoubleTrav P(nb_elem_tot), G(nb_elem_tot), D(nb_elem_tot), E(nb_elem_tot), F1(nb_elem_tot), F2(nb_elem_tot);
65 mon_modele_fonc.
Calcul_D(D,z,zcl,vit,K_eps_Bas_Re,ch_visco_cin);
66 mon_modele_fonc.
Calcul_E(E,z,zcl, vit,K_eps_Bas_Re,ch_visco_cin,visco_turb);
67 mon_modele_fonc.
Calcul_F2(F2,D,z,K_eps_Bas_Re,ch_visco_cin);
73 const DoubleTab& tab_beta = ch_beta.
valeurs();
74 if (sub_type(
Champ_Uniforme,ch_beta))
calculer_terme_destruction_K_W(domaine_VDF,zcl_VDF_th,G,scalaire,Fluctu_Temperature,K_eps_Bas_Re,alpha_turb,tab_beta(0,0),g);
77 for (
int elem=0; elem<nb_elem; elem++)
79 resu(elem,0) += (P(elem)-K_eps_Bas_Re(elem,1)-D(elem))*volumes(elem)*porosite_vol(elem);
80 if (K_eps_Bas_Re(elem,0) >= 1.e-10)
81 resu(elem,1) += (
C1*F1(elem)*P(elem)-
C2*F2(elem)*K_eps_Bas_Re(elem,1))*volumes(elem)*porosite_vol(elem) *(K_eps_Bas_Re(elem,1)/K_eps_Bas_Re(elem,0)) + E(elem)*volumes(elem)*porosite_vol(elem);
82 if ( (G(elem)>0) && (K_eps_Bas_Re(elem,0) >= 1.e-8) )
84 resu(elem,0) += G(elem)*volumes(elem)*porosite_vol(elem);
85 resu(elem,1) +=
C1*F1(elem)*G(elem)*K_eps_Bas_Re(elem,1)*volumes(elem)*porosite_vol(elem)/K_eps_Bas_Re(elem,0);
99 const int nb_elem = domaine_VDF.
nb_elem();
110 for (
int elem=0; elem<nb_elem; elem++)
111 for (
int dim=0; dim<
dimension; dim++) gteta2(elem,dim) = beta*grav(dim)*fluctu_temp(elem,0) ;
119 const int nb_elem = domaine_VDF.
nb_elem();
131 for (
int elem=0; elem<nb_elem; elem++)
132 for (
int dim=0; dim<
dimension; dim++) gteta2(elem,dim) = beta(elem)*grav(dim)*fluctu_temp(elem,0) ;
139 const DoubleTab& fluctu_temp,
const DoubleTab& keps,
const DoubleTab& alpha_turb, DoubleTab& u_teta)
const
146 int n0, n1, n_bord, face;
148 const IntTab& face_voisins = domaine_VDF.
face_voisins();
150 const IntVect& orientation = domaine_VDF.
orientation();
157 for (face=premiere_face_int; face<nb_faces; face++)
159 n0 = face_voisins(face,0);
160 n1 = face_voisins(face,1);
162 alpha = 0.5*(alpha_turb(n0)+alpha_turb(n1));
163 u_teta[face] = alpha*(temper[n1] - temper[n0])/dist;
166 for (face=premiere_face_int; face<nb_faces; face++)
168 n0 = face_voisins(face,0);
169 n1 = face_voisins(face,1);
171 alpha = 0.5*(alpha_turb(n0)+alpha_turb(n1));
172 u_teta[face] = alpha*(temper[n1] - temper[n0])/dist;
176 for (n_bord=0; n_bord<domaine_VDF.
nb_front_Cl(); n_bord++)
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);
193 alpha = alpha_turb(n0);
194 u_teta[face] = alpha*(T_imp-temper[n0])/dist;
198 alpha = alpha_turb(n1);
199 u_teta[face] = alpha*(temper[n1]-T_imp)/dist;
204 const DoubleTab& g = gravite->valeurs();
206 const DoubleTab& tab_beta = ch_beta.
valeurs();
214 int ori,num_face,elem1,elem2;
215 for (n_bord=0; n_bord<domaine_VDF.
nb_front_Cl(); n_bord++)
220 int nfin = ndeb + le_bord.
nb_faces();
221 for (num_face=ndeb; num_face<nfin; num_face++)
223 ori = orientation(num_face);
224 elem1 = face_voisins(num_face,0);
227 if ( (keps(elem1,0)>1.e-10) && (keps(elem1,1)>1.e-10) && (fluctu_temp(elem1,1)>1.e-10) && (fluctu_temp(elem1,0)>1.e-10))
229 double tau = sqrt ( keps(elem1,0)/keps(elem1,1) * fluctu_temp(elem1,0)/fluctu_temp(elem1,1)/2 );
230 u_teta(num_face)=u_teta(num_face)-0.7*tau*gteta2(elem1,ori);
235 elem2 = face_voisins(num_face,1);
236 if ( (keps(elem2,0)>1.e-10) && (keps(elem2,1)>1.e-10) && (fluctu_temp(elem2,1)>1.e-10) && (fluctu_temp(elem2,0)>1.e-10))
238 double tau = sqrt ( keps(elem2,0)/keps(elem2,1) * fluctu_temp(elem2,0)/fluctu_temp(elem2,1)/2 );
239 u_teta(num_face)=u_teta(num_face)-0.7*tau*gteta2(elem2,ori);
248 ori = orientation(num_face);
249 elem1 = face_voisins(num_face,0);
250 elem2 = face_voisins(num_face,1);
252 double gtet = 0.5 *( gteta2(elem1,ori) + gteta2(elem2,ori) );
254 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))
256 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) );
257 u_teta(num_face)=u_teta(num_face)-0.7*tau*gtet;
265 const DoubleTab& keps,
const DoubleTab& alpha_turb,
double beta,
const DoubleVect& grav)
const
271 const int nb_elem = domaine_VDF.
nb_elem(), nb_faces = domaine_VDF.
nb_faces();
272 DoubleTrav u_teta(nb_faces);
286 const Domaine& le_dom=domaine_VDF.
domaine();
289 IntTrav numfa(nb_faces_elem);
291 const IntTab& les_elem_faces = domaine_VDF.
elem_faces();
293 for (
int elem=0; elem<nb_elem; elem++)
295 for (
int i=0; i<nb_faces_elem; i++) numfa[i] = les_elem_faces(elem,i);
297 coef(0) = 0.5*(u_teta(numfa[0])*porosite_face(numfa[0]) + u_teta(numfa[
dimension])*porosite_face(numfa[
dimension]));
298 coef(1) = 0.5*(u_teta(numfa[1])*porosite_face(numfa[1]) + u_teta(numfa[
dimension+1])*porosite_face(numfa[
dimension+1]));
300 if (
dimension == 2) G[elem] = beta*(grav(0)*coef(0) + grav(1)*coef(1));
304 coef(2) = 0.5*(u_teta(numfa[2])*porosite_face(numfa[2]) + u_teta(numfa[5])*porosite_face(numfa[5]));
305 G[elem] = beta*(grav(0)*coef(0) + grav(1)*coef(1) + grav(2)*coef(2));
313 const DoubleTab& keps,
const DoubleTab& alpha_turb,
const DoubleTab& beta,
const DoubleVect& grav)
const
318 const int nb_elem = domaine_VDF.
nb_elem(), nb_faces= domaine_VDF.
nb_faces();
319 DoubleTrav u_teta(nb_faces);
333 const Domaine& le_dom=domaine_VDF.
domaine();
335 IntTrav numfa(nb_faces_elem);
336 const IntTab& les_elem_faces = domaine_VDF.
elem_faces();
339 for (
int elem=0; elem<nb_elem; elem++)
341 for (
int i=0; i<nb_faces_elem; i++) numfa[i] = les_elem_faces(elem,i);
343 coef(0) = 0.5*(u_teta(numfa[0])*porosite_face(numfa[0]) + u_teta(numfa[
dimension])*porosite_face(numfa[
dimension]));
344 coef(1) = 0.5*(u_teta(numfa[1])*porosite_face(numfa[1]) + u_teta(numfa[
dimension+1])*porosite_face(numfa[
dimension+1]));
346 if (
dimension ==2) G[elem] = beta(elem)*(grav(0)*coef(0) + grav(1)*coef(1));
350 coef(2) = 0.5*(u_teta(numfa[2])*porosite_face(numfa[2]) + u_teta(numfa[5])*porosite_face(numfa[5]));
351 G[elem] = beta(elem)*(grav(0)*coef(0) + grav(1)*coef(1) + grav(2)*coef(2));
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
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_face()
virtual DoubleTab & Calcul_E(DoubleTab &, const Domaine_dis_base &, const Domaine_Cl_dis_base &, const DoubleTab &, const DoubleTab &, const Champ_Don_base &, const DoubleTab &) const =0
virtual DoubleTab & Calcul_F2(DoubleTab &, DoubleTab &, const Domaine_dis_base &, const DoubleTab &, const Champ_base &) const =0
virtual DoubleTab & Calcul_D(DoubleTab &, const Domaine_dis_base &, const Domaine_Cl_dis_base &, const DoubleTab &, const DoubleTab &, const Champ_Don_base &) const =0
class Modele_turbulence_hyd_K_Eps_Bas_Reynolds
virtual Transport_Fluctuation_Temperature_W & equation_Fluctu()
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.
Classe de base des flux de sortie.
class Source_Transport_K_Eps_Bas_Reynolds_anisotherme_W_VDF_Elem Cette classe represente le terme sou...
DoubleTab & calculer_gteta2(const Domaine_VDF &, DoubleTab &, const DoubleTab &, double, const DoubleVect &) const
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_pb(const Probleme_base &) override
void ajouter_blocs(matrices_t matrices, DoubleTab &secmem, const tabs_t &semi_impl) const override
DoubleTab & calculer_u_teta_W(const Domaine_VDF &, const Domaine_Cl_VDF &, const DoubleTab &, const DoubleTab &, const DoubleTab &, const DoubleTab &, DoubleTab &) const
virtual void associer_pb(const Probleme_base &)=0
const Champ_Inc_base & inconnue() const override
renvoie le champ inconnue.
void associer_pb_anisotherme(const Probleme_base &)
void verifier_milieu_anisotherme(const Probleme_base &, const Nom &)