16#include <Modele_turbulence_hyd_K_Eps_Bicephale.h>
17#include <Modifier_pour_fluide_dilatable.h>
18#include <Modele_turbulence_scal_base.h>
19#include <Schema_Temps_base.h>
20#include <Champ_Inc_P0_base.h>
21#include <Champ_Uniforme.h>
22#include <communications.h>
23#include <Perf_counters.h>
24#include <Probleme_base.h>
25#include <Fluide_base.h>
49 if (mot ==
"Modele_Fonc_Bas_Reynolds")
51 Cerr <<
"Lecture du modele bas reynolds associe " << finl;
54 Cerr <<
"mon_modele_fonc.que_suis_je() avant discretisation " << mon_modele_fonc_->que_suis_je() << finl;
55 mon_modele_fonc_->discretiser();
56 Cerr <<
"mon_modele_fonc.que_suis_je() " << mon_modele_fonc_->que_suis_je() << finl;
57 mon_modele_fonc_->lire_distance_paroi();
77 const DoubleTab& tab_K = chK.
valeurs(), &tab_Eps = chEps.valeurs();
79 DoubleTab& visco_turb = la_viscosite_turbulente_->valeurs();
91 Cerr <<
"Unsupported K field in Modele_turbulence_hyd_K_Eps_Bicephale::calculer_viscosite_turbulente" << finl;
98 Cerr <<
"Unsupported epsilon field in Modele_turbulence_hyd_K_Eps_Bicephale::calculer_viscosite_turbulente" << finl;
105 if (mon_modele_fonc_)
112 const DoubleTab& tab_visco = ch_visco_cin.
valeurs();
116 mon_modele_fonc_->Calcul_Fmu_BiK(Fmu, le_dom_dis, le_dom_Cl_dis, tab_K, tab_Eps, ch_visco);
118 int is_Cmu_constant = mon_modele_fonc_->Calcul_is_Cmu_constant();
119 if (is_Cmu_constant == 0)
121 Cerr <<
" On utilise un Cmu non constant " << finl;
122 const DoubleTab& vitesse = mon_equation_->inconnue().valeurs();
123 mon_modele_fonc_->Calcul_Cmu_BiK(Cmu, le_dom_dis, le_dom_Cl_dis, vitesse, tab_K, tab_Eps,
EPS_MIN_);
127 if (lp !=
"negligeable_VEF")
131 visco_tab = tab_visco(0, 0);
132 const int idt = mon_equation_->schema_temps().nb_pas_dt();
134 mon_modele_fonc_->Calcul_Cmu_Paroi_BiK(Cmu, le_dom_dis, le_dom_Cl_dis, visco_tab, visco_turb, tab_paroi, idt, vitesse, tab_K, tab_Eps,
EPS_MIN_);
138 Cerr <<
" On utilise un Cmu constant " << finl;
142 double non_prepare = 1;
143 Debog::verifier(
"Modele_turbulence_hyd_K_Eps_Bicephale::calculer_viscosite_turbulente la_viscosite_turbulente before", la_viscosite_turbulente_->valeurs());
144 Debog::verifier(
"Modele_turbulence_hyd_K_Eps_Bicephale::calculer_viscosite_turbulente tab_K", tab_K);
145 Debog::verifier(
"Modele_turbulence_hyd_K_Eps_Bicephale::calculer_viscosite_turbulente tab_Eps", tab_Eps);
146 if (visco_turb.
size() == n)
148 non_prepare =
mp_max(non_prepare);
150 if (non_prepare == 1)
153 visco_turb_au_format_K_eps.typer(type);
156 if (visco_turb_K_eps.
size() != n)
158 Cerr <<
"visco_turb_K_eps size is " << visco_turb_K_eps.
size() <<
" instead of " << n << finl;
167 la_viscosite_turbulente_->affecter(visco_turb_au_format_K_eps.valeur());
168 Debog::verifier(
"Modele_turbulence_hyd_K_Eps_Bicephale::calculer_viscosite_turbulente visco_turb_au_format_K_eps", visco_turb_au_format_K_eps.valeur());
173 la_viscosite_turbulente_->changer_temps(temps);
174 Debog::verifier(
"Modele_turbulence_hyd_K_Eps_Bicephale::calculer_viscosite_turbulente la_viscosite_turbulente after", la_viscosite_turbulente_->valeurs());
175 return la_viscosite_turbulente_;
180 for (
int i = 0; i < n; i++)
184 turbulent_viscosity[i] = 0.;
188 if (mon_modele_fonc_)
190 int is_Cmu_constant = mon_modele_fonc_->Calcul_is_Cmu_constant();
192 turbulent_viscosity[i] = Fmu(i) *
LeCmu_ * tab_K(i) * tab_K(i) / (tab_Eps(i) + D(i));
194 turbulent_viscosity[i] = Fmu(i) * Cmu(i) * tab_K(i) * tab_K(i) / (tab_Eps(i) + D(i));
197 turbulent_viscosity[i] =
LeCmu_ * tab_K(i) * tab_K(i) / (tab_Eps(i) + D(i));
219 Debog::verifier(
"Modele_turbulence_hyd_K_Eps_Bicephale::preparer_calcul la_viscosite_turbulente", la_viscosite_turbulente_->valeurs());
250 statistics().begin_count(STD_COUNTERS::turbulent_viscosity, statistics().get_last_opened_counter_level()+1);
251 Debog::verifier(
"Modele_turbulence_hyd_K_Eps_Bicephale::mettre_a_jour la_viscosite_turbulente before", la_viscosite_turbulente_->valeurs());
253 Debog::verifier(
"Modele_turbulence_hyd_K_Eps_Bicephale::mettre_a_jour la_viscosite_turbulente after", la_viscosite_turbulente_->valeurs());
254 statistics().end_count(STD_COUNTERS::turbulent_viscosity);
262 if (mon_modele_fonc_)
263 if (mon_modele_fonc_->has_champ(nom, ref_champ))
274 if (mon_modele_fonc_)
275 if (mon_modele_fonc_->has_champ(nom))
288 if (mon_modele_fonc_)
289 if (mon_modele_fonc_->has_champ(nom, ref_champ))
292 throw std::runtime_error(std::string(
"Field ") + nom.
getString() + std::string(
" not found !"));
298 if (mon_modele_fonc_)
299 mon_modele_fonc_->get_noms_champs_postraitables(nom, opt);
305 if (!(lp ==
"negligeable_VEF" || lp ==
"negligeable_VDF"))
307 Cerr <<
"The turbulence model of type " <<
que_suis_je() << finl;
308 Cerr <<
"must be used with a wall law of type negligeable for now." << finl;
310 if (!associe_modele_fonction())
312 Cerr <<
"The turbulence model of type " <<
que_suis_je() << finl;
313 Cerr <<
"must be used with a modele fonction for now." << finl;
class Champ_Don_base base class of Given Fields (not calculated)
DoubleTab & valeurs() override
Overrides Champ_base::valeurs() Returns the array of values.
class Champ_Fonc_base Base class of fields that are functions of a calculated quantity
: class Champ_Inc_P0_base
virtual DoubleTab & valeurs()=0
class Champ_base This class is the base of the fields hierarchy.
static void verifier(const char *const msg, double)
class Domaine_Cl_dis_base Domaine_Cl_dis_base objects represent discretized boundary conditions
virtual void mettre_a_jour(double temps)
Performs a time update of all boundary conditions.
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 RefObjU & get_modele(Type_modele type) const
virtual void mettre_a_jour(double temps)
The value of the unknown at the time step has been calculated.
virtual int preparer_calcul()
Everything that does not depend on other possible problems.
virtual Domaine_Cl_dis_base & domaine_Cl_dis()
Returns the discretized boundary condition domain associated with the equation.
Probleme_base & probleme()
Returns the problem associated with the equation.
Schema_Temps_base & schema_temps()
Returns the time scheme associated with the equation.
Domaine_dis_base & domaine_dis()
Returns the discretized domain associated with the equation.
Base class for an incompressible fluid and its properties:
static void typer_lire_Modele_Fonc_Bas_Reynolds(OWN_PTR(Modele_Fonc_Bas_Reynolds_Base)&, const Equation_base &, Entree &is)
Classe Modele_turbulence_hyd_K_Eps_Bicephale Cette classe represente le modele de turbulence (k,...
bool initTimeStep(double dt) override
int preparer_calcul() override
Prepares the computation.
virtual Champ_Fonc_base & calculer_viscosite_turbulente(double temps)
Calcule la viscosite turbulente au temps demande.
OWN_PTR(Modele_Fonc_Bas_Reynolds_Base) &associe_modele_fonction()
void mettre_a_jour(double) override
Effectue une mise a jour en temps du modele de turbulence.
void verifie_loi_paroi() override
bool has_champ(const Motcle &nom, OBS_PTR(Champ_base) &ref_champ) const override
void set_param(Param ¶m) const override
int lire_motcle_non_standard(const Motcle &, Entree &) override
Reads non-simple-type parameters of an Objet_U from an input stream.
void get_noms_champs_postraitables(Noms &nom, Option opt=NONE) const override
const Champ_base & get_champ(const Motcle &nom) const override
void fill_turbulent_viscosity_tab(const int, const DoubleTab &, const DoubleTab &, const DoubleTab &, const DoubleTab &, const DoubleTab &, DoubleTab &)
Classe Modele_turbulence_hyd_RANS_Bicephale_base Classe de base des modeles de type RANS en formulati...
void get_noms_champs_postraitables(Noms &nom, Option opt=NONE) const override
Champ_Inc_base & get_set_K()
Renvoie le champ inconnue K du modele de turbulence Cette inconnue est portee.
bool has_champ(const Motcle &nom, OBS_PTR(Champ_base) &ref_champ) const override
Transport_K_ou_Eps_base & get_set_eq_transp_K()
Renvoie l equation d evolution de K du modele de turbulence.
int lire_motcle_non_standard(const Motcle &, Entree &) override
Reads non-simple-type parameters of an Objet_U from an input stream.
void set_param(Param ¶m) const override
const Transport_K_ou_Eps_base & get_eq_transp_K() const
Renvoie l equation d evolution de K du modele de turbulence (version const).
int nombre_d_equations() const override
Transport_K_ou_Eps_base & get_set_eq_transp_Eps()
Renvoie l equation d evolution de epsilon du modele de turbulence.
Champ_Inc_base & get_set_Eps()
Renvoie le champ inconnue epsilon du modele de turbulence Cette inconnue est portee.
OBS_PTR(Equation_base) ma_seconde_equation_
const Transport_K_ou_Eps_base & get_eq_transp_Eps() const
Renvoie l equation d evolution de epsilon du modele de turbulence (version const).
DoubleTab & complete_viscosity_field(const int, const Domaine_dis_base &, Champ_Inc_base &)
std::enable_if_t<(M_TYPE==MODELE_TYPE::K_EPS||M_TYPE==MODELE_TYPE::K_EPS_REALISABLE||M_TYPE==MODELE_TYPE::K_OMEGA), void > calculate_limit_viscosity(Champ_Inc_base &, double)
virtual int preparer_calcul()
Prepares the computation.
const Turbulence_paroi_base & loi_paroi() const
Equation_base & equation()
Returns the equation associated with the turbulence model.
Base class for scalar turbulence models coupled to a Navier-Stokes convection-diffusion equation.
A character string (Nom) in uppercase.
class Nom: a character string for naming TRUST objects.
const std::string & getString() const
An array of character strings (VECT(Nom)).
const Nom & que_suis_je() const
Returns the string identifying the class.
virtual Entree & readOn(Entree &)
Reads an Objet_U from an input stream. Virtual method to override.
virtual const Nom & le_nom() const
Returns the name of the Objet_U. Virtual method to override: returns "neant" in this implementation.
virtual Sortie & printOn(Sortie &) const
Writes the object to an output stream. Virtual method to override.
Helper class to factorize the readOn method of Objet_U classes.
void ajouter(const char *keyword, const int *value, Param::Nature nat=Param::OPTIONAL)
Register an integer parameter.
void ajouter_non_std(const char *keyword, const Objet_U *value, Param::Nature nat=Param::OPTIONAL)
Register a keyword handled by Objet_U::lire_motcle_non_standard.
virtual const Equation_base & equation(int) const =0
static double mp_max(double)
static void exit(int exit_code=-1)
Exit routine for TRUST within a Kokkos region.
virtual int faire_un_pas_de_temps_eqn_base(Equation_base &)=0
Base class for output streams.
void resize(_SIZE_ n, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT)
_SIZE_ dimension_tot(int) const override
_SIZE_ dimension(int d) const
const Objet_U & valeur() const
const Modele_turbulence_hyd_2_eq_base & modele_turbulence() const
Renvoie le modele de turbulence associe a l'equation.
const Champ_Inc_base & inconnue() const override
Renvoie le champ inconnue de l'equation.
const DoubleTab & Cisaillement_paroi() const
Base class for the hierarchy of scalar wall-law models computing turbulent quantities near walls....
virtual int init_lois_paroi()=0