16#include <Source_Dissipation_energie_cin_turb.h>
18#include <Dissipation_type_helpers.h>
19#include <Viscosite_turbulente_base.h>
20#include <Pb_Multiphase.h>
47 param.ajouter(
"beta_k", &
beta_k_);
48 param.lire_avec_accolades_depuis(is);
63 const int ne = domaine.nb_elem(), ne_tot = domaine.nb_elem_tot(), Nk = k.
line_size();
65 const std::string Type_diss = find_dissipation_type(
equation().probleme());
71 {
"alpha",
"tau",
"omega",
"temperature"},
true);
75 const tabs_t& semi_impl)
const
80 const DoubleTab& alpha_rho_k = ch_alpha_rho_k.
passe();
81 const tabs_t& der_alpha_rho_k = ref_cast(
Champ_Inc_base, ch_alpha_rho_k).derivees();
89 const std::string Type_diss = find_dissipation_type(
equation().probleme());
93 Matrice_Morse *Ma = matrices.count(
"alpha") ? matrices.at(
"alpha") :
nullptr;
94 Matrice_Morse *Mk = matrices.count(
"k") ? matrices.at(
"k") :
nullptr;
95 Matrice_Morse *Mdiss = matrices.count(Type_diss) ? matrices.at(Type_diss) :
nullptr;
96 Matrice_Morse *Mp = matrices.count(
"pression") ? matrices.at(
"pression") :
nullptr;
97 Matrice_Morse *Mt = matrices.count(
"temperature") ? matrices.at(
"temperature") :
nullptr;
104 const int nb_elem = domaine.nb_elem();
107 auto get_deriv = [&](
const std::string& var,
int e,
int n) ->
double
109 return der_alpha_rho_k.count(var) ? der_alpha_rho_k.at(var)(e, n) : 0.;
112 for (
int e = 0; e < nb_elem; e++)
113 for (
int mk = 0, mp = 0; mk < Nk; mk++, mp += (Np > 1))
115 const double peve = pe(e) * ve(e);
117 if (Type_diss ==
"tau")
119 const double lim = visc_turb.
limiteur() * nu(!cnu * e, mk);
120 const bool limited = !(k(e, mk) * diss(e, mk) > lim);
121 const double inv_tau = limited ? k(e, mk) / lim : 1. / diss(e, mk);
123 secmem(e, mk) -= peve *
beta_k_ * alpha_rho_k(e, mk) * inv_tau;
126 (*Ma)(Nk * e + mk, Na * e + mk) += peve *
beta_k_ * get_deriv(
"alpha", e, mk) * inv_tau;
129 (*Mt)(Nk * e + mk, Nt * e + mk) += peve *
beta_k_ * get_deriv(
"temperature", e, mk) * inv_tau;
132 (*Mp)(Nk * e + mk, Np * e + mp) += peve *
beta_k_ * get_deriv(
"pression", e, mp) * inv_tau;
137 (*Mk)(Nk * e + mk, Nk * e + mk) += peve * 2 *
beta_k_ * alpha_rho_k(e, mk) / lim;
139 (*Mk)(Nk * e + mk, Nk * e + mk) += peve *
beta_k_ * get_deriv(
"k", e, mk) * inv_tau;
145 (*Mdiss)(Nk * e + mk, Nk * e + mk) -= peve *
beta_k_ * alpha_rho_k(e, mk) / (diss(e, mk) * diss(e, mk));
149 else if (Type_diss ==
"omega")
152 secmem(e, mk) -= peve *
beta_k_ * k(e, mk) * diss(e, mk);
156 (*Mk)(Nk * e + mk, Nk * e + mk) += peve *
beta_k_ * diss(e, mk);
DoubleTab & passe(int i=1) override
Renvoie les valeurs du champs a l'instant t-i.
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
Champ_Inc_base & champ_conserve() const
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.
class Nom Une chaine de caractere pour nommer les objets de TRUST
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.
classe Operateur_Diff_base Cette classe est la base de la hierarchie des operateurs representant
virtual Operateur_base & l_op_base()=0
classe Pb_Multiphase Cette classe represente un probleme de thermohydraulique multiphase de type "3*N...
const Champ_base & get_champ(const Motcle &nom) const override
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
Classe de base des flux de sortie.
class Source_Dissipation_energie_cin_turb
void ajouter_blocs(matrices_t matrices, DoubleTab &secmem, const tabs_t &semi_impl={}) const override
void dimensionner_blocs(matrices_t matrices, const tabs_t &semi_impl={}) const override
void completer() override
Met a jour les references internes a l'objet Source_base.
const Champ_base & get_champ(const Motcle &nom) const override
static void dimensionner_blocs_diagonal(matrices_t matrices, const Probleme_base &pb, int ne, int ne_tot, int Nk, const std::set< std::string > &diagonal_fields, bool handle_pression)
Allocates diagonal stencils in the given matrices for field names listed in diagonal_fields (and opti...
_SIZE_ dimension(int d) const
classe Viscosite_turbulente_base correlations de viscosite turbulente decrivant le tenseur de Reynold...