16#include <Modele_turbulence_hyd_combinaison.h>
17#include <Modifier_pour_fluide_dilatable.h>
18#include <Champ_Inc_P0_base.h>
19#include <Champ_Inc_P1_base.h>
20#include <Champ_Inc_Q1_base.h>
21#include <Equation_base.h>
22#include <Probleme_base.h>
23#include <Perf_counters.h>
24#include <Domaine_VEF.h>
25#include <Champ_P1NC.h>
26#include <Champ_Q1NC.h>
27#include <Domaine_EF.h>
28#include <Domaine_VF.h>
68 fxyz_.dimensionner(1);
75 for (
int i = 0; i <
nb_var_; i++)
78 fxyz_[0].parseString();
90 statistics().begin_count(STD_COUNTERS::turbulent_viscosity, statistics().get_last_opened_counter_level()+1);
95 if (
equation().probleme().is_dilatable())
96 correction_nut_et_cisaillement_paroi_si_qc(*
this);
98 la_viscosite_turbulente_->valeurs().echange_espace_virtuel();
99 statistics().end_count(STD_COUNTERS::turbulent_viscosity);
105 const DoubleTab& xp = domaine_VF.
xp();
106 DoubleTab& viscosite_valeurs = la_viscosite_turbulente_->valeurs();
109 const int nb_ddl = domaine_VF.
nb_elem();
110 DoubleTabs sources_val(
nb_var_);
117 for (
int so = 0; so <
nb_var_; so++)
121 const DoubleTab& source_so_val = ch_ref->
valeurs();
122 sources_val[so] = source_so_val;
127 conv_to_elem(so) = 0;
131 conv_to_elem(so) = 1;
136 conv_to_elem(so) = 2;
141 Cerr <<
"Modele_turbulence_hyd_combinaison::calculer_viscosite_turbulente : error " <<
les_var[so] <<
" not Champ_P0_XX" << finl;
145 if (conv_to_elem(so) != 0)
146 Cerr <<
"Modele_turbulence_hyd_combinaison::calculer_viscosite_turbulente : " <<
les_var[so] <<
" Conversion " <<
" => Champ_P0_XX" << finl;
149 nb_dim_so(so) = source_so_val.
nb_dim();
150 if (nb_dim_so(so) < 1 || nb_dim_so(so) > 2)
152 Cerr <<
"Modele_turbulence_hyd_combinaison::calculer_viscosite_turbulente : " <<
les_var[so] <<
" nb dimension = " << source_so_val.
nb_dim() <<
" != 1 or 2 " << finl;
156 if (nb_dim_so(so) != 1)
158 dim_2_so(so) = source_so_val.
dimension(1);
159 Cerr <<
"Modele_turbulence_hyd_combinaison::calculer_viscosite_turbulente : " <<
les_var[so] <<
" nb dimension = " << nb_dim_so(so) <<
" and second dimension = " <<
" " << dim_2_so(so)
165 int nb_loop_contr = 0;
166 IntTab *elem_contr =
nullptr;
169 nb_loop_contr = ref_cast(
Domaine_EF,
equation().domaine_dis()).domaine().nb_som_elem();
172 else if (go_conv == 2)
178 for (
int i = 0; i < nb_ddl; i++)
180 const double x = xp(i, 0);
181 const double y = xp(i, 1);
182 const double z =
dimension > 2 ? xp(i, 2) : 0;
184 fxyz_[0].setVar(
"x", x);
185 fxyz_[0].setVar(
"y", y);
186 fxyz_[0].setVar(
"z", z);
187 fxyz_[0].setVar(
"t", temps);
189 for (
int so = 0; so <
nb_var_; so++)
192 const DoubleTab& source_so_val = sources_val[so];
194 if (conv_to_elem(so) == 0)
196 if (nb_dim_so(so) == 1 || dim_2_so(so) == 1)
197 fxyz_[0].setVar(nom_source, source_so_val(i));
201 for (
int i2 = 0; i2 < (dim_2_so(so) - 1); i2++)
202 vale2 += source_so_val(i, i2) * source_so_val(i, i2);
203 fxyz_[0].setVar(nom_source, sqrt(vale2));
209 for (
int icontrl = 0; icontrl < nb_loop_contr; icontrl++)
211 const int contrl = (elem_contr !=
nullptr ? (*elem_contr)(i, icontrl) : 0);
212 if (nb_dim_so(so) == 1 || dim_2_so(so) == 1)
213 vale += source_so_val(contrl) / nb_loop_contr;
217 for (
int i2 = 0; i2 < (dim_2_so(so) - 1); i2++)
218 vale2 += source_so_val(contrl, i2) * source_so_val(contrl, i2);
219 vale += sqrt(vale2) / nb_loop_contr;
222 fxyz_[0].setVar(nom_source, vale);
225 viscosite_valeurs(i) = fxyz_[0].eval();
227 la_viscosite_turbulente_->changer_temps(temps);
229 return la_viscosite_turbulente_;
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.
double temps() const
Renvoie le temps du champ.
double xp(int num_elem, int k) const
Class defining operators and methods for all reading operation in an input flow (file,...
virtual const Champ_Inc_base & inconnue() const =0
Probleme_base & probleme()
Renvoie le probleme associe a l'equation.
Classe Modele_turbulence_hyd_0_eq_base Classe de base des modeles a 0 equation.
virtual Champ_Fonc_base & energie_cinetique_turbulente()
OBS_PTR(Domaine_VF) le_dom_VF_
virtual int preparer_calcul()
Prepare le calcul.
virtual void set_param(Param ¶m) const override
void limiter_viscosite_turbulente()
Equation_base & equation()
Renvoie l'equation associee au modele de turbulence.
Classe Modele_turbulence_hyd_combinaison Classe representant un modele de turbulence exprime a partir...
Champ_Fonc_base & calculer_viscosite_turbulente() override
int preparer_calcul() override
Prepare le calcul.
Modele_turbulence_hyd_combinaison()
void set_param(Param ¶m) const override
void mettre_a_jour(double) override
void completer() override
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.
classe Probleme_base C'est un Probleme_U qui n'est pas un couplage.
const Champ_base & get_champ(const Motcle &nom) const override
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
Classe de base des flux de sortie.
_SIZE_ dimension(int d) const