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 <<
"The default value of the turbulent Prandtl number is " <<
LePrdt_ << finl;
59 Cerr <<
"The expression for the turbulent Prandtl number is " <<
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;
121 const DoubleTab& tab_nu_t = la_viscosite_turbulente_->valeurs();
122 double temps = la_viscosite_turbulente_->temps();
125 int n = tab_alpha_t.
size();
126 if (tab_nu_t.
size() != n)
128 Cerr <<
"The DoubleTab arrays of diffusivite_turbulente and viscosite_turbulente fields" << finl;
129 Cerr <<
"must have the same number of nodal values" << finl;
139 const Milieu_base& milieu = mon_equation_->milieu();
145 Cerr <<
"Error in Modele_turbulence_scal_prandtl, the Prandt_turbulent_fonction_nu_t_alpha option is only available for media with a defined diffusivity" << finl;
151 d_alpha = alpha.
valeurs()(0, 0);
155 CDoubleArrView alpha_vals;
156 if (!is_alpha_unif) alpha_vals =
static_cast<const ArrOfDouble&
>(alpha.
valeurs()).view_ro();
157 CDoubleArrView nu_t =
static_cast<const DoubleVect&
>(tab_nu_t).view_ro();
158 DoubleArrView alpha_t =
static_cast<DoubleVect&
>(tab_alpha_t).view_rw();
159 Kokkos::parallel_for(start_gpu_timer(__KERNEL_NAME__), Kokkos::RangePolicy<>(0, n), KOKKOS_LAMBDA(
const int i)
161 double alpha_val = is_alpha_unif ? d_alpha : alpha_vals(i);
162 int threadId = parser.
acquire();
163 parser.
setVar(0, alpha_val, threadId);
164 parser.
setVar(1, nu_t[i], threadId);
165 alpha_t[i] = parser.
eval(threadId);
168 end_gpu_timer(__KERNEL_NAME__);
177 CDoubleTabView xp = ref_cast(
Domaine_VF,mon_equation_->domaine_dis()).xp().view_ro();
178 CDoubleArrView nu_t =
static_cast<const DoubleVect&
>(tab_nu_t).view_ro();
179 DoubleArrView alpha_t =
static_cast<DoubleVect&
>(tab_alpha_t).view_rw();
180 Kokkos::parallel_for(start_gpu_timer(__KERNEL_NAME__), Kokkos::RangePolicy<>(0, n), KOKKOS_LAMBDA(
const int i)
184 double z = nb_dim == 3 ? xp(i, 2) : 0.;
185 int threadId = parser.
acquire();
186 parser.
setVar(0, x, threadId);
187 parser.
setVar(1, y, threadId);
188 parser.
setVar(2, z, threadId);
189 double NbPrandtlCell = parser.
eval(threadId);
191 alpha_t[i] = nu_t[i] / NbPrandtlCell;
193 end_gpu_timer(__KERNEL_NAME__);
197 double inv_LePrdt = 1./
LePrdt_;
200 CDoubleArrView nu_t =
static_cast<const DoubleVect&
>(tab_nu_t).view_ro();
201 DoubleArrView alpha_t =
static_cast<DoubleVect&
>(tab_alpha_t).view_rw();
202 Kokkos::parallel_for(start_gpu_timer(__KERNEL_NAME__),
203 Kokkos::RangePolicy<>(0, n), KOKKOS_LAMBDA(
206 alpha_t[i] = nu_t[i] * inv_LePrdt;
208 end_gpu_timer(__KERNEL_NAME__);
214 if (
equation().probleme().is_dilatable())
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
virtual DoubleTab & valeurs()=0
Class defining operators and methods for all reading operation in an input flow (file,...
Probleme_base & probleme()
Returns the problem associated with the equation.
Milieu_base This class is the base of the (physical) medium hierarchy.
virtual const Champ_Don_base & capacite_calorifique() const
Returns the heat capacity of the medium (const version).
virtual const Champ_Don_base & diffusivite() const
Returns the diffusivity of the medium (const version).
virtual const Champ_base & masse_volumique() const
Returns the mass density of the medium (const version).
bool has_diffusivite() const
Scalar turbulence model using the turbulent Prandtl number to compute turbulent diffusivity:
virtual public_for_cuda Champ_Fonc_base & calculer_diffusivite_turbulente()
Computes the turbulent diffusivity.
void mettre_a_jour(double) override
Computes the turbulent diffusivity and applies the wall law.
void set_param(Param &) const override
Convection_Diffusion_std & equation()
virtual void set_param(Param &) const override
int loi_paroi_non_nulle() const
Returns whether a wall law is set (const version).
Base class for scalar turbulence models that compute turbulent diffusivity as:
class Nom: a character string for naming TRUST objects.
virtual Entree & readOn(Entree &)
Reads an Objet_U from an input stream. Virtual method to override.
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.
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
Turbulent thermohydraulics problem for a quasi-compressible fluid.
class Probleme_base It is a Probleme_U that is not a coupling.
virtual const Milieu_base & milieu() const
Returns the physical medium associated with the problem (const version).
static void exit(int exit_code=-1)
Exit routine for TRUST within a Kokkos region.
Base class for output streams.
virtual void echange_espace_virtuel(IsExchangeBlocking exchange_type=IsExchangeBlocking::DefaultBlocking, const std::string kernel_name="noname")