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>
64 fxyz_.dimensionner(1);
71 for (
int i = 0; i <
nb_var_; i++)
74 fxyz_[0].parseString();
86 statistics().begin_count(STD_COUNTERS::turbulent_viscosity, statistics().get_last_opened_counter_level()+1);
91 if (
equation().probleme().is_dilatable())
92 correction_nut_et_cisaillement_paroi_si_qc(*
this);
94 la_viscosite_turbulente_->valeurs().echange_espace_virtuel();
95 statistics().end_count(STD_COUNTERS::turbulent_viscosity);
101 const DoubleTab& xp = domaine_VF.
xp();
102 DoubleTab& viscosite_valeurs = la_viscosite_turbulente_->valeurs();
105 const int nb_ddl = domaine_VF.
nb_elem();
106 DoubleTabs sources_val(
nb_var_);
113 for (
int so = 0; so <
nb_var_; so++)
117 const DoubleTab& source_so_val = ch_ref->
valeurs();
118 sources_val[so] = source_so_val;
123 conv_to_elem(so) = 0;
127 conv_to_elem(so) = 1;
132 conv_to_elem(so) = 2;
137 Cerr <<
"Modele_turbulence_hyd_combinaison::calculer_viscosite_turbulente : error " <<
les_var[so] <<
" not Champ_P0_XX" << finl;
141 if (conv_to_elem(so) != 0)
142 Cerr <<
"Modele_turbulence_hyd_combinaison::calculer_viscosite_turbulente : " <<
les_var[so] <<
" Conversion " <<
" => Champ_P0_XX" << finl;
145 nb_dim_so(so) = source_so_val.
nb_dim();
146 if (nb_dim_so(so) < 1 || nb_dim_so(so) > 2)
148 Cerr <<
"Modele_turbulence_hyd_combinaison::calculer_viscosite_turbulente : " <<
les_var[so] <<
" nb dimension = " << source_so_val.
nb_dim() <<
" != 1 or 2 " << finl;
152 if (nb_dim_so(so) != 1)
154 dim_2_so(so) = source_so_val.
dimension(1);
155 Cerr <<
"Modele_turbulence_hyd_combinaison::calculer_viscosite_turbulente : " <<
les_var[so] <<
" nb dimension = " << nb_dim_so(so) <<
" and second dimension = " <<
" " << dim_2_so(so)
161 int nb_loop_contr = 0;
162 IntTab *elem_contr =
nullptr;
165 nb_loop_contr = ref_cast(
Domaine_EF,
equation().domaine_dis()).domaine().nb_som_elem();
168 else if (go_conv == 2)
174 for (
int i = 0; i < nb_ddl; i++)
176 const double x = xp(i, 0);
177 const double y = xp(i, 1);
178 const double z =
dimension > 2 ? xp(i, 2) : 0;
180 fxyz_[0].setVar(
"x", x);
181 fxyz_[0].setVar(
"y", y);
182 fxyz_[0].setVar(
"z", z);
183 fxyz_[0].setVar(
"t", temps);
185 for (
int so = 0; so <
nb_var_; so++)
188 const DoubleTab& source_so_val = sources_val[so];
190 if (conv_to_elem(so) == 0)
192 if (nb_dim_so(so) == 1 || dim_2_so(so) == 1)
193 fxyz_[0].setVar(nom_source, source_so_val(i));
197 for (
int i2 = 0; i2 < (dim_2_so(so) - 1); i2++)
198 vale2 += source_so_val(i, i2) * source_so_val(i, i2);
199 fxyz_[0].setVar(nom_source, sqrt(vale2));
205 for (
int icontrl = 0; icontrl < nb_loop_contr; icontrl++)
207 const int contrl = (elem_contr !=
nullptr ? (*elem_contr)(i, icontrl) : 0);
208 if (nb_dim_so(so) == 1 || dim_2_so(so) == 1)
209 vale += source_so_val(contrl) / nb_loop_contr;
213 for (
int i2 = 0; i2 < (dim_2_so(so) - 1); i2++)
214 vale2 += source_so_val(contrl, i2) * source_so_val(contrl, i2);
215 vale += sqrt(vale2) / nb_loop_contr;
218 fxyz_[0].setVar(nom_source, vale);
221 viscosite_valeurs(i) = fxyz_[0].eval();
223 la_viscosite_turbulente_->changer_temps(temps);
225 return la_viscosite_turbulente_;
class Champ_Fonc_base Base class of fields that are functions of a calculated quantity
: class Champ_Inc_P0_base
virtual DoubleTab & valeurs()=0
class Champ_base This class is the base of the fields hierarchy.
double temps() const
Returns the time of the field.
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()
Returns the problem associated with the equation.
Base class for zero-equation (algebraic) hydraulic turbulence models.
virtual Champ_Fonc_base & energie_cinetique_turbulente()
OBS_PTR(Domaine_VF) le_dom_VF_
virtual int preparer_calcul()
Prepares the computation.
virtual void set_param(Param ¶m) const override
void limiter_viscosite_turbulente()
Equation_base & equation()
Returns the equation associated with the turbulence model.
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
Prepares the computation.
Modele_turbulence_hyd_combinaison()
void set_param(Param ¶m) const override
void mettre_a_jour(double) override
void completer() override
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.
class Probleme_base It is a Probleme_U that is not a coupling.
const Champ_base & get_champ(const Motcle &nom) const override
static void exit(int exit_code=-1)
Exit routine for TRUST within a Kokkos region.
Base class for output streams.
_SIZE_ dimension(int d) const