16#include <Production_energie_cin_turb_PolyMAC_MPFA.h>
18#include <Op_Diff_Turbulent_PolyMAC_MPFA_Face.h>
19#include <Dissipation_type_helpers.h>
20#include <Viscosite_turbulente_base.h>
21#include <Domaine_PolyMAC_MPFA.h>
22#include <Navier_Stokes_std.h>
23#include <Pb_Multiphase.h>
37 const DoubleVect& ve = domaine.volumes();
39 const std::string Type_diss = find_dissipation_type(
equation().probleme());
42 const int nb_elem = domaine.nb_elem();
44 const int nf_tot = domaine.nb_faces_tot();
49 double limiter_ = visc_turb.
limiteur();
56 const DoubleTab& tab_grad = pb.
get_champ(
"gradient_vitesse").
passe();
63 DoubleTrav nut(0, Nph);
67 for (
int e = 0 ; e < nb_elem ; e++)
68 for (n = 0; n < N ; n++)
70 double secmem_en = 0.;
71 for (
int d_U = 0; d_U < D; d_U++)
72 for (
int d_X = 0; d_X < D; d_X++)
73 secmem_en += ( tab_grad(nf_tot + d_U + e * D , D * n + d_X) + tab_grad(nf_tot + d_X + e * D , D * n + d_U) ) * tab_grad(nf_tot + d_X + e * D , D * n + d_U) ;
74 secmem_en *= pe(e) * ve(e) * (palp ? (*palp)(e, n) : 1.0) * tab_rho(e, n) * nut(e, n) ;
76 secmem(e, n) += std::max(secmem_en, 0.);
81 for (
int e = 0 ; e < nb_elem ; e++)
82 for (n = 0; n < N ; n++)
84 double grad_grad = 0.;
85 for (
int d_U = 0; d_U < D; d_U++)
86 for (
int d_X = 0; d_X < D; d_X++)
87 grad_grad += ( tab_grad(nf_tot + d_U + e * D , D * n + d_X) + tab_grad(nf_tot + d_X + e * D , D * n + d_U) ) * tab_grad(nf_tot + d_X + e * D , D * n + d_U) ;
89 const double fac = std::max(grad_grad, 0.) * pe(e) * ve(e) ;
92 if (Type_diss ==
"tau")
93 nut_l = k(e, n) * (*diss)(e, n) + limiter_ * nu(!cnu * e, n);
94 else if (Type_diss ==
"omega")
95 nut_l = k(e, n) / std::max((*pdiss)(e, n),
omega_min_) + limiter_ * nu(!cnu * e, n);
99 const double alp_en = (alp ? (*alp)(e, n) : 1.0);
100 secmem(e, n) += fac * nut_l;
103 for (
auto &&i_m : matrices)
106 if (i_m.first ==
"alpha")
107 mat(N * e + n, Na * e + n) -= fac * nut_l;
110 if (Type_diss ==
"tau")
111 for (
auto &&i_m : matrices)
114 if (i_m.first ==
"k")
115 mat(N * e + n, N * e + n) -= fac * alp_en *(*diss)(e,n);
116 if (i_m.first ==
"tau")
117 mat(N * e + n, N * e + n) -= fac * alp_en * k(e,n);
119 else if (Type_diss ==
"omega")
120 for (
auto &&i_m : matrices)
123 if (i_m.first ==
"k")
124 mat(N * e + n, N * e + n) -= fac * alp_en / std::max((*pdiss)(e, n),
omega_min_);
DoubleTab & valeurs() override
Renvoie le tableau des valeurs du champ au temps courant.
virtual DoubleTab & valeurs()=0
virtual DoubleTab & passe(int i=1)
Class defining operators and methods for all reading operation in an input flow (file,...
virtual const Milieu_base & milieu() const =0
virtual const Champ_Inc_base & inconnue() const =0
Probleme_base & probleme()
Renvoie le probleme associe a l'equation.
Classe Matrice_Morse Represente une matrice M (creuse), non necessairement carree.
DoubleVect & porosite_elem()
const Equation_base & equation() const
Renvoie la reference sur l'equation pointe par MorEqn::mon_equation.
classe Navier_Stokes_std Cette classe porte les termes de l'equation de la dynamique
const Operateur & operateur(int) const override
Renvoie le i-eme operateur de l'equation: - le terme_diffusif si i = 0.
Champ_Inc_base & pression()
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.
: class Op_Diff_Turbulent_PolyMAC_MPFA_Face
virtual Operateur_base & l_op_base()=0
classe Pb_Multiphase Cette classe represente un probleme de thermohydraulique multiphase de type "3*N...
classe Probleme_base C'est un Probleme_U qui n'est pas un couplage.
bool has_champ(const Motcle &nom, OBS_PTR(Champ_base) &ref_champ) const override
const Champ_base & get_champ(const Motcle &nom) const override
virtual const Equation_base & equation(int) const =0
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
Classe Production_energie_cin_turb_PolyMAC_MPFA Cette classe implemente dans PolyMAC_MPFA un operateu...
void ajouter_blocs(matrices_t matrices, DoubleTab &secmem, const tabs_t &semi_impl={}) const override
Classe de base des flux de sortie.
Classe Source_Production_energie_cin_turb Classe de base pour les operateur de production d'énergie c...
_SIZE_ dimension(int d) const
virtual const MD_Vector & get_md_vector() const
classe Viscosite_turbulente_base correlations de viscosite turbulente decrivant le tenseur de Reynold...
virtual void eddy_viscosity(DoubleTab &nu_t) const =0