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.));
classe Cond_lim Classe generique servant a representer n'importe quelle classe
classe Dirichlet_entree_fluide Cette classe represente une condition aux limite imposant une grandeur
classe Dirichlet Cette classe est la classe de base de la hierarchie des conditions aux limites de ty...
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.
int orientation(int) const override
inline DoubleVect& Domaine_VDF::porosite_face() {
double dist_face(int, int, int k) const
double dist_norm_bord(int num_face) const override
int nb_faces() const
renvoie le nombre global de faces.
DoubleVect & volumes_entrelaces()
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
double xp(int num_elem, int k) const
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
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
Renvoie la reference sur l'equation pointe par MorEqn::mon_equation.
Une chaine de caractere (Nom) en majuscules.
Classe Neumann_homogene Cette classe est la classe de base de la hierarchie des conditions aux limite...
Classe Neumann Cette classe est la classe de base de la hierarchie des conditions aux limites de type...
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.
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
Classe de base des flux de sortie.
classe Symetrie Sur les faces de symetrie on a les proprietes suivantes: