16#include <Pb_Thermohydraulique_Turbulent_QC.h>
17#include <Modele_turbulence_scal_Prandtl.h>
18#include <Modifier_pour_fluide_dilatable.h>
19#include <Champ_Uniforme.h>
20#include <Domaine_VF.h>
22#include <ParserView.h>
57 Cerr <<
"La valeur par defaut du nombre de Prandtl turbulent est " <<
LePrdt_ << finl;
59 Cerr <<
"L'expression du nombre de Prandtl turbulent est " <<
LePrdt_fct_ << finl;
86 DoubleTab& lambda_t = conductivite_turbulente_->valeurs();
93 CDoubleArrView Cp =
static_cast<const DoubleVect&
>(tab_Cp).view_ro();
94 DoubleArrView lambda =
static_cast<DoubleVect&
>(lambda_t).view_rw();
95 Kokkos::parallel_for(start_gpu_timer(__KERNEL_NAME__), lambda_t.
size(),
99 lambda(i) *= Cp(uniforme ? 0 : i);
101 end_gpu_timer(__KERNEL_NAME__);
102 if (
equation().probleme().is_dilatable())
103 multiplier_par_rho_si_dilatable(lambda_t, mil);
106 lambda_t *= mon_equation_->domaine_dis().nb_elem() > 0 ? tab_rho(0, 0) * tab_Cp(0, 0) : 1.0;
122 const DoubleTab& tab_nu_t = la_viscosite_turbulente_->valeurs();
123 double temps = la_viscosite_turbulente_->temps();
126 int n = tab_alpha_t.
size();
127 if (tab_nu_t.
size() != n)
129 Cerr <<
"Les DoubleTab des champs diffusivite_turbulente et viscosite_turbulente" << finl;
130 Cerr <<
"doivent avoir le meme nombre de valeurs nodales" << finl;
140 const Milieu_base& milieu = mon_equation_->milieu();
146 Cerr <<
"Erreur dans Modele_turbulence_scal_prandt, l'option Prandt_turbulent_fonction_nu_t_alpha n'est disponible que pour des milieux ayant defini la diffusivite" << finl;
152 d_alpha = alpha.
valeurs()(0, 0);
156 CDoubleArrView alpha_vals;
157 if (!is_alpha_unif) alpha_vals =
static_cast<const ArrOfDouble&
>(alpha.
valeurs()).view_ro();
158 CDoubleArrView nu_t =
static_cast<const DoubleVect&
>(tab_nu_t).view_ro();
159 DoubleArrView alpha_t =
static_cast<DoubleVect&
>(tab_alpha_t).view_rw();
160 Kokkos::parallel_for(start_gpu_timer(__KERNEL_NAME__), Kokkos::RangePolicy<>(0, n), KOKKOS_LAMBDA(
const int i)
162 double alpha_val = is_alpha_unif ? d_alpha : alpha_vals(i);
163 int threadId = parser.
acquire();
164 parser.
setVar(0, alpha_val, threadId);
165 parser.
setVar(1, nu_t[i], threadId);
166 alpha_t[i] = parser.
eval(threadId);
169 end_gpu_timer(__KERNEL_NAME__);
178 CDoubleTabView xp = ref_cast(
Domaine_VF,mon_equation_->domaine_dis()).xp().view_ro();
179 CDoubleArrView nu_t =
static_cast<const DoubleVect&
>(tab_nu_t).view_ro();
180 DoubleArrView alpha_t =
static_cast<DoubleVect&
>(tab_alpha_t).view_rw();
181 Kokkos::parallel_for(start_gpu_timer(__KERNEL_NAME__), Kokkos::RangePolicy<>(0, n), KOKKOS_LAMBDA(
const int i)
185 double z = nb_dim == 3 ? xp(i, 2) : 0.;
186 int threadId = parser.
acquire();
187 parser.
setVar(0, x, threadId);
188 parser.
setVar(1, y, threadId);
189 parser.
setVar(2, z, threadId);
190 double NbPrandtlCell = parser.
eval(threadId);
192 alpha_t[i] = nu_t[i] / NbPrandtlCell;
194 end_gpu_timer(__KERNEL_NAME__);
198 double inv_LePrdt = 1./
LePrdt_;
201 CDoubleArrView nu_t =
static_cast<const DoubleVect&
>(tab_nu_t).view_ro();
202 DoubleArrView alpha_t =
static_cast<DoubleVect&
>(tab_alpha_t).view_rw();
203 Kokkos::parallel_for(start_gpu_timer(__KERNEL_NAME__),
204 Kokkos::RangePolicy<>(0, n), KOKKOS_LAMBDA(
207 alpha_t[i] = nu_t[i] * inv_LePrdt;
209 end_gpu_timer(__KERNEL_NAME__);
215 if (
equation().probleme().is_dilatable())
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
virtual DoubleTab & valeurs()=0
Class defining operators and methods for all reading operation in an input flow (file,...
Probleme_base & probleme()
Renvoie le probleme associe a l'equation.
classe Milieu_base Cette classe est la base de la hierarchie des milieux (physiques)
virtual const Champ_Don_base & capacite_calorifique() const
Renvoie la capacite calorifique du milieu.
virtual const Champ_Don_base & diffusivite() const
Renvoie la diffusivite du milieu.
virtual const Champ_base & masse_volumique() const
Renvoie la masse volumique du milieu.
bool has_diffusivite() const
Classe Modele_turbulence_scal_Prandtl Cette classe represente le modele de calcul suivant.
virtual public_for_cuda Champ_Fonc_base & calculer_diffusivite_turbulente()
Calcule la diffusivite turbulente.
void mettre_a_jour(double) override
Calcule la diffusivite turbulente et la loi de paroi.
void set_param(Param &) const override
Convection_Diffusion_std & equation()
virtual void set_param(Param &) const override
int loi_paroi_non_nulle() const
Renvoie si oui ou non loi de paroi (version const).
Classe Mod_Turb_scal_diffuturb_base Cette classe represente la classe de base pour le modele de calcu...
class Nom Une chaine de caractere pour nommer les objets de TRUST
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.
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.
KOKKOS_INLINE_FUNCTION int acquire() const
KOKKOS_INLINE_FUNCTION void setVar(int i, double val, int threadId) const
void parseString() override
KOKKOS_INLINE_FUNCTION void release(int threadId) const
KOKKOS_INLINE_FUNCTION double eval(int threadId) const
classe Pb_Thermohydraulique_Turbulent Cette classe represente un probleme de thermohydraulique en flu...
classe Probleme_base C'est un Probleme_U qui n'est pas un couplage.
virtual const Milieu_base & milieu() const
Renvoie le milieu physique associe au probleme.
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
Classe de base des flux de sortie.
virtual void echange_espace_virtuel(IsExchangeBlocking exchange_type=IsExchangeBlocking::DefaultBlocking, const std::string kernel_name="noname")