16#include <Modele_turbulence_scal_base.h>
17#include <Modele_turbulence_hyd_K_Eps.h>
18#include <Navier_Stokes_Turbulent.h>
19#include <Champ_Inc_P0_base.h>
20#include <Schema_Temps_base.h>
21#include <communications.h>
22#include <Champ_Uniforme.h>
23#include <Probleme_base.h>
24#include <Perf_counters.h>
25#include <Fluide_base.h>
58 if (mot ==
"Modele_Fonc_Bas_Reynolds")
60 Cerr <<
"Lecture du modele bas reynolds associe " << finl;
62 Cerr <<
"mon_modele_fonc.que_suis_je() avant discretisation " << mon_modele_fonc_.que_suis_je() << finl;
63 mon_modele_fonc_->discretiser();
64 Cerr <<
"mon_modele_fonc.que_suis_je() " << mon_modele_fonc_->que_suis_je() << finl;
65 mon_modele_fonc_->lire_distance_paroi();
83 const DoubleTab& tab_K_Eps = chK_Eps.
valeurs();
84 DoubleTab& visco_turb = la_viscosite_turbulente_->valeurs();
96 Cerr <<
"Unsupported K_Eps field in Modele_turbulence_hyd_K_Eps::calculer_viscosite_turbulente" << finl;
102 if (mon_modele_fonc_)
110 const DoubleTab& tab_visco = ch_visco_cin.
valeurs();
114 mon_modele_fonc_->Calcul_Fmu(Fmu, le_dom_dis, le_dom_Cl_dis, tab_K_Eps, ch_visco);
115 int is_Cmu_constant = mon_modele_fonc_->Calcul_is_Cmu_constant();
116 if (is_Cmu_constant == 0)
118 const DoubleTab& vitesse = mon_equation_->inconnue().valeurs();
119 mon_modele_fonc_->Calcul_Cmu(Cmu, le_dom_dis, le_dom_Cl_dis, vitesse, tab_K_Eps,
EPS_MIN_);
123 if (lp !=
"negligeable_VEF")
127 visco_tab = tab_visco(0, 0);
128 const int idt = mon_equation_->schema_temps().nb_pas_dt();
130 mon_modele_fonc_->Calcul_Cmu_Paroi(Cmu, le_dom_dis, le_dom_Cl_dis, visco_tab, visco_turb, tab_paroi, idt, vitesse, tab_K_Eps,
EPS_MIN_);
136 double non_prepare = 1;
137 Debog::verifier(
"Modele_turbulence_hyd_K_Eps::calculer_viscosite_turbulente la_viscosite_turbulente before", la_viscosite_turbulente_->valeurs());
138 Debog::verifier(
"Modele_turbulence_hyd_K_Eps::calculer_viscosite_turbulente tab_K_Eps", tab_K_Eps);
139 if (visco_turb.
size() == n)
141 non_prepare =
mp_max(non_prepare);
143 if (non_prepare == 1)
145 if (!visco_turb_au_format_K_eps_)
148 visco_turb_au_format_K_eps_.typer(type);
151 DoubleTab& visco_turb_K_eps = visco_turb_au_format_K_eps_->valeurs();
152 if (visco_turb_K_eps.
size() != n)
154 Cerr <<
"visco_turb_K_eps size is " << visco_turb_K_eps.
size() <<
" instead of " << n << finl;
163 la_viscosite_turbulente_->affecter(visco_turb_au_format_K_eps_.valeur());
164 Debog::verifier(
"Modele_turbulence_hyd_K_Eps::calculer_viscosite_turbulente visco_turb_au_format_K_eps", visco_turb_au_format_K_eps_.valeur());
169 la_viscosite_turbulente_->changer_temps(temps);
170 Debog::verifier(
"Modele_turbulence_hyd_K_Eps::calculer_viscosite_turbulente la_viscosite_turbulente after", la_viscosite_turbulente_->valeurs());
171 return la_viscosite_turbulente_;
177 const double le_cmu =
LeCmu_;
178 const bool has_low_re_model = bool(mon_modele_fonc_);
179 const int is_cmu_constant = has_low_re_model ? mon_modele_fonc_->Calcul_is_Cmu_constant() : 0;
181 CDoubleTabView K_Eps = tab_K_Eps.
view_ro();
182 CDoubleArrView Cmu =
static_cast<const ArrOfDouble&
>(tab_Cmu).view_ro();
183 CDoubleArrView Fmu =
static_cast<const ArrOfDouble&
>(tab_Fmu).view_ro();
184 CDoubleArrView D =
static_cast<const ArrOfDouble&
>(tab_D).view_ro();
185 DoubleArrView turbulent_viscosity =
static_cast<ArrOfDouble&
>(tab_turbulent_viscosity).view_wo();
186 Kokkos::parallel_for(start_gpu_timer(__KERNEL_NAME__), n, KOKKOS_LAMBDA(
const int i)
188 double eps = K_Eps(i, 1);
189 double k = K_Eps(i, 0);
190 double value = eps <= EPS_MIN ? 0 : k * k / (eps + D(i));
191 turbulent_viscosity[i] = has_low_re_model ? (Fmu(i) * (is_cmu_constant ? le_cmu : Cmu(i)) * value) : le_cmu * value;
193 end_gpu_timer(__KERNEL_NAME__);
212 Debog::verifier(
"Modele_turbulence_hyd_K_Eps::preparer_calcul la_viscosite_turbulente", la_viscosite_turbulente_->valeurs());
235 statistics().end_count(STD_COUNTERS::update_variables);
237 statistics().begin_count(STD_COUNTERS::update_variables, statistics().get_last_opened_counter_level()+1);
241 statistics().begin_count(STD_COUNTERS::turbulent_viscosity, statistics().get_last_opened_counter_level()+1);
242 Debog::verifier(
"Modele_turbulence_hyd_K_Eps::mettre_a_jour la_viscosite_turbulente before", la_viscosite_turbulente_->valeurs());
244 Debog::verifier(
"Modele_turbulence_hyd_K_Eps::mettre_a_jour la_viscosite_turbulente after", la_viscosite_turbulente_->valeurs());
245 statistics().end_count(STD_COUNTERS::turbulent_viscosity);
253 if (mon_modele_fonc_)
254 if (mon_modele_fonc_->has_champ(nom, ref_champ))
265 if (mon_modele_fonc_)
266 if (mon_modele_fonc_->has_champ(nom))
279 if (mon_modele_fonc_)
280 if (mon_modele_fonc_->has_champ(nom, ref_champ))
283 throw std::runtime_error(std::string(
"Field ") + nom.
getString() + std::string(
" not found !"));
289 if (mon_modele_fonc_)
290 mon_modele_fonc_->get_noms_champs_postraitables(nom, opt);
296 if (lp ==
"negligeable_VEF" || lp ==
"negligeable_VDF")
297 if (!associe_modele_fonction())
299 Cerr <<
"The turbulence model of type " <<
que_suis_je() << finl;
300 Cerr <<
"must not be used with a wall law of type negligeable or with a modele_function." << finl;
301 Cerr <<
"Another wall law must be selected with this kind of turbulence model." << finl;
classe Champ_Don_base classe de base des Champs donnes (non calcules)
DoubleTab & valeurs() override
Surcharge Champ_base::valeurs() Renvoie le tableau des valeurs.
classe Champ_Fonc_base Classe de base des champs qui sont fonction d'une grandeur calculee
: class Champ_Inc_P0_base
virtual DoubleTab & valeurs()=0
classe Champ_base Cette classe est la base de la hierarchie des champs.
static void verifier(const char *const msg, double)
classe Domaine_Cl_dis_base Les objets Domaine_Cl_dis_base representent les conditions aux limites
virtual void mettre_a_jour(double temps)
Effectue une mise a jour en temps de toutes les conditions aux limites.
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 RefObjU & get_modele(Type_modele type) const
virtual void mettre_a_jour(double temps)
La valeur de l'inconnue sur le pas de temps a ete calculee.
virtual int preparer_calcul()
Tout ce qui ne depend pas des autres problemes eventuels.
virtual Domaine_Cl_dis_base & domaine_Cl_dis()
Renvoie le domaine des conditions aux limite discretisee associee a l'equation.
Probleme_base & probleme()
Renvoie le probleme associe a l'equation.
Schema_Temps_base & schema_temps()
Renvoie le schema en temps associe a l'equation.
virtual bool initTimeStep(double dt)
Allocation et initialisation de l'inconnue et des CLs jusqu'a present+dt.
Domaine_dis_base & domaine_dis()
Renvoie le domaine discretise associe a l'equation.
classe Fluide_base Cette classe represente un d'un fluide incompressible ainsi que
static void typer_lire_Modele_Fonc_Bas_Reynolds(OWN_PTR(Modele_Fonc_Bas_Reynolds_Base)&, const Equation_base &, Entree &is)
Champ_Inc_base & get_set_unknown()
virtual int nombre_d_equations() const
Classe Modele_turbulence_hyd_K_Eps Cette classe represente le modele de turbulence (k,...
bool has_champ(const Motcle &nom, OBS_PTR(Champ_base) &ref_champ) const override
void mettre_a_jour(double) override
Effectue une mise a jour en temps du modele de turbulence.
bool initTimeStep(double dt) override
void fill_turbulent_viscosity_tab(const int, const DoubleTab &, const DoubleTab &, const DoubleTab &, const DoubleTab &, DoubleTab &)
OWN_PTR(Champ_Inc_base) visco_turb_au_format_K_eps_
int lire_motcle_non_standard(const Motcle &, Entree &) override
Lecture des parametres de type non simple d'un objet_U a partir d'un flot d'entree.
const Champ_base & get_champ(const Motcle &nom) const override
void set_param(Param ¶m) const override
virtual Champ_Fonc_base & calculer_viscosite_turbulente(double temps)
Calcule la viscosite turbulente au temps demande.
void verifie_loi_paroi() override
void controler() override
void get_noms_champs_postraitables(Noms &nom, Option opt=NONE) const override
int preparer_calcul() override
Prepare le calcul.
const Transport_K_Eps & get_eq_transport() const override
Transport_K_Eps & get_set_eq_transport() override
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)
Classe Modele_turbulence_hyd_RANS_K_Eps_base Classe de base des modeles de type RANS_keps.
void set_param(Param ¶m) const override
bool has_champ(const Motcle &nom, OBS_PTR(Champ_base) &ref_champ) const override
void get_noms_champs_postraitables(Noms &nom, Option opt=NONE) const override
OBS_PTR(Equation_base) mon_equation_
virtual int preparer_calcul()
Prepare le calcul.
const Turbulence_paroi_base & loi_paroi() const
Equation_base & equation()
Renvoie l'equation associee au modele de turbulence.
Classe Modele_turbulence_scal_base Cette classe represente un modele de turbulence pour une equation ...
Une chaine de caractere (Nom) en majuscules.
class Nom Une chaine de caractere pour nommer les objets de TRUST
const std::string & getString() const
Un tableau de chaine de caracteres (VECT(Nom)).
virtual int lire_motcle_non_standard(const Motcle &motlu, Entree &is)
Lecture des parametres de type non simple d'un objet_U a partir d'un flot d'entree.
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 const Nom & le_nom() const
Donne le nom de l'Objet_U Methode a surcharger : renvoie "neant" dans cette implementation.
virtual Sortie & printOn(Sortie &) const
Ecriture de l'objet sur un flot de sortie Methode a surcharger.
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)
Routine de sortie de TRUST dans une region Kokkos.
virtual int faire_un_pas_de_temps_eqn_base(Equation_base &)=0
Classe de base des flux de sortie.
void resize(_SIZE_ n, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT)
_SIZE_ dimension_tot(int) const override
std::enable_if_t< is_default_exec_space< EXEC_SPACE >, ConstView< _TYPE_, _SHAPE_ > > view_ro() const
_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.
int controler_K_Eps()
Controle le champ inconnue K-epsilon en forcant a zero les valeurs du champ.
classe Transport_K_Eps Cette classe represente l'equation de transport de l'energie cinetique
const DoubleTab & Cisaillement_paroi() const
Classe Turbulence_paroi_scal_base Classe de base pour la hierarchie des classes representant les mode...
virtual int init_lois_paroi()=0