16#include <Modele_Jones_Launder_Thermique_VDF.h>
17#include <Domaine_VDF.h>
18#include <Domaine_Cl_VDF.h>
20#include <Probleme_base.h>
22#include <Dirichlet_entree_fluide_leaves.h>
25#include <Neumann_homogene.h>
39 Motcle motlu, accolade_fermee=
"}", accolade_ouverte=
"{";
41 if (motlu==accolade_ouverte)
44 if (motlu != accolade_fermee)
46 Cerr <<
"Erreur a la lecture du Modele fonc bas reynolds Jones et Launder pour la thermique" << finl;
47 Cerr <<
"On attendait } a la place de " << motlu << finl;
53 Cerr <<
"Erreur a la lecture du Modele fonc bas reynolds Jones et Launder pour la thermique" << finl;
54 Cerr <<
"On attendait { a la place de " << motlu << finl;
81 const DoubleTab& vitesse,
const DoubleTab& Fluctu_Temp,
double diffu )
const
100 DoubleTab gradth(nb_faces);
101 int num_face,poly1,poly2,ori, ndeb, nfin;
106 for (
int n_bord=0; n_bord<le_dom.
nb_front_Cl(); n_bord++)
111 if ( sub_type(
Dirichlet,la_cl.valeur()) )
118 for (num_face=ndeb; num_face<nfin; num_face++)
121 poly1 = face_voisins(num_face,0);
126 coef = volume_entrelaces(num_face)*porosite_surf(num_face)*0.5;
127 if ( (Fluctu_Temp(poly1,0)>0) && (Fluctu_Temp(poly2,0)>0) )
128 gradth(num_face) += (coef*(la_cl_typee.
val_imp(num_face-ndeb,0) - sqrt(Fluctu_Temp(poly1,0))))/le_dom.
dist_norm_bord(num_face);
129 D[poly1] += 2*diffu*(gradth(num_face)*gradth(num_face));
133 poly2 = face_voisins(num_face,1);
134 coef = volume_entrelaces(num_face)*porosite_surf(num_face)*0.5;
135 if ( (Fluctu_Temp(poly1,0)>0) && (Fluctu_Temp(poly2,0)>0) )
136 gradth(num_face) += (coef*(sqrt(Fluctu_Temp(poly2,0)) - la_cl_typee.
val_imp(num_face-ndeb,0)))/le_dom.
dist_norm_bord(num_face);
137 D[poly2] += 2*diffu*(gradth(num_face)*gradth(num_face));
142 else if (sub_type(
Symetrie,la_cl.valeur()))
144 else if ( (sub_type(
Neumann,la_cl.valeur()))
156 poly1 = face_voisins(num_face,0);
157 poly2 = face_voisins(num_face,1);
159 coef = volume_entrelaces(num_face)*porosite_surf(num_face);
161 if ( (Fluctu_Temp(poly1,0)>0) && (Fluctu_Temp(poly2,0)>0) )
162 gradth(num_face) += coef*(sqrt(Fluctu_Temp(poly1,0))-sqrt(Fluctu_Temp(poly2,0)))/(le_dom.
xp(poly2,ori)- le_dom.
xp(poly1,ori));
164 D[poly1] += 2*diffu*(gradth(num_face)*gradth(num_face));
165 D[poly2] += 2*diffu*(gradth(num_face)*gradth(num_face));
175 const DoubleVect& volumes = le_dom.
volumes();
178 int nb_elem = le_dom.
nb_elem();
180 const IntTab& elem_faces = le_dom.
elem_faces();
185 int ndeb,nfin,poly1, poly2, num_face, ori;
186 const Domaine& domaine=le_dom.
domaine();
189 DoubleTrav dT_dy(nb_faces);
190 DoubleTrav dT_dz(nb_faces);
191 DoubleTrav dT_dx(nb_faces);
192 DoubleTrav d2T_dy2(nb_elem_tot);
193 DoubleTrav d2T_dz2(nb_elem_tot);
194 DoubleTrav d2T_dx2(nb_elem_tot);
199 for (
int n_bord=0; n_bord<le_dom.
nb_front_Cl(); n_bord++)
203 if ( sub_type(
Dirichlet,la_cl.valeur()) )
210 for (num_face=ndeb; num_face<nfin; num_face++)
215 poly1 = face_voisins(num_face,0);
221 dT_dx(num_face) = (la_cl_typee.
val_imp(num_face-ndeb,0) - temp(poly1))/le_dom.
dist_norm_bord(num_face);
225 dT_dy(num_face) = (la_cl_typee.
val_imp(num_face-ndeb,0) - temp(poly1))/le_dom.
dist_norm_bord(num_face);
229 dT_dz(num_face) = (la_cl_typee.
val_imp(num_face-ndeb,0) - temp(poly1))/le_dom.
dist_norm_bord(num_face);
234 poly2 = face_voisins(num_face,1);
237 dT_dx(num_face) = (temp(poly2) - la_cl_typee.
val_imp(num_face-ndeb,0))/le_dom.
dist_norm_bord(num_face);
241 dT_dy(num_face) = (temp(poly2) - la_cl_typee.
val_imp(num_face-ndeb,0))/le_dom.
dist_norm_bord(num_face);
245 dT_dz(num_face) = (temp(poly2) - la_cl_typee.
val_imp(num_face-ndeb,0))/le_dom.
dist_norm_bord(num_face);
256 poly1 = face_voisins(num_face,0);
257 poly2 = face_voisins(num_face,1);
261 dT_dx(num_face) = ( temp(poly2) - temp(poly1) ) / (le_dom.
xp(poly2,ori) - le_dom.
xp(poly1,ori));
265 dT_dy(num_face) = ( temp(poly2) - temp(poly1) ) / (le_dom.
xp(poly2,ori) - le_dom.
xp(poly1,ori));
269 dT_dz(num_face) = ( temp(poly2) - temp(poly1) ) / (le_dom.
xp(poly2,ori) - le_dom.
xp(poly1,ori));
275 IntTrav numfa(nb_faces_elem);
276 for (
int elem=0; elem<nb_elem; elem++)
278 for (
int i=0; i<nb_faces_elem; i++)
279 numfa[i] = elem_faces(elem,i);
282 d2T_dx2(elem) = ( dT_dx(numfa[2]) - dT_dx(numfa[0]) ) * le_dom.
dist_face(numfa[1],numfa[3],0);
283 d2T_dy2(elem) = ( dT_dy(numfa[1]) - dT_dx(numfa[3]) ) * le_dom.
dist_face(numfa[0],numfa[2],1);
284 E[elem] = 2 * diffu * diffu_turb(elem) * ( d2T_dx2(elem) + d2T_dy2(elem) ) * ( d2T_dx2(elem) + d2T_dy2(elem) );
288 d2T_dx2(elem) = ( dT_dx(numfa[3]) - dT_dx(numfa[0]) ) * volumes(numfa[3]);
289 d2T_dy2(elem) = ( dT_dy(numfa[1]) - dT_dx(numfa[4]) ) * volumes(numfa[4]);
290 d2T_dz2(elem) = ( dT_dy(numfa[5]) - dT_dx(numfa[2]) ) * volumes(numfa[5]);
291 E[elem] = 2 * diffu * diffu_turb(elem) * (d2T_dx2(elem)+d2T_dy2(elem)+d2T_dz2(elem)) * (d2T_dx2(elem)+d2T_dy2(elem)+d2T_dz2(elem));
302 int nb_elem = le_dom.
nb_elem();
303 for (
int elem=0; elem <nb_elem; elem ++ )
311 int nb_elem = le_dom.
nb_elem();
320 for (
int elem=0; elem <nb_elem; elem ++ )
328 int nb_elem = le_dom.
nb_elem();
329 for (
int elem=0; elem <nb_elem; elem ++ )
336 int nb_elem = le_dom.
nb_elem();
337 for (
int elem=0; elem <nb_elem; elem ++ )
347 int nb_elem = le_dom.
nb_elem();
348 DoubleTab Rt(nb_elem);
350 for (elem=0; elem< nb_elem ; elem++)
352 if ( (K_Eps_Bas_Re(elem,1)*FluctuTemp_Bas_Re(elem,1) >= 1.e-6) && (K_Eps_Bas_Re(elem,0)*FluctuTemp_Bas_Re(elem,0) >= 1.e-6))
354 Rt(elem) = K_Eps_Bas_Re(elem,0)/sqrt(visco*diffu)*sqrt( (K_Eps_Bas_Re(elem,0)*FluctuTemp_Bas_Re(elem,0))/2/(K_Eps_Bas_Re(elem,1)*FluctuTemp_Bas_Re(elem,1)) );
356 Flambda[elem] = exp(-2.5/(1.+Rt(elem)/50.));
class Cond_lim Generic class used to represent any class
Dirichlet_entree_fluide This class represents a boundary condition imposing a quantity.
Dirichlet This class is the base class of the hierarchy of Dirichlet-type boundary conditions.
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.
int orientation(int) const override
inline DoubleVect& Domaine_VDF::porosite_face() {
double dist_face(int, int, int k) const
Returns the distance between two face centers in direction k (Cartesian only).
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.
DoubleVect & volumes_entrelaces()
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.
double xp(int num_elem, int k) const
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
Class defining operators and methods for all reading operation in an input flow (file,...
virtual const Milieu_base & milieu() const =0
int num_premiere_face() const
DoubleVect & porosite_face()
const Transport_Fluctuation_Temperature_W_Bas_Re & equation() const
DoubleTab & Calcul_D(DoubleTab &, const Domaine_dis_base &, const Domaine_Cl_dis_base &, const DoubleTab &, const DoubleTab &, double) const override
void associer(const Domaine_dis_base &, const Domaine_Cl_dis_base &) override
DoubleTab & Calcul_F4(DoubleTab &, const Domaine_dis_base &, const DoubleTab &, const DoubleTab &, double, double) const override
DoubleTab & Calcul_Flambda(DoubleTab &, const Domaine_dis_base &, const DoubleTab &, const DoubleTab &, double, double) const override
Entree & lire(const Motcle &, Entree &)
DoubleTab & Calcul_F2(DoubleTab &, const Domaine_dis_base &, const DoubleTab &, const DoubleTab &, double, double) const override
DoubleTab & Calcul_E(DoubleTab &, const Domaine_dis_base &, const Domaine_Cl_dis_base &, const DoubleTab &, const DoubleTab &, double, const DoubleTab &) const override
void mettre_a_jour(double) override
DoubleTab & Calcul_F1(DoubleTab &, const Domaine_dis_base &, const DoubleTab &, const DoubleTab &, double, double) const override
DoubleTab & Calcul_F3(DoubleTab &, const Domaine_dis_base &, const DoubleTab &, const DoubleTab &, double, double) const override
void associer_pb(const Probleme_base &) override
const Equation_base & equation() const
Returns the reference to the equation pointed to by MorEqn::mon_equation.
A character string (Nom) in uppercase.
Classe Neumann_homogene This class is the base class of the hierarchy of homogeneous Neumann-type bou...
Classe Neumann This class is the base class of the hierarchy of Neumann-type boundary conditions.
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.
static void exit(int exit_code=-1)
Exit routine for TRUST within a Kokkos region.
Base class for output streams.
Symetrie On symmetry faces, the following properties hold: