16#include <Modele_turbulence_hyd_LES_Wale_VEF.h>
17#include <Schema_Temps_base.h>
18#include <Equation_base.h>
19#include <Domaine_VEF.h>
20#include <Champ_P1NC.h>
40 param.
ajouter_condition(
"value_of_cw_ge_0",
"sous_maille_Wale model constant must be positive.");
46 double temps = mon_equation_->inconnue().temps();
47 DoubleTab& tab_visco_turb = la_viscosite_turbulente_->valeurs();
48 const int nb_elem = domaine_VEF.
nb_elem();
49 const DoubleTab& la_vitesse = mon_equation_->inconnue().valeurs();
52 if (tab_visco_turb.
size() != nb_elem)
54 Cerr <<
"Size error for the array containing the values of the turbulent viscosity." << finl;
57 Debog::verifier(
"Modele_turbulence_hyd_LES_Wale_VEF::calculer_viscosite_turbulente visco_turb 0", tab_visco_turb);
71 CDoubleArrView l =
l_.view_ro();
72 CDoubleTabView3 duidxj = tab_duidxj.
view_ro<3>();
73 DoubleArrView visco_turb =
static_cast<DoubleVect&
>(tab_visco_turb).view_rw();
75 Kokkos::parallel_for(start_gpu_timer(__KERNEL_NAME__),
77 KOKKOS_LAMBDA (
int elem)
83 for (
int i = 0; i < dim; i++)
84 for (
int j = 0; j < dim; j++)
87 for (
int k = 0; k < dim; k++)
88 gij2[i][j] += duidxj(elem,i,k) * duidxj(elem,k,j);
93 for (
int k = 0; k < dim; k++)
97 for (
int i = 0; i < dim; i++)
98 for (
int j = 0; j < dim; j++)
100 sd[i][j] = 0.5 * (gij2[i][j] + gij2[j][i]);
102 sd[i][j] -= gkk2 / 3.;
108 for (
int i = 0; i < dim; i++)
109 for (
int j = 0; j < dim; j++)
111 sd2 += sd[i][j] * sd[i][j];
113 double Sij = 0.5 * (duidxj(elem,i,j) + duidxj(elem,j,i));
120 double OP1 = sd2 * sqrt(sd2);
122 double OP2 = Sij2 * Sij2 * sqrt(Sij2) + sd2 * sqrt(sqrt(sd2));
125 visco_turb(elem) = cw * cw * l(elem) * l(elem) * OP1 / OP2;
127 visco_turb(elem) = 0;
129 end_gpu_timer(__KERNEL_NAME__);
131 Debog::verifier(
"Modele_turbulence_hyd_LES_Wale_VEF::calculer_viscosite_turbulente visco_turb 1", tab_visco_turb);
133 la_viscosite_turbulente_->changer_temps(temps);
134 return la_viscosite_turbulente_;
classe Champ_Fonc_base Classe de base des champs qui sont fonction d'une grandeur calculee
static DoubleTab & calcul_gradient(const DoubleTab &, DoubleTab &, const Domaine_Cl_VEF &)
static void verifier(const char *const msg, double)
Class defining operators and methods for all reading operation in an input flow (file,...
classe Modele_turbulence_hyd_LES_VEF_base Cette classe correspond a la mise en oeuvre des modeles sou...
classe Modele_turbulence_hyd_LES_Wale_VEF Cette classe correspond a la mise en oeuvre du modele sous
Modele_turbulence_hyd_LES_Wale_VEF()
void set_param(Param ¶m) const override
public_for_cuda Champ_Fonc_base & calculer_viscosite_turbulente() override
virtual void set_param(Param &) const
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_condition(const char *condition, const char *message, const char *name=0)
Declare a post-read logical condition that must hold on the parameter values.
void ajouter(const char *keyword, const int *value, Param::Nature nat=Param::OPTIONAL)
Register an integer parameter.
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 declare_support_masse_volumique(int ok)
Le constructeur d'une classe derivee qui se sert de la masse volumique doit appeler cette fonction av...
std::enable_if_t< is_default_exec_space< EXEC_SPACE >, ConstView< _TYPE_, _SHAPE_ > > view_ro() const