16#include <Calcul_Production_K_VDF.h>
17#include <Transport_K_Eps.h>
18#include <Convection_Diffusion_Temperature.h>
19#include <Convection_Diffusion_Concentration.h>
20#include <Modele_turbulence_scal_base.h>
21#include <Probleme_base.h>
23#include <Dirichlet_entree_fluide_leaves.h>
24#include <Entree_fluide_concentration_imposee.h>
25#include <Champ_Uniforme.h>
26#include <Domaine_VDF.h>
27#include <Champ_Face_VDF.h>
28#include <Domaine_Cl_VDF.h>
29#include <Fluide_Quasi_Compressible.h>
32#include <K_Omega_Eps_constants.h>
41 const DoubleTab& vitesse,
const Champ_Face_VDF& vit,
const DoubleTab& visco_turb )
const
44 const IntTab& elem_faces = domaine_VDF.
elem_faces();
45 const IntVect& orientation = domaine_VDF.
orientation();
66 Debog::verifier(
"Source_Transport_K_Eps_VDF_P0_VDF:: calculer_terme_production_K ",S);
67 for ( elem=0; elem<nb_elem; elem++)
71 S(elem) *= visco_turb(elem) ;
75 coef += (vitesse[elem_faces(elem,i)] - vitesse[elem_faces(elem,i+
Objet_U::dimension)]) /domaine_VDF.
dim_elem(elem,orientation(elem_faces(elem,i)));
80 S(elem) += -(2./3.)*visco_turb(elem)*coef * coef;
81 S(elem) += -(2./3.)*K_eps(elem,0) * coef ;
85 Debog::verifier(
"Source_Transport_K_Eps_VDF_P0_VDF:: calculer_terme_production_K ",S);
91 DoubleVect& S,
const DoubleTab& K_Omega,
93 const DoubleTab& visco_turb,
const bool deactivate_production_limiter,
const double cst_production_limiter)
const
95 const IntTab& elem_faces = domaine_VDF.
elem_faces();
96 const IntVect& orientation = domaine_VDF.
orientation();
104 Debog::verifier(
"Source_Transport_K_Omega_VDF_P0_VDF::calculer_terme_production_K",
107 int nb_elem = domaine_VDF.
nb_elem();
108 for (
int elem = 0; elem < nb_elem; elem++)
111 S(elem) *= visco_turb(elem);
115 coef += (vitesse[elem_faces(elem, i)] - vitesse[elem_faces(elem, i+
Objet_U::dimension)])
116 / domaine_VDF.
dim_elem(elem, orientation(elem_faces(elem, i)));
121 S(elem) += -(2./3.)*visco_turb(elem)*coef*coef;
122 S(elem) += -(2./3.)*K_Omega(elem, 0)*coef;
124 if (!deactivate_production_limiter)
125 S(elem)=std::min(S(elem),cst_production_limiter*BETA_K*K_Omega(elem,0)*K_Omega(elem,1));
128 Debog::verifier(
"Source_Transport_K_Omega_VDF_P0_VDF::calculer_terme_production_K_for_komega",
137 const DoubleTab& K_Eps,
138 const DoubleTab& visco_turb)
const
150 int nb_elem = domaine_VDF.
nb_elem();
152 const IntTab& face_voisins = domaine_VDF.
face_voisins();
153 const IntTab& Qdm = domaine_VDF.
Qdm();
154 const DoubleTab& tau_diag = vitesse.
tau_diag();
155 const DoubleTab& tau_croises = vitesse.
tau_croises();
156 double d_visco_turb,k_elem,P_arete;
161 DoubleTrav Rey_croises(nb_aretes);
165 for (num_elem=0; num_elem<nb_elem; num_elem++)
167 k_elem = K_Eps(num_elem,0);
169 Rey_diag(num_elem,i) = -2*visco_turb(num_elem)*tau_diag(num_elem,i)
175 int ndeb,nfin,n_arete;
178 int fac1,fac2,fac3,fac4;
180 for (n_arete=ndeb; n_arete<nfin; n_arete++)
182 fac3 = Qdm(n_arete,2);
184 d_visco_turb = 0.5*(visco_turb(face_voisins(fac3,0))
185 + visco_turb(face_voisins(fac3,1)));
186 Rey_croises(n_arete) = - d_visco_turb*(tau_croises(n_arete,0) + tau_croises(n_arete,1));
198 for (n_arete=ndeb; n_arete<nfin; n_arete++)
205 d_visco_turb = 0.25*(visco_turb(face_voisins(fac3,0)) + visco_turb(face_voisins(fac3,1))
206 + visco_turb(face_voisins(fac4,0)) + visco_turb(face_voisins(fac4,1)));
207 Rey_croises(n_arete) = - d_visco_turb*(tau_croises(n_arete,0) + tau_croises(n_arete,1));
212 for (num_elem=0; num_elem<nb_elem; num_elem++)
215 P(num_elem) -= Rey_diag(num_elem,i)*tau_diag(num_elem,i);
221 for (n_arete=ndeb; n_arete<nfin; n_arete++)
225 P_arete = - Rey_croises(n_arete)*(tau_croises(n_arete,0)+tau_croises(n_arete,1));
226 P[face_voisins(fac3,0)] += 0.25*P_arete;
227 P[face_voisins(fac3,1)] += 0.25*P_arete;
233 for (n_arete=ndeb; n_arete<nfin; n_arete++)
238 P_arete = - Rey_croises(n_arete)*(tau_croises(n_arete,0)+tau_croises(n_arete,1));
239 P[face_voisins(fac1,0)] += 0.25*P_arete;
240 P[face_voisins(fac1,1)] += 0.25*P_arete;
241 P[face_voisins(fac2,0)] += 0.25*P_arete;
242 P[face_voisins(fac2,1)] += 0.25*P_arete;
251 const DoubleTab& temper,
252 const DoubleTab& alpha_turb,
253 DoubleTab& u_teta)
const
260 int nb_faces= domaine_VDF.
nb_faces();
264 const IntTab& face_voisins = domaine_VDF.
face_voisins();
275 for (face=premiere_face_int; face<nb_faces; face++)
277 n0 = face_voisins(face,0);
278 n1 = face_voisins(face,1);
280 alpha = 0.5*(alpha_turb(n0)+alpha_turb(n1));
281 u_teta[face] = alpha*(temper[n1] - temper[n0])/dist;
285 for (face=premiere_face_int; face<nb_faces; face++)
287 n0 = face_voisins(face,0);
288 n1 = face_voisins(face,1);
290 alpha = 0.5*(alpha_turb(n0)+alpha_turb(n1));
291 u_teta[face] = alpha*(temper[n1] - temper[n0])/dist;
296 for (
int n_bord=0; n_bord<domaine_VDF.
nb_front_Cl(); n_bord++)
306 int nfin = ndeb + le_bord.
nb_faces();
307 for (face=ndeb; face<nfin; face++)
309 double T_imp = la_cl_diri.
val_imp(face-ndeb);
310 n0 = face_voisins(face,0);
311 n1 = face_voisins(face,1);
318 alpha = alpha_turb(n0);
319 u_teta[face] = alpha*(T_imp-temper[n0])/dist;
323 alpha = alpha_turb(n1);
324 u_teta[face] = alpha*(temper[n1]-T_imp)/dist;
334 const DoubleTab& conc,
335 const DoubleTab& alpha_turb,
336 DoubleTab& u_conc,
int nb_consti)
const
344 int nb_faces= domaine_VDF.
nb_faces();
348 const IntTab& face_voisins = domaine_VDF.
face_voisins();
360 for (face=premiere_face_int; face<nb_faces; face++)
362 n0 = face_voisins(face,0);
363 n1 = face_voisins(face,1);
365 alpha = 0.5*(alpha_turb(n0)+alpha_turb(n1));
366 for (k=0; k<nb_consti; k++)
367 u_conc(face,k) = alpha*(conc(n1,k) - conc(n0,k))/dist;
371 for (face=premiere_face_int; face<nb_faces; face++)
373 n0 = face_voisins(face,0);
374 n1 = face_voisins(face,1);
376 alpha = 0.5*(alpha_turb(n0)+alpha_turb(n1));
377 for (k=0; k<nb_consti; k++)
378 u_conc(face,k) = alpha*(conc(n1,k) - conc(n0,k))/dist;
383 for (
int n_bord=0; n_bord<domaine_VDF.
nb_front_Cl(); n_bord++)
393 int nfin = ndeb + le_bord.
nb_faces();
394 for (face=ndeb; face<nfin; face++)
396 n0 = face_voisins(face,0);
397 n1 = face_voisins(face,1);
404 alpha = alpha_turb(n0);
405 for (k=0; k<nb_consti; k++)
406 u_conc(face,k) = alpha*(la_cl_diri.
val_imp(face-ndeb,k)-conc(n0,k))/dist;
410 alpha = alpha_turb(n1);
411 for (k=0; k<nb_consti; k++)
412 u_conc(face,k) = alpha*(conc(n1,k)-la_cl_diri.
val_imp(face-ndeb,k))/dist;
423 DoubleVect& G,
const DoubleTab& temper,
424 const DoubleTab& alpha_turb,
425 double beta,
const DoubleVect& gravite)
const
434 int nb_elem = domaine_VDF.
nb_elem();
435 int nb_faces= domaine_VDF.
nb_faces();
436 DoubleTrav u_teta(nb_faces);
456 const Domaine& le_dom=domaine_VDF.
domaine();
459 IntTrav numfa(nb_faces_elem);
461 const IntTab& les_elem_faces = domaine_VDF.
elem_faces();
463 for (
int elem=0; elem<nb_elem; elem++)
465 for (
int i=0; i<nb_faces_elem; i++)
466 numfa[i] = les_elem_faces(elem,i);
468 coef(0) = 0.5*(u_teta(numfa[0])*porosite_face(numfa[0])
470 coef(1) = 0.5*(u_teta(numfa[1])*porosite_face(numfa[1])
474 G[elem] = beta*(gravite(0)*coef(0) + gravite(1)*coef(1));
478 coef(2) = 0.5*(u_teta(numfa[2])*porosite_face(numfa[2])
479 + u_teta(numfa[5])*porosite_face(numfa[5]));
480 G[elem] = beta*(gravite(0)*coef(0) + gravite(1)*coef(1) + gravite(2)*coef(2));
490 DoubleVect& G,
const DoubleTab& temper,
491 const DoubleTab& alpha_turb,
492 const DoubleTab& beta,
const DoubleVect& gravite)
const
501 int nb_elem = domaine_VDF.
nb_elem();
502 int nb_faces= domaine_VDF.
nb_faces();
503 DoubleTrav u_teta(nb_faces);
523 const Domaine& le_dom=domaine_VDF.
domaine();
525 IntTrav numfa(nb_faces_elem);
526 const IntTab& les_elem_faces = domaine_VDF.
elem_faces();
529 for (
int elem=0; elem<nb_elem; elem++)
531 for (
int i=0; i<nb_faces_elem; i++)
532 numfa[i] = les_elem_faces(elem,i);
534 coef(0) = 0.5*(u_teta(numfa[0])*porosite_face(numfa[0])
536 coef(1) = 0.5*(u_teta(numfa[1])*porosite_face(numfa[1])
540 G[elem] = beta(elem)*(gravite(0)*coef(0) + gravite(1)*coef(1));
544 coef(2) = 0.5*(u_teta(numfa[2])*porosite_face(numfa[2])
545 + u_teta(numfa[5])*porosite_face(numfa[5]));
546 G[elem] = beta(elem)*(gravite(0)*coef(0) + gravite(1)*coef(1) + gravite(2)*coef(2));
556 DoubleVect& G,
const DoubleTab& temper,
557 const DoubleTab& alpha_turb,
558 const DoubleVect& beta,
559 const DoubleVect& gravite,
572 int nb_elem = domaine_VDF.
nb_elem();
573 int nb_faces= domaine_VDF.
nb_faces();
574 DoubleTrav u_conc(nb_faces,nb_consti);
583 calculer_u_conc(domaine_VDF,zcl_VDF,temper,alpha_turb,u_conc,nb_consti);
594 const Domaine& le_dom=domaine_VDF.
domaine();
596 IntTrav numfa(nb_faces_elem);
597 const IntTab& les_elem_faces = domaine_VDF.
elem_faces();
601 for (
int elem=0; elem<nb_elem; elem++)
603 for (
int i=0; i<nb_faces_elem; i++)
604 numfa[i] = les_elem_faces(elem,i);
606 for (k=0; k<nb_consti; k++)
608 coef(0) = 0.5*(u_conc(numfa[0],k)*porosite_face(numfa[0])
610 coef(1) = 0.5*(u_conc(numfa[1],k)*porosite_face(numfa[1])
614 G[elem] += beta(k)*(gravite(0)*coef(0) + gravite(1)*coef(1));
617 coef(2) = 0.5*(u_conc(numfa[2],k)*porosite_face(numfa[2])
618 + u_conc(numfa[5],k)*porosite_face(numfa[5]));
619 G[elem] += beta(k)*(gravite(0)*coef(0) + gravite(1)*coef(1) + gravite(2)*coef(2));
629 const DoubleTab& vitesse,
const Champ_Face_VDF& vit,
const DoubleTab& visco_turb )
const
632 const IntTab& elem_faces = domaine_VDF.
elem_faces();
633 const IntVect& orientation = domaine_VDF.
orientation();
654 Debog::verifier(
"Source_Transport_K_Eps_VDF_P0_VDF:: calculer_terme_production_K_BiK ",S);
655 for ( elem=0; elem<nb_elem; elem++)
659 S(elem) *= visco_turb(elem) ;
663 coef += (vitesse[elem_faces(elem,i)] - vitesse[elem_faces(elem,i+
Objet_U::dimension)]) /domaine_VDF.
dim_elem(elem,orientation(elem_faces(elem,i)));
668 S(elem) += -(2./3.)*visco_turb(elem)*coef * coef;
669 S(elem) += -(2./3.)*K(elem) * coef ;
673 Debog::verifier(
"Source_Transport_K_Eps_VDF_P0_VDF:: calculer_terme_production_K_BiK ",S);
682 const DoubleTab& visco_turb)
const
694 int nb_elem = domaine_VDF.
nb_elem();
696 const IntTab& face_voisins = domaine_VDF.
face_voisins();
697 const IntTab& Qdm = domaine_VDF.
Qdm();
698 const DoubleTab& tau_diag = vitesse.
tau_diag();
699 const DoubleTab& tau_croises = vitesse.
tau_croises();
700 double d_visco_turb,k_elem,P_arete;
705 DoubleTrav Rey_croises(nb_aretes);
709 for (num_elem=0; num_elem<nb_elem; num_elem++)
711 k_elem = K(num_elem);
713 Rey_diag(num_elem,i) = -2*visco_turb(num_elem)*tau_diag(num_elem,i)
719 int ndeb,nfin,n_arete;
722 int fac1,fac2,fac3,fac4;
724 for (n_arete=ndeb; n_arete<nfin; n_arete++)
726 fac3 = Qdm(n_arete,2);
728 d_visco_turb = 0.5*(visco_turb(face_voisins(fac3,0))
729 + visco_turb(face_voisins(fac3,1)));
730 Rey_croises(n_arete) = - d_visco_turb*(tau_croises(n_arete,0) + tau_croises(n_arete,1));
742 for (n_arete=ndeb; n_arete<nfin; n_arete++)
749 d_visco_turb = 0.25*(visco_turb(face_voisins(fac3,0)) + visco_turb(face_voisins(fac3,1))
750 + visco_turb(face_voisins(fac4,0)) + visco_turb(face_voisins(fac4,1)));
751 Rey_croises(n_arete) = - d_visco_turb*(tau_croises(n_arete,0) + tau_croises(n_arete,1));
756 for (num_elem=0; num_elem<nb_elem; num_elem++)
759 P(num_elem) -= Rey_diag(num_elem,i)*tau_diag(num_elem,i);
765 for (n_arete=ndeb; n_arete<nfin; n_arete++)
769 P_arete = - Rey_croises(n_arete)*(tau_croises(n_arete,0)+tau_croises(n_arete,1));
770 P[face_voisins(fac3,0)] += 0.25*P_arete;
771 P[face_voisins(fac3,1)] += 0.25*P_arete;
777 for (n_arete=ndeb; n_arete<nfin; n_arete++)
782 P_arete = - Rey_croises(n_arete)*(tau_croises(n_arete,0)+tau_croises(n_arete,1));
783 P[face_voisins(fac1,0)] += 0.25*P_arete;
784 P[face_voisins(fac1,1)] += 0.25*P_arete;
785 P[face_voisins(fac2,0)] += 0.25*P_arete;
786 P[face_voisins(fac2,1)] += 0.25*P_arete;
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_BiK(const Domaine_VDF &, const Domaine_Cl_VDF &, DoubleVect &, const DoubleTab &, const DoubleTab &, const Champ_Face_VDF &, const DoubleTab &) const
DoubleVect & calculer_terme_production_K_BiK_Axi(const Domaine_VDF &, const Champ_Face_VDF &, DoubleVect &, const DoubleTab &, const DoubleTab &) const
DoubleVect & calculer_terme_production_K_for_komega(const Domaine_VDF &, const Domaine_Cl_VDF &, DoubleVect &, const DoubleTab &, const DoubleTab &, const Champ_Face_VDF &, const DoubleTab &, const bool deactivate_production_limiter, const double cst_production_limiter) const
DoubleTab & calculer_u_conc(const Domaine_VDF &, const Domaine_Cl_VDF &, const DoubleTab &, const DoubleTab &, DoubleTab &, int) const
DoubleVect & calculer_terme_destruction_K(const Domaine_VDF &, const Domaine_Cl_VDF &, DoubleVect &, const DoubleTab &, const DoubleTab &, const DoubleTab &, const DoubleVect &) const
DoubleVect & calculer_terme_production_K_Axi(const Domaine_VDF &, const Champ_Face_VDF &, DoubleVect &, const DoubleTab &, const DoubleTab &) const
class Champ_Face_VDF Cette classe sert a representer un champ vectoriel dont on ne calcule
DoubleVect & calcul_S_barre(const DoubleTab &, DoubleVect &, const Domaine_Cl_VDF &) const
DoubleVect & calcul_S_barre_sans_contrib_paroi(const DoubleTab &, DoubleVect &, const Domaine_Cl_VDF &) const
Methode qui renvoie SMA_barre aux elements a partir de la vitesse aux faces.
const DoubleTab & tau_croises() const
const DoubleTab & tau_diag() const
classe Cond_lim Classe generique servant a representer n'importe quelle classe
static void verifier(const char *const msg, double)
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.
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
double dim_elem(int, int) const
int orientation(int) const override
inline DoubleVect& Domaine_VDF::porosite_face() {
int premiere_arete_bord() const
int premiere_arete_interne() const
int nb_aretes_bord() const
double dist_norm_axi(int num_face) const
int Qdm(int num_arete, int) const
double dist_norm_bord(int num_face) const override
int nb_faces() const
renvoie le nombre global de faces.
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.
const Domaine & domaine() const
classe Entree_fluide_temperature_imposee Cas particulier de la classe Dirichlet_entree_fluide pour la...
virtual const Milieu_base & milieu() const =0
int num_premiere_face() const
DoubleVect & porosite_face()
const Equation_base & equation() const
Renvoie la reference sur l'equation pointe par MorEqn::mon_equation.
virtual void echange_espace_virtuel(IsExchangeBlocking exchange_type=IsExchangeBlocking::DefaultBlocking, const std::string kernel_name="noname")