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
class Champ_Don_base base class of Given Fields (not calculated)
DoubleTab & valeurs() override
Overrides Champ_base::valeurs() Returns the array of values.
DoubleTab & valeurs() override
Returns the array of field values at the current time.
class Cond_lim Generic class used to represent any class
virtual double val_imp(int i) const
Returns the imposed value on the i-th component of the field at the boundary at the default time of c...
int nb_faces_elem(int=0) const
Returns the number of faces of type i of the geometric elements that make up the domain.
class Domaine_Cl_dis_base Domaine_Cl_dis_base objects represent discretized boundary conditions
const Cond_lim & les_conditions_limites(int) const
Returns the i-th boundary condition.
double dist_norm(int num_face) const override
Returns the normal distance for an internal face (Cartesian coordinates).
double dist_norm_bord_axi(int num_face) const
Returns the normal distance for a boundary face (cylindrical coordinates).
int orientation(int) const override
inline DoubleVect& Domaine_VDF::porosite_face() {
double dist_norm_axi(int num_face) const
Returns the normal distance for an internal face (cylindrical coordinates).
double dist_norm_bord(int num_face) const override
Returns the normal distance for a boundary face (Cartesian coordinates).
int nb_faces() const
Returns the total number of faces.
double volumes(int i) const
int elem_faces(int i, int j) const
Returns the index of the i-th face of element num_elem; the face numbering convention is.
int premiere_face_int() const
A face is internal if and only if it separates two elements.
int face_voisins(int num_face, int i) const
Returns the neighbouring element of num_face in direction i.
class Domaine_dis_base This class is the base of the hierarchy of discretized domains.
const Domaine & domaine() const
Entree_fluide_temperature_imposee Special case of the class Dirichlet_entree_fluide for imposed tempe...
Class defining operators and methods for all reading operation in an input flow (file,...
virtual const Milieu_base & milieu() const =0
Base class for an incompressible fluid and its properties:
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()
Base class for scalar turbulence models coupled to a Navier-Stokes convection-diffusion equation.
const Champ_Fonc_base & diffusivite_turbulente() const
const Equation_base & equation() const
Returns the reference to the equation pointed to by MorEqn::mon_equation.
const Nom & que_suis_je() const
Returns the string identifying the class.
virtual Entree & readOn(Entree &)
Reads an Objet_U from an input stream. Virtual method to override.
virtual Sortie & printOn(Sortie &) const
Writes the object to an output stream. Virtual method to override.
class Probleme_base It is a Probleme_U that is not a coupling.
Base class for output streams.
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 &)